/*
exp: var obj1 = { a: { name: 'a-1', headers: { token: '1', cookie: '2' } }, b: 'b', c: 'c' }
var obj2= { a: { name: '1-2', headers: { token: '2', oppenid: 'oppenid' } } }
JSON.stringify(deepMerge(obj1, obj2), null, 2)
"{
"a": {
"name": "1-2",
"headers": {
"token": "2",
"cookie": "2",
"oppenid": "oppenid"
}
},
"b": "b",
"c": "c"
}"
@desc: 深合并对象
*/
export const deepMerge = (obj1, obj2) => {
let key
for (key in obj2) {
// 如果target(也就是obj1[key])存在,且是对象的话再去调用deepMerge,否则就是obj1[key]里面没这个对象,需要与obj2[key]合并
obj1[key] =
obj1[key] && obj1[key].toString() === '[object Object]'
? deepMerge(obj1[key], obj2[key])
: (obj1[key] = obj2[key])
}
return obj1
}
// 驼峰 下划线 互相转换
// @params: isTrue 是否转换成驼峰;
// @params: name<string> 字符串名称;
export const toHumpLine = (name, isTrue) => {
// 下划线转换驼峰
function toHump(name) {
// eslint-disable-next-line no-useless-escape
return name.replace(/\_(\w)/g, function(all, letter) {
return letter.toUpperCase()
})
}
// 驼峰转换下划线
function toLine(name) {
return name.replace(/([A-Z])/g, '_$1').toLowerCase()
}
if (isTrue) {
return toHump(name)
} else {
return toLine(name)
}
}
// 数组内的对象的key转换成驼峰;
function _arrayKeyToHump(arr, isTrue = true) {
return arr.map(item => {
if (item && Array.isArray(item)) {
item = arrayKeyToHump(item, isTrue)
} else if (item && typeof item === 'object') {
item = objectKeyToHump(item, isTrue)
}
return item === null ? '' : item
})
}
// 对象内的key转换成驼峰;
function _objectKeyToHump(obj, isTrue = true) {
const itemCopy = {}
for (const key in obj) {
let value = obj[key]
if (value && Array.isArray(value)) {
value = arrayKeyToHump(value, isTrue)
} else if (value && typeof value === 'object') {
value = objectKeyToHump(value, isTrue)
}
itemCopy[toHumpLine(key, isTrue)] = value === null ? '' : value
}
return itemCopy
}
export const arrayKeyToHump = _arrayKeyToHump
export const objectKeyToHump = _objectKeyToHump
export const namespace = function() {
const a = arguments
let o = null
let i
let j
let d
for (i = 0; i < a.length; i = i + 1) {
d = a[i].split('.')
o = this
for (j = 0; j < d.length; j = j + 1) {
o[d[j]] = o[d[j]] || {}
o = o[d[j]]
}
}
return o
}
export const parseQueryString = url => {
url = url == null ? window.location.href : url
if (url.indexOf('?') === -1) {
return {}
}
const search = url.substring(url.lastIndexOf('?') + 1)
if (!search) {
return {}
}
return JSON.parse(
'{"' +
decodeURIComponent(search)
.replace(/"/g, '\\"')
.replace(/&/g, '","')
.replace(/=/g, '":"') +
'"}'
)
}
// 选择文件功能
export const upload = (callback = () => {}, opts = {}) => {
const input = document.createElement('input')
input.setAttribute('type', 'file')
input.setAttribute('accept', opts.accept || '')
input.setAttribute('multiple', opts.multiple || false)
input.addEventListener('change', function(e) {
const files = e.target.files
const formDatas = Array.prototype.map.call(files, file => {
const formData = new FormData()
formData.append(opts.name || 'file', file)
return formData
})
callback(formDatas)
input.remove()
})
document.getElementsByTagName('body')[0].appendChild(input)
input.click()
}
// 跳转,下载
export const navigateTo = (url, type = 'normal', params = {}) => {
const alink = document.createElement('a')
alink.setAttribute('href', url)
alink.setAttribute('target', '_blank')
if (type === 'donwload') {
alink.setAttribute('download', params.fileName || true)
}
document.getElementsByTagName('body')[0].appendChild(alink)
alink.click()
alink.remove()
}
export const componentTreeData = obj => {
const id = obj.id || 'id'
const parentId = obj.parentId || 'parentCode'
// const eleValLevel = obj.level || 'eleValLevel'
const arr = obj.arr || []
// 数组转tree
function composeTree(list = []) {
const data = JSON.parse(JSON.stringify(list)) // 浅拷贝不改变源数据
const result = []
if (!Array.isArray(data)) {
return result
}
data.forEach(item => {
delete item.children
})
const map = {}
data.forEach(item => {
map[item[id]] = item
})
data.forEach(item => {
const parent = map[item[parentId]]
if (parent && item[parentId]) {
;(parent.children || (parent.children = [])).push(item)
} else {
result.push(item)
}
})
return result
}
return composeTree(arr)
}
@desc vue 遍历渲染组件
const disabledAddDefaultTag = ['button', 'u-button', 'input', 'u-input'];
export default {
name: 'expand',
functional: true,
props: {
row: Object,
render: Function,
index: Number,
column: {
type: Object,
default: null,
},
options: Object,
defaultTag: {
type: String,
default: 'div',
},
},
render: (h, ctx) => {
const defaultTag = ctx.props.defaultTag;
const uiChildrenName = ctx.parent.$store.state.uiChildrenName;
// 当需要创建子元素的时候, 创建子元素。
function createDefaultTag(node) {
if (disabledAddDefaultTag.indexOf(node.name) !== -1) {
return [];
}
return h(ctx.props.options.insteadTag || defaultTag, {
...node,
});
}
// 判断是否包含不渲染子元素的标签, 如果是, 则不渲染子元素,依旧渲染原本的值(innerHTML, innerText)
function getIsCreateInnerHtml(node, nativeNode) {
if (disabledAddDefaultTag.indexOf(node.name) !== -1) {
return nativeNode;
}
return node;
}
// 渲染子组件
const getChildrenTextContent = function (children) {
if (!Array.isArray(children)) {
return [];
}
return children.map(function (node) {
const options2 = JSON.parse(JSON.stringify(node));
if (options2.domProps) {
delete options2.domProps.innerHTML;
delete options2.domProps.innerText;
}
return h(
node.name,
{
// ...options2,
...getIsCreateInnerHtml(options2, node),
},
[
node[uiChildrenName]
? []
.concat(createDefaultTag(node))
.concat(getChildrenTextContent(node[uiChildrenName]))
: [].concat(createDefaultTag(node)),
]
);
});
};
const options2 = JSON.parse(JSON.stringify(ctx.props.options));
if (options2.domProps) {
delete options2.domProps.innerHTML;
delete options2.domProps.innerText;
}
return h(
ctx.props.options.name,
{
// ...options2,
...getIsCreateInnerHtml(options2, ctx.props.options),
},
[
// 当有子标签, 会将父标签的内容放到子标签进行渲染,然后再在后面插入子标签。
// h(ctx.props.options.insteadTag || defaultTag, {
// ...ctx.props.options,
// }),
[].concat(createDefaultTag(ctx.props.options)),
// ...getChildrenTextContent(ctx.props.options[children]), // 加了他会导致重复渲染
...(ctx.children || []), // 不加他不渲染子组件
]
);
},
};
/*
* @Author: your name
* @Date: 2020-04-21 09:35:27
* @LastEditTime: 2020-04-25 20:06:37
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \dragUI-master\src\components\common\componentContainer\base.js
*/
import expand from '@/src/components/common/expand.js';
// import draggable from '@/src/common/js/vuedraggable';
import draggable from 'vuedraggable';
const children = 'children';
const outtime = 1000;
let isSend = true;
const addDiv = {
name: 'div',
style: {
color: 'red',
fontSize: '14px',
display: 'block',
padding: '10px',
border: '1px solid red',
},
class: {
addcomponent: true,
},
// attr: {
// isAdd: true
// },
// DOM 属性
domProps: {
// innerHTML: 'blue-view-dev2',
},
};
export default {
name: 'expand2',
functional: true,
components: { draggable, expand },
props: {
myList: {
type: [Array],
default: () => {
return () => {};
},
},
other: {
type: Object,
default: () => {
return {};
},
},
selectTagCallback: {
type: Function,
default: () => {},
},
draggableListeners: {
type: Object,
default: () => {
return {
end: function() {},
add: function() {},
update: function() {},
remove: function() {},
move: function() {},
clone: function() {},
change: function() {},
}
}
}
},
render: (h, ctx) => {
const uiChildrenName = ctx.parent.$store.state.uiChildrenName;
console.log(uiChildrenName);
const self = this;
const myList = ctx.props.myList || [];
const other = ctx.props.other;
const draggableListeners = ctx.props.draggableListeners
const handleInput =
(ctx.listeners && ctx.listeners.input) || function () {};
function getexpand(item, callback) {
let children = [];
if (item[uiChildrenName] && Array.isArray(item[uiChildrenName])) {
children = item[uiChildrenName];
}
return h(
'expand',
{
props: {
options: {
...item,
on: Object.assign((item.on || {}), {
"click":function (event) {
console.log('expand--click')
console.log(item)
ctx.props.selectTagCallback(item);
}
} )
},
},
},
[
getChildrenTextContent(children, (arr) => {
// 接受到子层的更改, 并传递给父层
callback &&
callback({
...item,
[uiChildrenName]: arr,
});
}),
]
);
}
function getChildrenTextContent(myList, callback) {
if (!Array.isArray(myList)) {
console.log('没有' + uiChildrenName);
return [];
}
const myListCopy = [...myList];
let children = myList.map((item, index) => {
return getexpand(item, (resItem) => {
// 接受到子层的修改, 并传递给父层
myListCopy[index] = resItem;
console.log('子集修改了,我监听到了', resItem);
callback && callback(myListCopy);
});
});
// // 子层全部修改完成候, 传递新的值给父层
// callback && callback(myListCopy);
return h(
'draggable',
{
props: {
value: myList,
...other,
},
style: {},
class: {
candraggable: true,
},
on: {
input: (e, ...args) => {
// console.log(this);
// myList = e;
// self.$emit('input', e);
// 获取最新移动的值,并传递给到上一层
console.log('列表被动了,我监听到了', e, args);
if (isSend) {
callback && callback(e);
isSend = false;
// 因为会报错: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node., 所以我强制用先修改的内容替代错误后的信息。
setTimeout(() => {
isSend = true;
}, outtime);
}
},
end: (evt) => {
console.log('end');
console.log(evt);
draggableListeners.end && draggableListeners.end(evt)
},
add: (evt) => {
console.log('add');
console.log(evt);
draggableListeners.add && draggableListeners.add(evt)
},
update: (evt) => {
console.log('update');
console.log(evt);
draggableListeners.update && draggableListeners.update(evt)
},
remove: (evt) => {
console.log('remove');
console.log(evt);
draggableListeners.remove && draggableListeners.remove(evt)
},
move: (evt) => {
console.log('move');
console.log(evt);
draggableListeners.move && draggableListeners.move(evt)
},
clone: (evt) => {
console.log('clone');
console.log(evt);
draggableListeners.clone && draggableListeners.clone(evt)
},
change: function (evt) {
console.log('change');
console.log(evt)
draggableListeners.change && draggableListeners.change(evt)
},
filter: function (evt) {
console.log('filter');
console.log(evt)
draggableListeners.change && draggableListeners.filter(evt)
},
},
},
[...children]
);
}
return getChildrenTextContent(myList, (arr) => {
// setTimeout(() => {
console.log('最终修改了,我监听到了', arr);
handleInput && handleInput(arr);
// }, 500);
});
},
updated: function () {
this.$nextTick(function () {
// Code that will run only after the
// entire view has been re-rendered
});
},
};
let uiId = 1;
let selectedUiIds = [];
let selectedUiIdObj = {};
// 深层添加id
export const deepAddId = (arr, childrenName = 'children') => {
return arr.map((item) => {
item.uiId = 'uid' + uiId++;
if (Array.isArray(item[childrenName]) && item[childrenName].length) {
item[childrenName] = deepAddId(item[childrenName]);
}
return item;
});
};
替换指定数组内的值
export const replaceArrItem = (arr, item, childrenName = 'children') => {
for (let key in arr) {
const arrItem = arr[key];
if (item.uiId === arrItem.uiId) {
arr[key] = item;
break;
} else if (Array.isArray(arrItem[childrenName])) {
arr[key][childrenName] = replaceArrItem(arrItem[childrenName], item);
}
}
return arr;
};
/*
desc: 树结构扁平化
*/
export const flatten = (data, uiChildrenName = 'children') => {
return data.reduce(
(arr, obj) =>
arr.concat(
[{ ...obj }],
flatten(obj[uiChildrenName] || [], uiChildrenName)
),
[]
);
};
/*
* @Author: your name
* @Date: 2020-05-20 10:49:26
* @LastEditTime: 2020-06-02 14:44:50
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \tydbweb\src\utils\index.js
*/
import moment from 'moment';
export const filterData = (state, stateName) =>
typeof state === 'object' ? state[stateName] : state;
const datyTimes = 86400000; // 一天转换的毫秒数
export const deleObj = (obj, key) => {
let obj2 = Object.assign({}, obj);
delete obj2[key];
return obj2;
};
export const validatorPhone = function () {
return (rule, value, callback) => {
const form = this.props.form;
if (
value &&
!/^1[3|4|5|8][0-9]\d{4,8}$/.test(form.getFieldValue('phone'))
) {
callback('请输入正确的手机号码');
} else {
callback();
}
};
};
export const deepFlatten = (arr) =>
[].concat(
...arr.map((v) =>
Array.isArray(v)
? deepFlatten(v)
: typeof v === 'object'
? Array.isArray(v.routes)
? deepFlatten(v.routes.concat(deleObj(v, 'routes')))
: v
: v
)
);
// 删除数组置顶元素
export const removeArrItem = (arr, validFunx) => {
arr.splice(
arr.findIndex((item) => validFunx(item)),
1
);
return arr;
};
export const parseQueryString = (url) => {
url = url == null ? window.location.href : url;
if (url.indexOf('?') === -1) {
return {};
}
const search = url.substring(url.lastIndexOf('?') + 1);
if (!search) {
return {};
}
return JSON.parse(
decodeURIComponent(
'{"' +
search.replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') +
'"}'
)
);
};
export const QueryString = (obj = {}) => {
let str = '';
for (var key in obj) {
if (obj[key]) {
str += '&' + key + '=' + obj[key];
}
}
if (str) {
str = str.slice(1);
}
return str;
};
// 根据value 获取key
export const getObjKey = (obj, value) => {
const arr = Object.entries(obj);
const values = arr.find((item) => item[1] === value);
if (values) {
return values[0];
}
return '';
};
export const Format = function (fmt) {
const self = this;
//author: meizz
var o = {
'M+': self.getMonth() + 1, //月份
'd+': self.getDate(), //日
'h+': self.getHours(), //小时
'm+': self.getMinutes(), //分
's+': self.getSeconds(), //秒
'q+': Math.floor((self.getMonth() + 3) / 3), //季度
S: self.getMilliseconds(), //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(
RegExp.$1,
(self.getFullYear() + '').substr(4 - RegExp.$1.length)
);
for (var k in o)
if (new RegExp('(' + k + ')').test(fmt))
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
);
return fmt;
};
//通过周取日期范围 year 年 weeks 周
function weekGetDate(year, weeks) {
var date = new Date(year, '0', '1');
let start = '';
let end = '';
let _start = '';
let _end = '';
let cnt = 0;
let nextYear = '';
let nextWeek = '';
let lastcnt = 0;
var time = date.getTime(); // 获取当前星期几,0:星期一
var _week = date.getDay(); //当这一年的1月1日为周日时则本年有54周,否则没有54周,没有则去除第54周的提示
if (_week !== 0) {
//一年53周情况
if (weeks === 54) {
return '今年没有54周';
}
cnt = 0; // 获取距离周末的天数
if (_week === 0) {
cnt = 7;
} else if (_week === 1) {
cnt = 6;
} else if (_week === 2) {
cnt = 5;
} else if (_week === 3) {
cnt = 4;
} else if (_week === 4) {
cnt = 3;
} else if (_week === 5) {
cnt = 2;
} else if (_week === 6) {
cnt = 1;
}
cnt += 1; //加1表示以星期一为一周的第一天 // 将这个长整形时间加上第N周的时间偏移
time += cnt * 24 * 3600000; //第2周开始时间
nextYear = new Date(parseInt(year, 10) + 1, '0', '1');
nextWeek = nextYear.getDay();
lastcnt = 0; //获取最后一周开始时间到周末的天数
if (nextWeek === 0) {
lastcnt = 6;
} else if (nextWeek === 1) {
lastcnt = 0;
} else if (nextWeek === 2) {
lastcnt = 1;
} else if (nextWeek === 3) {
lastcnt = 2;
} else if (nextWeek === 4) {
lastcnt = 3;
} else if (nextWeek === 5) {
lastcnt = 4;
} else if (nextWeek === 6) {
lastcnt = 5;
}
if (weeks === 1) {
//第1周特殊处理 // 为日期对象 date 重新设置成时间 time
start = Format.call(date, 'yyyy-MM-dd');
date.setTime(time - 24 * 3600000);
return start + '-----' + date;
} else if (weeks === 53) {
//第53周特殊处理
start = time + (weeks - 2) * 7 * 24 * 3600000; //第53周开始时间
end =
time +
(weeks - 2) * 7 * 24 * 3600000 +
lastcnt * 24 * 3600000 -
24 * 3600000; //第53周结束时间
date.setTime(start);
_start = Format.call(date, 'yyyy-MM-dd');
date.setTime(end);
_end = Format.call(date, 'yyyy-MM-dd');
return _start + '---' + _end;
} else {
start = time + (weeks - 2) * 7 * 24 * 3600000; //第n周开始时间
end = time + (weeks - 1) * 7 * 24 * 3600000 - 24 * 3600000; //第n周结束时间
date.setTime(start);
_start = Format.call(date, 'yyyy-MM-dd');
date.setTime(end);
_end = Format.call(date, 'yyyy-MM-dd');
return _start + '---' + _end;
}
} else {
//一年54周情况
cnt = 0; // 获取距离周末的天数
if (_week === 0 && weeks === 1) {
//第一周
cnt = 0;
} else if (_week === 0) {
cnt = 7;
} else if (_week === 1) {
cnt = 6;
} else if (_week === 2) {
cnt = 5;
} else if (_week === 3) {
cnt = 4;
} else if (_week === 4) {
cnt = 3;
} else if (_week === 5) {
cnt = 2;
} else if (_week === 6) {
cnt = 1;
}
cnt += 1; //加1表示以星期一为一周的第一天
// 将这个长整形时间加上第N周的时间偏移
time += 24 * 3600000; //第2周开始时间
nextYear = new Date(parseInt(year, 10) + 1, '0', '1');
nextWeek = nextYear.getDay();
lastcnt = 0; //获取最后一周开始时间到周末的天数
if (nextWeek === 0) {
lastcnt = 6;
} else if (nextWeek === 1) {
lastcnt = 0;
} else if (nextWeek === 2) {
lastcnt = 1;
} else if (nextWeek === 3) {
lastcnt = 2;
} else if (nextWeek === 4) {
lastcnt = 3;
} else if (nextWeek === 5) {
lastcnt = 4;
} else if (nextWeek === 6) {
lastcnt = 5;
}
if (weeks === 1) {
//第1周特殊处理
start = Format.call(date, 'yyyy-MM-dd');
date.setTime(time - 24 * 3600000);
// alert(start +'--'+ date);
return _start + '---' + date;
} else if (weeks === 54) {
//第54周特殊处理
start = time + (weeks - 2) * 7 * 24 * 3600000; //第54周开始时间
end =
time +
(weeks - 2) * 7 * 24 * 3600000 +
lastcnt * 24 * 3600000 -
24 * 3600000; //第53周结束时间
date.setTime(start);
_start = Format.call(date, 'yyyy-MM-dd');
date.setTime(end);
_end = Format.call(date, 'yyyy-MM-dd');
return _start + '---' + _end;
} else {
start = time + (weeks - 2) * 7 * 24 * 3600000; //第n周开始时间
end = time + (weeks - 1) * 7 * 24 * 3600000 - 24 * 3600000; //第n周结束时间
date.setTime(start);
_start = Format.call(date, 'yyyy-MM-dd');
date.setTime(end);
_end = Format.call(date, 'yyyy-MM-dd');
return _start + '---' + _end;
}
}
}
export const getRangDays = function (start, end) {
const msTimeStart = new Date(start.replace('-', '/')).getTime();
const msTimeEnd = new Date(end.replace('-', '/')).getTime();
let arr = [];
let msTimes = [];
[1, 2, 3, 4, 5, 6, 7].forEach((item) => {
arr.push(
moment(msTimeStart + datyTimes * item - datyTimes).format('YYYY-MM-DD')
);
msTimes.push(msTimeStart + datyTimes * item - datyTimes);
});
return {
msTimes,
strDates: arr,
msTimeStart,
msTimeEnd,
start,
end,
};
};
/*
const weekObj = getWeekDays(
moment(new Date()).format('YYYY'),
moment(new Date()).format('w')
);
weekStart: weekObj.start,
weekEnd: weekObj.end,
*/
// 获取从当天开始的连续七天时间的开始和结束时间。
export const getWeekDays = function (year, week) {
const datestr = weekGetDate(year, week);
return getRangDays(...datestr.split('---'));
};
// 获取本周开始时间和结束时间
export const getCurWeekDays = function(dateStr) {
// 第一步: 获取今天是本周的第几天
const weekOfday = moment(dateStr).format('E');
// 第二步: 获取本周周一的日期
const lastMonday = moment(dateStr).subtract(weekOfday - 1, 'days').format('YYYYMMDD');
// 第三步: 获取本周周末的日期
const lastSunday = moment(dateStr).add(7 - weekOfday, 'days').format('YYYYMMDD');
return {
start: lastMonday,
end: lastSunday
}
}
export const setHashSearchParams = (hash, value, key = 'curHeadTab') => {
let keyword = key;
const patten = new RegExp(keyword + '=[^\\/ | ^&]+', 'ig');
// const patten = new RegExp(keyword + '=[^\\/]', 'ig');
if (!hash) {
return hash + '#/searchParams=' + keyword + '=' + value;
} else if (hash.indexOf('searchParams') === -1) {
// 不存在searchParams, 插入searchParams
return hash.replace(
/#\//gi,
'#/searchParams=' + keyword + '=' + value + '/'
);
} else if (
hash.indexOf('searchParams') !== -1 &&
hash.indexOf(keyword) === -1
) {
// 存在searchParams, 但不存在[keyword]
// 如果没有mainTab
return hash.replace(
/searchParams=/gi,
'searchParams=' + keyword + '=' + value + '&'
);
}
return hash.replace(patten, keyword + '=' + value);
};
export const getPerWeekDay = (dateStr) => {
// datyTimes
if (!dateStr) {
return dateStr;
}
const d = new Date(dateStr.replace('-', '/')).getTime();
const times = d - datyTimes * 7;
return moment(times).format('YYYY-MM-DD');
};
export const getNextWeekDay = (dateStr) => {
// datyTimes
if (!dateStr) {
return dateStr;
}
const d = new Date(dateStr.replace('-', '/')).getTime();
const times = d + datyTimes * 7;
return moment(times).format('YYYY-MM-DD');
};
export const getPerMonth = (dateStr) => {
// datyTimes
if (!dateStr) {
return dateStr;
}
const startDate = moment(dateStr)
.month(moment(dateStr).month() - 1)
.startOf('month')
.format('YYYY-MM-DD');
const endDate = moment(dateStr)
.month(moment(dateStr).month() - 1)
.endOf('month')
.format('YYYY-MM-DD');
return {
startDate,
endDate,
};
};
export const getNextMonth = (dateStr) => {
// datyTimes
if (!dateStr) {
return dateStr;
}
const startDate = moment(dateStr)
.month(moment(dateStr).month() + 1)
.startOf('month')
.format('YYYY-MM-DD');
const endDate = moment(dateStr)
.month(moment(dateStr).month() + 1)
.endOf('month')
.format('YYYY-MM-DD');
return {
startDate,
endDate,
};
};
/*
const month = getCurMonth(new Date());
monthStart: month.startDate,
monthEnd: month.endDate,
*/
export const getCurMonth = (dateStr) => {
// datyTimes
if (!dateStr) {
return dateStr;
}
const startDate = moment(dateStr)
.month(moment(dateStr).month())
.startOf('month')
.format('YYYY-MM-DD');
const endDate = moment(dateStr)
.month(moment(dateStr).month())
.endOf('month')
.format('YYYY-MM-DD');
return {
startDate,
endDate,
};
};
export const getSearchParams = (location, callback) => {
let hash = location.hash;
let obj = {};
// 初始化页面
// 如果存在hash, 则修改赋值给本地mainTab
if (hash) {
// hash = hash + '/searchParams=';
let hashs = hash.split('/');
let searchParams = '';
hashs.forEach((element) => {
const paramIndex = element.indexOf('searchParams');
if (paramIndex !== -1) {
searchParams = element.slice(paramIndex).replace('searchParams=', '');
}
});
// str.replace(/searchParams=[^\/]+/ig, '-----')
console.log('searchParams', searchParams);
try {
obj = parseQueryString('?' + searchParams);
callback && callback(obj);
return false;
} catch {
callback && callback(obj);
return false;
}
}
callback && callback(obj);
return false;
};







网友评论