# Conflicts:
#	dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java
This commit is contained in:
PQZ 2025-10-09 14:43:56 +08:00
commit 3ee97a885a
20 changed files with 240 additions and 189 deletions

View File

@ -115,6 +115,9 @@ public class BaseSiteController extends BaseController {
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids) { public AjaxResult remove(@PathVariable String[] ids) {
List<String> list = new ArrayList<>(Arrays.asList(ids)); List<String> list = new ArrayList<>(Arrays.asList(ids));
if (list.contains("main")){
return error("请勿删除主站点");
}
return toAjax(baseSiteService.removeByIds(list)); return toAjax(baseSiteService.removeByIds(list));
} }
} }

View File

@ -64,6 +64,8 @@ public class WebController extends BaseController {
@Autowired @Autowired
private IBusiChatMainService busiChatMainService; private IBusiChatMainService busiChatMainService;
@Autowired @Autowired
private IBusiThirdItemService busiThirdItemService;
@Autowired
private IBusiPageService pageService; private IBusiPageService pageService;
@Autowired @Autowired
private CommonUtils commonUtils; private CommonUtils commonUtils;
@ -373,7 +375,6 @@ public class WebController extends BaseController {
@ApiImplicitParam(name = "tenantId", value = "站点唯一码", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class) @ApiImplicitParam(name = "tenantId", value = "站点唯一码", required = true, dataType = "string", paramType = "query", dataTypeClass = String.class)
@GetMapping("/inquirySet") @GetMapping("/inquirySet")
public R<BaseInquiry> inquirySet(@RequestParam(required = true) String tenantId, HttpServletRequest request) { public R<BaseInquiry> inquirySet(@RequestParam(required = true) String tenantId, HttpServletRequest request) {
String ip = CommonUtils.getIpAddr(request);
return R.ok(baseInquiryService.getInquiry(tenantId)); return R.ok(baseInquiryService.getInquiry(tenantId));
} }
@ -526,4 +527,27 @@ public class WebController extends BaseController {
} }
} }
/**
* 三方询盘点击记录次数
*
* @return com.ruoyi.common.core.domain.AjaxResult
* @author vinjor-M
* @date 10:04 2025/7/8
**/
@ApiOperation("三方询盘点击记录次数")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "thirdSoft", value = "三方程序类型Email|WhatsApp|Tel", required = true, paramType = "body"),
@ApiImplicitParam(name = "tenantId", value = "站点编码", required = true, paramType = "body"),
@ApiImplicitParam(name = "equipment", value = "设备类型(移动端|电脑端)", required = true, paramType = "body")
})
@PostMapping("/thirdItemSave")
public R<String> thirdItemSave(@ApiIgnore @RequestBody BusiThirdItem thirdItem, HttpServletRequest request) {
thirdItem.setViewType("漂浮询盘");
Map<String, String> ipMap = commonUtils.getIPAndCountry(request);
thirdItem.setIp(ipMap.get("ip"));
thirdItem.setNational(ipMap.get("national"));
thirdItem.setOceania(ipMap.get("oceania"));
busiThirdItemService.save(thirdItem);
return R.ok();
}
} }

View File

@ -1,6 +1,7 @@
package com.ruoyi.busi.domain; package com.ruoyi.busi.domain;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@ -70,9 +71,15 @@ public class BusiProdNew extends DlBaseEntity
@ApiModelProperty("文章来源") @ApiModelProperty("文章来源")
private String newsFrom; private String newsFrom;
/** 展示平台PC、APP */
@Excel(name = "展示平台PC、APP")
@ApiModelProperty("展示平台PC、APP")
private String showPlat;
/** 文章发布日期 */ /** 文章发布日期 */
@Excel(name = "文章发布日期") @Excel(name = "文章发布日期")
@ApiModelProperty("文章发布日期") @ApiModelProperty("文章发布日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date publicDate; private Date publicDate;
/** 产品主图或文章图片 */ /** 产品主图或文章图片 */

View File

@ -39,6 +39,9 @@ public class BusiThirdItem extends DlBaseEntity
/** 来源国家 */ /** 来源国家 */
@Excel(name = "来源国家") @Excel(name = "来源国家")
private String national; private String national;
/** 来源洲 */
@Excel(name = "来源洲")
private String oceania;
/** 所属email/电话/teams账户 */ /** 所属email/电话/teams账户 */
@Excel(name = "所属email/电话/teams账户") @Excel(name = "所属email/电话/teams账户")

View File

@ -40,20 +40,18 @@ public class BusiCategoryServiceImpl extends ServiceImpl<BusiCategoryMapper, Bus
public List<BusiCategoryVO> treeCategory(BusiCategory category) { public List<BusiCategoryVO> treeCategory(BusiCategory category) {
//查询全部栏目 //查询全部栏目
LambdaQueryWrapper<BusiCategory> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BusiCategory> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag,0) lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag, 0)
.eq(BusiCategory::getTenantId,category.getTenantId()); .eq(BusiCategory::getTenantId, category.getTenantId());
if(StringUtils.isNotEmpty(category.getCatgType())){ if (StringUtils.isNotEmpty(category.getCatgType())) {
lambdaQueryWrapper.eq(BusiCategory::getCatgType,category.getCatgType()); lambdaQueryWrapper.eq(BusiCategory::getCatgType, category.getCatgType());
} }
if (!StringUtils.isEmpty(category.getCatgName())) { if (!StringUtils.isEmpty(category.getCatgName())) {
lambdaQueryWrapper.like(BusiCategory::getCatgName, category.getCatgName()); lambdaQueryWrapper.like(BusiCategory::getCatgName, category.getCatgName());
} }
lambdaQueryWrapper.orderByAsc(BusiCategory::getSort); lambdaQueryWrapper.orderByDesc(BusiCategory::getSort);
List<BusiCategory> list = list(lambdaQueryWrapper); List<BusiCategory> list = list(lambdaQueryWrapper);
List<BusiCategoryVO> rtnList = buildCategoryTree(list); List<BusiCategoryVO> rtnList = buildCategoryTree(list);
return rtnList.stream().sorted(Comparator.comparing(BusiCategoryVO::getSort, return rtnList;
Comparator.nullsLast(Comparator.reverseOrder())))
.collect(Collectors.toList());
} }
/** /**
@ -152,12 +150,10 @@ public class BusiCategoryServiceImpl extends ServiceImpl<BusiCategoryMapper, Bus
/** /**
* 生成树结构 * 生成树结构修改版
* *
* @param list 网站栏目列表 * @param list 网站栏目列表
* @return java.util.List<com.ruoyi.busi.vo.BusiCategoryVO> * @return java.util.List<com.ruoyi.busi.vo.BusiCategoryVO>
* @author PQZ
* @date 14:11 2025/6/23
**/ **/
private List<BusiCategoryVO> buildCategoryTree(List<BusiCategory> list) { private List<BusiCategoryVO> buildCategoryTree(List<BusiCategory> list) {
// Map存放id到VO的映射 // Map存放id到VO的映射
@ -165,7 +161,7 @@ public class BusiCategoryServiceImpl extends ServiceImpl<BusiCategoryMapper, Bus
// 先将所有节点转换为VO并放入Map // 先将所有节点转换为VO并放入Map
for (BusiCategory category : list) { for (BusiCategory category : list) {
BusiCategoryVO vo = new BusiCategoryVO(); BusiCategoryVO vo = new BusiCategoryVO();
BeanUtils.copyProperties(category,vo); BeanUtils.copyProperties(category, vo);
vo.setId(category.getId()); vo.setId(category.getId());
vo.setLabel(category.getCatgName()); vo.setLabel(category.getCatgName());
idToNodeMap.put(vo.getId(), vo); idToNodeMap.put(vo.getId(), vo);
@ -183,9 +179,36 @@ public class BusiCategoryServiceImpl extends ServiceImpl<BusiCategoryMapper, Bus
parent.getChildren().add(node); parent.getChildren().add(node);
} }
} }
// 对所有层级节点进行排序
sortTreeNodes(roots);
return roots; return roots;
} }
/**
* 递归对树节点进行排序
*
* @param nodes 节点列表
*/
private void sortTreeNodes(List<BusiCategoryVO> nodes) {
if (nodes == null || nodes.isEmpty()) {
return;
}
// 对当前层级节点排序
nodes.sort(Comparator.comparing(BusiCategoryVO::getSort,
Comparator.nullsLast(Comparator.reverseOrder())));
// 递归对子节点排序
for (BusiCategoryVO node : nodes) {
if (node.getChildren() != null && !node.getChildren().isEmpty()) {
sortTreeNodes(node.getChildren());
}
}
}
/** /**
* @param id 查询的栏目ID * @param id 查询的栏目ID
* @return java.util.List<java.lang.String> * @return java.util.List<java.lang.String>
@ -207,54 +230,55 @@ public class BusiCategoryServiceImpl extends ServiceImpl<BusiCategoryMapper, Bus
**/ **/
@Override @Override
public List<BusiCategoryVO> dealFirstId(List<BusiCategoryVO> busiCategoryVOList) { public List<BusiCategoryVO> dealFirstId(List<BusiCategoryVO> busiCategoryVOList) {
busiCategoryVOList.forEach(item->{ busiCategoryVOList.forEach(item -> {
String thisMaxParentId = item.getId(); String thisMaxParentId = item.getId();
item.setMaxParentId(thisMaxParentId); item.setMaxParentId(thisMaxParentId);
if(null!=item.getChildren() && !item.getChildren().isEmpty()){ if (null != item.getChildren() && !item.getChildren().isEmpty()) {
//有子级 //有子级
this.setChildMaxParentId(item.getChildren(),thisMaxParentId); this.setChildMaxParentId(item.getChildren(), thisMaxParentId);
} }
}); });
return busiCategoryVOList; return busiCategoryVOList;
} }
private void setChildMaxParentId(List<BusiCategoryVO> childList,String maxParentId){ private void setChildMaxParentId(List<BusiCategoryVO> childList, String maxParentId) {
childList.forEach(item->{ childList.forEach(item -> {
item.setMaxParentId(maxParentId); item.setMaxParentId(maxParentId);
if(null!=item.getChildren()&& !item.getChildren().isEmpty()){ if (null != item.getChildren() && !item.getChildren().isEmpty()) {
this.setChildMaxParentId(item.getChildren(),maxParentId); this.setChildMaxParentId(item.getChildren(), maxParentId);
} }
}); });
} }
/** /**
* 给所有子级设置最父级ID并且反回map格式 * 给所有子级设置最父级ID并且反回map格式
* @author vinjor-M *
* @date 11:23 2025/7/19
* @param busiCategoryVOList 栏目树 * @param busiCategoryVOList 栏目树
* @return java.util.List<com.ruoyi.busi.vo.BusiCategoryVO> * @return java.util.List<com.ruoyi.busi.vo.BusiCategoryVO>
* @author vinjor-M
* @date 11:23 2025/7/19
**/ **/
@Override @Override
public Map<String,String> dealFirstIdRtnMap(List<BusiCategoryVO> busiCategoryVOList){ public Map<String, String> dealFirstIdRtnMap(List<BusiCategoryVO> busiCategoryVOList) {
Map<String,String> rtnMap = new HashMap<>(); Map<String, String> rtnMap = new HashMap<>();
busiCategoryVOList.forEach(item->{ busiCategoryVOList.forEach(item -> {
String thisMaxParentId = item.getId(); String thisMaxParentId = item.getId();
item.setMaxParentId(thisMaxParentId); item.setMaxParentId(thisMaxParentId);
rtnMap.put(item.getId(),thisMaxParentId); rtnMap.put(item.getId(), thisMaxParentId);
if(null!=item.getChildren() && !item.getChildren().isEmpty()){ if (null != item.getChildren() && !item.getChildren().isEmpty()) {
//有子级 //有子级
this.setChildMaxParentIdMap(item.getChildren(),thisMaxParentId,rtnMap); this.setChildMaxParentIdMap(item.getChildren(), thisMaxParentId, rtnMap);
} }
}); });
return rtnMap; return rtnMap;
} }
private void setChildMaxParentIdMap(List<BusiCategoryVO> childList,String maxParentId,Map<String,String> rtnMap){ private void setChildMaxParentIdMap(List<BusiCategoryVO> childList, String maxParentId, Map<String, String> rtnMap) {
childList.forEach(item->{ childList.forEach(item -> {
item.setMaxParentId(maxParentId); item.setMaxParentId(maxParentId);
rtnMap.put(item.getId(),maxParentId); rtnMap.put(item.getId(), maxParentId);
if(null!=item.getChildren()&& !item.getChildren().isEmpty()){ if (null != item.getChildren() && !item.getChildren().isEmpty()) {
this.setChildMaxParentIdMap(item.getChildren(),maxParentId,rtnMap); this.setChildMaxParentIdMap(item.getChildren(), maxParentId, rtnMap);
} }
}); });
} }

