Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
ZhangJianFrontEnd
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
vue-project
ZhangJian
ZhangJianFrontEnd
Commits
b5a36e86
Commit
b5a36e86
authored
Jul 13, 2021
by
zsh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加utils工具方法
parent
8105105e
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
102 additions
and
177 deletions
+102
-177
index.vue
src/components/echarts/index.vue
+22
-5
utils.js
src/public/utils/utils.js
+80
-172
No files found.
src/components/echarts/index.vue
View file @
b5a36e86
...
...
@@ -50,6 +50,14 @@ export default {
}
},
beforeDestroy
()
{
window
.
removeEventListener
(
'resize'
,
this
.
chartResize
)
if
(
this
.
chart
)
{
this
.
chart
.
dispose
()
this
.
chart
=
null
}
},
methods
:
{
/**
* @method initChart 初始化图表
...
...
@@ -58,20 +66,29 @@ export default {
const
{
id
=
''
,
option
=
{}
}
=
this
.
chartOpt
if
(
id
&&
option
)
{
const
currChartEl
=
document
.
getElementById
(
id
)
// 无需滚动的图表, 初始化时先销毁, 防止重复创建
if
(
!
this
.
isMove
)
{
this
.
echarts
.
dispose
(
currChartEl
)
// 先销毁, 防止重复创建
this
.
echarts
.
dispose
(
currChartEl
)
}
if
(
!
this
.
chart
)
{
this
.
chart
=
this
.
echarts
.
init
(
currChartEl
)
}
// 渲染图表
this
.
chart
.
setOption
(
option
,
true
)
setTimeout
(()
=>
{
// echarts图表自适应屏幕宽度
window
.
addEventListener
(
'resize'
,
()
=>
{
this
.
chart
.
resize
()
})
window
.
addEventListener
(
'resize'
,
this
.
chartResize
)
},
200
)
}
}
},
/**
* @method chartResize 重置图表
*/
chartResize
:
throttle
(
function
()
{
this
.
chart
&&
this
.
chart
.
resize
()
},
2000
)
}
}
</
script
>
src/public/utils/utils.js
View file @
b5a36e86
...
...
@@ -103,28 +103,17 @@ export default {
return
false
}
},
/**
* [replacePunctuation 替换字符串中的所有标点符号]
* @param {String} str 目标字符串
* @return {String} 去除标点符号的字符串
*/
replacePunctuation
(
str
)
{
if
(
typeof
str
!==
'string'
)
{
str
=
str
.
toString
()
}
return
str
.
replace
(
/
\+
/g
,
' '
)
// return str.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g, " ");
},
/**
* [currDates 当前日期]
* @return
{Object} y - 年, like => 2018
* @return
s {Object} y - 年, like => 2021
* m - 月, like => 03
* d - 日, like => 02
* h - 时, like => 09
* M - 分, like => 09
* s - 秒, like => 07
* ym - 年月, like => 20
18
04
* ymd - 年月日, like => 20
18
0402
* ym - 年月, like => 20
21
04
* ymd - 年月日, like => 20
21
0402
*/
currDates
()
{
let
self
=
this
...
...
@@ -148,6 +137,16 @@ export default {
ymd
}
},
/**
* @method getFirstEndDay 获取指定日期对应月份的第一天和最后一天
* @param {String|Date} assignDay 指定日期, 默认: 当前日期
* @param {Boolean} prevMonth 是否是上一个月, 默认: false
* @returns {Object}
* @param {String} firstDay 指定日期对应月份的第一天, 如: 2021-07-01
* @param {String} lastDay 指定日期对应月份的最后天, 如: 2021-07-31
* @param {String} 指定日期对应月份下个月的第一天, 如: 2021-07-01
*/
getFirstEndDay
(
assignDay
=
new
Date
(),
prevMonth
=
false
)
{
let
self
=
this
let
nowdays
=
new
Date
(
assignDay
)
...
...
@@ -173,8 +172,9 @@ export default {
nextMonthFirstDay
}
},
/**
*
[getDateStr 获取指定日期前后的日期]
*
@method getDateStr 获取指定日期前后的日期
* @param {String, Date} assignDay 指定日期, default: 当前日期
* @param {Int} addDayCount 指定天数, 0 - 今天, > 0 今天后的日期, < 0 今天前的日期
* @return {String} 指定日期前后的日期字符串
...
...
@@ -189,8 +189,9 @@ export default {
return
`
${
y
}
-
${
m
}
-
${
d
}
`
},
/**
*
[getScrollBarWidth 获取滚动条实际宽度]
*
@method getScrollBarWidth 获取滚动条实际宽度
* @return {Int} 滚动条实际宽度
*/
getScrollBarWidth
()
{
...
...
@@ -205,171 +206,31 @@ export default {
return
noScroll
-
scroll
},
/**
* [modalOpenEvent Modal显示事件]
* @description Modal显示时禁止浏览器滚动, 同时设置body 'padding-right' 为 '滚动条实际宽度', 防止抖动
* @param {Boolean} bl 是否显示Modal
* true - 显示Modal, 同时禁止浏览器滚动
* false - 隐藏Modal, 同时允许浏览器滚动
*/
modalOpenEvent
(
bl
)
{
let
self
=
this
let
oBody
=
document
.
body
let
scrollBarWidth
=
`
${
self
.
getScrollBarWidth
()}
px`
oBody
.
className
=
bl
?
'modal-open'
:
''
oBody
.
style
.
cssText
=
bl
?
`padding-right:
${
scrollBarWidth
}
`
:
''
},
/**
* 获取每月的活动事件
* 按月返回数据,由于有跨天的活动,所以需要处理活动日历数据,按日期展开ajax数据
* @param {*} data :shlib.events.month返回数据 result.datas
* @param {*} date : 日期对象{start: '2018-03-01',end:'2018-04-01'}
*/
getEventsData
(
data
,
date
)
{
if
(
data
.
length
===
0
)
{
return
[]
}
let
self
=
this
date
.
start
=
new
Date
(
date
.
start
+
' 00:00:00'
)
date
.
end
=
new
Date
(
date
.
end
+
' 00:00:00'
)
let
tempList
=
[]
// let events = []; // 日历活动提示
// let dates = []; // 保存日期列表
for
(
let
j
=
0
,
k
=
data
.
length
;
j
<
k
;
j
++
)
{
tempList
=
tempList
.
concat
(
spreadData
(
data
[
j
]))
}
tempList
.
sort
(
function
(
a
,
b
)
{
return
a
.
date
<
b
.
date
?
1
:
-
1
})
return
collectEventsData
(
tempList
)
// 判断活动是否跨天,如果是,则展开数据
function
spreadData
(
data
)
{
// console.log(data);
let
startTime
=
new
Date
(
data
.
v3
)
let
endTime
=
new
Date
(
data
.
v4
)
let
formatStart
=
''
let
formatEnd
=
''
let
tempList
=
[]
if
(
Date
.
parse
(
endTime
)
<
Date
.
parse
(
startTime
))
{
let
tempTime
=
startTime
startTime
=
endTime
endTime
=
tempTime
formatStart
=
self
.
formatDate
(
endTime
,
'-'
)
formatEnd
=
self
.
formatDate
(
startTime
,
'-'
)
}
else
{
formatStart
=
self
.
formatDate
(
startTime
,
'-'
)
formatEnd
=
self
.
formatDate
(
endTime
,
'-'
)
}
if
(
formatStart
.
timerStr
!==
formatEnd
.
timerStr
)
{
// 活动跨天
let
s
=
0
let
e
=
0
if
(
Date
.
parse
(
startTime
)
<
Date
.
parse
(
date
.
start
))
{
// 当前活动开始日期小于当前月份的开始日期
s
=
date
.
start
}
else
{
s
=
startTime
}
if
(
Date
.
parse
(
endTime
)
>
Date
.
parse
(
date
.
end
))
{
// 当前活动结束日期大于当前月份的结束日期
e
=
new
Date
(
date
.
end
)
e
.
setDate
(
0
)
}
else
{
e
=
endTime
}
// 活动跨天,进行展开
for
(
let
j
=
0
,
l
=
e
.
getDate
()
-
s
.
getDate
()
+
1
;
j
<
l
;
j
++
)
{
tempList
.
push
({
date
:
Date
.
parse
(
s
.
getFullYear
()
+
'-'
+
(
s
.
getMonth
()
+
1
)
+
'-'
+
(
s
.
getDate
()
+
j
)
+
' 00:'
+
j
+
':00'
),
header
:
s
.
getFullYear
()
+
'-'
+
self
.
zeroPadding
(
s
.
getMonth
()
+
1
)
+
'-'
+
self
.
zeroPadding
(
s
.
getDate
()
+
j
)
// id: data.id, // 活动详情页id
// cover: data.v7,
// title: data.v1,
// type: data.v5,
// organizers: data.v8 || '', // 实际暂无v8字段
// location: data.v6,
// time: self.timerHandle(data.v3, data.v4)
})
}
// console.log(tempList);
return
tempList
}
else
{
// 同一天
return
[{
date
:
Date
.
parse
(
data
.
v3
),
header
:
startTime
.
getFullYear
()
+
'-'
+
self
.
zeroPadding
(
startTime
.
getMonth
()
+
1
)
+
'-'
+
self
.
zeroPadding
(
startTime
.
getDate
())
// id: data.id, // 活动详情页id
// cover: data.v7,
// title: data.v1,
// type: data.v5,
// organizers: data.v8 || '', // 实际暂无v8字段
// location: data.v6,
// time: self.timerHandle(data.v3, data.v4)
}]
}
}
// 收集日历活动事件
function
collectEventsData
(
data
)
{
let
events
=
[]
// 日历活动提示
let
dates
=
[]
// 保存日期列表
for
(
let
j
=
0
,
k
=
data
.
length
;
j
<
k
;
j
++
)
{
const
element
=
data
[
j
]
let
dname
=
element
.
header
// let dname = element.time.split(' ')[0];
if
(
!
findDate
(
dname
))
{
dates
.
push
(
dname
)
findObj
(
dname
)
}
}
// console.log(events);
return
events
// 活动日历事件列表
function
findDate
(
dateName
)
{
// 查找日期列表是否已经存储了日期
if
(
dates
.
indexOf
(
dateName
)
<
0
)
{
return
false
}
return
true
}
// 遍历列表找对象
function
findObj
(
dateName
)
{
let
eventitem
=
{
date
:
dateName
,
eventCount
:
0
}
for
(
let
i
=
0
,
l
=
data
.
length
;
i
<
l
;
i
++
)
{
const
item
=
data
[
i
]
if
(
item
.
header
===
dateName
)
{
eventitem
.
eventCount
++
}
}
events
.
unshift
(
eventitem
)
}
}
},
/**
* 数组转对象
* @method array2obj 数组转对象
* @param {Array} array 源数组
* @param {String} key 指定对象的key值
*/
array2obj
(
array
,
key
)
{
var
resObj
=
{}
for
(
var
i
=
0
;
i
<
array
.
length
;
i
++
)
{
resObj
[
array
[
i
][
key
]]
=
array
[
i
]
const
resObj
=
{}
for
(
let
i
=
0
;
i
<
array
.
length
;
i
++
)
{
const
item
=
array
[
i
]
resObj
[
item
[
key
]]
=
item
}
return
resObj
},
// 生成随机字符串
/**
* @method randomStr 生成随机字符串
* @param {Int|Number} e 随机字符串长度
* @returns {String} n 生成后的随机字符串
*/
randomStr
(
e
)
{
e
=
e
||
6
var
t
=
'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
var
a
=
t
.
length
var
n
=
''
const
t
=
'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
const
a
=
t
.
length
let
n
=
''
for
(
let
i
=
0
;
i
<
e
;
i
++
)
{
n
+=
t
.
charAt
(
Math
.
floor
(
Math
.
random
()
*
a
))
}
...
...
@@ -435,5 +296,52 @@ export default {
context
.
font
=
fontStyle
const
elem
=
context
.
measureText
(
text
)
return
elem
},
/**
* @method debounce 函数防抖
* @param {Function} fn 回调函数
* @param {Int|Number} delay 延迟时间
*/
debounce
(
fn
,
delay
)
{
let
timer
=
null
// 声明计时器
return
function
()
{
const
context
=
this
const
args
=
arguments
clearTimeout
(
timer
)
timer
=
setTimeout
(
function
()
{
fn
.
apply
(
context
,
args
)
},
delay
)
}
},
/**
* @method throttle 函数节流
* @param {Function} fn 回调函数
* @param {Int|Number} delay 延迟间隔
* @param {Object} ctx 当前函数执行上下文对象
*/
throttle
(
fn
,
delay
,
ctx
)
{
let
isAvail
=
true
let
count
=
false
let
movement
=
null
return
function
()
{
count
=
true
let
args
=
arguments
if
(
isAvail
)
{
fn
.
apply
(
ctx
,
args
)
isAvail
=
false
count
=
false
setTimeout
(
function
()
{
isAvail
=
true
},
delay
)
}
if
(
count
)
{
clearTimeout
(
movement
)
movement
=
setTimeout
(
function
()
{
fn
.
apply
(
ctx
,
args
)
},
2
*
delay
)
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment