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: ,
});
}
}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: ,
});
} 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, //搜索类型(CONTENT,TITLE)
sort: this.sortValue, //排序方式
contentType: this.defalutMoreKey, //搜索tab
sourceType: this.sourceType, //来源(PC,mobile)
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;