新增商机,跟进记录\计划,服务工单,联系人

This commit is contained in:
慕下 2024-03-06 10:57:08 +08:00
parent c0c32e127c
commit 9d60fbed01
54 changed files with 9291 additions and 475 deletions

20
pom.xml
View File

@ -179,18 +179,18 @@
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-quartz</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.ruoyi</groupId>-->
<!-- <artifactId>ruoyi-quartz</artifactId>-->
<!-- <version>${ruoyi.version}</version>-->
<!-- </dependency>-->
<!-- 代码生成-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.ruoyi</groupId>-->
<!-- <artifactId>ruoyi-generator</artifactId>-->
<!-- <version>${ruoyi.version}</version>-->
<!-- </dependency>-->
<!-- 核心模块-->
<dependency>

View File

@ -50,16 +50,16 @@
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-quartz</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.ruoyi</groupId>-->
<!-- <artifactId>ruoyi-quartz</artifactId>-->
<!-- </dependency>-->
<!-- 代码生成-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.ruoyi</groupId>-->
<!-- <artifactId>ruoyi-generator</artifactId>-->
<!-- </dependency>-->
<!-- CRM 模块-->
<dependency>

View File

@ -6,9 +6,11 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://120.46.37.243:3306/rycrm-master?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
# url: jdbc:mysql://120.46.37.243:3306/rycrm-master?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
url: jdbc:mysql://127.0.0.1:3306/rycrm-master?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: xpower1234
password: root
# password: xpower1234
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@ -96,7 +96,8 @@ mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.**.domain
# 配置mapper的扫描找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# mapperLocations: classpath*:mapper/**/*Mapper.xml
mapperLocations: classpath*:*/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml

View File

@ -0,0 +1,141 @@
package com.ruoyi.crm.system.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.crm.system.domain.Business;
import com.ruoyi.crm.system.domain.FollowUpRecord;
import com.ruoyi.crm.system.service.IBusinessService;
import com.ruoyi.crm.system.service.IFollowUpRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
* 商机Controller
*
* @author ruoyi
* @date 2024-02-29
*/
@RestController
@RequestMapping("/system/business")
public class BusinessController extends BaseController
{
@Autowired
private IBusinessService businessService;
@Autowired
private IFollowUpRecordService followUpRecordService;
/**
* 查询商机列表
*/
@PreAuthorize("@ss.hasPermi('system:business:list')")
@GetMapping("/list")
public TableDataInfo list(Business business)
{
startPage();
List<Business> list = businessService.selectBusinessList(business);
return getDataTable(list);
}
/**
* 导出商机列表
*/
@PreAuthorize("@ss.hasPermi('system:business:export')")
@Log(title = "商机", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, Business business)
{
List<Business> list = businessService.selectBusinessList(business);
ExcelUtil<Business> util = new ExcelUtil<Business>(Business.class);
util.exportExcel(response, list, "商机数据");
}
/**
* 获取商机详细信息
*/
@PreAuthorize("@ss.hasPermi('system:business:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(businessService.selectBusinessById(id));
}
/**
* 新增商机
*/
@PreAuthorize("@ss.hasPermi('system:business:add')")
@Log(title = "商机", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody Business business)
{
return toAjax(businessService.insertBusiness(business));
}
/**
* 修改商机
*/
@PreAuthorize("@ss.hasPermi('system:business:edit')")
@Log(title = "商机", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody Business business)
{
return toAjax(businessService.updateBusiness(business));
}
/**
* 删除商机
*/
@PreAuthorize("@ss.hasPermi('system:business:remove')")
@Log(title = "商机", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(businessService.deleteBusinessByIds(ids));
}
/**
* 新增跟进记录
*/
@PreAuthorize("@ss.hasPermi('system:business:edit')")
@Log(title = "跟进记录", businessType = BusinessType.INSERT)
@PostMapping("/addRecords")
public AjaxResult addRecords(@RequestBody FollowUpRecord followUpRecord)
{
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
String formattedDate = currentDate.format(formatter);
//根据当前时间生成客户编号
followUpRecord.setCustomerNumber("zy_"+formattedDate+followUpRecord.getCustomerNumber());
return toAjax(followUpRecordService.insertFollowUpRecord(followUpRecord));
}
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('system:business:add')")
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<Business> util = new ExcelUtil(Business.class);
List<Business> businessList = util.importExcel(file.getInputStream());
String operName = getUsername();
String message = businessService.importBusines(businessList, updateSupport, operName);
return AjaxResult.success(message);
}
@PostMapping("/importTemplate")
public void importTemplate(HttpServletResponse response)
{
ExcelUtil<Business> util = new ExcelUtil(Business.class);
util.importTemplateExcel(response, "商机数据");
}
}

View File

@ -0,0 +1,110 @@
package com.ruoyi.crm.system.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.crm.system.domain.ContactPerson;
import com.ruoyi.crm.system.service.IContactPersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 联系人Controller
*
* @author ruoyi
* @date 2024-02-29
*/
@RestController
@RequestMapping("/system/person")
public class ContactPersonController extends BaseController
{
@Autowired
private IContactPersonService contactPersonService;
/**
* 查询联系人列表
*/
@PreAuthorize("@ss.hasPermi('system:person:list')")
@GetMapping("/list")
public TableDataInfo list(ContactPerson contactPerson)
{
startPage();
List<ContactPerson> list = contactPersonService.selectContactPersonList(contactPerson);
return getDataTable(list);
}
/**
* 导出联系人列表
*/
@PreAuthorize("@ss.hasPermi('system:person:export')")
@Log(title = "联系人", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ContactPerson contactPerson)
{
List<ContactPerson> list = contactPersonService.selectContactPersonList(contactPerson);
ExcelUtil<ContactPerson> util = new ExcelUtil<ContactPerson>(ContactPerson.class);
util.exportExcel(response, list, "联系人数据");
}
/**
* 获取联系人详细信息
*/
@PreAuthorize("@ss.hasPermi('system:person:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(contactPersonService.selectContactPersonById(id));
}
/**
* 新增联系人
*/
@PreAuthorize("@ss.hasPermi('system:person:add')")
@Log(title = "联系人", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ContactPerson contactPerson)
{
return toAjax(contactPersonService.insertContactPerson(contactPerson));
}
/**
* 修改联系人
*/
@PreAuthorize("@ss.hasPermi('system:person:edit')")
@Log(title = "联系人", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ContactPerson contactPerson)
{
return toAjax(contactPersonService.updateContactPerson(contactPerson));
}
/**
* 删除联系人
*/
@PreAuthorize("@ss.hasPermi('system:person:remove')")
@Log(title = "联系人", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(contactPersonService.deleteContactPersonByIds(ids));
}
/**
* 新增联系人
*/
// @PreAuthorize("@ss.hasPermi('system:person:add')")
// @Log(title = "联系人", businessType = BusinessType.INSERT)
// @PostMapping("/test")
// public AjaxResult test(@RequestBody Map map)
// {
// System.out.println(map.toString());
// return AjaxResult.success("s");
// }
}

View File

@ -0,0 +1,98 @@
package com.ruoyi.crm.system.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.crm.system.domain.FollowUpPlan;
import com.ruoyi.crm.system.service.IFollowUpPlanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 跟进计划Controller
*
* @author ruoyi
* @date 2024-03-01
*/
@RestController
@RequestMapping("/system/plan")
public class FollowUpPlanController extends BaseController
{
@Autowired
private IFollowUpPlanService followUpPlanService;
/**
* 查询跟进计划列表
*/
@PreAuthorize("@ss.hasPermi('system:plan:list')")
@GetMapping("/list")
public TableDataInfo list(FollowUpPlan followUpPlan)
{
startPage();
List<FollowUpPlan> list = followUpPlanService.selectFollowUpPlanList(followUpPlan);
return getDataTable(list);
}
/**
* 导出跟进计划列表
*/
@PreAuthorize("@ss.hasPermi('system:plan:export')")
@Log(title = "跟进计划", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, FollowUpPlan followUpPlan)
{
List<FollowUpPlan> list = followUpPlanService.selectFollowUpPlanList(followUpPlan);
ExcelUtil<FollowUpPlan> util = new ExcelUtil<FollowUpPlan>(FollowUpPlan.class);
util.exportExcel(response, list, "跟进计划数据");
}
/**
* 获取跟进计划详细信息
*/
@PreAuthorize("@ss.hasPermi('system:plan:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(followUpPlanService.selectFollowUpPlanById(id));
}
/**
* 新增跟进计划
*/
@PreAuthorize("@ss.hasPermi('system:plan:add')")
@Log(title = "跟进计划", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody FollowUpPlan followUpPlan)
{
return toAjax(followUpPlanService.insertFollowUpPlan(followUpPlan));
}
/**
* 修改跟进计划
*/
@PreAuthorize("@ss.hasPermi('system:plan:edit')")
@Log(title = "跟进计划", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody FollowUpPlan followUpPlan)
{
return toAjax(followUpPlanService.updateFollowUpPlan(followUpPlan));
}
/**
* 删除跟进计划
*/
@PreAuthorize("@ss.hasPermi('system:plan:remove')")
@Log(title = "跟进计划", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(followUpPlanService.deleteFollowUpPlanByIds(ids));
}
}

View File

@ -0,0 +1,98 @@
package com.ruoyi.crm.system.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.crm.system.domain.FollowUpRecord;
import com.ruoyi.crm.system.service.IFollowUpRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 跟进记录Controller
*
* @author ruoyi
* @date 2024-03-01
*/
@RestController
@RequestMapping("/system/record")
public class FollowUpRecordController extends BaseController
{
@Autowired
private IFollowUpRecordService followUpRecordService;
/**
* 查询跟进记录列表
*/
@PreAuthorize("@ss.hasPermi('system:record:list')")
@GetMapping("/list")
public TableDataInfo list(FollowUpRecord followUpRecord)
{
startPage();
List<FollowUpRecord> list = followUpRecordService.selectFollowUpRecordList(followUpRecord);
return getDataTable(list);
}
/**
* 导出跟进记录列表
*/
@PreAuthorize("@ss.hasPermi('system:record:export')")
@Log(title = "跟进记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, FollowUpRecord followUpRecord)
{
List<FollowUpRecord> list = followUpRecordService.selectFollowUpRecordList(followUpRecord);
ExcelUtil<FollowUpRecord> util = new ExcelUtil<FollowUpRecord>(FollowUpRecord.class);
util.exportExcel(response, list, "跟进记录数据");
}
/**
* 获取跟进记录详细信息
*/
@PreAuthorize("@ss.hasPermi('system:record:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(followUpRecordService.selectFollowUpRecordById(id));
}
/**
* 新增跟进记录
*/
@PreAuthorize("@ss.hasPermi('system:record:add')")
@Log(title = "跟进记录", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody FollowUpRecord followUpRecord)
{
return toAjax(followUpRecordService.insertFollowUpRecord(followUpRecord));
}
/**
* 修改跟进记录
*/
@PreAuthorize("@ss.hasPermi('system:record:edit')")
@Log(title = "跟进记录", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody FollowUpRecord followUpRecord)
{
return toAjax(followUpRecordService.updateFollowUpRecord(followUpRecord));
}
/**
* 删除跟进记录
*/
@PreAuthorize("@ss.hasPermi('system:record:remove')")
@Log(title = "跟进记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(followUpRecordService.deleteFollowUpRecordByIds(ids));
}
}

View File

@ -0,0 +1,98 @@
package com.ruoyi.crm.system.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.crm.system.domain.ServiceTicket;
import com.ruoyi.crm.system.service.IServiceTicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 服务工单Controller
*
* @author ruoyi
* @date 2024-03-01
*/
@RestController
@RequestMapping("/system/ticket")
public class ServiceTicketController extends BaseController
{
@Autowired
private IServiceTicketService serviceTicketService;
/**
* 查询服务工单列表
*/
@PreAuthorize("@ss.hasPermi('system:ticket:list')")
@GetMapping("/list")
public TableDataInfo list(ServiceTicket serviceTicket)
{
startPage();
List<ServiceTicket> list = serviceTicketService.selectServiceTicketList(serviceTicket);
return getDataTable(list);
}
/**
* 导出服务工单列表
*/
@PreAuthorize("@ss.hasPermi('system:ticket:export')")
@Log(title = "服务工单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ServiceTicket serviceTicket)
{
List<ServiceTicket> list = serviceTicketService.selectServiceTicketList(serviceTicket);
ExcelUtil<ServiceTicket> util = new ExcelUtil<ServiceTicket>(ServiceTicket.class);
util.exportExcel(response, list, "服务工单数据");
}
/**
* 获取服务工单详细信息
*/
@PreAuthorize("@ss.hasPermi('system:ticket:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(serviceTicketService.selectServiceTicketById(id));
}
/**
* 新增服务工单
*/
@PreAuthorize("@ss.hasPermi('system:ticket:add')")
@Log(title = "服务工单", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ServiceTicket serviceTicket)
{
return toAjax(serviceTicketService.insertServiceTicket(serviceTicket));
}
/**
* 修改服务工单
*/
@PreAuthorize("@ss.hasPermi('system:ticket:edit')")
@Log(title = "服务工单", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ServiceTicket serviceTicket)
{
return toAjax(serviceTicketService.updateServiceTicket(serviceTicket));
}
/**
* 删除服务工单
*/
@PreAuthorize("@ss.hasPermi('system:ticket:remove')")
@Log(title = "服务工单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(serviceTicketService.deleteServiceTicketByIds(ids));
}
}

View File

@ -0,0 +1,357 @@
package com.ruoyi.crm.system.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 商机对象 business
*
* @author ruoyi
* @date 2024-02-29
*/
public class Business extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 商机id */
private Long id;
/** 标题 */
@Excel(name = "标题")
private String title;
/** 关联客户 */
@Excel(name = "关联客户")
private Long customerId;
/** 客户联系人 */
@Excel(name = "客户联系人")
private Long customerLinkman;
/** 客户名称 */
@Excel(name = "客户名称")
private String customerName;
/** 客户编号 */
@Excel(name = "客户编号")
private String customerNumber;
/** 商机名称 */
@Excel(name = "商机名称")
private String businessName;
/** 商机编号 */
@Excel(name = "商机编号")
private String businessNumber;
/** 销售阶段 */
@Excel(name = "销售阶段")
private Integer salesStage;
/** 赢率 */
@Excel(name = "赢率")
private Integer probabilityOfWining;
/** 阶段类型 */
@Excel(name = "阶段类型")
private Integer stageType;
/** 负责人 */
@Excel(name = "负责人")
private String personInCharge;
/** 归属部门 */
@Excel(name = "归属部门")
private String belongingDepartment;
/** 商机明细 */
@Excel(name = "商机明细")
private String businessDetail;
/** 预测商机金额(单位:分) */
@Excel(name = "预测商机金额", readConverterExp = "单=位:分")
private Integer forecastBusinessPrice;
/** 预计成交日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "预计成交日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date forecastSuccessTime;
/** 协作人 */
@Excel(name = "协作人")
private String collaborator;
/** 最后跟进时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "最后跟进时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date lastFollowUpTime;
/** 阶段变更时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "阶段变更时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date phaseChangeTime;
/** 输单原因 */
@Excel(name = "输单原因")
private String loseOrderCause;
/** 提交人 */
@Excel(name = "提交人")
private String submitter;
/** 提交时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "提交时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date submitTime;
/** 删除标志 */
@Excel(name = "删除标志")
private Integer isDelete;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public void setCustomerId(Long customerId)
{
this.customerId = customerId;
}
public Long getCustomerId()
{
return customerId;
}
public void setCustomerLinkman(Long customerLinkman)
{
this.customerLinkman = customerLinkman;
}
public Long getCustomerLinkman()
{
return customerLinkman;
}
public void setCustomerName(String customerName)
{
this.customerName = customerName;
}
public String getCustomerName()
{
return customerName;
}
public void setCustomerNumber(String customerNumber)
{
this.customerNumber = customerNumber;
}
public String getCustomerNumber()
{
return customerNumber;
}
public void setBusinessName(String businessName)
{
this.businessName = businessName;
}
public String getBusinessName()
{
return businessName;
}
public void setBusinessNumber(String businessNumber)
{
this.businessNumber = businessNumber;
}
public String getBusinessNumber()
{
return businessNumber;
}
public void setSalesStage(Integer salesStage)
{
this.salesStage = salesStage;
}
public Integer getSalesStage()
{
return salesStage;
}
public void setProbabilityOfWining(Integer probabilityOfWining)
{
this.probabilityOfWining = probabilityOfWining;
}
public Integer getProbabilityOfWining()
{
return probabilityOfWining;
}
public void setStageType(Integer stageType)
{
this.stageType = stageType;
}
public Integer getStageType()
{
return stageType;
}
public void setPersonInCharge(String personInCharge)
{
this.personInCharge = personInCharge;
}
public String getPersonInCharge()
{
return personInCharge;
}
public void setBelongingDepartment(String belongingDepartment)
{
this.belongingDepartment = belongingDepartment;
}
public String getBelongingDepartment()
{
return belongingDepartment;
}
public void setBusinessDetail(String businessDetail)
{
this.businessDetail = businessDetail;
}
public String getBusinessDetail()
{
return businessDetail;
}
public void setForecastBusinessPrice(Integer forecastBusinessPrice)
{
this.forecastBusinessPrice = forecastBusinessPrice;
}
public Integer getForecastBusinessPrice()
{
return forecastBusinessPrice;
}
public void setForecastSuccessTime(Date forecastSuccessTime)
{
this.forecastSuccessTime = forecastSuccessTime;
}
public Date getForecastSuccessTime()
{
return forecastSuccessTime;
}
public void setCollaborator(String collaborator)
{
this.collaborator = collaborator;
}
public String getCollaborator()
{
return collaborator;
}
public void setLastFollowUpTime(Date lastFollowUpTime)
{
this.lastFollowUpTime = lastFollowUpTime;
}
public Date getLastFollowUpTime()
{
return lastFollowUpTime;
}
public void setPhaseChangeTime(Date phaseChangeTime)
{
this.phaseChangeTime = phaseChangeTime;
}
public Date getPhaseChangeTime()
{
return phaseChangeTime;
}
public void setLoseOrderCause(String loseOrderCause)
{
this.loseOrderCause = loseOrderCause;
}
public String getLoseOrderCause()
{
return loseOrderCause;
}
public void setSubmitter(String submitter)
{
this.submitter = submitter;
}
public String getSubmitter()
{
return submitter;
}
public void setSubmitTime(Date submitTime)
{
this.submitTime = submitTime;
}
public Date getSubmitTime()
{
return submitTime;
}
public void setIsDelete(Integer isDelete)
{
this.isDelete = isDelete;
}
public Integer getIsDelete()
{
return isDelete;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("title", getTitle())
.append("customerId", getCustomerId())
.append("customerLinkman", getCustomerLinkman())
.append("customerName", getCustomerName())
.append("customerNumber", getCustomerNumber())
.append("businessName", getBusinessName())
.append("businessNumber", getBusinessNumber())
.append("salesStage", getSalesStage())
.append("probabilityOfWining", getProbabilityOfWining())
.append("stageType", getStageType())
.append("personInCharge", getPersonInCharge())
.append("belongingDepartment", getBelongingDepartment())
.append("businessDetail", getBusinessDetail())
.append("forecastBusinessPrice", getForecastBusinessPrice())
.append("forecastSuccessTime", getForecastSuccessTime())
.append("collaborator", getCollaborator())
.append("lastFollowUpTime", getLastFollowUpTime())
.append("phaseChangeTime", getPhaseChangeTime())
.append("loseOrderCause", getLoseOrderCause())
.append("submitter", getSubmitter())
.append("submitTime", getSubmitTime())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("isDelete", getIsDelete())
.toString();
}
}

View File

@ -0,0 +1,284 @@
package com.ruoyi.crm.system.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 联系人对象 contact_person
*
* @author ruoyi
* @date 2024-02-29
*/
public class ContactPerson extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 联系人id */
private Long id;
/** 标题 */
@Excel(name = "标题")
private String title;
/** 姓名 */
@Excel(name = "姓名")
private String name;
/** 手机号 */
@Excel(name = "手机号")
private String phoneNumber;
/** 关联客户 */
@Excel(name = "关联客户")
private Long customerId;
/** 客户编号 */
@Excel(name = "客户编号")
private String customerNumber;
/** 部门 */
@Excel(name = "部门")
private String dep;
/** 职务 */
@Excel(name = "职务")
private String job;
/** 微信号 */
@Excel(name = "微信号")
private String wxNumber;
/** 邮箱 */
@Excel(name = "邮箱")
private String mailNumber;
/** 是否关键决策人 */
@Excel(name = "是否关键决策人")
private Integer isKey;
/** 联系人详情 */
@Excel(name = "联系人详情")
private String contactPersonDetail;
/** 负责人 */
@Excel(name = "负责人")
private String personInCharge;
/** 归属部门 */
@Excel(name = "归属部门")
private String belongingDepartment;
/** 协作人 */
@Excel(name = "协作人")
private String collaborator;
/** 提交人 */
@Excel(name = "提交人")
private String submitter;
/** 提交时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "提交时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date submitTime;
/** 删除标志 */
@Excel(name = "删除标志")
private Integer isDelete;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setPhoneNumber(String phoneNumber)
{
this.phoneNumber = phoneNumber;
}
public String getPhoneNumber()
{
return phoneNumber;
}
public void setCustomerId(Long customerId)
{
this.customerId = customerId;
}
public Long getCustomerId()
{
return customerId;
}
public void setCustomerNumber(String customerNumber)
{
this.customerNumber = customerNumber;
}
public String getCustomerNumber()
{
return customerNumber;
}
public void setDep(String dep)
{
this.dep = dep;
}
public String getDep()
{
return dep;
}
public void setJob(String job)
{
this.job = job;
}
public String getJob()
{
return job;
}
public void setWxNumber(String wxNumber)
{
this.wxNumber = wxNumber;
}
public String getWxNumber()
{
return wxNumber;
}
public void setMailNumber(String mailNumber)
{
this.mailNumber = mailNumber;
}
public String getMailNumber()
{
return mailNumber;
}
public void setIsKey(Integer isKey)
{
this.isKey = isKey;
}
public Integer getIsKey()
{
return isKey;
}
public void setContactPersonDetail(String contactPersonDetail)
{
this.contactPersonDetail = contactPersonDetail;
}
public String getContactPersonDetail()
{
return contactPersonDetail;
}
public void setPersonInCharge(String personInCharge)
{
this.personInCharge = personInCharge;
}
public String getPersonInCharge()
{
return personInCharge;
}
public void setBelongingDepartment(String belongingDepartment)
{
this.belongingDepartment = belongingDepartment;
}
public String getBelongingDepartment()
{
return belongingDepartment;
}
public void setCollaborator(String collaborator)
{
this.collaborator = collaborator;
}
public String getCollaborator()
{
return collaborator;
}
public void setSubmitter(String submitter)
{
this.submitter = submitter;
}
public String getSubmitter()
{
return submitter;
}
public void setSubmitTime(Date submitTime)
{
this.submitTime = submitTime;
}
public Date getSubmitTime()
{
return submitTime;
}
public void setIsDelete(Integer isDelete)
{
this.isDelete = isDelete;
}
public Integer getIsDelete()
{
return isDelete;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("title", getTitle())
.append("name", getName())
.append("phoneNumber", getPhoneNumber())
.append("customerId", getCustomerId())
.append("customerNumber", getCustomerNumber())
.append("dep", getDep())
.append("job", getJob())
.append("wxNumber", getWxNumber())
.append("mailNumber", getMailNumber())
.append("isKey", getIsKey())
.append("contactPersonDetail", getContactPersonDetail())
.append("personInCharge", getPersonInCharge())
.append("belongingDepartment", getBelongingDepartment())
.append("collaborator", getCollaborator())
.append("submitter", getSubmitter())
.append("submitTime", getSubmitTime())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("isDelete", getIsDelete())
.toString();
}
}

