weaver_trunk_cli/pc4mobx/esearch/stores/weeso.js

662 lines
20 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {observable, action, toJS} from 'mobx';
import {WeaForm, WeaTableNew} from 'comsMobx';
import * as API from '../apis/weeso';
import {Modal, message} from 'antd';
import isEmpty from 'lodash/isEmpty';
import {WeaLocaleProvider} from 'ecCom';
import weesoSeachSetStore from './weesoSeachSetStore';
const {TableStore} = WeaTableNew;
const getLabel = WeaLocaleProvider.getLabel;
class WeesoStore {
//getBaseData获取是否成功
@observable spinning = false;
//数据加载
@observable loading = false;
//getBaseData返回数据
@observable baseDadas = {};
@observable contentType = [];
@observable searchType = [];
//保存微搜个人搜索设置
@observable numberValue = '';
@observable searchValue = '';
@observable sortValue = '';
//顶部热点、设置相关
@observable sysadminVisible = false;
@observable sysVisible = false;
@observable setVisible = false;
@observable perVisible = false;
//input输入框相关
@observable iconClick = false;
//tab默认显示
@observable defaultKey = 'CONTENT'; //查询类型 内容CONTENT、图片:PICTURE
@observable defalutMoreKey = 'ALL'; //查询模块 WF、DOC、WKP等
//微搜查询数据
@observable inputValue = ''; //搜索内容
@observable previousInputValue = '';
// @observable otherString = {}; //查询工具内容
@observable sourceType = 'PC';
@observable page = '1'; //当前页
@observable pages = '1'; //总共页数
//doSearch返回数据
@observable searchDatas = {};
@observable searchResult = [];
@observable emptyResult = '';
@observable imageResult = [];
//创建时间、日期等选择
@observable startDate = '';
@observable endDate = '';
//浏览按钮相关
@observable browsertype = '';
//判断是否调用doSearch
@observable isSearch = false;
//管理员权限
@observable showAdmin = false;
// 获取常用词关联
@observable hotkeys = [];
@observable showHotKeys = false;
//input上一排tab计算
@observable widthMap = {};
@observable copiedcontentType1 = []; //深拷贝后的contentType
@observable copiedcontentType2 = []; //dropdowm 剩余参数
//热词上下键切换效果
@observable myKey = -1;
@observable currentInputValue = '';
@observable isSearchSucess = false;
//工具展示改造
@observable showToolPopover = false;
@observable maskClosable = true;
// 高级搜索数据
@observable searchInfo = {};
@observable searchForm = new WeaForm();
@observable searchConditions = [];
@observable isShowSearchIcon = false; //是否显示高级搜索图标--选择搜搜条件,并搜索之后
@observable getTypeDatas = []; //保存高级搜索取到的值
@observable searchKey = '';
//记录用户使用习惯
@observable userDatas = [];
@observable userData1 = {
type: 'pageTrack',
userAgent: navigator.userAgent,
timeStamp: '',
timeStayTime: '',
}
@observable timeStamp1 = '';
@observable timeStamp2 = '';
//路由跳转记录
@observable isRouting = false;
@observable inputNode = null;
@observable selectionStart = 0;
@observable selectionEnd = 0;
//
@observable isHotkeySearch = false; //记录是否热词搜索
@observable isCustomer = false; //记录是否外部切入微搜
@observable workPlanVisible = false; //日程引入
@observable showSubmitIcon = false; //是否显示微搜结果提交按钮
@observable isLocked = false; //是否锁定搜索
@observable wpLoaded = false;
@observable smLoaded = false;
@observable supportSkipSearch = false;
@observable skipSearchParams = {
currentPage: 0,
lastRealNumber: 0,
};
//支持无侵入开发的参数-勿删
@observable searchPageParams = {};
@observable ecodeTitleParams = {
};
//支持无侵入开发的参数-勿删
@observable tagsDatas = {
commonConditions: [
{name: '1111', key: 1},
{name: '2222', key: 2, canDel: true},
],
conditionSpining: false,
conditionSetTableStore: new TableStore(),
logoVisible: true,
};
@observable cuspage_status = undefined;
@observable historySearchList = undefined;
@observable page_icon = undefined;
@observable page_resultLogo = undefined;
@observable page_resultShowLogo = undefined;
@observable page_showCommonConditions = undefined;
@observable page_showHistory = undefined;
@observable page_showIcon = undefined;
@observable page_title = undefined;
@observable tagList = [];
@observable urlParams = {};
@observable isSetServer = true;
@observable isSetServerMsg = '';
@action
//初始化微搜初始化页面
initWeeso = (page_uuid) => {
this.getBaseData(undefined, undefined, undefined, page_uuid);
this.isSearch = false;
this.inputValue = '';
this.showHotKeys = false;
this.iconClick = false;
this.defaultKey = 'CONTENT';
this.defalutMoreKey = 'ALL';
this.showHotKeys = false;
this.commonInit();
};
//初始化微搜查询页面
initWeesoResult = () => {
this.isSearch = true;
this.commonInit();
};
setWPLoaded = (bool) => this.wpLoaded = bool;
setSMLoaded = (bool) => this.smLoaded = bool;
//其他公共初始化
commonInit = () => {
this.showTool = false;
this.otherString = {};
this.pages = '1';
this.page = '1';
this.myKey = -1;
this.searchDatas = {};
this.imageResult = [];
this.emptyResult = '';
this.searchResult = [];
this.toolChangeInit();
}
//工具切换初始化
toolChangeInit = () => {
this.pages = '1';
this.page = '1';
this.myKey = -1;
this.searchDatas = {};
this.imageResult = [];
this.emptyResult = '';
this.searchResult = [];
}
setState = (params = {}, callback) => {
Object.keys(params).forEach(key => {
this[key] = params[key];
});
typeof callback == 'function' && callback();
return this;
}
setUrlParams = (params, callback) => {
this.urlParams = params;
typeof callback == 'function' && callback();
}
//获取初始数据
getBaseData = (showError = true, callRouting, callSearch, page_uuid, callback) => {
this.spinning = true;
let params = {
page_uuid: page_uuid
};
API.getBaseData(params).then(data => {
this.spinning = false;
if (data.FLAG == -1) {
this.isSetServer = false;
this.isSetServerMsg = data.MSG;
if(callRouting)callRouting();
if(showError){
Modal.error({
title: getLabel(15172, "系统提示"),
content: <span className="content-img" dangerouslySetInnerHTML={{__html: data.MSG}}/>,
});
}
}else {
this.isSetServer = true;
this.isSetServerMsg = '';
if(params.page_uuid && !(params.page_uuid === '' || params.page_uuid === 'FULLSEARCH')) {
this.defalutMoreKey = data.search_type;
}
if(callSearch)callSearch();
}
this.baseDadas = data;
this.contentType = data.contentType && data.contentType;
this.searchType = data.searchType && data.searchType;
this.searchInfo = data.searchInfo && data.searchInfo;
this.supportSkipSearch = data && data.supportSkipSearch ? data.supportSkipSearch : false;
this.changeKey(this.defalutMoreKey);
//topTabs初始
debugger
if(Object.keys(this.widthMap).length == 0){
this.copiedcontentType1 = this.contentType;
}
data.searchSet && data.searchSet.numperpage && data.searchSet.numperpage.length!==0 &&
data.searchSet.numperpage.map((item, index) => {
if (item.selected == true) {
this.numberValue = data.searchSet.numperpage[index].key
}
});
data.searchSet && data.searchSet.sortField && data.searchSet.sortField.length!==0 &&
data.searchSet.sortField.map((item, index) => {
if (item.selected == true) {
this.sortValue = data.searchSet.sortField[index].key
}
});
data.searchSet && data.searchSet.searchField && data.searchSet.searchField.length!==0 &&
data.searchSet.searchField.map((item, index) => {
if (item.selected == true) {
this.searchValue = data.searchSet.searchField[index].key
}
});
if(data.api_status) {
this.cuspage_status = data.cuspage_status;
this.historySearchList = data.historySearchList;
this.page_icon = data.page_icon;
this.page_resultLogo = data.page_resultLogo;
this.page_resultShowLogo = data.page_resultShowLogo;
this.page_showCommonConditions = data.page_showCommonConditions;
this.page_showHistory = data.page_showHistory;
this.page_showIcon = data.page_showIcon;
this.page_title = data.page_title;
this.tagList = data.tagList;
let urlP = {};
if(this.urlParams.type) {
urlP = {
...urlP,
search_type: this.urlParams.type
};
}
if(this.urlParams.hideTitle === 'true' || this.urlParams.hideTitle === '1') {
urlP = {
...urlP,
topTabsVisible: false
};
}
if(weesoSeachSetStore) {
weesoSeachSetStore.setState({
search_type: data.search_type,
page_descStr: data.page_descStr,
page_uuid: data.page_uuid,
topTabsVisible: data.search_type === 'ALL',
...urlP
});
}
}
if(callback)callback();
})
}
//tabs重排
resortTopTaps = () => {
debugger;
let
top = [], right = [], contentType = toJS(this.contentType), allWidth = 489;
//如果没有或者widthMap,不进行计算
if (!this.widthMap) return;
let currentWidth;
for (let key in this.widthMap) {
if (key == this.defalutMoreKey) {
currentWidth = this.widthMap[key];
}
}
let restWidth = allWidth - currentWidth - 10;
let sumWidth = 0, isTop = true;
contentType && contentType.length > 0 && contentType.forEach((item) => {
if (item.key == this.defalutMoreKey) {
if (isTop) {
restWidth += currentWidth;
sumWidth += currentWidth;
}
top.push(item)
} else {
sumWidth += this.widthMap[item.key];
// 二开 && sumWidth < restWidth
if (isTop ) {
top.push(item);
} else {
//isTop -- 保证不会出现上一个元素长了放不下把下一个元素放到top里面
isTop = false;
right.push(item)
}
}
this.copiedcontentType1 = top;
this.copiedcontentType2 = right;
})
}
//获取常用词关联
getAssociate = (params = {key: ''}) => {
API.getAssociate(params).then(result => {
this.hotkeys = result.result
})
}
//切换tab回调 -- 工具表单的处理(路由跳转也需要此处理)
changeKey = (key, isFirst = false) => {
this.searchForm = new WeaForm();
const source = toJS(this.searchInfo);
if (isEmpty(source) && isFirst) {
let interval = setInterval(() => {
if (!isEmpty(source)) {
this.searchConditions = source[key];
this.searchForm.initFormFieldObj(toJS(this.searchConditions));
clearInterval(interval);
}
}, 10)
} else {
if (!isEmpty(source)) {
this.searchConditions = source[key];
this.searchForm.initFormFieldObj(toJS(this.searchConditions));
}
}
}
resetForm = () => {
this.searchForm.reset();
}
//处理搜索工具表单数据
dealSearchParams = () => {
let searchDatas = {};
if (Object.keys(this.baseDadas).length == 0) {
return searchDatas = '';
} else {
let datas = toJS(this.searchConditions);
const searchParams = this.searchForm.getFormParams();
let
resultDay = toJS(this.baseDadas.timeSag.day) || [],
resultWeek = toJS(this.baseDadas.timeSag.week) || [],
resultMonth = toJS(this.baseDadas.timeSag.month) || [],
resultYear = toJS(this.baseDadas.timeSag.year) || [];
datas && datas.length>0 && datas.map(item => {
for (let key in searchParams) {
if (searchParams[key].toString() != '' && key == item.domkey[0]) {
const type = item.conditionType.toUpperCase();
if (type == 'BROWSER') {
if (item.domkey[0] == 'seccategory') {
searchDatas['firstDirectory'] = searchParams[key].split(',');
} else {
searchDatas[item.domkey] = searchParams[key].split(',');
}
} else if (type == 'RANGEPICKER') {
if (searchParams.CREATEDATE_date_select == '5') {
searchDatas.CREATEDATE = searchParams[key];
}
if(searchParams.BEGINDATE_date_select == '5'){
searchDatas.BEGINDATE = searchParams[key];
}
} else if (type == 'SELECT') {
if (key == 'CREATEDATE_date_select') {
if (searchParams[key] == '1') {
searchDatas.CREATEDATE = resultDay;
} else if (searchParams[key] == '2') {
searchDatas.CREATEDATE = resultWeek;
} else if (searchParams[key] == '3') {
searchDatas.CREATEDATE = resultMonth;
} else if (searchParams[key] == '4') {
searchDatas.CREATEDATE = resultYear;
}
} else if (key == 'BEGINDATE_date_select') {
if (searchParams[key] == '1') {
searchDatas.BEGINDATE = resultDay;
} else if (searchParams[key] == '2') {
searchDatas.BEGINDATE = resultWeek;
} else if (searchParams[key] == '3') {
searchDatas.BEGINDATE = resultMonth;
} else if (searchParams[key] == '4') {
searchDatas.BEGINDATE = resultYear;
}
} else {
searchDatas[key] = searchParams[key];
}
} else if (type == 'INPUT') {
searchDatas[key] = searchParams[key];
}
}
}
})
if(JSON.stringify(searchDatas) == '{}'){
return searchDatas = ''
}else {
return JSON.stringify(searchDatas);
}
}
}
preSearch = (params) => {
if(this.showToolPopover){this.showToolPopover = false;}
this.showHotKeys = false;
this.inputValue && this.inputValue !=='' && this.doSearch(undefined, params);
}
//微搜查询
doSearch = (params = {
key: this.inputValue,
contentType: this.defalutMoreKey,
// otherString: this.isCustomer ? '' : this.dealSearchParams(),
otherString: this.urlParams.otherString,
sourceType: this.sourceType,
searchType: this.defaultKey,
page: this.page
}, otherString) => {
// 如果是第三方页面走ecode xlz
if(params.contentType === 'customOdoc'){
typeof window.customSearch === 'function' && window.customSearch(params,otherString);
return;
}
if(this.isSetServer === false) return; // 未配置微搜
this.isLocked = true;
// this.showHotKeys = false;
// if(this.loading) return;
this.setState({
loading: true,
emptyResult: '',
showHotKeys: false,
searchResult: []
})
params = {
...params,
...otherString,
page_uuid: weesoSeachSetStore.page_uuid,
searchTagId: weesoSeachSetStore.searchTagParams.key || '',
...this.skipSearchParams
}
this.skipSearchParams.currentPage = params.page;
if(weesoSeachSetStore) {
weesoSeachSetStore.doSaveHistorySearch({
searchkey: params.key
});
}
API.doSearch(params).then(result => {
this.isLocked = false;
this.loading = false;
//this.hotkeys = [];
const normal = result.normalkey;
if ("-1" == result.FLAG || (normal == this.inputValue)) {
this.isSearchSucess = true;
this.searchDatas = result;
this.pages = result.pages;
this.skipSearchParams.lastRealNumber = result.lastRealNumber || -1;
// 这部分是对快速搜索时,判断上次请求是否完成,取最新的搜索结果-start
if (result.FLAG == -1) {
Modal.error({
title: getLabel(15172, "系统提示"),
content: <span className="content-img" dangerouslySetInnerHTML={{__html: result.MSG}}/>,
});
} else if (result.FLAG == -99 ) {
this.emptyResult = result.MSG
} else {
this.searchResult = result.result;
}
// 这部分是对快速搜索时,判断上次请求是否完成,取最新的搜索结果-end
if (result.FLAG != -1 && this.defaultKey == 'PICTURE') {
this.imageResult = this.imageResult.concat(result.result)
}
if(result.contentType) {
this.defalutMoreKey = result.contentType;
this.resortTopTaps();
}
}
//记录用户使用习惯
if (this.timeStamp1 == '') {//表示第一次进入
this.timeStamp2 = new Date().getTime();
this.timeStamp1 = this.timeStamp2;
} else {//此后进入,计算时间差,调接口记录数据
this.timeStamp1 = this.timeStamp2;
this.timeStamp2 = new Date().getTime();
this.userData1 = {
...this.userData1,
timeStamp: String(this.timeStamp1),
timeStayTime: String(this.timeStamp2 - this.timeStamp1)
}
this.userDatas.push(this.userData1);
this.collectUserData({userDatas: JSON.stringify(this.userDatas)});
}
})
}
//保存微搜个人搜索设置
saveSearchSet = (params = {
numperpage: this.numberValue,
searchField: this.searchValue,
sortField: this.sortValue
}) => {
API.saveSearchSet(params).then(result => {
if (result.flag == true) {
this.doSearch()
} else {
Modal.error({
title: getLabel(15172, "系统提示"),
content: getLabel(22620, "保存失败"),
});
}
})
}
//记录用户使用习惯
collectUserData = (userDatas) => {
API.collectUserData(userDatas).then(() => {
this.userDatas = []
}
)
}
//是否显示微搜结果提交按钮
showSubmit = () => {
API.showSubmit().then(result => {
this.showSubmitIcon = result.ret;
}
)
}
doSubmit = () => {
const params = {
key: this.inputValue,//搜索关键字
page: this.page, //当前页数
pageSize: this.numberValue, //每页显示条数
searchType: this.searchValue, //搜索类型CONTENTTITLE
sort: this.sortValue, //排序方式
contentType: this.defalutMoreKey, //搜索tab
sourceType: this.sourceType, //来源PCmobile
searchField: this.defaultKey, //搜索范围(内容,图片)
condition: this.isCustomer ? '' : this.dealSearchParams(), //高级搜索条件{json串}
}
Modal.confirm({
title: getLabel(15172,'系统提示'),
content: getLabel(384971,'不是我想要的搜索结果,确认提交?'),
okText: getLabel(826,'确定'),
cancelText: getLabel(31129,'取消'),
onOk: () => {this.submitResult({...params})}
});
}
//微搜结果提交
submitResult = (params) => {
API.submitResult(params).then(result => {
if(result.ret){
message.success(getLabel(83923,'提交成功!'));
}else {
message.error(getLabel(384535,'提交失败!'));
}
}
)
}
// 常用条件设置
getConditionSetTable = (params, callback) => {
API.getConditionSetTable(params).then(result => {
if(result.ret == 'noright'){
}else {
this.tagsDatas.conditionSetTableStore.getDatas(result.sessionkey, 1);
typeof callback === 'function' && callback();
}
})
}
// 获取加了二级域名的链接
addSubdomainUrl = (url = '') => {
let subdomain = window.ecologyContentPath || '';
//外部链接和已经加过的不用加
if( url === '' || subdomain === ''
|| url.indexOf('/') != 0
|| url.indexOf(subdomain+'/') == 0 ) return url;
return subdomain+url;
}
}
const weesoStore = new WeesoStore();
export default weesoStore;