|
@@ -546,7 +546,9 @@
|
|
var selectIndex = []; //选中的编号
|
|
var selectIndex = []; //选中的编号
|
|
var setValue = 0; // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位类型, 3:全局公告行业
|
|
var setValue = 0; // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位类型, 3:全局公告行业
|
|
var state = 1;
|
|
var state = 1;
|
|
- var exactRuleArr =[];// 临时数组 用于存放规则字符串转换后的数据
|
|
|
|
|
|
+ var exactRuleTableArr =[];// 临时数组 用于存放规则字符串转换后的数据
|
|
|
|
+ var testexactRuleTableArr =[];// 临时数组 用于存放数据验证规则字符串转换后的数据
|
|
|
|
+ var exactRuleTmpMatchWay = [[],[]]; // 临时数组 用于存放新增页面的匹配方式的筛选项
|
|
$(document).ready(function () {
|
|
$(document).ready(function () {
|
|
var name1 = {{(session "user").name}};
|
|
var name1 = {{(session "user").name}};
|
|
if (name1 != dataMap.s_updateuser) {
|
|
if (name1 != dataMap.s_updateuser) {
|
|
@@ -945,6 +947,42 @@
|
|
}
|
|
}
|
|
}]
|
|
}]
|
|
});
|
|
});
|
|
|
|
+ exactRuleTableArr = exactRuleStrToArr( dataMap["s_exactRule"])
|
|
|
|
+ // 精准筛选规则表格
|
|
|
|
+ $('#exactRuleTable').DataTable({
|
|
|
|
+ "paging": false,
|
|
|
|
+ "lengthChange": false,
|
|
|
|
+ "searching": false,
|
|
|
|
+ "ordering": false,
|
|
|
|
+ "info": true,
|
|
|
|
+ "autoWidth": false,
|
|
|
|
+ "language": {
|
|
|
|
+ "url": "/dist/js/dataTables.chinese.lang"
|
|
|
|
+ },
|
|
|
|
+ "fnDrawCallback": function () {
|
|
|
|
+ this.api().column(0).nodes().each(function (cell, i) {
|
|
|
|
+ cell.innerHTML = i + 1;
|
|
|
|
+ });
|
|
|
|
+ this.api().column(2).nodes().each(function (cell, i) {
|
|
|
|
+ cell.innerHTML = '<div>' +
|
|
|
|
+ '<a onclick="editExacRuleClick(\'' + i + '\')" >编辑</a>  ' +
|
|
|
|
+ '<a onclick="delExacRuleClick(\'' + i + '\')" >删除</a>  ' +
|
|
|
|
+ '</div>';
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ "data": exactRuleTableArr,
|
|
|
|
+ "columns": [
|
|
|
|
+ {"data": null},
|
|
|
|
+ {
|
|
|
|
+ "data": function (row) {
|
|
|
|
+ return exactRuleDataFormat(row)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "data": null
|
|
|
|
+ },
|
|
|
|
+ ]
|
|
|
|
+ });
|
|
});
|
|
});
|
|
|
|
|
|
$('#province').selectpicker({
|
|
$('#province').selectpicker({
|
|
@@ -1706,7 +1744,8 @@
|
|
dataMap["s_globaladdkey"] = $('#g_addkey').val();
|
|
dataMap["s_globaladdkey"] = $('#g_addkey').val();
|
|
dataMap["s_globalnotkey"] = $('#g_notkey').val();
|
|
dataMap["s_globalnotkey"] = $('#g_notkey').val();
|
|
dataMap["s_globalclearkey"] = $('#s_globalclearkey').val();
|
|
dataMap["s_globalclearkey"] = $('#s_globalclearkey').val();
|
|
- dataMap["s_exactRule"] = $('#exactRule').val();
|
|
|
|
|
|
+ dataMap["s_exactRule"] = exactRuleArrToStr()
|
|
|
|
+ debugger
|
|
if (dataMap["s_customer"] == "" || dataMap["s_name"] == "" || dataMap["s_salesperson"] == "" || dataMap["s_serverperson"] == "") {
|
|
if (dataMap["s_customer"] == "" || dataMap["s_name"] == "" || dataMap["s_salesperson"] == "" || dataMap["s_serverperson"] == "") {
|
|
alert("请填写必须字段!")
|
|
alert("请填写必须字段!")
|
|
return
|
|
return
|
|
@@ -2559,7 +2598,33 @@
|
|
data: {"title": title, "detail": detail},
|
|
data: {"title": title, "detail": detail},
|
|
success: function (r) {
|
|
success: function (r) {
|
|
if (r.exactRule != ""){
|
|
if (r.exactRule != ""){
|
|
- $("#checkExactRule").text("规则:"+r.exactRule)
|
|
|
|
|
|
+ testexactRuleTableArr = exactRuleStrToArr( r.exactRule)
|
|
|
|
+ $('#checkExactRuleTable').DataTable({
|
|
|
|
+ "paging": false,
|
|
|
|
+ "lengthChange": false,
|
|
|
|
+ "searching": false,
|
|
|
|
+ "ordering": false,
|
|
|
|
+ "info": true,
|
|
|
|
+ "autoWidth": false,
|
|
|
|
+ "language": {
|
|
|
|
+ "url": "/dist/js/dataTables.chinese.lang"
|
|
|
|
+ },
|
|
|
|
+ "fnDrawCallback": function () {
|
|
|
|
+ this.api().column(0).nodes().each(function (cell, i) {
|
|
|
|
+ cell.innerHTML = i + 1;
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ "data": testexactRuleTableArr,
|
|
|
|
+ "columns": [
|
|
|
|
+ {"data": null},
|
|
|
|
+ {
|
|
|
|
+ "data": function (row) {
|
|
|
|
+ return exactRuleDataFormat(row)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ });
|
|
|
|
+
|
|
}else{
|
|
}else{
|
|
$("#checkExactRule").text("规则:")
|
|
$("#checkExactRule").text("规则:")
|
|
}
|
|
}
|
|
@@ -2739,7 +2804,9 @@
|
|
// 判断是否设置关键词
|
|
// 判断是否设置关键词
|
|
|
|
|
|
// 判断是否设置关键词匹配方式
|
|
// 判断是否设置关键词匹配方式
|
|
-
|
|
|
|
|
|
+ //
|
|
|
|
+ $("#modal-add-exactRule select[name='groupSelect']").empty()
|
|
|
|
+ debugger
|
|
// 新增精准筛选规则弹框
|
|
// 新增精准筛选规则弹框
|
|
// 请求分组列表接口获取数据
|
|
// 请求分组列表接口获取数据
|
|
$.ajax({
|
|
$.ajax({
|
|
@@ -2753,7 +2820,7 @@
|
|
var groupOption = document.createElement('option');
|
|
var groupOption = document.createElement('option');
|
|
groupOption.innerText =r.data[i].name
|
|
groupOption.innerText =r.data[i].name
|
|
groupOption.value = r.data[i].name
|
|
groupOption.value = r.data[i].name
|
|
- $("select[name='groupSelect']").append(groupOption)
|
|
|
|
|
|
+ $("#modal-add-exactRule select[name='groupSelect']").append(groupOption)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -2763,35 +2830,55 @@
|
|
}
|
|
}
|
|
// 精准筛选规则-新增按钮
|
|
// 精准筛选规则-新增按钮
|
|
function addExactRule(){
|
|
function addExactRule(){
|
|
- // groupList()
|
|
|
|
- // $(".addGroup").hide()
|
|
|
|
-
|
|
|
|
|
|
+ $("#insertexactRule .exact-rule-2").addClass("insertexactRule-form")
|
|
$("#insertexactRule .exact-rule-2").show()
|
|
$("#insertexactRule .exact-rule-2").show()
|
|
$("#addExactRuleButton").hide()
|
|
$("#addExactRuleButton").hide()
|
|
// $(".insertexactRule-form").selectpicker("refresh");
|
|
// $(".insertexactRule-form").selectpicker("refresh");
|
|
}
|
|
}
|
|
// 精准筛选规则-新增精准匹配规则保存按钮点击事件
|
|
// 精准筛选规则-新增精准匹配规则保存按钮点击事件
|
|
function add_exactRule_save(){
|
|
function add_exactRule_save(){
|
|
-
|
|
|
|
|
|
+ debugger
|
|
// 获取值
|
|
// 获取值
|
|
- document.querySelector("#insertexactRule > div.insertexactRule-form.exact-rule-1 > div:nth-child(1) > div > select")
|
|
|
|
- // 更新exactRuleArr 临时数组
|
|
|
|
|
|
+ let ruleArr = []
|
|
|
|
+ let formList = $("#insertexactRule .insertexactRule-form")
|
|
|
|
+ for (let i = 0; i < formList.length; i++) {
|
|
|
|
+ let groupName = formList[i].querySelector('[name=groupSelect]').value
|
|
|
|
+ let count = formList[i].querySelector('[name=count]').value
|
|
|
|
+ // 这是因为现在新增的表单是写死的两个
|
|
|
|
+ let tmp = '#insertexactRule .exact-rule-'+(i+1)+' select[name=matchWay]'
|
|
|
|
+ let matchWay = $(tmp).val();
|
|
|
|
+ if (groupName==""||matchWay.length==0||count==""){
|
|
|
|
+ showMsg("必填项缺失")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ for (let j = 0; j < matchWay.length; j++) {
|
|
|
|
+ let rule = {
|
|
|
|
+ "group":groupName,"match_way":matchWay[j],"count":count
|
|
|
|
+ }
|
|
|
|
+ ruleArr.push(rule)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 保存到exactRuleTableArr 临时数组
|
|
|
|
+ exactRuleTableArr.push(ruleArr)
|
|
|
|
+ $('#exactRuleTable').dataTable().fnClearTable();
|
|
|
|
+ $('#exactRuleTable').dataTable().fnAddData(exactRuleTableArr);
|
|
|
|
+ if (exactRuleTableArr.length == 0) {
|
|
|
|
+ $('#exactRuleTable').dataTable().fnClearTable();
|
|
|
|
+ }
|
|
|
|
+ $("#modal-add-exactRule").modal("hide");
|
|
|
|
|
|
- // 转化成 规则保存到dataMap["s_exactRule"]
|
|
|
|
- exactRuleArrToStr()
|
|
|
|
- //
|
|
|
|
}
|
|
}
|
|
// 精准筛选规则-临时数组转换成规则字符串
|
|
// 精准筛选规则-临时数组转换成规则字符串
|
|
// [[{"group":"A","match_way":"content","count":5},{},{}],[]]
|
|
// [[{"group":"A","match_way":"content","count":5},{},{}],[]]
|
|
// (title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)
|
|
// (title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)
|
|
function exactRuleArrToStr(){
|
|
function exactRuleArrToStr(){
|
|
let ruleStrArr = []
|
|
let ruleStrArr = []
|
|
- for (let i = 0; i < exactRuleArr.length; i++) {
|
|
|
|
|
|
+ for (let i = 0; i < exactRuleTableArr.length; i++) {
|
|
let rulesArr = [];
|
|
let rulesArr = [];
|
|
- for (let j = 0; j < exactRuleArr[i].length; j++) {
|
|
|
|
- let count =exactRuleArr[i][j].count-1
|
|
|
|
- let group = exactRuleArr[i][j].group
|
|
|
|
- let match_way = exactRuleArr[i][j].match_way
|
|
|
|
|
|
+ for (let j = 0; j < exactRuleTableArr[i].length; j++) {
|
|
|
|
+ let count =exactRuleTableArr[i][j].count-1
|
|
|
|
+ let group = exactRuleTableArr[i][j].group
|
|
|
|
+ let match_way = exactRuleTableArr[i][j].match_way
|
|
let rule = match_way+"_"+group+">"+count
|
|
let rule = match_way+"_"+group+">"+count
|
|
rulesArr.push(rule)
|
|
rulesArr.push(rule)
|
|
}
|
|
}
|
|
@@ -2803,16 +2890,14 @@
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- dataMap["s_exactRule"] = ruleStrArr.join(" or ")
|
|
|
|
|
|
+ return ruleStrArr.join(" or ")
|
|
}
|
|
}
|
|
// (title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)
|
|
// (title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)
|
|
// 精准筛选规则-规则字符串转换成临时数组 仅支持这种格式 (title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)
|
|
// 精准筛选规则-规则字符串转换成临时数组 仅支持这种格式 (title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)
|
|
- // 返回值 status true 成功 false 转换失败
|
|
|
|
// 分组名称不要包含公式中的符号 : 下划线、>、()、or、and
|
|
// 分组名称不要包含公式中的符号 : 下划线、>、()、or、and
|
|
- function exactRuleArrToStr() {
|
|
|
|
- // let exactRuleStr = dataMap["s_exactRule"]
|
|
|
|
- let exactRuleStr = "(title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)"
|
|
|
|
- debugger
|
|
|
|
|
|
+ function exactRuleStrToArr( exactRuleStr) {
|
|
|
|
+ let exactRuleTableArrTmp = []
|
|
|
|
+ // let exactRuleStr = "(title_A>0 and content_B>8) or title_B>4 or (content_A>7 and content_B>1)"
|
|
let exactRuleList = exactRuleStr.split(" or ") // 分割成单条规则
|
|
let exactRuleList = exactRuleStr.split(" or ") // 分割成单条规则
|
|
for (let i=0; i< exactRuleList.length; i++) {
|
|
for (let i=0; i< exactRuleList.length; i++) {
|
|
let exactRuleTmp = exactRuleList[i]
|
|
let exactRuleTmp = exactRuleList[i]
|
|
@@ -2827,14 +2912,14 @@
|
|
let singleRuleSplit = singleRule.split("_")
|
|
let singleRuleSplit = singleRule.split("_")
|
|
if (singleRuleSplit.length<2){
|
|
if (singleRuleSplit.length<2){
|
|
console.log("singleRuleSplit 长度不够",singleRuleSplit)
|
|
console.log("singleRuleSplit 长度不够",singleRuleSplit)
|
|
- return false
|
|
|
|
|
|
+ return
|
|
}
|
|
}
|
|
let matchWay = singleRuleSplit[0] // 第一位是匹配方式
|
|
let matchWay = singleRuleSplit[0] // 第一位是匹配方式
|
|
// 然后接着分割出分组名称和次数 使用 _
|
|
// 然后接着分割出分组名称和次数 使用 _
|
|
let singleRuleSplit2 = singleRuleSplit[1].split(">")
|
|
let singleRuleSplit2 = singleRuleSplit[1].split(">")
|
|
if (singleRuleSplit2.length<2){
|
|
if (singleRuleSplit2.length<2){
|
|
console.log("singleRuleSplit2 长度不够",singleRuleSplit2)
|
|
console.log("singleRuleSplit2 长度不够",singleRuleSplit2)
|
|
- return false
|
|
|
|
|
|
+ return
|
|
}
|
|
}
|
|
let groupName = singleRuleSplit2[0]
|
|
let groupName = singleRuleSplit2[0]
|
|
let count = singleRuleSplit2[1]
|
|
let count = singleRuleSplit2[1]
|
|
@@ -2844,36 +2929,115 @@
|
|
}
|
|
}
|
|
rulesArr.push(rule)
|
|
rulesArr.push(rule)
|
|
}
|
|
}
|
|
- exactRuleArr.push(rulesArr)
|
|
|
|
|
|
+ exactRuleTableArrTmp.push(rulesArr)
|
|
}
|
|
}
|
|
|
|
+ return exactRuleTableArrTmp;
|
|
}
|
|
}
|
|
- // 精准筛选规则-铺列表页面
|
|
|
|
- function exactRuleTableShow(){
|
|
|
|
- let ruleStrArr = []
|
|
|
|
- for (let i = 0; i < exactRuleArr.length; i++) {
|
|
|
|
- let rulesArr = [];
|
|
|
|
- for (let j = 0; j < exactRuleArr[i].length; j++) {
|
|
|
|
- let count =exactRuleArr[i][j].count-1
|
|
|
|
- let group = exactRuleArr[i][j].group
|
|
|
|
- let match_way = exactRuleArr[i][j].match_way
|
|
|
|
- let rule = match_way+"_"+group+">"+count
|
|
|
|
- rulesArr.push(rule)
|
|
|
|
- }
|
|
|
|
- if (rulesArr.length>1){ // 拼接小括号
|
|
|
|
- ruleStrArr.push("("+rulesArr.join(" and ")+")")
|
|
|
|
|
|
+
|
|
|
|
+ const matchWayMap = {
|
|
|
|
+ "title":"标题",
|
|
|
|
+ "content":"全文"
|
|
|
|
+ }
|
|
|
|
+ // 规则数组转换列表字符串
|
|
|
|
+ function exactRuleDataFormat(contentArr ){
|
|
|
|
+ // keyArr 定义数组 维持最后有序
|
|
|
|
+ let keyArr = []
|
|
|
|
+ // 合并 标题正文 如果
|
|
|
|
+ let tmpDict = {}
|
|
|
|
+ for (let i = 0; i < contentArr.length; i++) {
|
|
|
|
+ let keyGroupCount = contentArr[i].group+"_"+ contentArr[i].count
|
|
|
|
+ if (tmpDict.hasOwnProperty(keyGroupCount)){
|
|
|
|
+ tmpDict[keyGroupCount].match_way.add(matchWayMap[contentArr[i].match_way])
|
|
}else {
|
|
}else {
|
|
- if (rulesArr.length>0){
|
|
|
|
- ruleStrArr.push(rulesArr[0])
|
|
|
|
|
|
+ let set = new Set();
|
|
|
|
+ tmpDict[keyGroupCount] = {
|
|
|
|
+ "group":contentArr[i].group,"match_way":set.add(matchWayMap[contentArr[i].match_way]),"count":contentArr[i].count
|
|
}
|
|
}
|
|
|
|
+ keyArr.push(keyGroupCount)
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ let str = ""
|
|
|
|
+ for (let tmpDictKey in keyArr) {
|
|
|
|
+ str += "关键词分组:"+tmpDict[keyArr[tmpDictKey]].group+",出现次数>="+tmpDict[keyArr[tmpDictKey]].count+",匹配方式:"+Array.from(tmpDict[keyArr[tmpDictKey]].match_way).join(",")+";"
|
|
|
|
+ }
|
|
|
|
+ return str
|
|
}
|
|
}
|
|
- // 精准筛选规则-编辑规则页面
|
|
|
|
- function exactRuleEdit(){
|
|
|
|
|
|
+ // 删除 点击事件
|
|
|
|
+ function delExacRuleClick(index) {
|
|
|
|
+ index = parseInt(index)
|
|
|
|
+ showConfirm("确定删除?", function () {
|
|
|
|
+ exactRuleTableArr = $.grep(exactRuleTableArr,function (n,i) {
|
|
|
|
+ return i!==index
|
|
|
|
+ })
|
|
|
|
+ $('#exactRuleTable').dataTable().fnClearTable();
|
|
|
|
+ $('#exactRuleTable').dataTable().fnAddData(exactRuleTableArr);
|
|
|
|
+ if (exactRuleTableArr.length == 0) {
|
|
|
|
+ $('#exactRuleTable').dataTable().fnClearTable();
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
|
|
}
|
|
}
|
|
- // 精准筛选规则-编辑规则页面
|
|
|
|
- function exactRuleDelete(){
|
|
|
|
|
|
+ // 编辑点击事件
|
|
|
|
+ function editExacRuleClick(index){
|
|
|
|
+ let contentArr = exactRuleTableArr[index]
|
|
|
|
+ // keyArr 定义数组 维持最后有序
|
|
|
|
+ let keyArr = []
|
|
|
|
+ // 合并 标题正文 如果
|
|
|
|
+ let tmpDict = {}
|
|
|
|
+ for (let i = 0; i < contentArr.length; i++) {
|
|
|
|
+ let keyGroupCount = contentArr[i].group+"_"+ contentArr[i].count
|
|
|
|
+ if (tmpDict.hasOwnProperty(keyGroupCount)){
|
|
|
|
+ tmpDict[keyGroupCount].match_way.add(contentArr[i].match_way)
|
|
|
|
+ }else {
|
|
|
|
+ let set = new Set();
|
|
|
|
+ tmpDict[keyGroupCount] = {
|
|
|
|
+ "group":contentArr[i].group,"match_way":set.add(contentArr[i].match_way),"count":contentArr[i].count
|
|
|
|
+ }
|
|
|
|
+ keyArr.push(keyGroupCount)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(keyArr.length===0){
|
|
|
|
+ showTip("数据有误")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(keyArr.length==2) { // 铺俩
|
|
|
|
+ $("#").val(tmpDict[keyArr[0]].count)
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ let str = ""
|
|
|
|
+ for (let tmpDictKey in keyArr) {
|
|
|
|
+ str += "关键词分组:"+tmpDict[keyArr[tmpDictKey]].group+",出现次数>="+tmpDict[keyArr[tmpDictKey]].count+",匹配方式:"+Array.from(tmpDict[keyArr[tmpDictKey]].match_way).join(",")+";"
|
|
|
|
+ }
|
|
|
|
+ // 铺数据
|
|
|
|
+ $.ajax({
|
|
|
|
+ url: "/service/cuser/groupList",
|
|
|
|
+ type: "post",
|
|
|
|
+ data: {"id": dataMap.id},
|
|
|
|
+ async: false,
|
|
|
|
+ success: function (r) {
|
|
|
|
+ if (r.data) {
|
|
|
|
+ for (var i in r.data) {
|
|
|
|
+ var groupOption = document.createElement('option');
|
|
|
|
+ groupOption.innerText =r.data[i].name
|
|
|
|
+ groupOption.value = r.data[i].name
|
|
|
|
+ groupOption.selected = true
|
|
|
|
+ if (selectElement.options[i].value === selectedValue) {
|
|
|
|
+ selectElement.options[i].selected = true;
|
|
|
|
+ $("#modal-edit-exactRule select[name='groupSelect']").append(groupOption)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }})
|
|
|
|
+
|
|
|
|
+ $("#modal-edit-exactRule").modal("show");
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ function edit_exactRule_save(index){
|
|
|
|
+ debugger
|
|
}
|
|
}
|
|
|
|
+ // 判断是否设置关键词
|
|
|
|
+
|
|
|
|
+ // 判断是否设置匹配方式
|
|
|
|
+
|
|
</script>
|
|
</script>
|