View File

@ -0,0 +1,187 @@
package com.ruoyi.crm.system.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 跟进计划对象 follow_up_plan
*
* @author ruoyi
* @date 2024-03-01
*/
public class FollowUpPlan extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 跟进计划id */
private Long id;
/** 标题 */
@Excel(name = "标题")
private String title;
/** 计划内容 */
@Excel(name = "计划内容")
private String planContent;
/** 跟进客户 */
@Excel(name = "跟进客户")
private String customer;
/** 跟进时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "跟进时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date planTime;
/** 跟进执行人 */
@Excel(name = "跟进执行人")
private String planExecutor;
/** 归属部门 */
@Excel(name = "归属部门")
private String belongingDepartment;
/** 计划状态 */
@Excel(name = "计划状态")
private Integer planStatus;
/** 提交人 */
@Excel(name = "提交人")
private String submitter;
/** 提交时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "提交时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date submitTime;
/** 是否删除 */
@Excel(name = "是否删除")
private Integer isDelete;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public void setPlanContent(String planContent)
{
this.planContent = planContent;
}
public String getPlanContent()
{
return planContent;
}
public void setCustomer(String customer)
{
this.customer = customer;
}
public String getCustomer()
{
return customer;
}
public void setPlanTime(Date planTime)
{
this.planTime = planTime;
}
public Date getPlanTime()
{
return planTime;
}
public void setPlanExecutor(String planExecutor)
{
this.planExecutor = planExecutor;
}
public String getPlanExecutor()
{
return planExecutor;
}
public void setBelongingDepartment(String belongingDepartment)
{
this.belongingDepartment = belongingDepartment;
}
public String getBelongingDepartment()
{
return belongingDepartment;
}
public void setPlanStatus(Integer planStatus)
{
this.planStatus = planStatus;
}
public Integer getPlanStatus()
{
return planStatus;
}
public void setSubmitter(String submitter)
{
this.submitter = submitter;
}
public String getSubmitter()
{
return submitter;
}
public void setSubmitTime(Date submitTime)
{
this.submitTime = submitTime;
}
public Date getSubmitTime()
{
return submitTime;
}
public void setIsDelete(Integer isDelete)
{
this.isDelete = isDelete;
}
public Integer getIsDelete()
{
return isDelete;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("title", getTitle())
.append("planContent", getPlanContent())
.append("customer", getCustomer())
.append("planTime", getPlanTime())
.append("planExecutor", getPlanExecutor())
.append("belongingDepartment", getBelongingDepartment())
.append("planStatus", getPlanStatus())
.append("submitter", getSubmitter())
.append("submitTime", getSubmitTime())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("isDelete", getIsDelete())
.toString();
}
}

View File

@ -0,0 +1,257 @@
package com.ruoyi.crm.system.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 跟进记录对象 follow_up_record
*
* @author ruoyi
* @date 2024-03-01
*/
public class FollowUpRecord extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** */
private Long id;
/** 标题 */
@Excel(name = "标题")
private String title;
/** 跟进记录 */
@Excel(name = "跟进记录")
private String followUpRecord;
/** 跟进主体 */
@Excel(name = "跟进主体")
private String followUpSubject;
/** 客户编号(辅助字段) */
@Excel(name = "客户编号", readConverterExp = "辅=助字段")
private String customerNumber;
/** 跟进商机 */
@Excel(name = "跟进商机")
private String followUpBusinessOpportunities;
/** 商机编号(辅助字段) */
@Excel(name = "商机编号", readConverterExp = "辅=助字段")
private String opportunityNumber;
/** 联系人 */
@Excel(name = "联系人")
private String contactPeople;
/** 跟进方式 */
@Excel(name = "跟进方式")
private Integer followUpType;
/** 跟进内容 */
@Excel(name = "跟进内容")
private String content;
/** 跟进时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "跟进时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date followUpTime;
/** 跟进人 */
@Excel(name = "跟进人")
private String followUpPeople;
/** 归属部门 */
@Excel(name = "归属部门")
private String belongingDepartment;
/** 提交人 */
@Excel(name = "提交人")
private String submitter;
/** 提交时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "提交时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date submitTime;
/** 是否删除 */
@Excel(name = "客户id")
private Long customerId;
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public void setFollowUpRecord(String followUpRecord)
{
this.followUpRecord = followUpRecord;
}
public String getFollowUpRecord()
{
return followUpRecord;
}
public void setFollowUpSubject(String followUpSubject)
{
this.followUpSubject = followUpSubject;
}
public String getFollowUpSubject()
{
return followUpSubject;
}
public void setCustomerNumber(String customerNumber)
{
this.customerNumber = customerNumber;
}
public String getCustomerNumber()
{
return customerNumber;
}
public void setFollowUpBusinessOpportunities(String followUpBusinessOpportunities)
{
this.followUpBusinessOpportunities = followUpBusinessOpportunities;
}
public String getFollowUpBusinessOpportunities()
{
return followUpBusinessOpportunities;
}
public void setOpportunityNumber(String opportunityNumber)
{
this.opportunityNumber = opportunityNumber;
}
public String getOpportunityNumber()
{
return opportunityNumber;
}
public void setContactPeople(String contactPeople)
{
this.contactPeople = contactPeople;
}
public String getContactPeople()
{
return contactPeople;
}
public void setFollowUpType(Integer followUpType)
{
this.followUpType = followUpType;
}
public Integer getFollowUpType()
{
return followUpType;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public void setFollowUpTime(Date followUpTime)
{
this.followUpTime = followUpTime;
}
public Date getFollowUpTime()
{
return followUpTime;
}
public void setFollowUpPeople(String followUpPeople)
{
this.followUpPeople = followUpPeople;
}
public String getFollowUpPeople()
{
return followUpPeople;
}
public void setBelongingDepartment(String belongingDepartment)
{
this.belongingDepartment = belongingDepartment;
}
public String getBelongingDepartment()
{
return belongingDepartment;
}
public void setSubmitter(String submitter)
{
this.submitter = submitter;
}
public String getSubmitter()
{
return submitter;
}
public void setSubmitTime(Date submitTime)
{
this.submitTime = submitTime;
}
public Date getSubmitTime()
{
return submitTime;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("title", getTitle())
.append("followUpRecord", getFollowUpRecord())
.append("followUpSubject", getFollowUpSubject())
.append("customerNumber", getCustomerNumber())
.append("followUpBusinessOpportunities", getFollowUpBusinessOpportunities())
.append("opportunityNumber", getOpportunityNumber())
.append("contactPeople", getContactPeople())
.append("followUpType", getFollowUpType())
.append("content", getContent())
.append("followUpTime", getFollowUpTime())
.append("followUpPeople", getFollowUpPeople())
.append("belongingDepartment", getBelongingDepartment())
.append("submitter", getSubmitter())
.append("submitTime", getSubmitTime())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("customerId", getCustomerId())
.toString();
}
}

View File

@ -0,0 +1,497 @@
package com.ruoyi.crm.system.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 服务工单对象 service_ticket
*
* @author ruoyi
* @date 2024-03-01
*/
public class ServiceTicket extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 服务工单id */
private Long id;
/** 标题 */
@Excel(name = "标题")
private String title;
/** 客户姓名 */
@Excel(name = "客户姓名")
private String customerName;
/** 客户编号 */
@Excel(name = "客户编号")
private String customerNumber;
/** 合同标题 */
@Excel(name = "合同标题")
private String contractTitle;
/** 合同订单编号 */
@Excel(name = "合同订单编号")
private String contractOrderNumber;
/** 客户联系人 */
@Excel(name = "客户联系人")
private String customerContact;
/** 手机号 */
@Excel(name = "手机号")
private String phoneNumber;
/** 服务类型 */
@Excel(name = "服务类型")
private Integer serviceType;
/** 服务单号 */
@Excel(name = "服务单号")
private String serviceOrderNumber;
/** 第几个服务单 */
@Excel(name = "第几个服务单")
private Integer howManyServiceOrder;
/** 服务开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "服务开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date serviceStarTime;
/** 服务结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "服务结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date serviceEndTime;
/** 服务需求天数 */
@Excel(name = "服务需求天数")
private Integer demandServiceDay;
/** 售后技术人员 */
@Excel(name = "售后技术人员")
private String afterSalesTechnician;
/** 服务地址(省/自治区/直辖市) */
@Excel(name = "服务地址(省/自治区/直辖市)")
private String serviceAddress;
/** 服务地址(市) */
@Excel(name = "服务地址(市)")
private String serviceAddressCity;
/** 服务地址(区) */
@Excel(name = "服务地址(区)")
private String serviceAddressArea;
/** 服务地址(详细地址) */
@Excel(name = "服务地址(详细地址)")
private String serviceAddressDetail;
/** 签到 */
@Excel(name = "签到")
private String signIn;
/** 签到时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "签到时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date signInTime;
/** 签退 */
@Excel(name = "签退")
private String signOut;
/** 签退时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "签退时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date signOutTime;
/** 是否解决问题true or false) */
@Excel(name = "是否解决问题", readConverterExp = "是否解决问题true or false)")
private Integer isSolveTheProblem;
/** 现场照片 */
@Excel(name = "现场照片")
private String scenePhoto;
/** 客户满意度 */
@Excel(name = "客户满意度")
private Integer customerSatisfaction;
/** 满意度数值 */
@Excel(name = "满意度数值")
private Integer satisfactionValue;
/** 客户意见与诉求 */
@Excel(name = "客户意见与诉求")
private String customerCommentsAndDemands;
/** 提交人 */
@Excel(name = "提交人")
private String submitter;
/** 提交时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "提交时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date submitTime;
/** 流程状态 */
@Excel(name = "流程状态")
private Integer processState;
/** 当前节点 */
@Excel(name = "当前节点")
private Integer currentNode;
/** 当前负责人 */
@Excel(name = "当前负责人")
private String currentPersonInCharge;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return title;
}
public void setCustomerName(String customerName)
{
this.customerName = customerName;
}
public String getCustomerName()
{
return customerName;
}
public void setCustomerNumber(String customerNumber)
{
this.customerNumber = customerNumber;
}
public String getCustomerNumber()
{
return customerNumber;
}
public void setContractTitle(String contractTitle)
{
this.contractTitle = contractTitle;
}
public String getContractTitle()
{
return contractTitle;
}
public void setContractOrderNumber(String contractOrderNumber)
{
this.contractOrderNumber = contractOrderNumber;
}
public String getContractOrderNumber()
{
return contractOrderNumber;
}
public void setCustomerContact(String customerContact)
{
this.customerContact = customerContact;
}
public String getCustomerContact()
{
return customerContact;
}
public void setPhoneNumber(String phoneNumber)
{
this.phoneNumber = phoneNumber;
}
public String getPhoneNumber()
{
return phoneNumber;
}
public void setServiceType(Integer serviceType)
{
this.serviceType = serviceType;
}
public Integer getServiceType()
{
return serviceType;
}
public void setServiceOrderNumber(String serviceOrderNumber)
{
this.serviceOrderNumber = serviceOrderNumber;
}
public String getServiceOrderNumber()
{
return serviceOrderNumber;
}
public void setHowManyServiceOrder(Integer howManyServiceOrder)
{
this.howManyServiceOrder = howManyServiceOrder;
}
public Integer getHowManyServiceOrder()
{
return howManyServiceOrder;
}
public void setServiceStarTime(Date serviceStarTime)
{
this.serviceStarTime = serviceStarTime;
}
public Date getServiceStarTime()
{
return serviceStarTime;
}
public void setServiceEndTime(Date serviceEndTime)
{
this.serviceEndTime = serviceEndTime;
}
public Date getServiceEndTime()
{
return serviceEndTime;
}
public void setDemandServiceDay(Integer demandServiceDay)
{
this.demandServiceDay = demandServiceDay;
}
public Integer getDemandServiceDay()
{
return demandServiceDay;
}
public void setAfterSalesTechnician(String afterSalesTechnician)
{
this.afterSalesTechnician = afterSalesTechnician;
}
public String getAfterSalesTechnician()
{
return afterSalesTechnician;
}
public void setServiceAddress(String serviceAddress)
{
this.serviceAddress = serviceAddress;
}
public String getServiceAddress()
{
return serviceAddress;
}
public void setServiceAddressCity(String serviceAddressCity)
{
this.serviceAddressCity = serviceAddressCity;
}
public String getServiceAddressCity()
{
return serviceAddressCity;
}
public void setServiceAddressArea(String serviceAddressArea)
{
this.serviceAddressArea = serviceAddressArea;
}
public String getServiceAddressArea()
{
return serviceAddressArea;
}
public void setServiceAddressDetail(String serviceAddressDetail)
{
this.serviceAddressDetail = serviceAddressDetail;
}
public String getServiceAddressDetail()
{
return serviceAddressDetail;
}
public void setSignIn(String signIn)
{
this.signIn = signIn;
}
public String getSignIn()
{
return signIn;
}
public void setSignInTime(Date signInTime)
{
this.signInTime = signInTime;
}
public Date getSignInTime()
{
return signInTime;
}
public void setSignOut(String signOut)
{
this.signOut = signOut;
}
public String getSignOut()
{
return signOut;
}
public void setSignOutTime(Date signOutTime)
{
this.signOutTime = signOutTime;
}
public Date getSignOutTime()
{
return signOutTime;
}
public void setIsSolveTheProblem(Integer isSolveTheProblem)
{
this.isSolveTheProblem = isSolveTheProblem;
}
public Integer getIsSolveTheProblem()
{
return isSolveTheProblem;
}
public void setScenePhoto(String scenePhoto)
{
this.scenePhoto = scenePhoto;
}
public String getScenePhoto()
{
return scenePhoto;
}
public void setCustomerSatisfaction(Integer customerSatisfaction)
{
this.customerSatisfaction = customerSatisfaction;
}
public Integer getCustomerSatisfaction()
{
return customerSatisfaction;
}
public void setSatisfactionValue(Integer satisfactionValue)
{
this.satisfactionValue = satisfactionValue;
}
public Integer getSatisfactionValue()
{
return satisfactionValue;
}
public void setCustomerCommentsAndDemands(String customerCommentsAndDemands)
{
this.customerCommentsAndDemands = customerCommentsAndDemands;
}
public String getCustomerCommentsAndDemands()
{
return customerCommentsAndDemands;
}
public void setSubmitter(String submitter)
{
this.submitter = submitter;
}
public String getSubmitter()
{
return submitter;
}
public void setSubmitTime(Date submitTime)
{
this.submitTime = submitTime;
}
public Date getSubmitTime()
{
return submitTime;
}
public void setProcessState(Integer processState)
{
this.processState = processState;
}
public Integer getProcessState()
{
return processState;
}
public void setCurrentNode(Integer currentNode)
{
this.currentNode = currentNode;
}
public Integer getCurrentNode()
{
return currentNode;
}
public void setCurrentPersonInCharge(String currentPersonInCharge)
{
this.currentPersonInCharge = currentPersonInCharge;
}
public String getCurrentPersonInCharge()
{
return currentPersonInCharge;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("title", getTitle())
.append("customerName", getCustomerName())
.append("customerNumber", getCustomerNumber())
.append("contractTitle", getContractTitle())
.append("contractOrderNumber", getContractOrderNumber())
.append("customerContact", getCustomerContact())
.append("phoneNumber", getPhoneNumber())
.append("serviceType", getServiceType())
.append("serviceOrderNumber", getServiceOrderNumber())
.append("howManyServiceOrder", getHowManyServiceOrder())
.append("serviceStarTime", getServiceStarTime())
.append("serviceEndTime", getServiceEndTime())
.append("demandServiceDay", getDemandServiceDay())
.append("afterSalesTechnician", getAfterSalesTechnician())
.append("serviceAddress", getServiceAddress())
.append("serviceAddressCity", getServiceAddressCity())
.append("serviceAddressArea", getServiceAddressArea())
.append("serviceAddressDetail", getServiceAddressDetail())
.append("signIn", getSignIn())
.append("signInTime", getSignInTime())
.append("signOut", getSignOut())
.append("signOutTime", getSignOutTime())
.append("isSolveTheProblem", getIsSolveTheProblem())
.append("scenePhoto", getScenePhoto())
.append("customerSatisfaction", getCustomerSatisfaction())
.append("satisfactionValue", getSatisfactionValue())
.append("customerCommentsAndDemands", getCustomerCommentsAndDemands())
.append("submitter", getSubmitter())
.append("submitTime", getSubmitTime())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("processState", getProcessState())
.append("currentNode", getCurrentNode())
.append("currentPersonInCharge", getCurrentPersonInCharge())
.toString();
}
}

View File

@ -0,0 +1,69 @@
package com.ruoyi.crm.system.mapper;
import com.ruoyi.crm.system.domain.Business;
import java.util.List;
/**
* 商机Mapper接口
*
* @author ruoyi
* @date 2024-02-29
*/
public interface BusinessMapper
{
/**
* 查询商机
*
* @param id 商机主键
* @return 商机
*/
public Business selectBusinessById(Long id);
/**
* 查询商机列表
*
* @param business 商机
* @return 商机集合
*/
public List<Business> selectBusinessList(Business business);
/**
* 新增商机
*
* @param business 商机
* @return 结果
*/
public int insertBusiness(Business business);
/**
* 修改商机
*
* @param business 商机
* @return 结果
*/
public int updateBusiness(Business business);
/**
* 删除商机
*
* @param id 商机主键
* @return 结果
*/
public int deleteBusinessById(Long id);
/**
* 批量删除商机
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteBusinessByIds(Long[] ids);
/**
* 根据商机编号查询
* @param businessNumber
* @return
*/
public Business selectByBusinessNumber(String businessNumber);
}

View File

@ -0,0 +1,62 @@
package com.ruoyi.crm.system.mapper;
import com.ruoyi.crm.system.domain.ContactPerson;
import java.util.List;
/**
* 联系人Mapper接口
*
* @author ruoyi
* @date 2024-02-29
*/
public interface ContactPersonMapper
{
/**
* 查询联系人
*
* @param id 联系人主键
* @return 联系人
*/
public ContactPerson selectContactPersonById(Long id);
/**
* 查询联系人列表
*
* @param contactPerson 联系人
* @return 联系人集合
*/
public List<ContactPerson> selectContactPersonList(ContactPerson contactPerson);
/**
* 新增联系人
*
* @param contactPerson 联系人
* @return 结果
*/
public int insertContactPerson(ContactPerson contactPerson);
/**
* 修改联系人
*
* @param contactPerson 联系人
* @return 结果
*/
public int updateContactPerson(ContactPerson contactPerson);
/**
* 删除联系人
*
* @param id 联系人主键
* @return 结果
*/
public int deleteContactPersonById(Long id);
/**
* 批量删除联系人
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteContactPersonByIds(Long[] ids);
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.crm.system.mapper;
import com.ruoyi.crm.system.domain.FollowUpPlan;
import java.util.List;
/**
* 跟进计划Mapper接口
*
* @author ruoyi
* @date 2024-03-01
*/
public interface FollowUpPlanMapper
{
/**
* 查询跟进计划
*
* @param id 跟进计划主键
* @return 跟进计划
*/
public FollowUpPlan selectFollowUpPlanById(Long id);
/**
* 查询跟进计划列表
*
* @param followUpPlan 跟进计划
* @return 跟进计划集合
*/
public List<FollowUpPlan> selectFollowUpPlanList(FollowUpPlan followUpPlan);
/**
* 新增跟进计划
*
* @param followUpPlan 跟进计划
* @return 结果
*/
public int insertFollowUpPlan(FollowUpPlan followUpPlan);
/**
* 修改跟进计划
*
* @param followUpPlan 跟进计划
* @return 结果
*/
public int updateFollowUpPlan(FollowUpPlan followUpPlan);
/**
* 删除跟进计划
*
* @param id 跟进计划主键
* @return 结果
*/
public int deleteFollowUpPlanById(Long id);
/**
* 批量删除跟进计划
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteFollowUpPlanByIds(Long[] ids);
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.crm.system.mapper;
import com.ruoyi.crm.system.domain.FollowUpRecord;
import java.util.List;
/**
* 跟进记录Mapper接口
*
* @author ruoyi
* @date 2024-03-01
*/
public interface FollowUpRecordMapper
{
/**
* 查询跟进记录
*
* @param id 跟进记录主键
* @return 跟进记录
*/
public FollowUpRecord selectFollowUpRecordById(Long id);
/**
* 查询跟进记录列表
*
* @param followUpRecord 跟进记录
* @return 跟进记录集合
*/
public List<FollowUpRecord> selectFollowUpRecordList(FollowUpRecord followUpRecord);
/**
* 新增跟进记录
*
* @param followUpRecord 跟进记录
* @return 结果
*/
public int insertFollowUpRecord(FollowUpRecord followUpRecord);
/**
* 修改跟进记录
*
* @param followUpRecord 跟进记录
* @return 结果
*/
public int updateFollowUpRecord(FollowUpRecord followUpRecord);
/**
* 删除跟进记录
*
* @param id 跟进记录主键
* @return 结果
*/
public int deleteFollowUpRecordById(Long id);
/**
* 批量删除跟进记录
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteFollowUpRecordByIds(Long[] ids);
}

View File

@ -0,0 +1,62 @@
package com.ruoyi.crm.system.mapper;
import com.ruoyi.crm.system.domain.ServiceTicket;
import java.util.List;
/**
* 服务工单Mapper接口
*
* @author ruoyi
* @date 2024-03-01
*/
public interface ServiceTicketMapper
{
/**
* 查询服务工单
*
* @param id 服务工单主键
* @return 服务工单
*/
public ServiceTicket selectServiceTicketById(Long id);
/**
* 查询服务工单列表
*
* @param serviceTicket 服务工单
* @return 服务工单集合
*/
public List<ServiceTicket> selectServiceTicketList(ServiceTicket serviceTicket);
/**
* 新增服务工单
*
* @param serviceTicket 服务工单
* @return 结果
*/
public int insertServiceTicket(ServiceTicket serviceTicket);
/**
* 修改服务工单
*
* @param serviceTicket 服务工单
* @return 结果
*/
public int updateServiceTicket(ServiceTicket serviceTicket);
/**
* 删除服务工单
*
* @param id 服务工单主键
* @return 结果
*/
public int deleteServiceTicketById(Long id);
/**
* 批量删除服务工单
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteServiceTicketByIds(Long[] ids);
}

View File

@ -0,0 +1,74 @@
package com.ruoyi.crm.system.service;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.crm.system.domain.Business;
import java.util.List;
/**
* 商机Service接口
*
* @author ruoyi
* @date 2024-02-29
*/
public interface IBusinessService
{
/**
* 查询商机
*
* @param id 商机主键
* @return 商机
*/
public Business selectBusinessById(Long id);
/**
* 查询商机列表
*
* @param business 商机
* @return 商机集合
*/
public List<Business> selectBusinessList(Business business);
/**
* 新增商机
*
* @param business 商机
* @return 结果
*/
public int insertBusiness(Business business);
/**
* 修改商机
*
* @param business 商机
* @return 结果
*/
public int updateBusiness(Business business);
/**
* 批量删除商机
*
* @param ids 需要删除的商机主键集合
* @return 结果
*/
public int deleteBusinessByIds(Long[] ids);
/**
* 删除商机信息
*
* @param id 商机主键
* @return 结果
*/
public int deleteBusinessById(Long id);
/**
* 导入用户数据
*
* @param userList 用户数据列表
* @param isUpdateSupport 是否更新支持如果已存在则进行更新数据
* @param operName 操作用户
* @return 结果
*/
public String importBusines(List<Business> userList, Boolean isUpdateSupport, String operName);
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.crm.system.service;
import com.ruoyi.crm.system.domain.ContactPerson;
import java.util.List;
/**
* 联系人Service接口
*
* @author ruoyi
* @date 2024-02-29
*/
public interface IContactPersonService
{
/**
* 查询联系人
*
* @param id 联系人主键
* @return 联系人
*/
public ContactPerson selectContactPersonById(Long id);
/**
* 查询联系人列表
*
* @param contactPerson 联系人
* @return 联系人集合
*/
public List<ContactPerson> selectContactPersonList(ContactPerson contactPerson);
/**
* 新增联系人
*
* @param contactPerson 联系人
* @return 结果
*/
public int insertContactPerson(ContactPerson contactPerson);
/**
* 修改联系人
*
* @param contactPerson 联系人
* @return 结果
*/
public int updateContactPerson(ContactPerson contactPerson);
/**
* 批量删除联系人
*
* @param ids 需要删除的联系人主键集合
* @return 结果
*/
public int deleteContactPersonByIds(Long[] ids);
/**
* 删除联系人信息
*
* @param id 联系人主键
* @return 结果
*/
public int deleteContactPersonById(Long id);
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.crm.system.service;
import com.ruoyi.crm.system.domain.FollowUpPlan;
import java.util.List;
/**
* 跟进计划Service接口
*
* @author ruoyi
* @date 2024-03-01
*/
public interface IFollowUpPlanService
{
/**
* 查询跟进计划
*
* @param id 跟进计划主键
* @return 跟进计划
*/
public FollowUpPlan selectFollowUpPlanById(Long id);
/**
* 查询跟进计划列表
*
* @param followUpPlan 跟进计划
* @return 跟进计划集合
*/
public List<FollowUpPlan> selectFollowUpPlanList(FollowUpPlan followUpPlan);
/**
* 新增跟进计划
*
* @param followUpPlan 跟进计划
* @return 结果
*/
public int insertFollowUpPlan(FollowUpPlan followUpPlan);
/**
* 修改跟进计划
*
* @param followUpPlan 跟进计划
* @return 结果
*/
public int updateFollowUpPlan(FollowUpPlan followUpPlan);
/**
* 批量删除跟进计划
*
* @param ids 需要删除的跟进计划主键集合
* @return 结果
*/
public int deleteFollowUpPlanByIds(Long[] ids);
/**
* 删除跟进计划信息
*
* @param id 跟进计划主键
* @return 结果
*/
public int deleteFollowUpPlanById(Long id);
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.crm.system.service;
import com.ruoyi.crm.system.domain.FollowUpRecord;
import java.util.List;
/**
* 跟进记录Service接口
*
* @author ruoyi
* @date 2024-03-01
*/
public interface IFollowUpRecordService
{
/**
* 查询跟进记录
*
* @param id 跟进记录主键
* @return 跟进记录
*/
public FollowUpRecord selectFollowUpRecordById(Long id);
/**
* 查询跟进记录列表
*
* @param followUpRecord 跟进记录
* @return 跟进记录集合
*/
public List<FollowUpRecord> selectFollowUpRecordList(FollowUpRecord followUpRecord);
/**
* 新增跟进记录
*
* @param followUpRecord 跟进记录
* @return 结果
*/
public int insertFollowUpRecord(FollowUpRecord followUpRecord);
/**
* 修改跟进记录
*
* @param followUpRecord 跟进记录
* @return 结果
*/
public int updateFollowUpRecord(FollowUpRecord followUpRecord);
/**
* 批量删除跟进记录
*
* @param ids 需要删除的跟进记录主键集合
* @return 结果
*/
public int deleteFollowUpRecordByIds(Long[] ids);
/**
* 删除跟进记录信息
*
* @param id 跟进记录主键
* @return 结果
*/
public int deleteFollowUpRecordById(Long id);
}

View File

@ -0,0 +1,63 @@
package com.ruoyi.crm.system.service;
import com.ruoyi.crm.system.domain.ServiceTicket;
import java.util.List;
/**
* 服务工单Service接口
*
* @author ruoyi
* @date 2024-03-01
*/
public interface IServiceTicketService
{
/**
* 查询服务工单
*
* @param id 服务工单主键
* @return 服务工单
*/
public ServiceTicket selectServiceTicketById(Long id);
/**
* 查询服务工单列表
*
* @param serviceTicket 服务工单
* @return 服务工单集合
*/
public List<ServiceTicket> selectServiceTicketList(ServiceTicket serviceTicket);
/**
* 新增服务工单
*
* @param serviceTicket 服务工单
* @return 结果
*/
public int insertServiceTicket(ServiceTicket serviceTicket);
/**
* 修改服务工单
*
* @param serviceTicket 服务工单
* @return 结果
*/
public int updateServiceTicket(ServiceTicket serviceTicket);
/**
* 批量删除服务工单
*
* @param ids 需要删除的服务工单主键集合
* @return 结果
*/
public int deleteServiceTicketByIds(Long[] ids);
/**
* 删除服务工单信息
*
* @param id 服务工单主键
* @return 结果
*/
public int deleteServiceTicketById(Long id);
}

View File

@ -0,0 +1,176 @@
package com.ruoyi.crm.system.service.impl;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanValidators;
import com.ruoyi.crm.system.domain.Business;
import com.ruoyi.crm.system.mapper.BusinessMapper;
import com.ruoyi.crm.system.service.IBusinessService;
import com.ruoyi.system.service.impl.SysUserServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.validation.Validator;
import java.util.List;
/**
* 商机Service业务层处理
*
* @author ruoyi
* @date 2024-02-29
*/
@Service
public class BusinessServiceImpl implements IBusinessService
{
private static final Logger log = LoggerFactory.getLogger(BusinessServiceImpl.class);
@Autowired
private BusinessMapper businessMapper;
@Autowired
protected Validator validator;
/**
* 查询商机
*
* @param id 商机主键
* @return 商机
*/
@Override
public Business selectBusinessById(Long id)
{
return businessMapper.selectBusinessById(id);
}
/**
* 查询商机列表
*
* @param business 商机
* @return 商机
*/
@Override
public List<Business> selectBusinessList(Business business)
{
return businessMapper.selectBusinessList(business);
}
/**
* 新增商机
*
* @param business 商机
* @return 结果
*/
@Override
public int insertBusiness(Business business)
{
business.setCreateTime(DateUtils.getNowDate());
return businessMapper.insertBusiness(business);
}
/**
* 修改商机
*
* @param business 商机
* @return 结果
*/
@Override
public int updateBusiness(Business business)
{
business.setUpdateTime(DateUtils.getNowDate());
return businessMapper.updateBusiness(business);
}
/**
* 批量删除商机
*
* @param ids 需要删除的商机主键
* @return 结果
*/
@Override
public int deleteBusinessByIds(Long[] ids)
{
return businessMapper.deleteBusinessByIds(ids);
}
/**
* 删除商机信息
*
* @param id 商机主键
* @return 结果
*/
@Override
public int deleteBusinessById(Long id)
{
return businessMapper.deleteBusinessById(id);
}
/**
* 导入商机数据
* @param userList 用户数据列表
* @param isUpdateSupport 是否更新支持如果已存在则进行更新数据
* @param operName 操作用户
* @return
*/
@Override
public String importBusines(List<Business> userList, Boolean isUpdateSupport, String operName) {
if (StringUtils.isNull(userList) || userList.size() == 0)
{
throw new ServiceException("导入用户数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
for (Business business : userList) {
try
{
// 验证是否存在这个商机
Business b = businessMapper.selectByBusinessNumber(business.getBusinessNumber()+"");
System.out.println("----------------------------"+b);
if (StringUtils.isNull(b))
{
BeanValidators.validateWithException(validator, business);
business.setCreateTime(DateUtils.getNowDate());
businessMapper.insertBusiness(business);
successNum++;
successMsg.append("<br/>" + successNum + "、商机编号 " + business.getBusinessNumber() + " 导入成功");
}
else if (isUpdateSupport)
{
BeanValidators.validateWithException(validator, business);
business.setUpdateBy(operName);
this.updateBusiness(business);
successNum++;
successMsg.append("<br/>" + successNum + "、商机编号 " + business.getBusinessNumber() + " 更新成功");
}
else
{
failureNum++;
failureMsg.append("<br/>" + failureNum + "、商机编号 " + business.getBusinessNumber() + " 已存在");
}
}
catch (Exception e)
{
failureNum++;
String msg = "<br/>" + failureNum + "、商机编号 " + business.getBusinessNumber() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
if (failureNum > 0)
{
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
}
else
{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
}

View File

@ -0,0 +1,97 @@
package com.ruoyi.crm.system.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.crm.system.domain.ContactPerson;
import com.ruoyi.crm.system.mapper.ContactPersonMapper;
import com.ruoyi.crm.system.service.IContactPersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 联系人Service业务层处理
*
* @author ruoyi
* @date 2024-02-29
*/
@Service
public class ContactPersonServiceImpl implements IContactPersonService
{
@Autowired
private ContactPersonMapper contactPersonMapper;
/**
* 查询联系人
*
* @param id 联系人主键
* @return 联系人
*/
@Override
public ContactPerson selectContactPersonById(Long id)
{
return contactPersonMapper.selectContactPersonById(id);
}
/**
* 查询联系人列表
*
* @param contactPerson 联系人
* @return 联系人
*/
@Override
public List<ContactPerson> selectContactPersonList(ContactPerson contactPerson)
{
return contactPersonMapper.selectContactPersonList(contactPerson);
}
/**
* 新增联系人
*
* @param contactPerson 联系人
* @return 结果
*/
@Override
public int insertContactPerson(ContactPerson contactPerson)
{
contactPerson.setCreateTime(DateUtils.getNowDate());
return contactPersonMapper.insertContactPerson(contactPerson);
}
/**
* 修改联系人
*
* @param contactPerson 联系人
* @return 结果
*/
@Override
public int updateContactPerson(ContactPerson contactPerson)
{
contactPerson.setUpdateTime(DateUtils.getNowDate());
return contactPersonMapper.updateContactPerson(contactPerson);
}
/**
* 批量删除联系人
*
* @param ids 需要删除的联系人主键
* @return 结果
*/
@Override
public int deleteContactPersonByIds(Long[] ids)
{
return contactPersonMapper.deleteContactPersonByIds(ids);
}
/**
* 删除联系人信息
*
* @param id 联系人主键
* @return 结果
*/
@Override
public int deleteContactPersonById(Long id)
{
return contactPersonMapper.deleteContactPersonById(id);
}
}

View File

@ -0,0 +1,97 @@
package com.ruoyi.crm.system.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.crm.system.domain.FollowUpPlan;
import com.ruoyi.crm.system.mapper.FollowUpPlanMapper;
import com.ruoyi.crm.system.service.IFollowUpPlanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 跟进计划Service业务层处理
*
* @author ruoyi
* @date 2024-03-01
*/
@Service
public class FollowUpPlanServiceImpl implements IFollowUpPlanService
{
@Autowired
private FollowUpPlanMapper followUpPlanMapper;
/**
* 查询跟进计划
*
* @param id 跟进计划主键
* @return 跟进计划
*/
@Override
public FollowUpPlan selectFollowUpPlanById(Long id)
{
return followUpPlanMapper.selectFollowUpPlanById(id);
}
/**
* 查询跟进计划列表
*
* @param followUpPlan 跟进计划
* @return 跟进计划
*/
@Override
public List<FollowUpPlan> selectFollowUpPlanList(FollowUpPlan followUpPlan)
{
return followUpPlanMapper.selectFollowUpPlanList(followUpPlan);
}
/**
* 新增跟进计划
*
* @param followUpPlan 跟进计划
* @return 结果
*/
@Override
public int insertFollowUpPlan(FollowUpPlan followUpPlan)
{
followUpPlan.setCreateTime(DateUtils.getNowDate());
return followUpPlanMapper.insertFollowUpPlan(followUpPlan);
}
/**
* 修改跟进计划
*
* @param followUpPlan 跟进计划
* @return 结果
*/
@Override
public int updateFollowUpPlan(FollowUpPlan followUpPlan)
{
followUpPlan.setUpdateTime(DateUtils.getNowDate());
return followUpPlanMapper.updateFollowUpPlan(followUpPlan);
}
/**
* 批量删除跟进计划
*
* @param ids 需要删除的跟进计划主键
* @return 结果
*/
@Override
public int deleteFollowUpPlanByIds(Long[] ids)
{
return followUpPlanMapper.deleteFollowUpPlanByIds(ids);
}
/**
* 删除跟进计划信息
*
* @param id 跟进计划主键
* @return 结果
*/
@Override
public int deleteFollowUpPlanById(Long id)
{
return followUpPlanMapper.deleteFollowUpPlanById(id);
}
}

View File

@ -0,0 +1,97 @@
package com.ruoyi.crm.system.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.crm.system.domain.FollowUpRecord;
import com.ruoyi.crm.system.mapper.FollowUpRecordMapper;
import com.ruoyi.crm.system.service.IFollowUpRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 跟进记录Service业务层处理
*
* @author ruoyi
* @date 2024-03-01
*/
@Service
public class FollowUpRecordServiceImpl implements IFollowUpRecordService
{
@Autowired
private FollowUpRecordMapper followUpRecordMapper;
/**
* 查询跟进记录
*
* @param id 跟进记录主键
* @return 跟进记录
*/
@Override
public FollowUpRecord selectFollowUpRecordById(Long id)
{
return followUpRecordMapper.selectFollowUpRecordById(id);
}
/**
* 查询跟进记录列表
*
* @param followUpRecord 跟进记录
* @return 跟进记录
*/
@Override
public List<FollowUpRecord> selectFollowUpRecordList(FollowUpRecord followUpRecord)
{
return followUpRecordMapper.selectFollowUpRecordList(followUpRecord);
}
/**
* 新增跟进记录
*
* @param followUpRecord 跟进记录
* @return 结果
*/
@Override
public int insertFollowUpRecord(FollowUpRecord followUpRecord)
{
followUpRecord.setCreateTime(DateUtils.getNowDate());
return followUpRecordMapper.insertFollowUpRecord(followUpRecord);
}
/**
* 修改跟进记录
*
* @param followUpRecord 跟进记录
* @return 结果
*/
@Override
public int updateFollowUpRecord(FollowUpRecord followUpRecord)
{
followUpRecord.setUpdateTime(DateUtils.getNowDate());
return followUpRecordMapper.updateFollowUpRecord(followUpRecord);
}
/**
* 批量删除跟进记录
*
* @param ids 需要删除的跟进记录主键
* @return 结果
*/
@Override
public int deleteFollowUpRecordByIds(Long[] ids)
{
return followUpRecordMapper.deleteFollowUpRecordByIds(ids);
}
/**
* 删除跟进记录信息
*
* @param id 跟进记录主键
* @return 结果
*/
@Override
public int deleteFollowUpRecordById(Long id)
{
return followUpRecordMapper.deleteFollowUpRecordById(id);
}
}

View File

@ -0,0 +1,97 @@
package com.ruoyi.crm.system.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.crm.system.domain.ServiceTicket;
import com.ruoyi.crm.system.mapper.ServiceTicketMapper;
import com.ruoyi.crm.system.service.IServiceTicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 服务工单Service业务层处理
*
* @author ruoyi
* @date 2024-03-01
*/
@Service
public class ServiceTicketServiceImpl implements IServiceTicketService
{
@Autowired
private ServiceTicketMapper serviceTicketMapper;
/**
* 查询服务工单
*
* @param id 服务工单主键
* @return 服务工单
*/
@Override
public ServiceTicket selectServiceTicketById(Long id)
{
return serviceTicketMapper.selectServiceTicketById(id);
}
/**
* 查询服务工单列表
*
* @param serviceTicket 服务工单
* @return 服务工单
*/
@Override
public List<ServiceTicket> selectServiceTicketList(ServiceTicket serviceTicket)
{
return serviceTicketMapper.selectServiceTicketList(serviceTicket);
}
/**
* 新增服务工单
*
* @param serviceTicket 服务工单
* @return 结果
*/
@Override
public int insertServiceTicket(ServiceTicket serviceTicket)
{
serviceTicket.setCreateTime(DateUtils.getNowDate());
return serviceTicketMapper.insertServiceTicket(serviceTicket);
}
/**
* 修改服务工单
*
* @param serviceTicket 服务工单
* @return 结果
*/
@Override
public int updateServiceTicket(ServiceTicket serviceTicket)
{
serviceTicket.setUpdateTime(DateUtils.getNowDate());
return serviceTicketMapper.updateServiceTicket(serviceTicket);
}
/**
* 批量删除服务工单
*
* @param ids 需要删除的服务工单主键
* @return 结果
*/
@Override
public int deleteServiceTicketByIds(Long[] ids)
{
return serviceTicketMapper.deleteServiceTicketByIds(ids);
}
/**
* 删除服务工单信息
*
* @param id 服务工单主键
* @return 结果
*/
@Override
public int deleteServiceTicketById(Long id)
{
return serviceTicketMapper.deleteServiceTicketById(id);
}
}

View File

@ -207,7 +207,7 @@
select
c.id, c.owner, c.name, m.content, m.create_time
from crm_customer c
inner join crm_comment m on m.customer_id=c.id
inner join follow_up_record m on m.customer_id=c.id
where c.owner= #{owner}
order by m.create_time desc limit 10
</select>

View File

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.crm.system.mapper.BusinessMapper">
<resultMap type="Business" id="BusinessResult">
<result property="id" column="id" />
<result property="title" column="title" />
<result property="customerId" column="customer_id" />
<result property="customerLinkman" column="customer_linkman" />
<result property="customerName" column="customer_name" />
<result property="customerNumber" column="customer_number" />
<result property="businessName" column="business_name" />
<result property="businessNumber" column="business_number" />
<result property="salesStage" column="sales_stage" />
<result property="probabilityOfWining" column="probability_of_wining" />
<result property="stageType" column="stage_type" />
<result property="personInCharge" column="person_in_charge" />
<result property="belongingDepartment" column="belonging_department" />
<result property="businessDetail" column="business_detail" />
<result property="forecastBusinessPrice" column="forecast_business_price" />
<result property="forecastSuccessTime" column="forecast_success_time" />
<result property="collaborator" column="collaborator" />
<result property="lastFollowUpTime" column="last_follow_up_time" />
<result property="phaseChangeTime" column="phase_change_time" />
<result property="loseOrderCause" column="lose_order_cause" />
<result property="submitter" column="submitter" />
<result property="submitTime" column="submit_time" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="isDelete" column="is_delete" />
</resultMap>
<sql id="selectBusinessVo">
select id, title, customer_id, customer_linkman, customer_name, customer_number, business_name, business_number, sales_stage, probability_of_wining, stage_type, person_in_charge, belonging_department, business_detail, forecast_business_price, forecast_success_time, collaborator, last_follow_up_time, phase_change_time, lose_order_cause, submitter, submit_time, create_by, create_time, update_by, update_time, remark, is_delete from business
</sql>
<select id="selectBusinessList" parameterType="Business" resultMap="BusinessResult">
<include refid="selectBusinessVo"/>
<where>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="customerId != null "> and customer_id = #{customerId}</if>
<if test="customerLinkman != null "> and customer_linkman = #{customerLinkman}</if>
<if test="customerName != null and customerName != ''"> and customer_name like concat('%', #{customerName}, '%')</if>
<if test="customerNumber != null and customerNumber != ''"> and customer_number = #{customerNumber}</if>
<if test="businessName != null and businessName != ''"> and business_name like concat('%', #{businessName}, '%')</if>
<if test="businessNumber != null and businessNumber != ''"> and business_number = #{businessNumber}</if>
<if test="salesStage != null "> and sales_stage = #{salesStage}</if>
<if test="probabilityOfWining != null "> and probability_of_wining = #{probabilityOfWining}</if>
<if test="stageType != null "> and stage_type = #{stageType}</if>
<if test="personInCharge != null and personInCharge != ''"> and person_in_charge = #{personInCharge}</if>
<if test="belongingDepartment != null and belongingDepartment != ''"> and belonging_department = #{belongingDepartment}</if>
<if test="businessDetail != null and businessDetail != ''"> and business_detail = #{businessDetail}</if>
<if test="forecastBusinessPrice != null "> and forecast_business_price = #{forecastBusinessPrice}</if>
<if test="forecastSuccessTime != null "> and forecast_success_time = #{forecastSuccessTime}</if>
<if test="collaborator != null and collaborator != ''"> and collaborator = #{collaborator}</if>
<if test="lastFollowUpTime != null "> and last_follow_up_time = #{lastFollowUpTime}</if>
<if test="phaseChangeTime != null "> and phase_change_time = #{phaseChangeTime}</if>
<if test="loseOrderCause != null and loseOrderCause != ''"> and lose_order_cause = #{loseOrderCause}</if>
<if test="submitter != null and submitter != ''"> and submitter = #{submitter}</if>
<if test="submitTime != null "> and submit_time = #{submitTime}</if>
<if test="isDelete != null "> and is_delete = #{isDelete}</if>
</where>
</select>
<select id="selectBusinessById" parameterType="Long" resultMap="BusinessResult">
<include refid="selectBusinessVo"/>
where id = #{id}
</select>
<insert id="insertBusiness" parameterType="Business" useGeneratedKeys="true" keyProperty="id">
insert into business
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="title != null">title,</if>
<if test="customerId != null">customer_id,</if>
<if test="customerLinkman != null">customer_linkman,</if>
<if test="customerName != null">customer_name,</if>
<if test="customerNumber != null">customer_number,</if>
<if test="businessName != null">business_name,</if>
<if test="businessNumber != null">business_number,</if>
<if test="salesStage != null">sales_stage,</if>
<if test="probabilityOfWining != null">probability_of_wining,</if>
<if test="stageType != null">stage_type,</if>
<if test="personInCharge != null">person_in_charge,</if>
<if test="belongingDepartment != null">belonging_department,</if>
<if test="businessDetail != null">business_detail,</if>
<if test="forecastBusinessPrice != null">forecast_business_price,</if>
<if test="forecastSuccessTime != null">forecast_success_time,</if>
<if test="collaborator != null">collaborator,</if>
<if test="lastFollowUpTime != null">last_follow_up_time,</if>
<if test="phaseChangeTime != null">phase_change_time,</if>
<if test="loseOrderCause != null">lose_order_cause,</if>
<if test="submitter != null">submitter,</if>
<if test="submitTime != null">submit_time,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="isDelete != null">is_delete,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="title != null">#{title},</if>
<if test="customerId != null">#{customerId},</if>
<if test="customerLinkman != null">#{customerLinkman},</if>
<if test="customerName != null">#{customerName},</if>
<if test="customerNumber != null">#{customerNumber},</if>
<if test="businessName != null">#{businessName},</if>
<if test="businessNumber != null">#{businessNumber},</if>
<if test="salesStage != null">#{salesStage},</if>
<if test="probabilityOfWining != null">#{probabilityOfWining},</if>
<if test="stageType != null">#{stageType},</if>
<if test="personInCharge != null">#{personInCharge},</if>
<if test="belongingDepartment != null">#{belongingDepartment},</if>
<if test="businessDetail != null">#{businessDetail},</if>
<if test="forecastBusinessPrice != null">#{forecastBusinessPrice},</if>
<if test="forecastSuccessTime != null">#{forecastSuccessTime},</if>
<if test="collaborator != null">#{collaborator},</if>
<if test="lastFollowUpTime != null">#{lastFollowUpTime},</if>
<if test="phaseChangeTime != null">#{phaseChangeTime},</if>
<if test="loseOrderCause != null">#{loseOrderCause},</if>
<if test="submitter != null">#{submitter},</if>
<if test="submitTime != null">#{submitTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="isDelete != null">#{isDelete},</if>
</trim>
</insert>
<update id="updateBusiness" parameterType="Business">
update business
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">title = #{title},</if>
<if test="customerId != null">customer_id = #{customerId},</if>
<if test="customerLinkman != null">customer_linkman = #{customerLinkman},</if>
<if test="customerName != null">customer_name = #{customerName},</if>
<if test="customerNumber != null">customer_number = #{customerNumber},</if>
<if test="businessName != null">business_name = #{businessName},</if>
<if test="businessNumber != null">business_number = #{businessNumber},</if>
<if test="salesStage != null">sales_stage = #{salesStage},</if>
<if test="probabilityOfWining != null">probability_of_wining = #{probabilityOfWining},</if>
<if test="stageType != null">stage_type = #{stageType},</if>
<if test="personInCharge != null">person_in_charge = #{personInCharge},</if>
<if test="belongingDepartment != null">belonging_department = #{belongingDepartment},</if>
<if test="businessDetail != null">business_detail = #{businessDetail},</if>
<if test="forecastBusinessPrice != null">forecast_business_price = #{forecastBusinessPrice},</if>
<if test="forecastSuccessTime != null">forecast_success_time = #{forecastSuccessTime},</if>
<if test="collaborator != null">collaborator = #{collaborator},</if>
<if test="lastFollowUpTime != null">last_follow_up_time = #{lastFollowUpTime},</if>
<if test="phaseChangeTime != null">phase_change_time = #{phaseChangeTime},</if>
<if test="loseOrderCause != null">lose_order_cause = #{loseOrderCause},</if>
<if test="submitter != null">submitter = #{submitter},</if>
<if test="submitTime != null">submit_time = #{submitTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="isDelete != null">is_delete = #{isDelete},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteBusinessById" parameterType="Long">
delete from business where id = #{id}
</delete>
<delete id="deleteBusinessByIds" parameterType="String">
delete from business where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="selectByBusinessNumber" parameterType="String" resultMap="BusinessResult">
<include refid="selectBusinessVo"/>
where business_number = #{businessNumber}
</select>
</mapper>

View File

@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.crm.system.mapper.ContactPersonMapper">
<resultMap type="ContactPerson" id="ContactPersonResult">
<result property="id" column="id" />
<result property="title" column="title" />
<result property="name" column="name" />
<result property="phoneNumber" column="phone_number" />
<result property="customerId" column="customer_id" />
<result property="customerNumber" column="customer_number" />
<result property="dep" column="dep" />
<result property="job" column="job" />
<result property="wxNumber" column="wx_number" />
<result property="mailNumber" column="mail_number" />
<result property="isKey" column="is_key" />
<result property="contactPersonDetail" column="contact_person_detail" />
<result property="personInCharge" column="person_in_charge" />
<result property="belongingDepartment" column="belonging_department" />
<result property="collaborator" column="collaborator" />
<result property="submitter" column="submitter" />
<result property="submitTime" column="submit_time" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="isDelete" column="is_delete" />
</resultMap>
<sql id="selectContactPersonVo">
select id, title, name, phone_number, customer_id, customer_number, dep, job, wx_number, mail_number, is_key, contact_person_detail, person_in_charge, belonging_department, collaborator, submitter, submit_time, create_by, create_time, update_by, update_time, remark, is_delete from contact_person
</sql>
<select id="selectContactPersonList" parameterType="ContactPerson" resultMap="ContactPersonResult">
<include refid="selectContactPersonVo"/>
<where>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="phoneNumber != null and phoneNumber != ''"> and phone_number = #{phoneNumber}</if>
<if test="customerId != null "> and customer_id = #{customerId}</if>
<if test="customerNumber != null and customerNumber != ''"> and customer_number = #{customerNumber}</if>
<if test="dep != null and dep != ''"> and dep = #{dep}</if>
<if test="job != null and job != ''"> and job = #{job}</if>
<if test="wxNumber != null and wxNumber != ''"> and wx_number = #{wxNumber}</if>
<if test="mailNumber != null and mailNumber != ''"> and mail_number = #{mailNumber}</if>
<if test="isKey != null "> and is_key = #{isKey}</if>
<if test="contactPersonDetail != null and contactPersonDetail != ''"> and contact_person_detail = #{contactPersonDetail}</if>
<if test="personInCharge != null and personInCharge != ''"> and person_in_charge = #{personInCharge}</if>
<if test="belongingDepartment != null and belongingDepartment != ''"> and belonging_department = #{belongingDepartment}</if>
<if test="collaborator != null and collaborator != ''"> and collaborator = #{collaborator}</if>
<if test="submitter != null and submitter != ''"> and submitter = #{submitter}</if>
<if test="submitTime != null "> and submit_time = #{submitTime}</if>
<if test="isDelete != null "> and is_delete = #{isDelete}</if>
</where>
</select>
<select id="selectContactPersonById" parameterType="Long" resultMap="ContactPersonResult">
<include refid="selectContactPersonVo"/>
where id = #{id}
</select>
<insert id="insertContactPerson" parameterType="ContactPerson" useGeneratedKeys="true" keyProperty="id">
insert into contact_person
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="title != null">title,</if>
<if test="name != null">name,</if>
<if test="phoneNumber != null">phone_number,</if>
<if test="customerId != null">customer_id,</if>
<if test="customerNumber != null">customer_number,</if>
<if test="dep != null">dep,</if>
<if test="job != null">job,</if>
<if test="wxNumber != null">wx_number,</if>
<if test="mailNumber != null">mail_number,</if>
<if test="isKey != null">is_key,</if>
<if test="contactPersonDetail != null">contact_person_detail,</if>
<if test="personInCharge != null">person_in_charge,</if>
<if test="belongingDepartment != null">belonging_department,</if>
<if test="collaborator != null">collaborator,</if>
<if test="submitter != null">submitter,</if>
<if test="submitTime != null">submit_time,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="isDelete != null">is_delete,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="title != null">#{title},</if>
<if test="name != null">#{name},</if>
<if test="phoneNumber != null">#{phoneNumber},</if>
<if test="customerId != null">#{customerId},</if>
<if test="customerNumber != null">#{customerNumber},</if>
<if test="dep != null">#{dep},</if>
<if test="job != null">#{job},</if>
<if test="wxNumber != null">#{wxNumber},</if>
<if test="mailNumber != null">#{mailNumber},</if>
<if test="isKey != null">#{isKey},</if>
<if test="contactPersonDetail != null">#{contactPersonDetail},</if>
<if test="personInCharge != null">#{personInCharge},</if>
<if test="belongingDepartment != null">#{belongingDepartment},</if>
<if test="collaborator != null">#{collaborator},</if>
<if test="submitter != null">#{submitter},</if>
<if test="submitTime != null">#{submitTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="isDelete != null">#{isDelete},</if>
</trim>
</insert>
<update id="updateContactPerson" parameterType="ContactPerson">
update contact_person
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">title = #{title},</if>
<if test="name != null">name = #{name},</if>
<if test="phoneNumber != null">phone_number = #{phoneNumber},</if>
<if test="customerId != null">customer_id = #{customerId},</if>
<if test="customerNumber != null">customer_number = #{customerNumber},</if>
<if test="dep != null">dep = #{dep},</if>
<if test="job != null">job = #{job},</if>
<if test="wxNumber != null">wx_number = #{wxNumber},</if>
<if test="mailNumber != null">mail_number = #{mailNumber},</if>
<if test="isKey != null">is_key = #{isKey},</if>
<if test="contactPersonDetail != null">contact_person_detail = #{contactPersonDetail},</if>
<if test="personInCharge != null">person_in_charge = #{personInCharge},</if>
<if test="belongingDepartment != null">belonging_department = #{belongingDepartment},</if>
<if test="collaborator != null">collaborator = #{collaborator},</if>
<if test="submitter != null">submitter = #{submitter},</if>
<if test="submitTime != null">submit_time = #{submitTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="isDelete != null">is_delete = #{isDelete},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteContactPersonById" parameterType="Long">
delete from contact_person where id = #{id}
</delete>
<delete id="deleteContactPersonByIds" parameterType="String">
delete from contact_person where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.crm.system.mapper.FollowUpPlanMapper">
<resultMap type="FollowUpPlan" id="FollowUpPlanResult">
<result property="id" column="id" />
<result property="title" column="title" />
<result property="planContent" column="plan_content" />
<result property="customer" column="customer" />
<result property="planTime" column="plan_time" />
<result property="planExecutor" column="plan_executor" />
<result property="belongingDepartment" column="belonging_department" />
<result property="planStatus" column="plan_status" />
<result property="submitter" column="submitter" />
<result property="submitTime" column="submit_time" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="isDelete" column="is_delete" />
</resultMap>
<sql id="selectFollowUpPlanVo">
select id, title, plan_content, customer, plan_time, plan_executor, belonging_department, plan_status, submitter, submit_time, create_by, create_time, update_by, update_time, remark, is_delete from follow_up_plan
</sql>
<select id="selectFollowUpPlanList" parameterType="FollowUpPlan" resultMap="FollowUpPlanResult">
<include refid="selectFollowUpPlanVo"/>
<where>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="planContent != null and planContent != ''"> and plan_content = #{planContent}</if>
<if test="customer != null and customer != ''"> and customer = #{customer}</if>
<if test="planTime != null "> and plan_time = #{planTime}</if>
<if test="planExecutor != null and planExecutor != ''"> and plan_executor = #{planExecutor}</if>
<if test="belongingDepartment != null and belongingDepartment != ''"> and belonging_department = #{belongingDepartment}</if>
<if test="planStatus != null "> and plan_status = #{planStatus}</if>
<if test="submitter != null and submitter != ''"> and submitter = #{submitter}</if>
<if test="submitTime != null "> and submit_time = #{submitTime}</if>
<if test="isDelete != null "> and is_delete = #{isDelete}</if>
</where>
</select>
<select id="selectFollowUpPlanById" parameterType="Long" resultMap="FollowUpPlanResult">
<include refid="selectFollowUpPlanVo"/>
where id = #{id}
</select>
<insert id="insertFollowUpPlan" parameterType="FollowUpPlan" useGeneratedKeys="true" keyProperty="id">
insert into follow_up_plan
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="title != null">title,</if>
<if test="planContent != null">plan_content,</if>
<if test="customer != null">customer,</if>
<if test="planTime != null">plan_time,</if>
<if test="planExecutor != null">plan_executor,</if>
<if test="belongingDepartment != null">belonging_department,</if>
<if test="planStatus != null">plan_status,</if>
<if test="submitter != null">submitter,</if>
<if test="submitTime != null">submit_time,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="isDelete != null">is_delete,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="title != null">#{title},</if>
<if test="planContent != null">#{planContent},</if>
<if test="customer != null">#{customer},</if>
<if test="planTime != null">#{planTime},</if>
<if test="planExecutor != null">#{planExecutor},</if>
<if test="belongingDepartment != null">#{belongingDepartment},</if>
<if test="planStatus != null">#{planStatus},</if>
<if test="submitter != null">#{submitter},</if>
<if test="submitTime != null">#{submitTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="isDelete != null">#{isDelete},</if>
</trim>
</insert>
<update id="updateFollowUpPlan" parameterType="FollowUpPlan">
update follow_up_plan
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">title = #{title},</if>
<if test="planContent != null">plan_content = #{planContent},</if>
<if test="customer != null">customer = #{customer},</if>
<if test="planTime != null">plan_time = #{planTime},</if>
<if test="planExecutor != null">plan_executor = #{planExecutor},</if>
<if test="belongingDepartment != null">belonging_department = #{belongingDepartment},</if>
<if test="planStatus != null">plan_status = #{planStatus},</if>
<if test="submitter != null">submitter = #{submitter},</if>
<if test="submitTime != null">submit_time = #{submitTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="isDelete != null">is_delete = #{isDelete},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteFollowUpPlanById" parameterType="Long">
delete from follow_up_plan where id = #{id}
</delete>
<delete id="deleteFollowUpPlanByIds" parameterType="String">
delete from follow_up_plan where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.crm.system.mapper.FollowUpRecordMapper">
<resultMap type="FollowUpRecord" id="FollowUpRecordResult">
<result property="id" column="id" />
<result property="title" column="title" />
<result property="followUpRecord" column="follow_up_record" />
<result property="followUpSubject" column="follow_up_subject" />
<result property="customerNumber" column="customer_number" />
<result property="followUpBusinessOpportunities" column="follow_up_business_opportunities" />
<result property="opportunityNumber" column="opportunity_number" />
<result property="contactPeople" column="contact_people" />
<result property="followUpType" column="follow_up_type" />
<result property="content" column="content" />
<result property="followUpTime" column="follow_up_time" />
<result property="followUpPeople" column="follow_up_people" />
<result property="belongingDepartment" column="belonging_department" />
<result property="submitter" column="submitter" />
<result property="submitTime" column="submit_time" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="customerId" column="customer_id" />
</resultMap>
<sql id="selectFollowUpRecordVo">
select id, title, follow_up_record, follow_up_subject, customer_number, follow_up_business_opportunities, opportunity_number, contact_people, follow_up_type, content, follow_up_time, follow_up_people, belonging_department, submitter, submit_time, create_by, create_time, update_by, update_time, remark, customer_id from follow_up_record
</sql>
<select id="selectFollowUpRecordList" parameterType="FollowUpRecord" resultMap="FollowUpRecordResult">
<include refid="selectFollowUpRecordVo"/>
<where>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="followUpRecord != null and followUpRecord != ''"> and follow_up_record = #{followUpRecord}</if>
<if test="followUpSubject != null and followUpSubject != ''"> and follow_up_subject = #{followUpSubject}</if>
<if test="customerNumber != null and customerNumber != ''"> and customer_number = #{customerNumber}</if>
<if test="followUpBusinessOpportunities != null and followUpBusinessOpportunities != ''"> and follow_up_business_opportunities = #{followUpBusinessOpportunities}</if>
<if test="opportunityNumber != null and opportunityNumber != ''"> and opportunity_number = #{opportunityNumber}</if>
<if test="contactPeople != null and contactPeople != ''"> and contact_people = #{contactPeople}</if>
<if test="followUpType != null "> and follow_up_type = #{followUpType}</if>
<if test="content != null and content != ''"> and content = #{content}</if>
<if test="followUpTime != null "> and follow_up_time = #{followUpTime}</if>
<if test="followUpPeople != null and followUpPeople != ''"> and follow_up_people = #{followUpPeople}</if>
<if test="belongingDepartment != null and belongingDepartment != ''"> and belonging_department = #{belongingDepartment}</if>
<if test="submitter != null and submitter != ''"> and submitter = #{submitter}</if>
<if test="submitTime != null "> and submit_time = #{submitTime}</if>
<if test="customerId != null "> and customer_id = #{customerId}</if>
</where>
</select>
<select id="selectFollowUpRecordById" parameterType="Long" resultMap="FollowUpRecordResult">
<include refid="selectFollowUpRecordVo"/>
where id = #{id}
</select>
<insert id="insertFollowUpRecord" parameterType="FollowUpRecord">
insert into follow_up_record
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="title != null">title,</if>
<if test="followUpRecord != null">follow_up_record,</if>
<if test="followUpSubject != null">follow_up_subject,</if>
<if test="customerNumber != null">customer_number,</if>
<if test="followUpBusinessOpportunities != null">follow_up_business_opportunities,</if>
<if test="opportunityNumber != null">opportunity_number,</if>
<if test="contactPeople != null">contact_people,</if>
<if test="followUpType != null">follow_up_type,</if>
<if test="content != null">content,</if>
<if test="followUpTime != null">follow_up_time,</if>
<if test="followUpPeople != null">follow_up_people,</if>
<if test="belongingDepartment != null">belonging_department,</if>
<if test="submitter != null">submitter,</if>
<if test="submitTime != null">submit_time,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="customerId != null">customer_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="title != null">#{title},</if>
<if test="followUpRecord != null">#{followUpRecord},</if>
<if test="followUpSubject != null">#{followUpSubject},</if>
<if test="customerNumber != null">#{customerNumber},</if>
<if test="followUpBusinessOpportunities != null">#{followUpBusinessOpportunities},</if>
<if test="opportunityNumber != null">#{opportunityNumber},</if>
<if test="contactPeople != null">#{contactPeople},</if>
<if test="followUpType != null">#{followUpType},</if>
<if test="content != null">#{content},</if>
<if test="followUpTime != null">#{followUpTime},</if>
<if test="followUpPeople != null">#{followUpPeople},</if>
<if test="belongingDepartment != null">#{belongingDepartment},</if>
<if test="submitter != null">#{submitter},</if>
<if test="submitTime != null">#{submitTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="customerId != null">#{customerId},</if>
</trim>
</insert>
<update id="updateFollowUpRecord" parameterType="FollowUpRecord">
update follow_up_record
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">title = #{title},</if>
<if test="followUpRecord != null">follow_up_record = #{followUpRecord},</if>
<if test="followUpSubject != null">follow_up_subject = #{followUpSubject},</if>
<if test="customerNumber != null">customer_number = #{customerNumber},</if>
<if test="followUpBusinessOpportunities != null">follow_up_business_opportunities = #{followUpBusinessOpportunities},</if>
<if test="opportunityNumber != null">opportunity_number = #{opportunityNumber},</if>
<if test="contactPeople != null">contact_people = #{contactPeople},</if>
<if test="followUpType != null">follow_up_type = #{followUpType},</if>
<if test="content != null">content = #{content},</if>
<if test="followUpTime != null">follow_up_time = #{followUpTime},</if>
<if test="followUpPeople != null">follow_up_people = #{followUpPeople},</if>
<if test="belongingDepartment != null">belonging_department = #{belongingDepartment},</if>
<if test="submitter != null">submitter = #{submitter},</if>
<if test="submitTime != null">submit_time = #{submitTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="customerId != null">customer_id = #{customerId},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteFollowUpRecordById" parameterType="Long">
delete from follow_up_record where id = #{id}
</delete>
<delete id="deleteFollowUpRecordByIds" parameterType="String">
delete from follow_up_record where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,227 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.crm.system.mapper.ServiceTicketMapper">
<resultMap type="ServiceTicket" id="ServiceTicketResult">
<result property="id" column="id" />
<result property="title" column="title" />
<result property="customerName" column="customer_name" />
<result property="customerNumber" column="customer_number" />
<result property="contractTitle" column="contract_title" />
<result property="contractOrderNumber" column="contract_order_number" />
<result property="customerContact" column="customer_contact" />
<result property="phoneNumber" column="phone_number" />
<result property="serviceType" column="service_type" />
<result property="serviceOrderNumber" column="service_order_number" />
<result property="howManyServiceOrder" column="how_many_service_order" />
<result property="serviceStarTime" column="service_star_time" />
<result property="serviceEndTime" column="service_end_time" />
<result property="demandServiceDay" column="demand_service_day" />
<result property="afterSalesTechnician" column="after_sales_technician" />
<result property="serviceAddress" column="service_address" />
<result property="serviceAddressCity" column="service_address_city" />
<result property="serviceAddressArea" column="service_address_area" />
<result property="serviceAddressDetail" column="service_address_detail" />
<result property="signIn" column="sign_in" />
<result property="signInTime" column="sign_in_time" />
<result property="signOut" column="sign_out" />
<result property="signOutTime" column="sign_out_time" />
<result property="isSolveTheProblem" column="is_solve_the_problem" />
<result property="scenePhoto" column="scene_photo" />
<result property="customerSatisfaction" column="customer_satisfaction" />
<result property="satisfactionValue" column="satisfaction_value" />
<result property="customerCommentsAndDemands" column="customer_comments_and_demands" />
<result property="submitter" column="submitter" />
<result property="submitTime" column="submit_time" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="processState" column="process_state" />
<result property="currentNode" column="current_node" />
<result property="currentPersonInCharge" column="current_person_in_charge" />
</resultMap>
<sql id="selectServiceTicketVo">
select id, title, customer_name, customer_number, contract_title, contract_order_number, customer_contact, phone_number, service_type, service_order_number, how_many_service_order, service_star_time, service_end_time, demand_service_day, after_sales_technician, service_address, service_address_city, service_address_area, service_address_detail, sign_in, sign_in_time, sign_out, sign_out_time, is_solve_the_problem, scene_photo, customer_satisfaction, satisfaction_value, customer_comments_and_demands, submitter, submit_time, create_by, create_time, update_by, update_time, process_state, current_node, current_person_in_charge from service_ticket
</sql>
<select id="selectServiceTicketList" parameterType="ServiceTicket" resultMap="ServiceTicketResult">
<include refid="selectServiceTicketVo"/>
<where>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="customerName != null and customerName != ''"> and customer_name like concat('%', #{customerName}, '%')</if>
<if test="customerNumber != null and customerNumber != ''"> and customer_number = #{customerNumber}</if>
<if test="contractTitle != null and contractTitle != ''"> and contract_title = #{contractTitle}</if>
<if test="contractOrderNumber != null and contractOrderNumber != ''"> and contract_order_number = #{contractOrderNumber}</if>
<if test="customerContact != null and customerContact != ''"> and customer_contact = #{customerContact}</if>
<if test="phoneNumber != null and phoneNumber != ''"> and phone_number = #{phoneNumber}</if>
<if test="serviceType != null "> and service_type = #{serviceType}</if>
<if test="serviceOrderNumber != null and serviceOrderNumber != ''"> and service_order_number = #{serviceOrderNumber}</if>
<if test="howManyServiceOrder != null "> and how_many_service_order = #{howManyServiceOrder}</if>
<if test="serviceStarTime != null "> and service_star_time = #{serviceStarTime}</if>
<if test="serviceEndTime != null "> and service_end_time = #{serviceEndTime}</if>
<if test="demandServiceDay != null "> and demand_service_day = #{demandServiceDay}</if>
<if test="afterSalesTechnician != null and afterSalesTechnician != ''"> and after_sales_technician = #{afterSalesTechnician}</if>
<if test="serviceAddress != null and serviceAddress != ''"> and service_address = #{serviceAddress}</if>
<if test="serviceAddressCity != null and serviceAddressCity != ''"> and service_address_city = #{serviceAddressCity}</if>
<if test="serviceAddressArea != null and serviceAddressArea != ''"> and service_address_area = #{serviceAddressArea}</if>
<if test="serviceAddressDetail != null and serviceAddressDetail != ''"> and service_address_detail = #{serviceAddressDetail}</if>
<if test="signIn != null and signIn != ''"> and sign_in = #{signIn}</if>
<if test="signInTime != null "> and sign_in_time = #{signInTime}</if>
<if test="signOut != null and signOut != ''"> and sign_out = #{signOut}</if>
<if test="signOutTime != null "> and sign_out_time = #{signOutTime}</if>
<if test="isSolveTheProblem != null "> and is_solve_the_problem = #{isSolveTheProblem}</if>
<if test="scenePhoto != null and scenePhoto != ''"> and scene_photo = #{scenePhoto}</if>
<if test="customerSatisfaction != null "> and customer_satisfaction = #{customerSatisfaction}</if>
<if test="satisfactionValue != null "> and satisfaction_value = #{satisfactionValue}</if>
<if test="customerCommentsAndDemands != null and customerCommentsAndDemands != ''"> and customer_comments_and_demands = #{customerCommentsAndDemands}</if>
<if test="submitter != null and submitter != ''"> and submitter = #{submitter}</if>
<if test="submitTime != null "> and submit_time = #{submitTime}</if>
<if test="processState != null "> and process_state = #{processState}</if>
<if test="currentNode != null "> and current_node = #{currentNode}</if>
<if test="currentPersonInCharge != null and currentPersonInCharge != ''"> and current_person_in_charge = #{currentPersonInCharge}</if>
</where>
</select>
<select id="selectServiceTicketById" parameterType="Long" resultMap="ServiceTicketResult">
<include refid="selectServiceTicketVo"/>
where id = #{id}
</select>
<insert id="insertServiceTicket" parameterType="ServiceTicket" useGeneratedKeys="true" keyProperty="id">
insert into service_ticket
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="title != null">title,</if>
<if test="customerName != null">customer_name,</if>
<if test="customerNumber != null">customer_number,</if>
<if test="contractTitle != null">contract_title,</if>
<if test="contractOrderNumber != null">contract_order_number,</if>
<if test="customerContact != null">customer_contact,</if>
<if test="phoneNumber != null">phone_number,</if>
<if test="serviceType != null">service_type,</if>
<if test="serviceOrderNumber != null">service_order_number,</if>
<if test="howManyServiceOrder != null">how_many_service_order,</if>
<if test="serviceStarTime != null">service_star_time,</if>
<if test="serviceEndTime != null">service_end_time,</if>
<if test="demandServiceDay != null">demand_service_day,</if>
<if test="afterSalesTechnician != null">after_sales_technician,</if>
<if test="serviceAddress != null">service_address,</if>
<if test="serviceAddressCity != null">service_address_city,</if>
<if test="serviceAddressArea != null">service_address_area,</if>
<if test="serviceAddressDetail != null">service_address_detail,</if>
<if test="signIn != null">sign_in,</if>
<if test="signInTime != null">sign_in_time,</if>
<if test="signOut != null">sign_out,</if>
<if test="signOutTime != null">sign_out_time,</if>
<if test="isSolveTheProblem != null">is_solve_the_problem,</if>
<if test="scenePhoto != null">scene_photo,</if>
<if test="customerSatisfaction != null">customer_satisfaction,</if>
<if test="satisfactionValue != null">satisfaction_value,</if>
<if test="customerCommentsAndDemands != null">customer_comments_and_demands,</if>
<if test="submitter != null">submitter,</if>
<if test="submitTime != null">submit_time,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="processState != null">process_state,</if>
<if test="currentNode != null">current_node,</if>
<if test="currentPersonInCharge != null">current_person_in_charge,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="title != null">#{title},</if>
<if test="customerName != null">#{customerName},</if>
<if test="customerNumber != null">#{customerNumber},</if>
<if test="contractTitle != null">#{contractTitle},</if>
<if test="contractOrderNumber != null">#{contractOrderNumber},</if>
<if test="customerContact != null">#{customerContact},</if>
<if test="phoneNumber != null">#{phoneNumber},</if>
<if test="serviceType != null">#{serviceType},</if>
<if test="serviceOrderNumber != null">#{serviceOrderNumber},</if>
<if test="howManyServiceOrder != null">#{howManyServiceOrder},</if>
<if test="serviceStarTime != null">#{serviceStarTime},</if>
<if test="serviceEndTime != null">#{serviceEndTime},</if>
<if test="demandServiceDay != null">#{demandServiceDay},</if>
<if test="afterSalesTechnician != null">#{afterSalesTechnician},</if>
<if test="serviceAddress != null">#{serviceAddress},</if>
<if test="serviceAddressCity != null">#{serviceAddressCity},</if>
<if test="serviceAddressArea != null">#{serviceAddressArea},</if>
<if test="serviceAddressDetail != null">#{serviceAddressDetail},</if>
<if test="signIn != null">#{signIn},</if>
<if test="signInTime != null">#{signInTime},</if>
<if test="signOut != null">#{signOut},</if>
<if test="signOutTime != null">#{signOutTime},</if>
<if test="isSolveTheProblem != null">#{isSolveTheProblem},</if>
<if test="scenePhoto != null">#{scenePhoto},</if>
<if test="customerSatisfaction != null">#{customerSatisfaction},</if>
<if test="satisfactionValue != null">#{satisfactionValue},</if>
<if test="customerCommentsAndDemands != null">#{customerCommentsAndDemands},</if>
<if test="submitter != null">#{submitter},</if>
<if test="submitTime != null">#{submitTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="processState != null">#{processState},</if>
<if test="currentNode != null">#{currentNode},</if>
<if test="currentPersonInCharge != null">#{currentPersonInCharge},</if>
</trim>
</insert>
<update id="updateServiceTicket" parameterType="ServiceTicket">
update service_ticket
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">title = #{title},</if>
<if test="customerName != null">customer_name = #{customerName},</if>
<if test="customerNumber != null">customer_number = #{customerNumber},</if>
<if test="contractTitle != null">contract_title = #{contractTitle},</if>
<if test="contractOrderNumber != null">contract_order_number = #{contractOrderNumber},</if>
<if test="customerContact != null">customer_contact = #{customerContact},</if>
<if test="phoneNumber != null">phone_number = #{phoneNumber},</if>
<if test="serviceType != null">service_type = #{serviceType},</if>
<if test="serviceOrderNumber != null">service_order_number = #{serviceOrderNumber},</if>
<if test="howManyServiceOrder != null">how_many_service_order = #{howManyServiceOrder},</if>
<if test="serviceStarTime != null">service_star_time = #{serviceStarTime},</if>
<if test="serviceEndTime != null">service_end_time = #{serviceEndTime},</if>
<if test="demandServiceDay != null">demand_service_day = #{demandServiceDay},</if>
<if test="afterSalesTechnician != null">after_sales_technician = #{afterSalesTechnician},</if>
<if test="serviceAddress != null">service_address = #{serviceAddress},</if>
<if test="serviceAddressCity != null">service_address_city = #{serviceAddressCity},</if>
<if test="serviceAddressArea != null">service_address_area = #{serviceAddressArea},</if>
<if test="serviceAddressDetail != null">service_address_detail = #{serviceAddressDetail},</if>
<if test="signIn != null">sign_in = #{signIn},</if>
<if test="signInTime != null">sign_in_time = #{signInTime},</if>
<if test="signOut != null">sign_out = #{signOut},</if>
<if test="signOutTime != null">sign_out_time = #{signOutTime},</if>
<if test="isSolveTheProblem != null">is_solve_the_problem = #{isSolveTheProblem},</if>
<if test="scenePhoto != null">scene_photo = #{scenePhoto},</if>
<if test="customerSatisfaction != null">customer_satisfaction = #{customerSatisfaction},</if>
<if test="satisfactionValue != null">satisfaction_value = #{satisfactionValue},</if>
<if test="customerCommentsAndDemands != null">customer_comments_and_demands = #{customerCommentsAndDemands},</if>
<if test="submitter != null">submitter = #{submitter},</if>
<if test="submitTime != null">submit_time = #{submitTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="processState != null">process_state = #{processState},</if>
<if test="currentNode != null">current_node = #{currentNode},</if>
<if test="currentPersonInCharge != null">current_person_in_charge = #{currentPersonInCharge},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteServiceTicketById" parameterType="Long">
delete from service_ticket where id = #{id}
</delete>
<delete id="deleteServiceTicketByIds" parameterType="String">
delete from service_ticket where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询商机列表
export function listBusiness(query) {
return request({
url: '/system/business/list',
method: 'get',
params: query
})
}
// 查询商机详细
export function getBusiness(id) {
return request({
url: '/system/business/' + id,
method: 'get'
})
}
// 新增商机
export function addBusiness(data) {
return request({
url: '/system/business',
method: 'post',
data: data
})
}
// 修改商机
export function updateBusiness(data) {
return request({
url: '/system/business',
method: 'put',
data: data
})
}
// 删除商机
export function delBusiness(id) {
return request({
url: '/system/business/' + id,
method: 'delete'
})
}
// 自动添加一条跟进记录
export function addRecords(data) {
return request({
url: '/system/business/addRecords',
method: 'post',
data: data
})
}

View File

@ -18,6 +18,15 @@ export function listClues(query) {
})
}
//添加关联人
export function addAssociation(data) {
return request({
url: '/system/person',
method: 'post',
data: data
})
}
// 查询线索详细
export function getClues(id) {
return request({

View File

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询跟进记录列表
export function listComment(query) {
return request({
url: '/crm/comment/list',
url: '/system/record/list',
method: 'get',
params: query
})
@ -20,7 +20,7 @@ export function listCustomerComment(customerId) {
// 查询跟进记录详细
export function getComment(id) {
return request({
url: '/crm/comment/' + id,
url: '/system/record/' + id,
method: 'get'
})
}
@ -28,7 +28,7 @@ export function getComment(id) {
// 新增跟进记录
export function addComment(data) {
return request({
url: '/crm/comment',
url: '/system/record',
method: 'post',
data: data
})
@ -37,7 +37,7 @@ export function addComment(data) {
// 修改跟进记录
export function updateComment(data) {
return request({
url: '/crm/comment',
url: '/system/record',
method: 'put',
data: data
})
@ -46,7 +46,7 @@ export function updateComment(data) {
// 删除跟进记录
export function delComment(id) {
return request({
url: '/crm/comment/' + id,
url: '/system/record/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询联系人列表
export function listPerson(query) {
return request({
url: '/system/person/list',
method: 'get',
params: query
})
}
// 查询联系人详细
export function getPerson(id) {
return request({
url: '/system/person/' + id,
method: 'get'
})
}
// 新增联系人
export function addPerson(data) {
return request({
url: '/system/person',
method: 'post',
data: data
})
}
// 修改联系人
export function updatePerson(data) {
return request({
url: '/system/person',
method: 'put',
data: data
})
}
// 删除联系人
export function delPerson(id) {
return request({
url: '/system/person/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询跟进计划列表
export function listPlan(query) {
return request({
url: '/system/plan/list',
method: 'get',
params: query
})
}
// 查询跟进计划详细
export function getPlan(id) {
return request({
url: '/system/plan/' + id,
method: 'get'
})
}
// 新增跟进计划
export function addPlan(data) {
return request({
url: '/system/plan',
method: 'post',
data: data
})
}
// 修改跟进计划
export function updatePlan(data) {
return request({
url: '/system/plan',
method: 'put',
data: data
})
}
// 删除跟进计划
export function delPlan(id) {
return request({
url: '/system/plan/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询跟进记录列表
export function listRecord(query) {
return request({
url: '/system/record/list',
method: 'get',
params: query
})
}
// 查询跟进记录详细
export function getRecord(id) {
return request({
url: '/system/record/' + id,
method: 'get'
})
}
// 新增跟进记录
export function addRecord(data) {
return request({
url: '/system/record',
method: 'post',
data: data
})
}
// 修改跟进记录
export function updateRecord(data) {
return request({
url: '/system/record',
method: 'put',
data: data
})
}
// 删除跟进记录
export function delRecord(id) {
return request({
url: '/system/record/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询服务工单列表
export function listTicket(query) {
return request({
url: '/system/ticket/list',
method: 'get',
params: query
})
}
// 查询服务工单详细
export function getTicket(id) {
return request({
url: '/system/ticket/' + id,
method: 'get'
})
}
// 新增服务工单
export function addTicket(data) {
return request({
url: '/system/ticket',
method: 'post',
data: data
})
}
// 修改服务工单
export function updateTicket(data) {
return request({
url: '/system/ticket',
method: 'put',
data: data
})
}
// 删除服务工单
export function delTicket(id) {
return request({
url: '/system/ticket/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,766 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="标题" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入标题"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="关联客户" prop="customerId">-->
<!-- <el-input-->
<!-- v-model="queryParams.customerId"-->
<!-- placeholder="请输入关联客户"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="客户联系人" prop="customerLinkman">-->
<!-- <el-input-->
<!-- v-model="queryParams.customerLinkman"-->
<!-- placeholder="请输入客户联系人"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="客户名称" prop="customerName">-->
<!-- <el-input-->
<!-- v-model="queryParams.customerName"-->
<!-- placeholder="请输入客户名称"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="客户编号" prop="customerNumber">
<el-input
v-model="queryParams.customerNumber"
placeholder="请输入客户编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="商机名称" prop="businessName">-->
<!-- <el-input-->
<!-- v-model="queryParams.businessName"-->
<!-- placeholder="请输入商机名称"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="商机编号" prop="businessNumber">-->
<!-- <el-input-->
<!-- v-model="queryParams.businessNumber"-->
<!-- placeholder="请输入商机编号"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="销售阶段" prop="salesStage">
<el-select v-model="queryParams.salesStage" placeholder="请选择销售阶段" clearable>
<el-option
v-for="dict in dict.type.sales_stage"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="赢率" prop="probabilityOfWining">-->
<!-- <el-input-->
<!-- v-model="queryParams.probabilityOfWining"-->
<!-- placeholder="请输入赢率"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="阶段类型" prop="stageType">
<el-select v-model="queryParams.stageType" placeholder="请选择阶段类型" clearable>
<el-option
v-for="dict in dict.type.stage_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="负责人" prop="personInCharge">
<el-input
v-model="queryParams.personInCharge"
placeholder="请输入负责人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="归属部门" prop="belongingDepartment">-->
<!-- <el-input-->
<!-- v-model="queryParams.belongingDepartment"-->
<!-- placeholder="请输入归属部门"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="预测商机金额" prop="forecastBusinessPrice">-->
<!-- <el-input-->
<!-- v-model="queryParams.forecastBusinessPrice"-->
<!-- placeholder="请输入预测商机金额"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="预计成交日期" prop="forecastSuccessTime">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.forecastSuccessTime"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择预计成交日期">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="协作人" prop="collaborator">-->
<!-- <el-input-->
<!-- v-model="queryParams.collaborator"-->
<!-- placeholder="请输入协作人"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="最后跟进时间" prop="lastFollowUpTime">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.lastFollowUpTime"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择最后跟进时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="阶段变更时间" prop="phaseChangeTime">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.phaseChangeTime"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择阶段变更时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="提交人" prop="submitter">-->
<!-- <el-input-->
<!-- v-model="queryParams.submitter"-->
<!-- placeholder="请输入提交人"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="提交时间" prop="submitTime">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.submitTime"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择提交时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="删除标志" prop="isDelete">-->
<!-- <el-input-->
<!-- v-model="queryParams.isDelete"-->
<!-- placeholder="请输入删除标志"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:business:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:business:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:business:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['system:user:import']"
>导入</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:business:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table border v-loading="loading" :data="businessList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="标题" align="center" prop="title" />
<!-- <el-table-column label="关联客户" align="center" prop="customerId" />-->
<!-- <el-table-column label="客户联系人" align="center" prop="customerLinkman" />-->
<!-- <el-table-column label="客户名称" align="center" prop="customerName" />-->
<el-table-column label="客户编号" align="center" prop="customerNumber" />
<!-- <el-table-column label="商机名称" align="center" prop="businessName" />-->
<!-- <el-table-column label="商机编号" align="center" prop="businessNumber" />-->
<el-table-column label="销售阶段" align="center" prop="salesStage">
<template slot-scope="scope">
<dict-tag :options="dict.type.sales_stage" :value="scope.row.salesStage"/>
</template>
</el-table-column>
<!-- <el-table-column label="赢率" align="center" prop="probabilityOfWining" />-->
<el-table-column label="阶段类型" align="center" prop="stageType">
<template slot-scope="scope">
<dict-tag :options="dict.type.stage_type" :value="scope.row.stageType"/>
</template>
</el-table-column>
<!-- <el-table-column label="负责人" align="center" prop="personInCharge" />-->
<!-- <el-table-column label="归属部门" align="center" prop="belongingDepartment" />-->
<!-- <el-table-column label="商机明细" align="center" prop="businessDetail" />-->
<!-- <el-table-column label="预测商机金额" align="center" prop="forecastBusinessPrice" />-->
<el-table-column label="预计成交日期" align="center" prop="forecastSuccessTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.forecastSuccessTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="协作人" align="center" prop="collaborator" />-->
<el-table-column label="最后跟进时间" align="center" prop="lastFollowUpTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.lastFollowUpTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="阶段变更时间" align="center" prop="phaseChangeTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.phaseChangeTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="输单原因" align="center" prop="loseOrderCause" />-->
<!-- <el-table-column label="提交人" align="center" prop="submitter" />-->
<!-- <el-table-column label="提交时间" align="center" prop="submitTime" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.submitTime, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="备注" align="center" prop="remark" />-->
<!-- <el-table-column label="删除标志" align="center" prop="isDelete" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:business:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleAddAssociation(scope.row)"
v-hasPermi="['system:business:edit']"
>添加关联</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleDoVerify(scope.row)"
v-hasPermi="['system:business:edit']"
>确认</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:business:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改商机对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="关联客户" prop="customerId">
<el-input v-model="form.customerId" placeholder="请输入关联客户" />
</el-form-item>
<el-form-item label="客户联系人" prop="customerLinkman">
<el-input v-model="form.customerLinkman" placeholder="请输入客户联系人" />
</el-form-item>
<el-form-item label="客户名称" prop="customerName">
<el-input v-model="form.customerName" placeholder="请输入客户名称" />
</el-form-item>
<el-form-item label="客户编号" prop="customerNumber">
<el-input v-model="form.customerNumber" placeholder="请输入客户编号" />
</el-form-item>
<el-form-item label="商机名称" prop="businessName">
<el-input v-model="form.businessName" placeholder="请输入商机名称" />
</el-form-item>
<el-form-item label="商机编号" prop="businessNumber">
<el-input v-model="form.businessNumber" placeholder="请输入商机编号" />
</el-form-item>
<el-form-item label="销售阶段">
<el-radio-group v-model="form.salesStage">
<el-radio
v-for="dict in dict.type.sales_stage"
:key="dict.value"
:label="parseInt(dict.value)"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="赢率" prop="probabilityOfWining">
<el-input v-model="form.probabilityOfWining" placeholder="请输入赢率" />
</el-form-item>
<el-form-item label="阶段类型">
<el-radio-group v-model="form.stageType">
<el-radio
v-for="dict in dict.type.stage_type"
:key="dict.value"
:label="parseInt(dict.value)"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="负责人" prop="personInCharge">
<el-input v-model="form.personInCharge" placeholder="请输入负责人" />
</el-form-item>
<el-form-item label="归属部门" prop="belongingDepartment">
<el-input v-model="form.belongingDepartment" placeholder="请输入归属部门" />
</el-form-item>
<el-form-item label="商机明细" prop="businessDetail">
<el-input v-model="form.businessDetail" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="预测商机金额" prop="forecastBusinessPrice">
<el-input v-model="form.forecastBusinessPrice" placeholder="请输入预测商机金额" />
</el-form-item>
<el-form-item label="预计成交日期" prop="forecastSuccessTime">
<el-date-picker clearable
v-model="form.forecastSuccessTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择预计成交日期">
</el-date-picker>
</el-form-item>
<el-form-item label="协作人" prop="collaborator">
<el-input v-model="form.collaborator" placeholder="请输入协作人" />
</el-form-item>
<el-form-item label="最后跟进时间" prop="lastFollowUpTime">
<el-date-picker clearable
v-model="form.lastFollowUpTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择最后跟进时间">
</el-date-picker>
</el-form-item>
<el-form-item label="阶段变更时间" prop="phaseChangeTime">
<el-date-picker clearable
v-model="form.phaseChangeTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择阶段变更时间">
</el-date-picker>
</el-form-item>
<el-form-item label="输单原因" prop="loseOrderCause">
<el-input v-model="form.loseOrderCause" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="提交人" prop="submitter">
<el-input v-model="form.submitter" placeholder="请输入提交人" />
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="form.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="删除标志" prop="isDelete">
<el-input v-model="form.isDelete" placeholder="请输入删除标志" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<AddAssociationComponent v-if="addAssociation" ref="addAssociation" @close-dialog="handleAddAssociationClose" />
<el-dialog
:title="upload.title"
:visible.sync="upload.open"
width="400px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" />
是否更新已经存在的商机数据
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<el-link
type="primary"
:underline="false"
style="font-size: 12px; vertical-align: baseline"
@click="importTemplate"
>下载模板</el-link
>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listBusiness, getBusiness, delBusiness, addBusiness, updateBusiness, addRecords } from "@/api/crm/business";
import AddAssociationComponent from '../clues/AddAssociation';
import { getToken } from '@/utils/auth'
import {getTenant} from "../../../utils/auth";
export default {
name: "Business",
components: {
AddAssociationComponent
},
dicts: ['stage_type', 'sales_stage'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
businessList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
title: null,
customerId: null,
customerLinkman: null,
customerName: null,
customerNumber: null,
businessName: null,
businessNumber: null,
salesStage: '',
probabilityOfWining: null,
stageType: '',
personInCharge: null,
belongingDepartment: null,
businessDetail: null,
forecastBusinessPrice: null,
forecastSuccessTime: null,
collaborator: null,
lastFollowUpTime: null,
phaseChangeTime: null,
loseOrderCause: null,
submitter: null,
submitTime: null,
isDelete: null
},
//
verifyParams: {
id: null,
salesStage: null
},
//
form: {},
//
addRecordsParams: {
customerNumber: null,
title: '商机已确认',
followUpRecord: '客户已确认,即将报价',
followUpContent: '商机已确认,客户已确认,即将报价'
},
//
addAssociation: false,
//
upload: {
//
open: false,
//
title: '',
//
isUploading: false,
//
updateSupport: 0,
//
headers: { tenant: getTenant() ,Authorization: 'Bearer ' + getToken() },
//
url: process.env.VUE_APP_BASE_API + '/system/business/importData',
},
//
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询商机列表 */
getList() {
this.loading = true;
listBusiness(this.queryParams).then(response => {
this.businessList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
title: null,
customerId: null,
customerLinkman: null,
customerName: null,
customerNumber: null,
businessName: null,
businessNumber: null,
salesStage: 0,
probabilityOfWining: null,
stageType: 0,
personInCharge: null,
belongingDepartment: null,
businessDetail: null,
forecastBusinessPrice: null,
forecastSuccessTime: null,
collaborator: null,
lastFollowUpTime: null,
phaseChangeTime: null,
loseOrderCause: null,
submitter: null,
submitTime: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
isDelete: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加商机";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getBusiness(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改商机";
});
},
/** 添加联系人操作 */
handleAddAssociation(row) {
const id = row.id
this.addAssociation = true
this.$nextTick(() => {
this.$refs.addAssociation.open(id)
})
},
/** 确认操作 */
handleDoVerify(row) {
this.handleChange(row);
this.handleAddRecords(row);
},
/** 改变销售状态 */
handleChange(row) {
this.verifyParams.id = row.id
this.verifyParams.salesStage = 2
updateBusiness(this.verifyParams).then(response => {
this.$modal.msgSuccess("已确认");
this.getList();
});
},
/** 添加跟进记录 */
handleAddRecords(row) {
this.addRecordsParams.customerNumber = row.id
addRecords(this.addRecordsParams).then(response => {
});
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = '商机导入'
this.upload.open = true
},
/** 下载模板操作 */
importTemplate() {
this.download(
'system/business/importTemplate',
{},
`business__template_${new Date().getTime()}.xlsx`
)
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateBusiness(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addBusiness(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除商机编号为"' + ids + '"的数据项?').then(function() {
return delBusiness(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/business/export', {
...this.queryParams
}, `business_${new Date().getTime()}.xlsx`)
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false
this.upload.isUploading = false
this.$refs.upload.clearFiles()
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
'</div>',
'导入结果',
{ dangerouslyUseHTMLString: true }
)
this.getList()
},
//
submitFileForm() {
this.$refs.upload.submit()
},
handleAddAssociationClose () {
this.addAssociation = false;
this.getList();
}
}
};
</script>

View File

@ -0,0 +1,112 @@
<template>
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="openCustomer" :loading="loading" @close="handleClose" @open="handleOpen" width="680px" append-to-body>
<el-form ref="form" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="关联人姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入关联人姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phoneNumber">
<el-input v-model="form.phoneNumber" placeholder="请输入联系电话" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="微信号" prop="wxNumber">
<el-input v-model="form.wxNumber" placeholder="请输入联系人微信号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="mailNumber">
<el-input v-model="form.mailNumber" placeholder="请输入联系人邮箱" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="handleClose"> </el-button>
</div>
</el-dialog>
</template>
<script>
import {
addAssociation,
} from '@/api/crm/clues'
export default {
name: 'AddAssociationComponent',
dicts: [
'customer_rank',
'customer_status',
],
data () {
return {
//
loading: true,
//
title: '添加关联人',
//
openCustomer: false,
ownerList: undefined,
//
queryParams: {
},
//
form: {
name: '',
phoneNumber: '',
customerId: '',
wxNumber: '',
mailNumber: '',
mailNumber:''
},
//
// rules: {
// name: [
// { required: true, message: '', trigger: 'blur' },
// ],
// },
cluesId: undefined
}
},
created () {
// this.getOwnerList()
},
methods: {
// getCluesInfo () {
// getClues(this.cluesId).then((response) => {
// this.form = response.data;
// })
// },
open (id) {
this.cluesId = id;
this.openCustomer = true;
},
handleOpen () {
// this.getCluesInfo();
},
handleClose () {
this.form = {};
this.openCustomer = false
this.$emit("close-dialog");
},
/** 提交按钮 */
submitForm () {
this.form.customerId = this.cluesId
addAssociation(this.form).then((response) => {
this.$modal.msgSuccess('添加成功')
this.handleClose()
})
},
},
}
</script>

View File

@ -59,6 +59,7 @@
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-s-promotion" @click="handleTransfer(scope.row)" v-hasPermi="['crm:clues:transfer']">转移</el-button>
<el-button size="mini" type="text" icon="el-icon-refresh-left" @click="handleToCustomer(scope.row)" v-hasPermi="['crm:clues:tocustomer']">转成客户</el-button>
<el-button size="mini" type="text" icon="el-icon-refresh-left" @click="handleAddAssociation(scope.row)" v-hasPermi="['crm:clues:tocustomer']">添加关联</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['crm:clues:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['crm:clues:remove']">删除</el-button>
</template>
@ -97,6 +98,20 @@
</el-col>
</el-row>
<!-- 关联人信息-->
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="联系人" prop="linkman">-->
<!-- <el-input v-model="form.linkman" placeholder="请输入联系人" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="联系电话" prop="phone">-->
<!-- <el-input v-model="form.phone" placeholder="请输入联系电话" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="12">
<el-form-item label="线索来源" prop="cluesSource">
@ -126,6 +141,7 @@
<TransferCluesComponent v-if="transferClues" ref="transferClues" @close-dialog="handleTransferCluesClose" />
<ToCustomerComponent v-if="toCustomer" ref="toCustomer" @close-dialog="handleToCustomerClose" />
<AddAssociationComponent v-if="addAssociation" ref="addAssociation" @close-dialog="handleAddAssociationClose" />
</div>
</template>
@ -140,10 +156,12 @@ import {
import TransferCluesComponent from './Transfer'
import ToCustomerComponent from './ToCustomer'
import AddAssociationComponent from './AddAssociation'
export default {
name: 'Clues',
components: {
TransferCluesComponent,
AddAssociationComponent,
ToCustomerComponent
},
dicts: [
@ -209,6 +227,8 @@ export default {
},
transferClues: false,
toCustomer: false,
//
addAssociation: false,
}
},
created () {
@ -352,10 +372,24 @@ export default {
this.$refs.toCustomer.open(id)
})
},
//
handleAddAssociation (row) {
const id = row.id
this.addAssociation = true
this.$nextTick(() => {
this.$refs.addAssociation.open(id)
})
},
handleToCustomerClose () {
this.toCustomer = false;
this.getList();
},
handleAddAssociationClose () {
this.addAssociation = false;
this.getList();
},
},
}
</script>

View File

@ -59,6 +59,7 @@
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-s-promotion" @click="handleTransfer(scope.row)" v-hasPermi="['crm:clues:transfer']">转移</el-button>
<el-button size="mini" type="text" icon="el-icon-refresh-left" @click="handleToCustomer(scope.row)" v-hasPermi="['crm:clues:tocustomer']">转成客户</el-button>
<el-button size="mini" type="text" icon="el-icon-refresh-left" @click="handleAddAssociation(scope.row)" v-hasPermi="['crm:clues:tocustomer']">添加关联</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['crm:clues:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['crm:clues:remove']">删除</el-button>
</template>
@ -126,6 +127,7 @@
<TransferCluesComponent v-if="transferClues" ref="transferClues" @close-dialog="handleTransferCluesClose" />
<ToCustomerComponent v-if="toCustomer" ref="toCustomer" @close-dialog="handleToCustomerClose" />
<AddAssociationComponent v-if="addAssociation" ref="addAssociation" @close-dialog="handleAddAssociationClose" />
</div>
</template>
@ -140,11 +142,13 @@ import {
import TransferCluesComponent from './Transfer'
import ToCustomerComponent from './ToCustomer'
import AddAssociationComponent from './AddAssociation'
export default {
name: 'PersonClues',
components: {
TransferCluesComponent,
AddAssociationComponent,
ToCustomerComponent
},
dicts: [
@ -210,6 +214,8 @@ export default {
},
transferClues: false,
toCustomer: false,
//
addAssociation: false,
}
},
created () {
@ -353,6 +359,14 @@ export default {
this.$refs.toCustomer.open(id)
})
},
//
handleAddAssociation (row) {
const id = row.id
this.addAssociation = true
this.$nextTick(() => {
this.$refs.addAssociation.open(id)
})
},
handleToCustomerClose () {
this.toCustomer = false;
this.getList();

View File

@ -10,8 +10,8 @@
<el-form-item label="跟进内容" prop="content">
<el-input type="textarea" v-model="form.content" :autosize="{ minRows: 2, maxRows: 4}" />
</el-form-item>
<el-form-item label="下次跟进时间" prop="nextFollowupTime">
<el-date-picker clearable size="small" v-model="form.nextFollowupTime" :picker-options="nextFollowTimePicker" type="date" value-format="yyyy-MM-dd" placeholder="选择下次跟进时间">
<el-form-item label="下次跟进时间" prop="followUpTime">
<el-date-picker clearable size="small" v-model="form.followUpTime" :picker-options="nextFollowTimePicker" type="date" value-format="yyyy-MM-dd" placeholder="选择下次跟进时间">
</el-date-picker>
</el-form-item>
</el-form>
@ -47,9 +47,9 @@ export default {
},
//
form: {
customerId: undefined,
content: undefined,
nextFollowupTime: undefined
customerId: '',
content: '',
followUpTime: undefined
},
//
rules: {
@ -80,9 +80,9 @@ export default {
},
handleClose () {
this.form = {
customerId: undefined,
content: undefined,
nextFollowupTime: undefined
customerId: '',
content: '',
followUpTime: undefined
}
this.openComment = false
this.$emit("close-dialog");
@ -90,7 +90,9 @@ export default {
/** 提交按钮 */
submitForm () {
this.$refs['form'].validate((valid) => {
console.log(this.form,'form')
if (valid) {
console.log(this.form,'form')
addComment(this.form).then((response) => {
this.$modal.msgSuccess('保存成功')
this.handleClose()

View File

@ -0,0 +1,492 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<!-- <el-form-item label="标题" prop="title">-->
<!-- <el-input-->
<!-- v-model="queryParams.title"-->
<!-- placeholder="请输入标题"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="姓名" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="手机号" prop="phoneNumber">
<el-input
v-model="queryParams.phoneNumber"
placeholder="请输入手机号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="关联客户" prop="customerId">-->
<!-- <el-input-->
<!-- v-model="queryParams.customerId"-->
<!-- placeholder="请输入关联客户"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="客户编号" prop="customerNumber">-->
<!-- <el-input-->
<!-- v-model="queryParams.customerNumber"-->
<!-- placeholder="请输入客户编号"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="部门" prop="dep">-->
<!-- <el-input-->
<!-- v-model="queryParams.dep"-->
<!-- placeholder="请输入部门"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="职务" prop="job">-->
<!-- <el-input-->
<!-- v-model="queryParams.job"-->
<!-- placeholder="请输入职务"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="微信号" prop="wxNumber">
<el-input
v-model="queryParams.wxNumber"
placeholder="请输入微信号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="邮箱" prop="mailNumber">
<el-input
v-model="queryParams.mailNumber"
placeholder="请输入邮箱"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="是否关键决策人" prop="isKey">
<el-select v-model="queryParams.isKey" placeholder="请选择是否关键决策人" clearable>
<el-option
v-for="dict in dict.type.is_key"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="负责人" prop="personInCharge">-->
<!-- <el-input-->
<!-- v-model="queryParams.personInCharge"-->
<!-- placeholder="请输入负责人"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="归属部门" prop="belongingDepartment">-->
<!-- <el-input-->
<!-- v-model="queryParams.belongingDepartment"-->
<!-- placeholder="请输入归属部门"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="协作人" prop="collaborator">-->
<!-- <el-input-->
<!-- v-model="queryParams.collaborator"-->
<!-- placeholder="请输入协作人"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="提交人" prop="submitter">-->
<!-- <el-input-->
<!-- v-model="queryParams.submitter"-->
<!-- placeholder="请输入提交人"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="提交时间" prop="submitTime">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.submitTime"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择提交时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="删除标志" prop="isDelete">-->
<!-- <el-input-->
<!-- v-model="queryParams.isDelete"-->
<!-- placeholder="请输入删除标志"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:person:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:person:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:person:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:person:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table border v-loading="loading" :data="personList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="编号" align="center" prop="id" />
<!-- <el-table-column label="标题" align="center" prop="title" />-->
<el-table-column label="姓名" align="center" prop="name" />
<el-table-column label="手机号" align="center" prop="phoneNumber" />
<!-- <el-table-column label="关联客户" align="center" prop="customerId" />-->
<!-- <el-table-column label="客户编号" align="center" prop="customerNumber" />-->
<!-- <el-table-column label="部门" align="center" prop="dep" />-->
<!-- <el-table-column label="职务" align="center" prop="job" />-->
<el-table-column label="微信号" align="center" prop="wxNumber" />
<el-table-column label="邮箱" align="center" prop="mailNumber" />
<el-table-column label="是否关键决策人" align="center" prop="isKey">
<template slot-scope="scope">
<dict-tag :options="dict.type.is_key" :value="scope.row.isKey"/>
</template>
</el-table-column>
<!-- <el-table-column label="联系人详情" align="center" prop="contactPersonDetail" />-->
<!-- <el-table-column label="负责人" align="center" prop="personInCharge" />-->
<!-- <el-table-column label="归属部门" align="center" prop="belongingDepartment" />-->
<!-- <el-table-column label="协作人" align="center" prop="collaborator" />-->
<!-- <el-table-column label="提交人" align="center" prop="submitter" />-->
<!-- <el-table-column label="提交时间" align="center" prop="submitTime" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.submitTime, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="备注" align="center" prop="remark" />-->
<!-- <el-table-column label="删除标志" align="center" prop="isDelete" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:person:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:person:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改联系人对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="手机号" prop="phoneNumber">
<el-input v-model="form.phoneNumber" placeholder="请输入手机号" />
</el-form-item>
<el-form-item label="关联客户" prop="customerId">
<el-input v-model="form.customerId" placeholder="请输入关联客户" />
</el-form-item>
<el-form-item label="客户编号" prop="customerNumber">
<el-input v-model="form.customerNumber" placeholder="请输入客户编号" />
</el-form-item>
<el-form-item label="部门" prop="dep">
<el-input v-model="form.dep" placeholder="请输入部门" />
</el-form-item>
<el-form-item label="职务" prop="job">
<el-input v-model="form.job" placeholder="请输入职务" />
</el-form-item>
<el-form-item label="微信号" prop="wxNumber">
<el-input v-model="form.wxNumber" placeholder="请输入微信号" />
</el-form-item>
<el-form-item label="邮箱" prop="mailNumber">
<el-input v-model="form.mailNumber" placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="是否关键决策人">
<el-radio-group v-model="form.isKey">
<el-radio
v-for="dict in dict.type.is_key"
:key="dict.value"
:label="parseInt(dict.value)"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="联系人详情" prop="contactPersonDetail">
<el-input v-model="form.contactPersonDetail" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="负责人" prop="personInCharge">
<el-input v-model="form.personInCharge" placeholder="请输入负责人" />
</el-form-item>
<el-form-item label="归属部门" prop="belongingDepartment">
<el-input v-model="form.belongingDepartment" placeholder="请输入归属部门" />
</el-form-item>
<el-form-item label="协作人" prop="collaborator">
<el-input v-model="form.collaborator" placeholder="请输入协作人" />
</el-form-item>
<el-form-item label="提交人" prop="submitter">
<el-input v-model="form.submitter" placeholder="请输入提交人" />
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="form.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<!-- <el-form-item label="删除标志" prop="isDelete">-->
<!-- <el-input v-model="form.isDelete" placeholder="请输入删除标志" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPerson, getPerson, delPerson, addPerson, updatePerson } from "@/api/crm/person";
export default {
name: "Person",
dicts: ['is_key'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
personList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
title: null,
name: null,
phoneNumber: null,
customerId: null,
customerNumber: null,
dep: null,
job: null,
wxNumber: null,
mailNumber: null,
isKey: '',
contactPersonDetail: null,
personInCharge: null,
belongingDepartment: null,
collaborator: null,
submitter: null,
submitTime: null,
isDelete: null
},
//
form: {},
//
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询联系人列表 */
getList() {
this.loading = true;
listPerson(this.queryParams).then(response => {
this.personList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
title: null,
name: null,
phoneNumber: null,
customerId: null,
customerNumber: null,
dep: null,
job: null,
wxNumber: null,
mailNumber: null,
isKey: 0,
contactPersonDetail: null,
personInCharge: null,
belongingDepartment: null,
collaborator: null,
submitter: null,
submitTime: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
isDelete: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加联系人";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getPerson(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改联系人";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updatePerson(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPerson(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除联系人编号为"' + ids + '"的数据项?').then(function() {
return delPerson(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/person/export', {
...this.queryParams
}, `person_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -0,0 +1,404 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="标题" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入标题"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="跟进客户" prop="customer">
<el-input
v-model="queryParams.customer"
placeholder="请输入跟进客户"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="跟进时间" prop="planTime">
<el-date-picker clearable
v-model="queryParams.planTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择跟进时间">
</el-date-picker>
</el-form-item>
<el-form-item label="跟进执行人" prop="planExecutor">
<el-input
v-model="queryParams.planExecutor"
placeholder="请输入跟进执行人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="归属部门" prop="belongingDepartment">-->
<!-- <el-input-->
<!-- v-model="queryParams.belongingDepartment"-->
<!-- placeholder="请输入归属部门"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="计划状态" prop="planStatus">
<el-select v-model="queryParams.planStatus" placeholder="请选择计划状态" clearable>
<el-option
v-for="dict in dict.type.plan_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="提交人" prop="submitter">
<el-input
v-model="queryParams.submitter"
placeholder="请输入提交人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="queryParams.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<!-- <el-form-item label="是否删除" prop="isDelete">-->
<!-- <el-input-->
<!-- v-model="queryParams.isDelete"-->
<!-- placeholder="请输入是否删除"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:plan:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:plan:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:plan:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:plan:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table border v-loading="loading" :data="planList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="计划内容" align="center" prop="planContent" />
<!-- <el-table-column label="跟进客户" align="center" prop="customer" />-->
<el-table-column label="跟进时间" align="center" prop="planTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.planTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="跟进执行人" align="center" prop="planExecutor" />
<!-- <el-table-column label="归属部门" align="center" prop="belongingDepartment" />-->
<el-table-column label="计划状态" align="center" prop="planStatus">
<template slot-scope="scope">
<dict-tag :options="dict.type.plan_status" :value="scope.row.planStatus"/>
</template>
</el-table-column>
<!-- <el-table-column label="提交人" align="center" prop="submitter" />-->
<!-- <el-table-column label="提交时间" align="center" prop="submitTime" width="180">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.submitTime, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="备注" align="center" prop="remark" />-->
<!-- <el-table-column label="是否删除" align="center" prop="isDelete" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:plan:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:plan:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改跟进计划对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="计划内容">
<editor v-model="form.planContent" :min-height="192"/>
</el-form-item>
<el-form-item label="跟进客户" prop="customer">
<el-input v-model="form.customer" placeholder="请输入跟进客户" />
</el-form-item>
<el-form-item label="跟进时间" prop="planTime">
<el-date-picker clearable
v-model="form.planTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择跟进时间">
</el-date-picker>
</el-form-item>
<el-form-item label="跟进执行人" prop="planExecutor">
<el-input v-model="form.planExecutor" placeholder="请输入跟进执行人" />
</el-form-item>
<!-- <el-form-item label="归属部门" prop="belongingDepartment">-->
<!-- <el-input v-model="form.belongingDepartment" placeholder="请输入归属部门" />-->
<!-- </el-form-item>-->
<el-form-item label="计划状态" prop="planStatus">
<el-select v-model="form.planStatus" placeholder="请选择计划状态">
<el-option
v-for="dict in dict.type.plan_status"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="提交人" prop="submitter">
<el-input v-model="form.submitter" placeholder="请输入提交人" />
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="form.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<!-- <el-form-item label="是否删除" prop="isDelete">-->
<!-- <el-input v-model="form.isDelete" placeholder="请输入是否删除" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPlan, getPlan, delPlan, addPlan, updatePlan } from "@/api/crm/plan";
export default {
name: "Plan",
dicts: ['plan_status'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
planList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
title: null,
planContent: null,
customer: null,
planTime: null,
planExecutor: null,
belongingDepartment: null,
planStatus: '',
submitter: null,
submitTime: null,
isDelete: null
},
//
form: {},
//
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询跟进计划列表 */
getList() {
this.loading = true;
listPlan(this.queryParams).then(response => {
this.planList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
title: null,
planContent: null,
customer: null,
planTime: null,
planExecutor: null,
belongingDepartment: null,
planStatus: null,
submitter: null,
submitTime: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
isDelete: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加跟进计划";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getPlan(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改跟进计划";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updatePlan(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPlan(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除跟进计划编号为"' + ids + '"的数据项?').then(function() {
return delPlan(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/plan/export', {
...this.queryParams
}, `plan_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -18,7 +18,7 @@
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="customerList" @selection-change="handleSelectionChange">
<el-table border v-loading="loading" :data="customerList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="客户名称" align="left" prop="name" />
<el-table-column label="客户级别" align="left" prop="customerRank">

View File

@ -0,0 +1,458 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="标题" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入标题"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="跟进主体" prop="followUpSubject">
<el-input
v-model="queryParams.followUpSubject"
placeholder="请输入跟进主体"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="客户编号" prop="customerNumber">
<el-input
v-model="queryParams.customerNumber"
placeholder="请输入客户编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商机编号" prop="opportunityNumber">
<el-input
v-model="queryParams.opportunityNumber"
placeholder="请输入商机编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="联系人" prop="contactPeople">
<el-input
v-model="queryParams.contactPeople"
placeholder="请输入联系人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="跟进方式" prop="followUpType">
<el-select v-model="queryParams.followUpType" placeholder="请选择跟进方式" clearable>
<el-option
v-for="dict in dict.type.follow_up_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="下次跟进" prop="followUpTime">
<el-date-picker clearable
v-model="queryParams.followUpTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择跟进时间">
</el-date-picker>
</el-form-item>
<el-form-item label="跟进人" prop="followUpPeople">
<el-input
v-model="queryParams.followUpPeople"
placeholder="请输入跟进人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="归属部门" prop="belongingDepartment">-->
<!-- <el-input-->
<!-- v-model="queryParams.belongingDepartment"-->
<!-- placeholder="请输入归属部门"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="提交人" prop="submitter">
<el-input
v-model="queryParams.submitter"
placeholder="请输入提交人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="queryParams.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<!-- <el-form-item label="是否删除" prop="customerId">-->
<!-- <el-input-->
<!-- v-model="queryParams.customerId"-->
<!-- placeholder="请输入是否删除"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:record:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:record:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:record:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:record:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table border v-loading="loading" :data="recordList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="跟进记录" align="center" prop="followUpRecord" />
<el-table-column label="跟进主体" align="center" prop="followUpSubject" />
<el-table-column label="客户编号" align="center" prop="customerNumber" />
<el-table-column label="跟进商机" align="center" prop="followUpBusinessOpportunities" />
<el-table-column label="商机编号" align="center" prop="opportunityNumber" />
<el-table-column label="联系人" align="center" prop="contactPeople" />
<el-table-column label="跟进方式" align="center" prop="followUpType">
<template slot-scope="scope">
<dict-tag :options="dict.type.follow_up_type" :value="scope.row.followUpType"/>
</template>
</el-table-column>
<el-table-column label="跟进内容" align="center" prop="content" />
<el-table-column label="下次跟进" align="center" prop="followUpTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.followUpTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="跟进人" align="center" prop="followUpPeople" />
<!-- <el-table-column label="归属部门" align="center" prop="belongingDepartment" />-->
<el-table-column label="提交人" align="center" prop="submitter" />
<el-table-column label="提交时间" align="center" prop="submitTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.submitTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<!-- <el-table-column label="是否删除" align="center" prop="customerId" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:record:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:record:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改跟进记录对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="跟进记录" prop="followUpRecord">
<el-input v-model="form.followUpRecord" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="跟进主体" prop="followUpSubject">
<el-input v-model="form.followUpSubject" placeholder="请输入跟进主体" />
</el-form-item>
<el-form-item label="客户编号" prop="customerNumber">
<el-input v-model="form.customerNumber" placeholder="请输入客户编号" />
</el-form-item>
<el-form-item label="跟进商机" prop="followUpBusinessOpportunities">
<el-input v-model="form.followUpBusinessOpportunities" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="商机编号" prop="opportunityNumber">
<el-input v-model="form.opportunityNumber" placeholder="请输入商机编号" />
</el-form-item>
<el-form-item label="联系人" prop="contactPeople">
<el-input v-model="form.contactPeople" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="跟进方式" prop="followUpType">
<el-select v-model="form.followUpType" placeholder="请选择跟进方式">
<el-option
v-for="dict in dict.type.follow_up_type"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="跟进内容">
<editor v-model="form.content" :min-height="192"/>
</el-form-item>
<el-form-item label="下次跟进" prop="followUpTime">
<el-date-picker clearable
v-model="form.followUpTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择跟进时间">
</el-date-picker>
</el-form-item>
<el-form-item label="跟进人" prop="followUpPeople">
<el-input v-model="form.followUpPeople" placeholder="请输入跟进人" />
</el-form-item>
<!-- <el-form-item label="归属部门" prop="belongingDepartment">-->
<!-- <el-input v-model="form.belongingDepartment" placeholder="请输入归属部门" />-->
<!-- </el-form-item>-->
<el-form-item label="提交人" prop="submitter">
<el-input v-model="form.submitter" placeholder="请输入提交人" />
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="form.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
<!-- <el-form-item label="是否删除" prop="customerId">-->
<!-- <el-input v-model="form.customerId" placeholder="请输入是否删除" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listRecord, getRecord, delRecord, addRecord, updateRecord } from "@/api/crm/record";
export default {
name: "Record",
dicts: ['follow_up_type'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
recordList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
title: null,
followUpRecord: null,
followUpSubject: null,
customerNumber: null,
followUpBusinessOpportunities: null,
opportunityNumber: null,
contactPeople: null,
followUpType: '',
content: null,
followUpTime: null,
followUpPeople: null,
belongingDepartment: null,
submitter: null,
submitTime: null,
customerId: null
},
//
form: {},
//
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询跟进记录列表 */
getList() {
this.loading = true;
listRecord(this.queryParams).then(response => {
this.recordList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
title: null,
followUpRecord: null,
followUpSubject: null,
customerNumber: null,
followUpBusinessOpportunities: null,
opportunityNumber: null,
contactPeople: null,
followUpType: null,
content: null,
followUpTime: null,
followUpPeople: null,
belongingDepartment: null,
submitter: null,
submitTime: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
customerId: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加跟进记录";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getRecord(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改跟进记录";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateRecord(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addRecord(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除跟进记录编号为"' + ids + '"的数据项?').then(function() {
return delRecord(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/record/export', {
...this.queryParams
}, `record_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -0,0 +1,789 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="标题" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入标题"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="客户姓名" prop="customerName">
<el-input
v-model="queryParams.customerName"
placeholder="请输入客户姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="客户编号" prop="customerNumber">
<el-input
v-model="queryParams.customerNumber"
placeholder="请输入客户编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="合同标题" prop="contractTitle">
<el-input
v-model="queryParams.contractTitle"
placeholder="请输入合同标题"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="合同订单编号" prop="contractOrderNumber">
<el-input
v-model="queryParams.contractOrderNumber"
placeholder="请输入合同订单编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="客户联系人" prop="customerContact">
<el-input
v-model="queryParams.customerContact"
placeholder="请输入客户联系人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="手机号" prop="phoneNumber">
<el-input
v-model="queryParams.phoneNumber"
placeholder="请输入手机号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="服务类型" prop="serviceType">
<el-select v-model="queryParams.serviceType" placeholder="请选择服务类型" clearable>
<el-option
v-for="dict in dict.type.service_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="服务单号" prop="serviceOrderNumber">
<el-input
v-model="queryParams.serviceOrderNumber"
placeholder="请输入服务单号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第几个服务单" prop="howManyServiceOrder">
<el-input
v-model="queryParams.howManyServiceOrder"
placeholder="请输入第几个服务单"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="服务开始时间" prop="serviceStarTime">
<el-date-picker clearable
v-model="queryParams.serviceStarTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择服务开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="服务结束时间" prop="serviceEndTime">
<el-date-picker clearable
v-model="queryParams.serviceEndTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择服务结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="服务需求天数" prop="demandServiceDay">
<el-input
v-model="queryParams.demandServiceDay"
placeholder="请输入服务需求天数"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="售后技术人员" prop="afterSalesTechnician">
<el-input
v-model="queryParams.afterSalesTechnician"
placeholder="请输入售后技术人员"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="服务地址(省/自治区/直辖市)" prop="serviceAddress">
<el-input
v-model="queryParams.serviceAddress"
placeholder="请输入服务地址(省/自治区/直辖市)"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="服务地址(市)" prop="serviceAddressCity">-->
<!-- <el-input-->
<!-- v-model="queryParams.serviceAddressCity"-->
<!-- placeholder="请输入服务地址(市)"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="服务地址(区)" prop="serviceAddressArea">-->
<!-- <el-input-->
<!-- v-model="queryParams.serviceAddressArea"-->
<!-- placeholder="请输入服务地址(区)"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="服务地址(详细地址)" prop="serviceAddressDetail">
<el-input
v-model="queryParams.serviceAddressDetail"
placeholder="请输入服务地址(详细地址)"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="签到" prop="signIn">
<el-input
v-model="queryParams.signIn"
placeholder="请输入签到"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="签到时间" prop="signInTime">
<el-date-picker clearable
v-model="queryParams.signInTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择签到时间">
</el-date-picker>
</el-form-item>
<el-form-item label="签退" prop="signOut">
<el-input
v-model="queryParams.signOut"
placeholder="请输入签退"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="签退时间" prop="signOutTime">
<el-date-picker clearable
v-model="queryParams.signOutTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择签退时间">
</el-date-picker>
</el-form-item>
<el-form-item label="是否解决问题" prop="isSolveTheProblem">
<el-select v-model="queryParams.isSolveTheProblem" placeholder="请选择是否解决问题" clearable>
<el-option
v-for="dict in dict.type.is_solve_the_problem"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="现场照片" prop="scenePhoto">-->
<!-- <el-input-->
<!-- v-model="queryParams.scenePhoto"-->
<!-- placeholder="请输入现场照片"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="客户满意度" prop="customerSatisfaction">
<el-select v-model="queryParams.customerSatisfaction" placeholder="请选择客户满意度" clearable>
<el-option
v-for="dict in dict.type.customer_satisfaction"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="满意度数值" prop="satisfactionValue">
<el-input
v-model="queryParams.satisfactionValue"
placeholder="请输入满意度数值"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="提交人" prop="submitter">
<el-input
v-model="queryParams.submitter"
placeholder="请输入提交人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="queryParams.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<el-form-item label="流程状态" prop="processState">
<el-select v-model="queryParams.processState" placeholder="请选择流程状态" clearable>
<el-option
v-for="dict in dict.type.process_state"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="当前节点" prop="currentNode">
<el-select v-model="queryParams.currentNode" placeholder="请选择当前节点" clearable>
<el-option
v-for="dict in dict.type.current_node"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="当前负责人" prop="currentPersonInCharge">
<el-input
v-model="queryParams.currentPersonInCharge"
placeholder="请输入当前负责人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:ticket:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:ticket:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:ticket:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:ticket:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table border v-loading="loading" :data="ticketList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="客户姓名" align="center" prop="customerName" />
<el-table-column label="客户编号" align="center" prop="customerNumber" />
<el-table-column label="合同标题" align="center" prop="contractTitle" />
<el-table-column label="合同订单编号" align="center" prop="contractOrderNumber" />
<el-table-column label="客户联系人" align="center" prop="customerContact" />
<el-table-column label="手机号" align="center" prop="phoneNumber" />
<el-table-column label="服务类型" align="center" prop="serviceType">
<template slot-scope="scope">
<dict-tag :options="dict.type.service_type" :value="scope.row.serviceType"/>
</template>
</el-table-column>
<el-table-column label="服务单号" align="center" prop="serviceOrderNumber" />
<el-table-column label="第几个服务单" align="center" prop="howManyServiceOrder" />
<el-table-column label="服务开始时间" align="center" prop="serviceStarTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.serviceStarTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="服务结束时间" align="center" prop="serviceEndTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.serviceEndTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="服务需求天数" align="center" prop="demandServiceDay" />
<el-table-column label="售后技术人员" align="center" prop="afterSalesTechnician" />
<el-table-column label="服务地址(省/自治区/直辖市)" align="center" prop="serviceAddress" />
<!-- <el-table-column label="服务地址(市)" align="center" prop="serviceAddressCity" />-->
<!-- <el-table-column label="服务地址(区)" align="center" prop="serviceAddressArea" />-->
<el-table-column label="服务地址(详细地址)" align="center" prop="serviceAddressDetail" />
<el-table-column label="签到" align="center" prop="signIn" />
<el-table-column label="签到时间" align="center" prop="signInTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.signInTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="签退" align="center" prop="signOut" />
<el-table-column label="签退时间" align="center" prop="signOutTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.signOutTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="是否解决问题" align="center" prop="isSolveTheProblem">
<template slot-scope="scope">
<dict-tag :options="dict.type.is_solve_the_problem" :value="scope.row.isSolveTheProblem"/>
</template>
</el-table-column>
<el-table-column label="现场照片" align="center" prop="scenePhoto" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.scenePhoto" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="客户满意度" align="center" prop="customerSatisfaction">
<template slot-scope="scope">
<dict-tag :options="dict.type.customer_satisfaction" :value="scope.row.customerSatisfaction"/>
</template>
</el-table-column>
<el-table-column label="满意度数值" align="center" prop="satisfactionValue" />
<el-table-column label="客户意见与诉求" align="center" prop="customerCommentsAndDemands" />
<el-table-column label="提交人" align="center" prop="submitter" />
<el-table-column label="提交时间" align="center" prop="submitTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.submitTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="流程状态" align="center" prop="processState">
<template slot-scope="scope">
<dict-tag :options="dict.type.process_state" :value="scope.row.processState"/>
</template>
</el-table-column>
<el-table-column label="当前节点" align="center" prop="currentNode">
<template slot-scope="scope">
<dict-tag :options="dict.type.current_node" :value="scope.row.currentNode"/>
</template>
</el-table-column>
<el-table-column label="当前负责人" align="center" prop="currentPersonInCharge" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:ticket:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:ticket:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改服务工单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="客户姓名" prop="customerName">
<el-input v-model="form.customerName" placeholder="请输入客户姓名" />
</el-form-item>
<el-form-item label="客户编号" prop="customerNumber">
<el-input v-model="form.customerNumber" placeholder="请输入客户编号" />
</el-form-item>
<el-form-item label="合同标题" prop="contractTitle">
<el-input v-model="form.contractTitle" placeholder="请输入合同标题" />
</el-form-item>
<el-form-item label="合同订单编号" prop="contractOrderNumber">
<el-input v-model="form.contractOrderNumber" placeholder="请输入合同订单编号" />
</el-form-item>
<el-form-item label="客户联系人" prop="customerContact">
<el-input v-model="form.customerContact" placeholder="请输入客户联系人" />
</el-form-item>
<el-form-item label="手机号" prop="phoneNumber">
<el-input v-model="form.phoneNumber" placeholder="请输入手机号" />
</el-form-item>
<el-form-item label="服务类型" prop="serviceType">
<el-select v-model="form.serviceType" placeholder="请选择服务类型">
<el-option
v-for="dict in dict.type.service_type"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="服务单号" prop="serviceOrderNumber">
<el-input v-model="form.serviceOrderNumber" placeholder="请输入服务单号" />
</el-form-item>
<el-form-item label="第几个服务单" prop="howManyServiceOrder">
<el-input v-model="form.howManyServiceOrder" placeholder="请输入第几个服务单" />
</el-form-item>
<el-form-item label="服务开始时间" prop="serviceStarTime">
<el-date-picker clearable
v-model="form.serviceStarTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择服务开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="服务结束时间" prop="serviceEndTime">
<el-date-picker clearable
v-model="form.serviceEndTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择服务结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="服务需求天数" prop="demandServiceDay">
<el-input v-model="form.demandServiceDay" placeholder="请输入服务需求天数" />
</el-form-item>
<el-form-item label="售后技术人员" prop="afterSalesTechnician">
<el-input v-model="form.afterSalesTechnician" placeholder="请输入售后技术人员" />
</el-form-item>
<el-form-item label="服务地址(省/自治区/直辖市)" prop="serviceAddress">
<el-input v-model="form.serviceAddress" placeholder="请输入服务地址(省/自治区/直辖市)" />
</el-form-item>
<el-form-item label="服务地址(市)" prop="serviceAddressCity">
<el-input v-model="form.serviceAddressCity" placeholder="请输入服务地址(市)" />
</el-form-item>
<el-form-item label="服务地址(区)" prop="serviceAddressArea">
<el-input v-model="form.serviceAddressArea" placeholder="请输入服务地址(区)" />
</el-form-item>
<el-form-item label="服务地址(详细地址)" prop="serviceAddressDetail">
<el-input v-model="form.serviceAddressDetail" placeholder="请输入服务地址(详细地址)" />
</el-form-item>
<el-form-item label="签到" prop="signIn">
<el-input v-model="form.signIn" placeholder="请输入签到" />
</el-form-item>
<el-form-item label="签到时间" prop="signInTime">
<el-date-picker clearable
v-model="form.signInTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择签到时间">
</el-date-picker>
</el-form-item>
<el-form-item label="签退" prop="signOut">
<el-input v-model="form.signOut" placeholder="请输入签退" />
</el-form-item>
<el-form-item label="签退时间" prop="signOutTime">
<el-date-picker clearable
v-model="form.signOutTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择签退时间">
</el-date-picker>
</el-form-item>
<el-form-item label="是否解决问题">
<el-radio-group v-model="form.isSolveTheProblem">
<el-radio
v-for="dict in dict.type.is_solve_the_problem"
:key="dict.value"
:label="parseInt(dict.value)"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="现场照片">
<image-upload v-model="form.scenePhoto"/>
</el-form-item>
<el-form-item label="客户满意度" prop="customerSatisfaction">
<el-select v-model="form.customerSatisfaction" placeholder="请选择客户满意度">
<el-option
v-for="dict in dict.type.customer_satisfaction"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="满意度数值" prop="satisfactionValue">
<el-input v-model="form.satisfactionValue" placeholder="请输入满意度数值" />
</el-form-item>
<el-form-item label="客户意见与诉求" prop="customerCommentsAndDemands">
<el-input v-model="form.customerCommentsAndDemands" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="提交人" prop="submitter">
<el-input v-model="form.submitter" placeholder="请输入提交人" />
</el-form-item>
<el-form-item label="提交时间" prop="submitTime">
<el-date-picker clearable
v-model="form.submitTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择提交时间">
</el-date-picker>
</el-form-item>
<el-form-item label="流程状态" prop="processState">
<el-select v-model="form.processState" placeholder="请选择流程状态">
<el-option
v-for="dict in dict.type.process_state"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="当前节点" prop="currentNode">
<el-select v-model="form.currentNode" placeholder="请选择当前节点">
<el-option
v-for="dict in dict.type.current_node"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="当前负责人" prop="currentPersonInCharge">
<el-input v-model="form.currentPersonInCharge" placeholder="请输入当前负责人" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listTicket, getTicket, delTicket, addTicket, updateTicket } from "@/api/crm/ticket";
export default {
name: "Ticket",
dicts: ['customer_satisfaction', 'service_type', 'is_solve_the_problem', 'current_node', 'process_state'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
ticketList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
title: null,
customerName: null,
customerNumber: null,
contractTitle: null,
contractOrderNumber: null,
customerContact: null,
phoneNumber: null,
serviceType: null,
serviceOrderNumber: null,
howManyServiceOrder: null,
serviceStarTime: null,
serviceEndTime: null,
demandServiceDay: null,
afterSalesTechnician: null,
serviceAddress: null,
serviceAddressCity: null,
serviceAddressArea: null,
serviceAddressDetail: null,
signIn: null,
signInTime: null,
signOut: null,
signOutTime: null,
isSolveTheProblem: null,
scenePhoto: null,
customerSatisfaction: null,
satisfactionValue: null,
customerCommentsAndDemands: null,
submitter: null,
submitTime: null,
processState: null,
currentNode: null,
currentPersonInCharge: null
},
//
form: {},
//
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询服务工单列表 */
getList() {
this.loading = true;
listTicket(this.queryParams).then(response => {
this.ticketList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
title: null,
customerName: null,
customerNumber: null,
contractTitle: null,
contractOrderNumber: null,
customerContact: null,
phoneNumber: null,
serviceType: null,
serviceOrderNumber: null,
howManyServiceOrder: null,
serviceStarTime: null,
serviceEndTime: null,
demandServiceDay: null,
afterSalesTechnician: null,
serviceAddress: null,
serviceAddressCity: null,
serviceAddressArea: null,
serviceAddressDetail: null,
signIn: null,
signInTime: null,
signOut: null,
signOutTime: null,
isSolveTheProblem: 0,
scenePhoto: null,
customerSatisfaction: null,
satisfactionValue: null,
customerCommentsAndDemands: null,
submitter: null,
submitTime: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
processState: null,
currentNode: null,
currentPersonInCharge: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加服务工单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getTicket(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改服务工单";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateTicket(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addTicket(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除服务工单编号为"' + ids + '"的数据项?').then(function() {
return delTicket(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/ticket/export', {
...this.queryParams
}, `ticket_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -502,6 +502,7 @@ import { getToken } from '@/utils/auth'
import { treeselect } from '@/api/system/dept'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {getTenant} from "../../../utils/auth";
export default {
name: 'User',
@ -556,7 +557,8 @@ export default {
//
updateSupport: 0,
//
headers: { Authorization: 'Bearer ' + getToken() },
// headers: { Authorization: 'Bearer ' + getToken() },
headers: { tenant: getTenant() ,Authorization: 'Bearer ' + getToken() },
//
url: process.env.VUE_APP_BASE_API + '/system/user/importData',
},

File diff suppressed because it is too large Load Diff