This commit is contained in:
PQZ 2025-07-03 15:22:47 +08:00
commit f04a4eee91
35 changed files with 1976 additions and 4 deletions

View File

@ -0,0 +1,63 @@
package com.ruoyi.busi.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.busi.domain.BusiChatItem;
import com.ruoyi.busi.service.IBusiChatItemService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 在线聊天记录Controller
*
* @author vinjor-m
* @date 2025-07-03
*/
@RestController
@RequestMapping("/busi/chatItem")
public class BusiChatItemController extends BaseController
{
@Autowired
private IBusiChatItemService busiChatItemService;
/**
* 查询在线聊天记录列表
*/
@GetMapping("/list")
public AjaxResult list(BusiChatItem busiChatItem)
{
return success(busiChatItemService.queryList(busiChatItem));
}
/**
* 导出在线聊天记录列表
*/
@Log(title = "在线聊天记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, BusiChatItem busiChatItem)
{
List<BusiChatItem> list = busiChatItemService.list();
ExcelUtil<BusiChatItem> util = new ExcelUtil<BusiChatItem>(BusiChatItem.class);
util.exportExcel(response, list, "在线聊天记录数据");
}
}

View File

@ -0,0 +1,113 @@
package com.ruoyi.busi.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.vo.ChatMainVO;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.busi.domain.BusiChatMain;
import com.ruoyi.busi.service.IBusiChatMainService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 在线聊天Controller
*
* @author vinjor-m
* @date 2025-07-03
*/
@RestController
@RequestMapping("/busi/chatMain")
public class BusiChatMainController extends BaseController
{
@Autowired
private IBusiChatMainService busiChatMainService;
/**
* 查询在线聊天列表
*/
@PreAuthorize("@ss.hasPermi('busi:chatMain:list')")
@GetMapping("/list")
public AjaxResult list(ChatMainVO busiChatMain,
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
{
Page<BusiChatMain> page = new Page<>(pageNum, pageSize);
IPage<ChatMainVO> list = busiChatMainService.queryListPage(busiChatMain,page);
return success(list);
}
/**
* 导出在线聊天列表
*/
@PreAuthorize("@ss.hasPermi('busi:chatMain:export')")
@Log(title = "在线聊天", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, BusiChatMain busiChatMain)
{
List<BusiChatMain> list = busiChatMainService.list();
ExcelUtil<BusiChatMain> util = new ExcelUtil<BusiChatMain>(BusiChatMain.class);
util.exportExcel(response, list, "在线聊天数据");
}
/**
* 获取在线聊天详细信息
*/
@PreAuthorize("@ss.hasPermi('busi:chatMain:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
return success(busiChatMainService.getById(id));
}
/**
* 新增在线聊天
*/
@PreAuthorize("@ss.hasPermi('busi:chatMain:add')")
@Log(title = "在线聊天", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BusiChatMain busiChatMain)
{
return toAjax(busiChatMainService.save(busiChatMain));
}
/**
* 修改在线聊天
*/
@PreAuthorize("@ss.hasPermi('busi:chatMain:edit')")
@Log(title = "在线聊天", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BusiChatMain busiChatMain)
{
return toAjax(busiChatMainService.updateById(busiChatMain));
}
/**
* 删除在线聊天
*/
@PreAuthorize("@ss.hasPermi('busi:chatMain:remove')")
@Log(title = "在线聊天", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
List<String> list = new ArrayList<>(Arrays.asList(ids));
return toAjax(busiChatMainService.removeByIds(list));
}
}

View File

@ -0,0 +1,109 @@
package com.ruoyi.busi.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.vo.ThirdVO;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.busi.domain.BusiThirdItem;
import com.ruoyi.busi.service.IBusiThirdItemService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 三方程序跳转记录Controller
*
* @author vinjor-m
* @date 2025-07-02
*/
@RestController
@RequestMapping("/busi/thirdItem")
public class BusiThirdItemController extends BaseController
{
@Autowired
private IBusiThirdItemService busiThirdItemService;
/**
* 查询三方程序跳转记录列表
*/
@PreAuthorize("@ss.hasPermi('busi:thirdItem:list')")
@GetMapping("/list")
public AjaxResult list(ThirdVO busiThirdItem,
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
{
Page<BusiThirdItem> page = new Page<>(pageNum, pageSize);
IPage<ThirdVO> list = busiThirdItemService.queryListPage(busiThirdItem,page);
return success(list);
}
/**
* 导出三方程序跳转记录列表
*/
@PreAuthorize("@ss.hasPermi('busi:thirdItem:export')")
@Log(title = "三方程序跳转记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, BusiThirdItem busiThirdItem)
{
List<BusiThirdItem> list = busiThirdItemService.list();
ExcelUtil<BusiThirdItem> util = new ExcelUtil<BusiThirdItem>(BusiThirdItem.class);
util.exportExcel(response, list, "三方程序跳转记录数据");
}
/**
* 获取三方程序跳转记录详细信息
*/
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
return success(busiThirdItemService.getById(id));
}
/**
* 新增三方程序跳转记录
*/
@Log(title = "三方程序跳转记录", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BusiThirdItem busiThirdItem)
{
return toAjax(busiThirdItemService.save(busiThirdItem));
}
/**
* 修改三方程序跳转记录
*/
@Log(title = "三方程序跳转记录", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BusiThirdItem busiThirdItem)
{
return toAjax(busiThirdItemService.updateById(busiThirdItem));
}
/**
* 删除三方程序跳转记录
*/
@Log(title = "三方程序跳转记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
List<String> list = new ArrayList<>(Arrays.asList(ids));
return toAjax(busiThirdItemService.removeByIds(list));
}
}

View File

@ -0,0 +1,47 @@
package com.ruoyi.busi.domain;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 在线聊天记录对象 dl_busi_chat_item
*
* @author vinjor-m
* @date 2025-07-03
*/
@TableName("dl_busi_chat_item")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusiChatItem extends DlBaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
@TableId(type = IdType.ASSIGN_UUID)
private String id;
/** 主表id */
@Excel(name = "主表id")
private String mainId;
/** 发送方 */
@Excel(name = "发送方")
private String dataFrom;
/** 聊天内容 */
@Excel(name = "聊天内容")
private String content;
/** 站点唯一编码租户id */
@Excel(name = "站点唯一编码", readConverterExp = "租=户id")
private String tenantId;
}

View File

@ -0,0 +1,62 @@
package com.ruoyi.busi.domain;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 在线聊天对象 dl_busi_chat_main
*
* @author vinjor-m
* @date 2025-07-03
*/
@TableName("dl_busi_chat_main")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusiChatMain extends DlBaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
@TableId(type = IdType.ASSIGN_UUID)
private String id;
/** 产品id */
@Excel(name = "产品id")
private String prodId;
/** 来源IP */
@Excel(name = "来源IP")
private String ip;
/** 来源国家 */
@Excel(name = "来源国家")
private String national;
/** 来源洲 */
@Excel(name = "来源洲")
private String oceania;
/** 聊天记录数 */
@Excel(name = "聊天记录数")
private Integer nums;
/** 浏览器唯一编码(客户方) */
@Excel(name = "浏览器唯一编码", readConverterExp = "客=户方")
private String cusCode;
/** 员工id */
@Excel(name = "员工id")
private String userId;
/** 站点唯一编码租户id */
@Excel(name = "站点唯一编码", readConverterExp = "租=户id")
private String tenantId;
}

View File

@ -0,0 +1,67 @@
package com.ruoyi.busi.domain;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 三方程序跳转记录对象 dl_busi_third_item
*
* @author vinjor-m
* @date 2025-07-02
*/
@TableName("dl_busi_third_item")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusiThirdItem extends DlBaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
@TableId(type = IdType.ASSIGN_UUID)
private String id;
/** 产品id */
@Excel(name = "产品id")
private String prodId;
/** 三方程序类型 */
@Excel(name = "三方程序类型")
private String thirdSoft;
/** 来源国家 */
@Excel(name = "来源国家")
private String national;
/** 所属email/电话/teams账户 */
@Excel(name = "所属email/电话/teams账户")
private String thirdAccount;
/** 浏览记录 */
@Excel(name = "浏览记录")
private String viewType;
/** 页面路径 */
@Excel(name = "页面路径")
private String pageUrl;
/** 设备类型 */
@Excel(name = "设备类型")
private String equipment;
/** 来源IP */
@Excel(name = "来源IP")
private String ip;
/** 站点唯一编码租户id */
@Excel(name = "站点唯一编码", readConverterExp = "租=户id")
private String tenantId;
}