View File

@ -5,15 +5,15 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
druid: druid:
# # 主库数据源-点亮开发库 # # 主库数据源-点亮开发库
# master:
# url: jdbc:mysql://82.156.161.160:3306/dl_site_system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: site
# password: 123456
# 主库数据源-客户测试服务器
master: master:
url: jdbc:mysql://1.92.99.15:3306/dl_site_system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://82.156.161.160:3306/dl_site_system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: site username: site
password: 123456 password: 123456
# 主库数据源-客户生产服务器
# master:
# url: jdbc:mysql://8.220.74.244:3306/dl_site_system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: site
# password: Chengda@2025~
# 从库数据源 # 从库数据源
slave: slave:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭

View File

@ -7,7 +7,7 @@ ruoyi:
# 版权年份 # 版权年份
copyrightYear: 2025 copyrightYear: 2025
# 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath # 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath
profile: D:/ruoyi/uploadPath profile: /uploadPath
# 获取ip地址开关 # 获取ip地址开关
addressEnabled: false addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证 # 验证码类型 math 数字计算 char 字符验证
@ -146,10 +146,10 @@ xss:
# 阿里云OSS配置 # 阿里云OSS配置
aliyun: aliyun:
oss: oss:
end-point: oss-cn-qingdao.aliyuncs.com end-point: oss-eu-central-1.aliyuncs.com
access-key-id: LTAI5tLThQFWgMLRTf3siNjb access-key-id: LTAI5tB7zL8KuHDnMsdUhXRy
access-key-secret: M5HjOyB8ir5tYEPFOQwImfJNgsumaG access-key-secret: bZ28G69DLR6Q3WhvvrWyxWw3lEbfzk
bucket-name: dianliang123 bucket-name: sd-chengda
#google ads配置 #google ads配置
google: google:
ads: ads:

View File

@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, tenant_id from dl_busi_keyword select id, tenant_id from dl_busi_keyword
</sql> </sql>
<delete id="deleteByIdAndTenantId"> <delete id="deleteByIdAndTenantId">
DELETE dl_busi_keyword WHERE id =#{id} AND tenant_id=#{tenantId} DELETE FROM dl_busi_keyword WHERE id =#{id} AND tenant_id=#{tenantId}
</delete> </delete>
<select id="queryListPage" parameterType="BusiKeyword" resultMap="BusiKeywordResult"> <select id="queryListPage" parameterType="BusiKeyword" resultMap="BusiKeywordResult">

View File

@ -11,6 +11,7 @@
<result property="prodTitle" column="prod_title"/> <result property="prodTitle" column="prod_title"/>
<result property="prodKeyword" column="prod_keyword"/> <result property="prodKeyword" column="prod_keyword"/>
<result property="prodDescription" column="prod_description"/> <result property="prodDescription" column="prod_description"/>
<result property="showPlat" column="show_plat"/>
<result property="newsFrom" column="news_from"/> <result property="newsFrom" column="news_from"/>
<result property="publicDate" column="public_date"/> <result property="publicDate" column="public_date"/>
<result property="mainPic" column="main_pic"/> <result property="mainPic" column="main_pic"/>
@ -42,6 +43,7 @@
prod_title, prod_title,
prod_keyword, prod_keyword,
prod_description, prod_description,
show_plat,
news_from, news_from,
public_date, public_date,
main_pic, main_pic,
@ -106,6 +108,10 @@
AND product.news_from like concat('%', AND product.news_from like concat('%',
#{entity.newsFrom}, '%') #{entity.newsFrom}, '%')
</if> </if>
<if test="entity.showPlat != null and entity.showPlat != ''">
AND product.show_plat like concat('%',
#{entity.showPlat}, '%')
</if>
</where> </where>
GROUP BY GROUP BY
product.id product.id

View File

@ -9,6 +9,7 @@
<result property="prodId" column="prod_id"/> <result property="prodId" column="prod_id"/>
<result property="thirdSoft" column="third_soft"/> <result property="thirdSoft" column="third_soft"/>
<result property="national" column="national"/> <result property="national" column="national"/>
<result property="oceania" column="oceania"/>
<result property="thirdAccount" column="third_account"/> <result property="thirdAccount" column="third_account"/>
<result property="viewType" column="view_type"/> <result property="viewType" column="view_type"/>
<result property="pageUrl" column="page_url"/> <result property="pageUrl" column="page_url"/>
@ -27,7 +28,7 @@
<sql id="selectBusiThirdItemVo"> <sql id="selectBusiThirdItemVo">
select id, select id,
prod_id, prod_id,
third_soft, national, third_account, view_type, page_url, equipment, ip, tenant_id, creator, create_time, updater, update_time, del_flag third_soft, national, oceania,third_account, view_type, page_url, equipment, ip, tenant_id, creator, create_time, updater, update_time, del_flag
from dl_busi_third_item from dl_busi_third_item
</sql> </sql>
@ -39,6 +40,7 @@
<if test="entity.prodName != null and entity.prodName != ''">and dbpn.title LIKE CONCAT('%',#{entity.prodName},'%')</if> <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.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.national != null and entity.national != ''">and dbti.national LIKE CONCAT('%',#{entity.national},'%')</if>
<if test="entity.oceania != null and entity.oceania != ''">and dbti.national LIKE CONCAT('%',#{entity.oceania},'%')</if>
<if test="entity.thirdAccount != null and entity.thirdAccount != ''">and dbti.third_account LIKE CONCAT('%',#{entity.thirdAccount},'%')</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.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.pageUrl != null and entity.pageUrl != ''">and dbti.page_url LIKE CONCAT('%',#{entity.pageUrl},'%')</if>

View File

@ -4,14 +4,14 @@ VUE_APP_TITLE = 成事达管理平台
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'
# 成事达管理平台/开发环境 # 成事达管理平台/生产环境
VUE_APP_BASE_API = 'http://192.168.1.13:8099' VUE_APP_BASE_API = 'http://127.0.0.1:8099'
# 路由懒加载 # 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true VUE_CLI_BABEL_TRANSPILE_MODULES = true
# websocket # websocket
VUE_APP_WEBSOCKET = 'ws://localhost:8099/ws/asset/' VUE_APP_WEBSOCKET = 'ws://127.0.0.1:8099/ws/asset/'
# 产品、文章预览 # 产品、文章预览
VUE_APP_PREVIEW = 'http://192.168.1.13:3001/admin-preview/' VUE_APP_PREVIEW = 'https://www.cdtrucktralier.com/admin-preview/'

View File

@ -5,10 +5,13 @@ VUE_APP_TITLE = 成事达管理平台
ENV = 'production' ENV = 'production'
# 成事达管理平台/生产环境 # 成事达管理平台/生产环境
VUE_APP_BASE_API = 'http://1.92.99.15:8099' VUE_APP_BASE_API = 'https://admin.cdtrucktralier.com'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
# websocket # websocket
VUE_APP_WEBSOCKET = 'ws://1.92.99.15:8099/ws/asset/' VUE_APP_WEBSOCKET = 'wss://admin.cdtrucktralier.com/ws/asset/'
# 产品、文章预览 # 产品、文章预览
VUE_APP_PREVIEW = 'http://www.lighting-it.cn/admin-preview/' VUE_APP_PREVIEW = 'https://www.cdtrucktralier.com/admin-preview/'

View File

@ -205,31 +205,4 @@
</div> </div>
</div> </div>
</body> </body>
<!-- 客服聊天窗口代码 -->
<script>
window.difyChatbotConfig = {
token: 'BC985VI4DnedSaIQ',
baseUrl: 'http://101.245.103.204',
systemVariables: {
// user_id: 'YOU CAN DEFINE USER ID HERE',
// conversation_id: 'YOU CAN DEFINE CONVERSATION ID HERE, IT MUST BE A VALID UUID',
},
}
</script>
<script
src="http://101.245.103.204/embed.min.js"
id="BC985VI4DnedSaIQ"
defer>
</script>
<style>
#dify-chatbot-bubble-button {
background-color: #1C64F2 !important;
z-index: 50 !important;
}
#dify-chatbot-bubble-window {
width: 24rem !important;
height: 40rem !important;
z-index: 50 !important;
}
</style>
</html> </html>

View File

@ -4,31 +4,6 @@
<theme-picker /> <theme-picker />
</div> </div>
</template> </template>
<!-- 客服聊天窗口代码 -->
<script>
window.difyChatbotConfig = {
token: 'BC985VI4DnedSaIQ',
baseUrl: 'http://101.245.103.204',
systemVariables: {
// user_id: 'YOU CAN DEFINE USER ID HERE',
// conversation_id: 'YOU CAN DEFINE CONVERSATION ID HERE, IT MUST BE A VALID UUID',
},
}
</script>
<script
src="http://101.245.103.204/embed.min.js"
id="BC985VI4DnedSaIQ"
defer>
</script>
<style>
#dify-chatbot-bubble-button {
background-color: #1C64F2 !important;
}
#dify-chatbot-bubble-window {
width: 24rem !important;
height: 40rem !important;
}
</style>
<script> <script>
import ThemePicker from "@/components/ThemePicker"; import ThemePicker from "@/components/ThemePicker";
import Cookies from "js-cookie"; import Cookies from "js-cookie";

View File

@ -23,14 +23,18 @@ const websocket = {
console.log(e.data) console.log(e.data)
}else { }else {
console.log(e.data,'消息内容') console.log(e.data,'消息内容')
let messageData;
//这里捕获消息 //这里捕获消息
const messageData = JSON.parse(e.data) try {
// 触发事件通知 messageData = JSON.parse(e.data)
EventBus.$emit('newMessage', messageData); // 触发事件通知
//存储消息 EventBus.$emit('newMessage', messageData);
state.message.push(messageData); //存储消息
state.message.push(messageData);
}catch (e) {
console.log("无法识别的消息");
}
} }
}; };
state.socket.onerror= function () { state.socket.onerror= function () {
console.log("WebSocket连接发生错误"); console.log("WebSocket连接发生错误");

View File

@ -24,62 +24,62 @@
@click="handleAdd" @click="handleAdd"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
size="mini" <!-- size="mini"-->
@click="shareToTwitter" <!-- @click="shareToTwitter"-->
>Twitter</el-button> <!-- >Twitter</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
size="mini" <!-- size="mini"-->
@click="shareToFacebook" <!-- @click="shareToFacebook"-->
>Facebook</el-button> <!-- >Facebook</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
size="mini" <!-- size="mini"-->
@click="shareToLinkedin" <!-- @click="shareToLinkedin"-->
>Linkedin</el-button> <!-- >Linkedin</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
size="mini" <!-- size="mini"-->
@click="shareToPinterest" <!-- @click="shareToPinterest"-->
>Pinterest</el-button> <!-- >Pinterest</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
size="mini" <!-- size="mini"-->
@click="shareToWhatsapp" <!-- @click="shareToWhatsapp"-->
>Whatsapp</el-button> <!-- >Whatsapp</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
size="mini" <!-- size="mini"-->
@click="shareToWhatsapp2" <!-- @click="shareToWhatsapp2"-->
>Whatsapp8618253112969</el-button> <!-- >Whatsapp8618253112969</el-button>-->
</el-col> <!-- </el-col>-->
<el-col :span="1.5"> <!-- <el-col :span="1.5">-->
<el-button <!-- <el-button-->
type="primary" <!-- type="primary"-->
plain <!-- plain-->
size="mini" <!-- size="mini"-->
@click="shareToEmail" <!-- @click="shareToEmail"-->
>E-mail:alicesales@scdtrailer.com</el-button> <!-- >E-mail:alicesales@scdtrailer.com</el-button>-->
</el-col> <!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table <el-table

View File

@ -215,6 +215,7 @@ export default {
<style scoped> <style scoped>
.session-list { .session-list {
z-index: 999;
max-width: 350px; max-width: 350px;
max-height: 400px; max-height: 400px;
position: absolute; position: absolute;

View File

@ -6,6 +6,7 @@
<el-button type="success" @click="saveTmp"> </el-button> <el-button type="success" @click="saveTmp"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
<el-button type="warning" @click="checkContent">相似度检测</el-button> <el-button type="warning" @click="checkContent">相似度检测</el-button>
<el-button @click="preview">文章预览</el-button>
<el-button @click="toggleSideBar">{{ showKeywords ? '关闭' : '打开' }}关键词推荐</el-button> <el-button @click="toggleSideBar">{{ showKeywords ? '关闭' : '打开' }}关键词推荐</el-button>
</el-col> </el-col>
</el-row> </el-row>
@ -215,6 +216,7 @@
<el-button type="success" @click="saveTmp"> </el-button> <el-button type="success" @click="saveTmp"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
<el-button type="warning" @click="checkContent">相似度检测</el-button> <el-button type="warning" @click="checkContent">相似度检测</el-button>
<el-button @click="preview">文章预览</el-button>
</el-col> </el-col>
</el-row> </el-row>
@ -393,6 +395,17 @@ export default {
toggleSideBar() { toggleSideBar() {
this.showKeywords = !this.showKeywords this.showKeywords = !this.showKeywords
}, },
/**
* 预览文章
*/
preview(){
if(!this.form.id){
this.$modal.msgWarning("请先保存或暂存新闻信息!")
return
}
let url =this.previewPrex+this.form.id+"?private=1BC0FFEC2294283E9BDB89E188FCA574"
window.open(url)
},
// //
handleCommand(command, row) { handleCommand(command, row) {
switch (command) { switch (command) {

View File

@ -6,6 +6,7 @@
<el-button type="success" @click="saveTmp"> </el-button> <el-button type="success" @click="saveTmp"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
<el-button type="warning" @click="checkContent">相似度检测</el-button> <el-button type="warning" @click="checkContent">相似度检测</el-button>
<el-button @click="preview">产品预览</el-button>
<el-button @click="toggleSideBar">{{ showKeywords ? '关闭' : '打开' }}关键词推荐</el-button> <el-button @click="toggleSideBar">{{ showKeywords ? '关闭' : '打开' }}关键词推荐</el-button>
</el-col> </el-col>
</el-row> </el-row>
@ -201,6 +202,7 @@
<el-button type="success" @click="saveTmp"> </el-button> <el-button type="success" @click="saveTmp"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
<el-button type="warning" @click="checkContent">相似度检测</el-button> <el-button type="warning" @click="checkContent">相似度检测</el-button>
<el-button @click="preview">产品预览</el-button>
</el-col> </el-col>
</el-row> </el-row>
@ -372,6 +374,17 @@ export default {
toggleSideBar() { toggleSideBar() {
this.showKeywords = !this.showKeywords this.showKeywords = !this.showKeywords
}, },
/**
* 预览产品
*/
preview(){
if(!this.form.id){
this.$modal.msgWarning("请先保存或暂存产品信息!")
return
}
let url =this.previewPrex+this.form.id+"?private=CAC8F0807B8FB7EA72AF3596600F888A"
window.open(url)
},
// //
handleCommand(command, row) { handleCommand(command, row) {
switch (command) { switch (command) {

View File

@ -31,14 +31,14 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="请输入产品名称" prop="prodName"> <!-- <el-form-item label="请输入产品名称" prop="prodName">-->
<el-input <!-- <el-input-->
v-model="queryParams.prodName" <!-- v-model="queryParams.prodName"-->
placeholder="请输入产品名称" <!-- placeholder="请输入产品名称"-->
clearable <!-- clearable-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="来源国家" prop="national"> <el-form-item label="来源国家" prop="national">
<el-input <el-input
v-model="queryParams.national" v-model="queryParams.national"
@ -132,20 +132,20 @@
<el-table v-loading="loading" :data="thirdItemList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="thirdItemList" @selection-change="handleSelectionChange">
<el-table-column type="index" width="60" label="序号" align="center"/> <el-table-column type="index" width="60" label="序号" align="center"/>
<!-- <el-table-column type="selection" width="55" align="center" />--> <!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="产品名称" align="center" prop="prodName" :min-width="120"> <!-- <el-table-column label="产品名称" align="center" prop="prodName" :min-width="120">-->
<template slot="header" slot-scope="scope"> <!-- <template slot="header" slot-scope="scope">-->
<span>产品名称</span> <!-- <span>产品名称</span>-->
<el-tooltip class="item" effect="dark" content="鼠标单机数据可查看产品详情" <!-- <el-tooltip class="item" effect="dark" content="鼠标单机数据可查看产品详情"-->
placement="bottom" <!-- placement="bottom"-->
> <!-- >-->
<i class="el-icon-question"></i> <!-- <i class="el-icon-question"></i>-->
</el-tooltip> <!-- </el-tooltip>-->
</template> <!-- </template>-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
<span @click="goProdDetail(scope.row.prodId)" style="color: #1890ff;cursor: pointer" <!-- <span @click="goProdDetail(scope.row.prodId)" style="color: #1890ff;cursor: pointer"-->
>{{ scope.row.prodName }}</span> <!-- >{{ scope.row.prodName }}</span>-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="三方程序类型" align="center" prop="thirdSoft" width="100"> <el-table-column label="三方程序类型" align="center" prop="thirdSoft" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.third_soft" :value="scope.row.thirdSoft"/> <dict-tag :options="dict.type.third_soft" :value="scope.row.thirdSoft"/>