View File

@ -0,0 +1,24 @@
package com.ruoyi.busi.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.domain.BusiChatItem;
import com.ruoyi.busi.vo.ChatItemVO;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 在线聊天记录Mapper接口
*
* @author vinjor-m
* @date 2025-07-03
*/
@Mapper
public interface BusiChatItemMapper extends BaseMapper<BusiChatItem>
{
IPage<BusiChatItem> queryListPage(@Param("entity") BusiChatItem entity, Page<BusiChatItem> page);
List<ChatItemVO> selectListData(@Param("entity")BusiChatItem entity);
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.busi.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.domain.BusiChatMain;
import com.ruoyi.busi.vo.ChatMainVO;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 在线聊天Mapper接口
*
* @author vinjor-m
* @date 2025-07-03
*/
@Mapper
public interface BusiChatMainMapper extends BaseMapper<BusiChatMain>
{
IPage<ChatMainVO> queryListPage(@Param("entity") ChatMainVO entity, Page<BusiChatMain> page);
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.busi.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.domain.BusiThirdItem;
import com.ruoyi.busi.vo.ThirdVO;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 三方程序跳转记录Mapper接口
*
* @author vinjor-m
* @date 2025-07-02
*/
@Mapper
public interface BusiThirdItemMapper extends BaseMapper<BusiThirdItem>
{
IPage<ThirdVO> queryListPage(@Param("entity") ThirdVO entity, Page<BusiThirdItem> page);
}

View File

@ -0,0 +1,19 @@
package com.ruoyi.busi.service;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.busi.domain.BusiChatItem;
import com.ruoyi.busi.vo.ChatItemVO;
/**
* 在线聊天记录Service接口
*
* @author vinjor-m
* @date 2025-07-03
*/
public interface IBusiChatItemService extends IService<BusiChatItem>
{
List<ChatItemVO> queryList(BusiChatItem pageReqVO);
}

View File

@ -0,0 +1,19 @@
package com.ruoyi.busi.service;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.busi.domain.BusiChatMain;
import com.ruoyi.busi.vo.ChatMainVO;
/**
* 在线聊天Service接口
*
* @author vinjor-m
* @date 2025-07-03
*/
public interface IBusiChatMainService extends IService<BusiChatMain>
{
IPage<ChatMainVO> queryListPage(ChatMainVO pageReqVO, Page<BusiChatMain> page);
}

View File

@ -0,0 +1,19 @@
package com.ruoyi.busi.service;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.busi.domain.BusiThirdItem;
import com.ruoyi.busi.vo.ThirdVO;
/**
* 三方程序跳转记录Service接口
*
* @author vinjor-m
* @date 2025-07-02
*/
public interface IBusiThirdItemService extends IService<BusiThirdItem>
{
IPage<ThirdVO> queryListPage(ThirdVO pageReqVO, Page<BusiThirdItem> page);
}

View File

@ -0,0 +1,34 @@
package com.ruoyi.busi.service.impl;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.busi.vo.ChatItemVO;
import com.ruoyi.common.core.domain.DlBaseEntity;
import com.ruoyi.common.utils.DateUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.busi.mapper.BusiChatItemMapper;
import com.ruoyi.busi.domain.BusiChatItem;
import com.ruoyi.busi.service.IBusiChatItemService;
/**
* 在线聊天记录Service业务层处理
*
* @author vinjor-m
* @date 2025-07-03
*/
@Service
public class BusiChatItemServiceImpl extends ServiceImpl<BusiChatItemMapper,BusiChatItem> implements IBusiChatItemService
{
@Autowired
private BusiChatItemMapper busiChatItemMapper;
@Override
public List<ChatItemVO> queryList(BusiChatItem pageReqVO) {
return busiChatItemMapper.selectListData(pageReqVO);
}
}

View File

@ -0,0 +1,32 @@
package com.ruoyi.busi.service.impl;
import java.util.List;
import com.ruoyi.busi.vo.ChatMainVO;
import com.ruoyi.common.utils.DateUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.busi.mapper.BusiChatMainMapper;
import com.ruoyi.busi.domain.BusiChatMain;
import com.ruoyi.busi.service.IBusiChatMainService;
/**
* 在线聊天Service业务层处理
*
* @author vinjor-m
* @date 2025-07-03
*/
@Service
public class BusiChatMainServiceImpl extends ServiceImpl<BusiChatMainMapper,BusiChatMain> implements IBusiChatMainService
{
@Autowired
private BusiChatMainMapper busiChatMainMapper;
@Override
public IPage<ChatMainVO> queryListPage(ChatMainVO pageReqVO, Page<BusiChatMain> page) {
return busiChatMainMapper.queryListPage(pageReqVO, page);
}
}

View File

@ -0,0 +1,39 @@
package com.ruoyi.busi.service.impl;
import java.util.List;
import com.ruoyi.busi.vo.ThirdVO;
import com.ruoyi.common.utils.DateUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.busi.mapper.BusiThirdItemMapper;
import com.ruoyi.busi.domain.BusiThirdItem;
import com.ruoyi.busi.service.IBusiThirdItemService;
/**
* 三方程序跳转记录Service业务层处理
*
* @author vinjor-m
* @date 2025-07-02
*/
@Service
public class BusiThirdItemServiceImpl extends ServiceImpl<BusiThirdItemMapper,BusiThirdItem> implements IBusiThirdItemService
{
@Autowired
private BusiThirdItemMapper busiThirdItemMapper;
@Override
public IPage<ThirdVO> queryListPage(ThirdVO pageReqVO, Page<BusiThirdItem> page) {
if(StringUtils.isNotEmpty(pageReqVO.getStartDate())){
pageReqVO.setStartDate(pageReqVO.getStartDate()+" 00:00:00");
}
if(StringUtils.isNotEmpty(pageReqVO.getEndDate())){
pageReqVO.setEndDate(pageReqVO.getEndDate()+" 23:59:59");
}
return busiThirdItemMapper.queryListPage(pageReqVO, page);
}
}

View File

@ -0,0 +1,13 @@
package com.ruoyi.busi.vo;
import com.ruoyi.busi.domain.BusiChatItem;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class ChatItemVO extends BusiChatItem {
/** 用户头像 */
private String userImg;
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.busi.vo;
import com.ruoyi.busi.domain.BusiChatMain;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class ChatMainVO extends BusiChatMain {
/** 产品名称 */
private String prodName;
/** 用户名称 */
private String userName;
/** 站点名称 */
private String siteName;
/** 时间范围-开始 */
private String startDate;
/** 时间范围-结束 */
private String endDate;
}

View File

@ -0,0 +1,19 @@
package com.ruoyi.busi.vo;
import com.ruoyi.busi.domain.BusiThirdItem;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class ThirdVO extends BusiThirdItem {
/** 产品名称 */
private String prodName;
/** 时间范围-开始 */
private String startDate;
/** 时间范围-结束 */
private String endDate;
}

View File

@ -0,0 +1,42 @@
<?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.busi.mapper.BusiChatItemMapper">
<resultMap type="BusiChatItem" id="BusiChatItemResult">
<result property="id" column="id" />
<result property="mainId" column="main_id" />
<result property="dataFrom" column="data_from" />
<result property="content" column="content" />
<result property="tenantId" column="tenant_id" />
<result property="creator" column="creator" />
<result property="createTime" column="create_time" />
<result property="updater" column="updater" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
</resultMap>
<sql id="selectBusiChatItemVo">
select id, main_id, data_from, content, tenant_id, creator, create_time, updater, update_time, del_flag from dl_busi_chat_item
</sql>
<select id="queryListPage" parameterType="BusiChatItem" resultMap="BusiChatItemResult">
<include refid="selectBusiChatItemVo"/>
<where>
<if test="entity.mainId != null and entity.mainId != ''"> and main_id = #{entity.mainId}</if>
<if test="entity.dataFrom != null and entity.dataFrom != ''"> and data_from = #{entity.dataFrom}</if>
<if test="entity.content != null and entity.content != ''"> and content = #{entity.content}</if>
<if test="entity.tenantId != null and entity.tenantId != ''"> and tenant_id = #{entity.tenantId}</if>
</where>
</select>
<select id="selectListData" resultType="com.ruoyi.busi.vo.ChatItemVO">
select *,su.avatar AS userImg
from dl_busi_chat_item dbci
left join dl_busi_chat_main dbcm on dbci.main_id = dbcm.id
left join sys_user su on dbcm.user_id = su.user_id
where dbci.del_flag = '0'
AND dbci.main_id = #{entity.mainId}
order by dbci.create_time
</select>
</mapper>

View File

@ -0,0 +1,63 @@
<?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.busi.mapper.BusiChatMainMapper">
<resultMap type="com.ruoyi.busi.vo.ChatMainVO" id="BusiChatMainResult">
<result property="id" column="id"/>
<result property="prodId" column="prod_id"/>
<result property="ip" column="ip"/>
<result property="national" column="national"/>
<result property="oceania" column="oceania"/>
<result property="nums" column="nums"/>
<result property="cusCode" column="cus_code"/>
<result property="userId" column="user_id"/>
<result property="tenantId" column="tenant_id"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="prodName" column="prod_name"/>
<result property="userName" column="user_name"/>
<result property="siteName" column="site_name"/>
</resultMap>
<sql id="selectBusiChatMainVo">
select id,
prod_id,
ip, national, oceania, nums, cus_code, user_id, tenant_id, creator, create_time, updater, update_time, del_flag
from dl_busi_chat_main
</sql>
<select id="queryListPage" parameterType="BusiChatMain" resultMap="BusiChatMainResult">
select dbcm.*,dbpn.title AS prod_name,su.nick_name AS user_name,dbs.site_name AS site_name
from dl_busi_chat_main dbcm
left join dl_busi_prod_new dbpn on dbcm.prod_id = dbpn.id
left join sys_user su on dbcm.user_id = su.user_id
left join dl_base_site dbs ON dbcm.tenant_id = dbs.id
<where>
<if test="entity.prodName != null and entity.prodName != ''">and dbpn.title LIKE
CONCAT('%',#{entity.prodName},'%')
</if>
<if test="entity.ip != null and entity.ip != ''">and dbcm.ip = #{entity.ip}</if>
<if test="entity.national != null and entity.national != ''">and dbcm.national LIKE
CONCAT('%',#{entity.national},'%')
</if>
<if test="entity.oceania != null and entity.oceania != ''">and dbcm.oceania = #{entity.oceania}</if>
<if test="entity.userName != null and entity.userName != ''">and (su.nick_name LIKE
CONCAT('%',#{entity.userName},'%') OR su.user_name LIKE CONCAT('%',#{entity.userName},'%'))
</if>
<if test="entity.tenantId != null and entity.tenantId != ''">and dbcm.tenant_id = #{entity.tenantId}</if>
<if test="entity.startDate != null and entity.startDate != ''">and (dbcm.create_time &gt;=
#{entity.startDate} OR dbcm.update_time &gt;= #{entity.startDate})
</if>
<if test="entity.endDate != null and entity.endDate != ''">and (dbcm.create_time &lt;= #{entity.endDate} OR
dbcm.update_time &gt;= #{entity.startDate})
</if>
</where>
order BY dbcm.create_time DESC,dbcm.update_time DESC
</select>
</mapper>

View File

@ -0,0 +1,53 @@
<?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.busi.mapper.BusiThirdItemMapper">
<resultMap type="com.ruoyi.busi.vo.ThirdVO" id="BusiThirdItemResult">
<result property="id" column="id"/>
<result property="prodId" column="prod_id"/>
<result property="thirdSoft" column="third_soft"/>
<result property="national" column="national"/>
<result property="thirdAccount" column="third_account"/>
<result property="viewType" column="view_type"/>
<result property="pageUrl" column="page_url"/>
<result property="equipment" column="equipment"/>
<result property="ip" column="ip"/>
<result property="tenantId" column="tenant_id"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updater" column="updater"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="prodName" column="prod_name"/>
</resultMap>
<sql id="selectBusiThirdItemVo">
select id,
prod_id,
third_soft, national, third_account, view_type, page_url, equipment, ip, tenant_id, creator, create_time, updater, update_time, del_flag
from dl_busi_third_item
</sql>
<select id="queryListPage" parameterType="BusiThirdItem" resultMap="BusiThirdItemResult">
select dbti.*,dbpn.title AS prod_name
from dl_busi_third_item dbti
left join dl_busi_prod_new dbpn on dbti.prod_id = dbpn.id
<where>
<if test="entity.prodName != null and entity.prodName != ''">and dbpn.title LIKE CONCAT('%',#{entity.prodName},'%')</if>
<if test="entity.thirdSoft != null and entity.thirdSoft != ''">and dbti.third_soft = #{entity.thirdSoft}</if>
<if test="entity.national != null and entity.national != ''">and dbti.national LIKE CONCAT('%',#{entity.national},'%')</if>
<if test="entity.thirdAccount != null and entity.thirdAccount != ''">and dbti.third_account LIKE CONCAT('%',#{entity.thirdAccount},'%')</if>
<if test="entity.viewType != null and entity.viewType != ''">and dbti.view_type = #{entity.viewType}</if>
<if test="entity.pageUrl != null and entity.pageUrl != ''">and dbti.page_url LIKE CONCAT('%',#{entity.pageUrl},'%')</if>
<if test="entity.equipment != null and entity.equipment != ''">and dbti.equipment = #{entity.equipment}</if>
<if test="entity.ip != null and entity.ip != ''">and dbti.ip = #{entity.ip}</if>
<if test="entity.tenantId != null and entity.tenantId != ''">and dbti.tenant_id = #{entity.tenantId}</if>
<if test="entity.startDate != null and entity.startDate != ''">and dbti.create_time &gt;= #{entity.startDate}</if>
<if test="entity.endDate != null and entity.endDate != ''">and dbti.create_time &lt;= #{entity.endDate}</if>
</where>
order by dbti.create_time DESC
</select>
</mapper>

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询在线聊天记录列表
export function listChatItem(query) {
return request({
url: '/busi/chatItem/list',
method: 'get',
params: query
})
}
// 查询在线聊天记录详细
export function getChatItem(id) {
return request({
url: '/busi/chatItem/' + id,
method: 'get'
})
}
// 新增在线聊天记录
export function addChatItem(data) {
return request({
url: '/busi/chatItem',
method: 'post',
data: data
})
}
// 修改在线聊天记录
export function updateChatItem(data) {
return request({
url: '/busi/chatItem',
method: 'put',
data: data
})
}
// 删除在线聊天记录
export function delChatItem(id) {
return request({
url: '/busi/chatItem/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询在线聊天列表
export function listChatMain(query) {
return request({
url: '/busi/chatMain/list',
method: 'get',
params: query
})
}
// 查询在线聊天详细
export function getChatMain(id) {
return request({
url: '/busi/chatMain/' + id,
method: 'get'
})
}
// 新增在线聊天
export function addChatMain(data) {
return request({
url: '/busi/chatMain',
method: 'post',
data: data
})
}
// 修改在线聊天
export function updateChatMain(data) {
return request({
url: '/busi/chatMain',
method: 'put',
data: data
})
}
// 删除在线聊天
export function delChatMain(id) {
return request({
url: '/busi/chatMain/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询三方程序跳转记录列表
export function listThirdItem(query) {
return request({
url: '/busi/thirdItem/list',
method: 'get',
params: query
})
}
// 查询三方程序跳转记录详细
export function getThirdItem(id) {
return request({
url: '/busi/thirdItem/' + id,
method: 'get'
})
}
// 新增三方程序跳转记录
export function addThirdItem(data) {
return request({
url: '/busi/thirdItem',
method: 'post',
data: data
})
}
// 修改三方程序跳转记录
export function updateThirdItem(data) {
return request({
url: '/busi/thirdItem',
method: 'put',
data: data
})
}
// 删除三方程序跳转记录
export function delThirdItem(id) {
return request({
url: '/busi/thirdItem/' + id,
method: 'delete'
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

View File

@ -1,7 +1,6 @@
import { login, logout, getInfo } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { isHttp, isEmpty } from "@/utils/validate"
import defAva from '@/assets/images/profile.jpg'
const user = {
state: {
@ -59,7 +58,7 @@ const user = {
const user = res.user
let avatar = user.avatar || ""
if (!isHttp(avatar)) {
avatar = (isEmpty(avatar)) ? defAva : process.env.VUE_APP_BASE_API + avatar
avatar = (isEmpty(avatar)) ? '' : process.env.VUE_APP_BASE_API + avatar
}
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
commit('SET_ROLES', res.roles)

View File

@ -41,7 +41,14 @@
</el-col>
<el-col :span="8">
<el-form-item label="Email" prop="email">
<el-input v-model="form.email" placeholder="请输入Email"/>
<div class="dl-flex-column">
<el-input v-model="form.email" placeholder="请输入Email"/>
<el-tooltip class="item" effect="dark" content="如需配置多个邮箱,请用英文逗号','隔开"
placement="bottom"
>
<i class="el-icon-question"></i>
</el-tooltip>
</div>
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -0,0 +1,171 @@
<template>
<!-- 选择产品对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<div class="dl-chat-box" v-infinite-scroll="nextPage" >
<template v-for="(item,index) in chatItemList">
<div v-if="item.dataFrom=='customer'" class="dl-customer-dom">
<div class="dl-customer-photo">
<img src="@/assets/images/customer.jpg" >
</div>
<div class="dl-customer-right">
<div class="dl-customer-time">{{item.createTime}}</div>
<div class="dl-customer-content">{{ item.content }}</div>
</div>
</div>
<div v-if="item.dataFrom=='platform'" class="dl-platform-dom">
<div class="dl-platform-right">
<div class="dl-platform-time">{{item.createTime}}</div>
<div class="dl-platform-content">{{ item.content }}</div>
</div>
<div class="dl-platform-photo">
<img :src="picPrex+item.userImg" >
</div>
</div>
</template>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelSelect"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { listChatItem, getChatItem, delChatItem, addChatItem, updateChatItem } from "@/api/busi/chatItem";
export default {
name: 'chatForm',
data() {
return {
picPrex:process.env.VUE_APP_BASE_API,
//
title: "",
//
open: false,
// 线
chatItemList: [],
//
pages:0,
//
queryParams: {
mainId: null,
},
}
},
methods: {
/**
* 组件显示
*/
show(id,title) {
this.reset()
this.title = title?title:"聊天记录"
this.open = true
this.queryParams.mainId = id
this.getList()
},
reset(){
this.chatItemList=[]
},
// --
cancelSelect() {
this.open = false;
},
/** 查询在线聊天记录列表 */
getList() {
listChatItem(this.queryParams).then(response => {
this.chatItemList = response.data;
});
},
}
}
</script>
<style scoped>
.dl-chat-box{
width: 100%;
background: #F1F3F7;
max-height:500px;
display: flex;
flex-direction: column;
align-items: start;
justify-content: start;
overflow-y: scroll;
padding: 10px 20px;
}
.dl-customer-dom{
padding: 15px 0;
width: 100%;
display: flex;
}
.dl-customer-photo{
width: 60px;
display: flex;
justify-content: center;
align-items: center;
}
.dl-customer-photo img{
width: 40px;
height: 40px;
border-radius: 50%;
}
.dl-customer-right{
flex: 1;
display: flex;
flex-direction: column;
align-items: start;
justify-content: center;
}
.dl-customer-time{
font-size: 10px;
color: #878B90;
}
.dl-customer-content{
margin-top: 10px;
width: auto;
background-color: white;
color: black;
border-radius: 5px;
padding: 12px;
}
.dl-platform-dom{
padding: 15px 0;
width: 100%;
display: flex;
}
.dl-platform-photo{
display: flex;
justify-content: center;
align-items: center;
width: 60px;
}
.dl-platform-photo img{
width: 40px;
height: 40px;
border-radius: 50%;
}
.dl-platform-right{
flex: 1;
display: flex;
flex-direction: column;
align-items: end;
justify-content: center;
}
.dl-platform-time{
font-size: 10px;
color: #878B90;
}
.dl-platform-content{
text-align: right;
margin-top: 10px;
width: auto;
background-color: white;
color: black;
border-radius: 5px;
padding: 12px;
}
</style>

View File

@ -0,0 +1,266 @@
<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="prodName">
<el-input
v-model="queryParams.prodName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="IP" prop="ip">
<el-input
v-model="queryParams.ip"
placeholder="请输入来源IP"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="国家" prop="national">
<el-input
v-model="queryParams.national"
placeholder="请输入国家"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="洲" prop="oceania">
<el-input
v-model="queryParams.oceania"
placeholder="请输入来洲"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="员工名称" prop="userName">
<el-input
v-model="queryParams.userName"
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="['busi:chatMain: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="['busi:chatMain: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="['busi:chatMain: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="['busi:chatMain:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="chatMainList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column type="index" width="60" label="序号" align="center"/>
<el-table-column label="客户唯一编码" align="center" prop="cusCode" />
<el-table-column align="center" prop="prodName" :min-width="120">
<template slot="header" slot-scope="scope">
<span>产品名称</span>
<el-tooltip class="item" effect="dark" content="鼠标单机数据可查看产品详情"
placement="bottom"
>
<i class="el-icon-question"></i>
</el-tooltip>
</template>
<template slot-scope="scope">
<span @click="goProdDetail(scope.row.prodId)" style="color: #1890ff;cursor: pointer"
>{{ scope.row.prodName }}</span>
</template>
</el-table-column>
<el-table-column label="IP" align="center" prop="ip" />
<el-table-column label="国家" align="center" prop="national" />
<el-table-column label="洲" align="center" prop="oceania" />
<el-table-column label="负责员工" align="center" prop="userName" />
<el-table-column align="center" prop="nums" >
<template slot="header" slot-scope="scope">
<span>聊天记录数</span>
<el-tooltip class="item" effect="dark" content="鼠标单机数据可查看聊天记录"
placement="bottom"
>
<i class="el-icon-question"></i>
</el-tooltip>
</template>
<template slot-scope="scope">
<el-tag style="cursor: pointer" @click="handleDetail(scope.row)">{{scope.row.nums}}</el-tag>
</template>
</el-table-column>
<el-table-column label="最早聊天时间" align="center" prop="createTime" >
<template slot-scope="scope">
{{scope.row.createTime | formatDate}}
</template>
</el-table-column>
<el-table-column label="最近聊天时间" align="center" prop="updateTime" >
<template slot-scope="scope">
{{scope.row.updateTime | formatDate}}
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 聊天记录弹出框-->
<chat-form ref="chatFrom"></chat-form>
</div>
</template>
<script>
import chatForm from "@/views/busi/chatMain/chatForm";
import { listChatMain, getChatMain, delChatMain, addChatMain, updateChatMain } from "@/api/busi/chatMain";
import Treeselect from '@riophae/vue-treeselect'
export default {
name: "ChatMain",
components: { chatForm},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 线
chatMainList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
prodName: null,
ip: null,
national: null,
oceania: null,
cusCode: null,
userName: null,
tenantId: null,
},
};
},
filters:{
formatDate(val){
if(val){
return val.slice(0, 16)
}else{
return "-"
}
},
},
created() {
this.getList();
},
methods: {
/** 查询在线聊天列表 */
getList() {
this.loading = true;
listChatMain(this.queryParams).then(response => {
this.chatMainList = response.data.records;
this.total = response.data.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
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
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除在线聊天编号为"' + ids + '"的数据项?').then(function() {
return delChatMain(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('busi/chatMain/export', {
...this.queryParams
}, `chatMain_${new Date().getTime()}.xlsx`)
},
/**
* 查看产品详情
*/
goProdDetail(id) {
this.$router.push({ path: '/product/prodForm', query: { id: id } })
},
/**
* 查看聊天记录详情
* @param row
*/
handleDetail(row){
this.$refs.chatFrom.show(row.id,"来自"+row.national+"-"+row.cusCode+"("+row.ip+")聊天记录")
}
}
};
</script>

View File

@ -0,0 +1,13 @@
<template>
<div class="app-container">www</div>
</template>
<script>
export default {
name: 'countryChart'
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,468 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="160px">
<el-form-item label="三方程序类型" prop="thirdSoft">
<el-select v-model="queryParams.thirdSoft" placeholder="请选择三方程序类型" clearable>
<el-option
v-for="dict in dict.type.third_soft"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="浏览记录" prop="viewType">
<el-select v-model="queryParams.viewType" placeholder="请选择浏览记录" clearable>
<el-option
v-for="dict in dict.type.view_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="设备类型" prop="equipment">
<el-select v-model="queryParams.equipment" placeholder="请选择设备类型" clearable>
<el-option
v-for="dict in dict.type.equipment_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="请输入产品名称" prop="prodName">
<el-input
v-model="queryParams.prodName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="来源国家" prop="national">
<el-input
v-model="queryParams.national"
placeholder="请输入来源国家"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="email/电话/teams账户" prop="thirdAccount">
<el-input
v-model="queryParams.thirdAccount"
placeholder="请输入email/电话/teams账户"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="IP" prop="ip">-->
<!-- <el-input-->
<!-- v-model="queryParams.ip"-->
<!-- placeholder="请输入IP"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="时间范围" prop="dataRange">
<el-date-picker
v-model="queryParams.dataRange"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
>
</el-date-picker>
</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="['busi:thirdItem: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="['busi:thirdItem: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="['busi:thirdItem: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="['busi:thirdItem:export']"
>导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="thirdItemList" @selection-change="handleSelectionChange">
<el-table-column type="index" width="60" label="序号" align="center"/>
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="产品名称" align="center" prop="prodName" :min-width="120">
<template slot="header" slot-scope="scope">
<span>产品名称</span>
<el-tooltip class="item" effect="dark" content="鼠标单机数据可查看产品详情"
placement="bottom"
>
<i class="el-icon-question"></i>
</el-tooltip>
</template>
<template slot-scope="scope">
<span @click="goProdDetail(scope.row.prodId)" style="color: #1890ff;cursor: pointer"
>{{ scope.row.prodName }}</span>
</template>
</el-table-column>
<el-table-column label="三方程序类型" align="center" prop="thirdSoft" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.third_soft" :value="scope.row.thirdSoft"/>
</template>
</el-table-column>
<el-table-column label="来源国家" align="center" prop="national"/>
<el-table-column label="email/电话/teams账户" align="center" prop="thirdAccount" width="180"/>
<el-table-column label="浏览记录" align="center" prop="viewType">
<template slot-scope="scope">
<dict-tag :options="dict.type.view_type" :value="scope.row.viewType"/>
</template>
</el-table-column>
<el-table-column label="页面路径" align="center" prop="pageUrl"/>
<el-table-column label="设备类型" align="center" prop="equipment">
<template slot-scope="scope">
<dict-tag :options="dict.type.equipment_type" :value="scope.row.equipment"/>
</template>
</el-table-column>
<el-table-column label="来源IP" align="center" prop="ip"/>
<el-table-column label="访问时间" align="center" prop="createTime"/>
<!-- <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="['busi:thirdItem:edit']"-->
<!-- >修改</el-button>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['busi:thirdItem: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="产品id" prop="prodId">
<el-input v-model="form.prodId" placeholder="请输入产品id"/>
</el-form-item>
<el-form-item label="三方程序类型" prop="thirdSoft">
<el-select v-model="form.thirdSoft" placeholder="请选择三方程序类型">
<el-option
v-for="dict in dict.type.third_soft"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="来源国家" prop="national">
<el-input v-model="form.national" placeholder="请输入来源国家"/>
</el-form-item>
<el-form-item label="所属email/电话/teams账户" prop="thirdAccount">
<el-input v-model="form.thirdAccount" placeholder="请输入所属email/电话/teams账户"/>
</el-form-item>
<el-form-item label="浏览记录" prop="viewType">
<el-select v-model="form.viewType" placeholder="请选择浏览记录">
<el-option
v-for="dict in dict.type.view_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="页面路径" prop="pageUrl">
<el-input v-model="form.pageUrl" placeholder="请输入页面路径"/>
</el-form-item>
<el-form-item label="设备类型" prop="equipment">
<el-select v-model="form.equipment" placeholder="请选择设备类型">
<el-option
v-for="dict in dict.type.equipment_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="来源IP" prop="ip">
<el-input v-model="form.ip" placeholder="请输入来源IP"/>
</el-form-item>
<el-form-item label="站点唯一编码" prop="tenantId">
<el-input v-model="form.tenantId" 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 { listThirdItem, getThirdItem, delThirdItem, addThirdItem, updateThirdItem } from '@/api/busi/thirdItem'
export default {
name: 'ThirdItem',
dicts: ['equipment_type', 'third_soft', 'view_type'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
thirdItemList: [],
//
title: '',
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
dataRange: '',
startDate: '',
endDate: '',
prodName: null,
thirdSoft: null,
national: null,
thirdAccount: null,
viewType: null,
pageUrl: null,
equipment: null,
ip: null,
tenantId: null
},
//
form: {},
//
rules: {},
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
picker.$emit('pick', [start, end])
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
picker.$emit('pick', [start, end])
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
picker.$emit('pick', [start, end])
}
}]
}
}
},
created() {
this.getList()
},
methods: {
/** 查询三方程序跳转记录列表 */
getList() {
this.loading = true
listThirdItem(this.queryParams).then(response => {
this.thirdItemList = response.data.records
this.total = response.data.total
this.loading = false
})
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
id: null,
prodId: null,
thirdSoft: null,
national: null,
thirdAccount: null,
viewType: null,
pageUrl: null,
equipment: null,
ip: null,
tenantId: null,
creator: null,
createTime: null,
updater: null,
updateTime: null,
delFlag: null
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
console.log(this.queryParams.dataRange,"12")
if (this.queryParams.dataRange && this.queryParams.dataRange.length > 1) {
this.queryParams.startDate = this.formatDate(this.queryParams.dataRange[0])
this.queryParams.endDate = this.formatDate(this.queryParams.dataRange[1])
}else{
this.queryParams.startDate = null
this.queryParams.endDate = null
}
this.getList()
},
/**
* 格式化时间戳
*/
formatDate(timestamp) {
const date = new Date(timestamp)
const year = date.getFullYear()
// 01
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
return `${year}-${month}-${day}`
},
/** 重置按钮操作 */
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
getThirdItem(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) {
updateThirdItem(this.form).then(response => {
this.$modal.msgSuccess('修改成功')
this.open = false
this.getList()
})
} else {
addThirdItem(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 delThirdItem(ids)
}).then(() => {
this.getList()
this.$modal.msgSuccess('删除成功')
}).catch(() => {
})
},
/** 导出按钮操作 */
handleExport() {
this.download('busi/thirdItem/export', {
...this.queryParams
}, `thirdItem_${new Date().getTime()}.xlsx`)
},
/**
* 查看产品详情
*/
goProdDetail(id) {
this.$router.push({ path: '/product/prodForm', query: { id: id } })
}
}
}
</script>

View File

@ -0,0 +1,13 @@
<template>
<div class="app-container">www</div>
</template>
<script>
export default {
name: 'inquiryChart'
}
</script>
<style scoped>
</style>

View File

@ -27,7 +27,7 @@
</el-form-item>
</el-form>
<el-row>
<el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px">
<el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="360px">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />