n20-common-lib 1.3.111 → 1.3.112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/assets/css/_coreLib.scss +1 -1
- package/src/assets/css/cl-date-quarter.scss +61 -0
- package/src/components/DateSelect/index.vue +143 -0
- package/src/components/DateSelect/quarterDatePicker.vue +174 -0
- package/src/index.js +8 -0
- package/src/utils/storagePro.js +39 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n20-common-lib",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.112",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"dayjs": "*",
|
|
47
47
|
"js-cookie": "^3.0.1",
|
|
48
48
|
"jsonwebtoken": "^8.5.1",
|
|
49
|
+
"lz-string": "^1.4.4",
|
|
49
50
|
"normalize.css": "^8.0.1",
|
|
50
51
|
"numerify": "*",
|
|
51
52
|
"panzoom": "*",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
@import '../../plugins/Print/print.scss';
|
|
35
35
|
@import './select.scss';
|
|
36
36
|
@import './plain-text.scss';
|
|
37
|
-
|
|
37
|
+
@import './cl-date-quarter.scss';
|
|
38
38
|
/* 临时引入 */
|
|
39
39
|
@import '../../components/ChildRange/style.scss';
|
|
40
40
|
@import '../../components/PageHeader/style.scss';
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
.n20-date-select {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
width: 285px;
|
|
4
|
+
border: 1px solid var(--border-color-base);
|
|
5
|
+
border-radius: var(--border-radius-base);
|
|
6
|
+
|
|
7
|
+
.el-select .el-input__inner {
|
|
8
|
+
border: none;
|
|
9
|
+
border-radius: 4px 0 0 4px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.el-select .el-input__inner:active,
|
|
13
|
+
.el-select .el-input__inner:hover,
|
|
14
|
+
.el-select .el-input__inner:focus {
|
|
15
|
+
box-shadow: none;
|
|
16
|
+
border-color: none;
|
|
17
|
+
}
|
|
18
|
+
.el-date-editor .el-input__inner {
|
|
19
|
+
// border-left: none;
|
|
20
|
+
border-top: none;
|
|
21
|
+
border-right: none;
|
|
22
|
+
border-bottom: none;
|
|
23
|
+
border-radius: 0 4px 4px 0;
|
|
24
|
+
}
|
|
25
|
+
.el-date-editor .el-input__inner:active,
|
|
26
|
+
.el-date-editor .el-input__inner:hover,
|
|
27
|
+
.el-date-editor .el-input__inner:focus {
|
|
28
|
+
box-shadow: none;
|
|
29
|
+
border-color: none;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
.n20-date-select:hover,
|
|
33
|
+
.n20-date-select:focus {
|
|
34
|
+
border-color: var(--color-primary);
|
|
35
|
+
box-shadow: 0 0 2px var(--color-primary);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.n20-quarter-date-picker__grid {
|
|
39
|
+
display: grid;
|
|
40
|
+
grid-row-gap: 20px;
|
|
41
|
+
grid-template-columns: 1fr 1fr;
|
|
42
|
+
padding-top: 20px;
|
|
43
|
+
.el-button + .el-button {
|
|
44
|
+
margin-left: 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
.n20-quarter-date-picker__year__grid {
|
|
48
|
+
display: grid;
|
|
49
|
+
grid-row-gap: 20px;
|
|
50
|
+
grid-template-columns: 1fr 1fr 1fr 1fr;
|
|
51
|
+
padding-top: 20px;
|
|
52
|
+
.el-button + .el-button {
|
|
53
|
+
margin-left: 0;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
.n20-quarter-date-picker__btn {
|
|
57
|
+
color: var(--color-text-regular);
|
|
58
|
+
}
|
|
59
|
+
.n20-quarter-date-picker.el-popover {
|
|
60
|
+
padding: 0;
|
|
61
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- 日 周 月 年 时间选择控件封装 -->
|
|
3
|
+
<div class="n20-date-select">
|
|
4
|
+
<el-select v-model="type" placeholder="请选择" style="width: 65px" @change="dateTypeSelectChange">
|
|
5
|
+
<el-option label="日" :value="1" />
|
|
6
|
+
<el-option label="周" :value="2" />
|
|
7
|
+
<el-option label="月" :value="3" />
|
|
8
|
+
<el-option label="季" :value="4" />
|
|
9
|
+
<el-option label="年" :value="5" />
|
|
10
|
+
</el-select>
|
|
11
|
+
<el-date-picker
|
|
12
|
+
v-if="selectType === 1"
|
|
13
|
+
v-model="day"
|
|
14
|
+
format="yyyy-MM-dd"
|
|
15
|
+
value-format="yyyy-MM-dd"
|
|
16
|
+
type="date"
|
|
17
|
+
placeholder="选择日"
|
|
18
|
+
@change="dayChange"
|
|
19
|
+
/>
|
|
20
|
+
<el-date-picker
|
|
21
|
+
v-if="selectType === 2"
|
|
22
|
+
v-model="week"
|
|
23
|
+
format="yyyy 第 WW 周"
|
|
24
|
+
type="week"
|
|
25
|
+
:picker-options="{ firstDayOfWeek: 1 }"
|
|
26
|
+
:default-time="['00:00:00', '23:59:59']"
|
|
27
|
+
placeholder="选择周"
|
|
28
|
+
@change="weekChange"
|
|
29
|
+
/>
|
|
30
|
+
|
|
31
|
+
<el-date-picker
|
|
32
|
+
v-if="selectType === 3"
|
|
33
|
+
v-model="month"
|
|
34
|
+
type="month"
|
|
35
|
+
format="yyyy-MM"
|
|
36
|
+
value-format="yyyy-MM"
|
|
37
|
+
:editable="false"
|
|
38
|
+
placeholder="选择月"
|
|
39
|
+
@change="monthChange"
|
|
40
|
+
/>
|
|
41
|
+
<quarter-date-picker v-if="selectType === 4" v-model="quarter" @change="handleChange" />
|
|
42
|
+
<el-date-picker
|
|
43
|
+
v-if="selectType === 5"
|
|
44
|
+
v-model="year"
|
|
45
|
+
type="year"
|
|
46
|
+
format="yyyy"
|
|
47
|
+
value-format="yyyy"
|
|
48
|
+
:editable="false"
|
|
49
|
+
placeholder="选择年"
|
|
50
|
+
@change="yearChange"
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
53
|
+
</template>
|
|
54
|
+
|
|
55
|
+
<script>
|
|
56
|
+
import quarterDatePicker from './quarterDatePicker'
|
|
57
|
+
export default {
|
|
58
|
+
name: 'SelectDatePicker',
|
|
59
|
+
components: {
|
|
60
|
+
quarterDatePicker
|
|
61
|
+
},
|
|
62
|
+
props: {
|
|
63
|
+
value: {
|
|
64
|
+
type: String,
|
|
65
|
+
default: ''
|
|
66
|
+
},
|
|
67
|
+
selectType: {
|
|
68
|
+
type: Number,
|
|
69
|
+
default: 1
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
data() {
|
|
73
|
+
return {
|
|
74
|
+
day: '',
|
|
75
|
+
week: '',
|
|
76
|
+
month: '',
|
|
77
|
+
year: '',
|
|
78
|
+
quarter: ''
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
computed: {
|
|
82
|
+
type: {
|
|
83
|
+
set(v) {
|
|
84
|
+
this.$emit('update:selectType', v)
|
|
85
|
+
},
|
|
86
|
+
get(v) {
|
|
87
|
+
return this.selectType
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
methods: {
|
|
92
|
+
dateTypeSelectChange(val) {
|
|
93
|
+
this.$emit('update:selectType', val)
|
|
94
|
+
this.day = ''
|
|
95
|
+
this.week = ''
|
|
96
|
+
this.month = ''
|
|
97
|
+
this.year = ''
|
|
98
|
+
this.$emit('selectChange', val)
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
dayChange(val) {
|
|
102
|
+
this.$emit('input', val)
|
|
103
|
+
this.$emit('change', val)
|
|
104
|
+
},
|
|
105
|
+
timestampToTime(timestamp) {
|
|
106
|
+
var date = new Date(timestamp) // 时间戳为10位需*1000,时间戳为13位的话不需乘1000
|
|
107
|
+
let Y = date.getFullYear() + '-'
|
|
108
|
+
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
|
|
109
|
+
let D = date.getDate() + ''
|
|
110
|
+
return Y + M + D
|
|
111
|
+
},
|
|
112
|
+
weekChange(val) {
|
|
113
|
+
let todayDay = val ? new Date(val) : new Date()
|
|
114
|
+
let todayOfWeek = todayDay.getDay()
|
|
115
|
+
let spendDay = 1
|
|
116
|
+
if (todayOfWeek !== 0) {
|
|
117
|
+
spendDay = 7 - todayOfWeek // 开始时间到结束时间还有几天
|
|
118
|
+
}
|
|
119
|
+
// 86400000为一天的毫秒数
|
|
120
|
+
let startTimeNum = todayDay.valueOf() - (6 - spendDay) * 86400000 // 开始时间时间戳
|
|
121
|
+
let endTimeNum = todayDay.valueOf() + spendDay * 86400000 // 结束时间时间戳
|
|
122
|
+
let startTimeStr = this.timestampToTime(startTimeNum) // 时间戳转字符串
|
|
123
|
+
let endTimeStr = this.timestampToTime(endTimeNum)
|
|
124
|
+
let weekTime = startTimeStr + ' - ' + endTimeStr // 选择的范围
|
|
125
|
+
|
|
126
|
+
this.$emit('input', weekTime)
|
|
127
|
+
this.$emit('change', weekTime)
|
|
128
|
+
},
|
|
129
|
+
monthChange(val) {
|
|
130
|
+
this.$emit('input', val)
|
|
131
|
+
this.$emit('change', val)
|
|
132
|
+
},
|
|
133
|
+
yearChange(val) {
|
|
134
|
+
this.$emit('input', val)
|
|
135
|
+
this.$emit('change', val)
|
|
136
|
+
},
|
|
137
|
+
handleChange(val) {
|
|
138
|
+
this.$emit('input', val)
|
|
139
|
+
this.$emit('change', val)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
</script>
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- 季度选择时间控件 -->
|
|
3
|
+
<el-popover
|
|
4
|
+
ref="popover"
|
|
5
|
+
v-model="showSeason"
|
|
6
|
+
popper-class="n20-quarter-date-picker el-date-picker"
|
|
7
|
+
width="324"
|
|
8
|
+
placement="bottom-start"
|
|
9
|
+
trigger="click"
|
|
10
|
+
>
|
|
11
|
+
<div class="el-picker-panel__body">
|
|
12
|
+
<div class="el-date-picker__header el-date-picker__header--bordered">
|
|
13
|
+
<button
|
|
14
|
+
type="button"
|
|
15
|
+
aria-label="前一年"
|
|
16
|
+
class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left"
|
|
17
|
+
@click="prev"
|
|
18
|
+
></button>
|
|
19
|
+
<span role="button" class="el-date-picker__header-label" @click="handleYear">{{ year }}年</span>
|
|
20
|
+
<button
|
|
21
|
+
type="button"
|
|
22
|
+
aria-label="后一年"
|
|
23
|
+
class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right"
|
|
24
|
+
@click="next"
|
|
25
|
+
></button>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div class="el-picker-panel__content">
|
|
29
|
+
<div v-if="isQuarter" class="n20-quarter-date-picker__grid">
|
|
30
|
+
<el-button type="text" size="medium" class="n20-quarter-date-picker__btn" @click="selectSeason(0)"
|
|
31
|
+
>{{ year }}年 第一季度</el-button
|
|
32
|
+
>
|
|
33
|
+
<el-button type="text" size="medium" class="n20-quarter-date-picker__btn" @click="selectSeason(1)"
|
|
34
|
+
>{{ year }}年 第二季度</el-button
|
|
35
|
+
>
|
|
36
|
+
<el-button type="text" size="medium" class="n20-quarter-date-picker__btn" @click="selectSeason(2)"
|
|
37
|
+
>{{ year }}年 第三季度</el-button
|
|
38
|
+
>
|
|
39
|
+
<el-button type="text" size="medium" class="n20-quarter-date-picker__btn" @click="selectSeason(3)"
|
|
40
|
+
>{{ year }}年 第四季度</el-button
|
|
41
|
+
>
|
|
42
|
+
</div>
|
|
43
|
+
<div v-else class="n20-quarter-date-picker__year__grid">
|
|
44
|
+
<el-button
|
|
45
|
+
v-for="item in getYear"
|
|
46
|
+
:key="item"
|
|
47
|
+
type="text"
|
|
48
|
+
size="medium"
|
|
49
|
+
:class="year === item ? 'color-primary' : ''"
|
|
50
|
+
class="n20-quarter-date-picker__btn"
|
|
51
|
+
@click="selectYaer(item)"
|
|
52
|
+
>{{ item }}年</el-button
|
|
53
|
+
>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<el-input
|
|
58
|
+
slot="reference"
|
|
59
|
+
ref="quarterDate"
|
|
60
|
+
v-model="showValue"
|
|
61
|
+
class="el-date-editor"
|
|
62
|
+
placeholder="选择季度"
|
|
63
|
+
clearable
|
|
64
|
+
@focus="changeFocus"
|
|
65
|
+
>
|
|
66
|
+
<i slot="prefix" class="el-input__icon el-icon-date"></i>
|
|
67
|
+
</el-input>
|
|
68
|
+
</el-popover>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<script>
|
|
72
|
+
export default {
|
|
73
|
+
name: 'QuarterDatePicker',
|
|
74
|
+
props: {
|
|
75
|
+
valueArr: {
|
|
76
|
+
default: () => {
|
|
77
|
+
return ['01-03', '04-06', '07-09', '10-12']
|
|
78
|
+
},
|
|
79
|
+
type: Array
|
|
80
|
+
},
|
|
81
|
+
getValue: {
|
|
82
|
+
default: (val) => {
|
|
83
|
+
return val
|
|
84
|
+
},
|
|
85
|
+
type: Function
|
|
86
|
+
},
|
|
87
|
+
defaultValue: {
|
|
88
|
+
// 默认值 201904-201906
|
|
89
|
+
default: '',
|
|
90
|
+
type: String
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
data() {
|
|
94
|
+
return {
|
|
95
|
+
showSeason: false,
|
|
96
|
+
season: '',
|
|
97
|
+
year: new Date().getFullYear(), // input显示时间,会随着用户操作改变
|
|
98
|
+
defaultyear: new Date().getFullYear(), // 当前年份,不变
|
|
99
|
+
month: new Date().getMonth() + 1, // 当前月份,不变
|
|
100
|
+
showValue: '',
|
|
101
|
+
isQuarter: true, // 默认展示季度
|
|
102
|
+
beforeyear: null // 默认显示上一季度所用时间,可能是去年
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
computed: {
|
|
106
|
+
getYear() {
|
|
107
|
+
let nfOptionsArray = []
|
|
108
|
+
for (var i = this.year - 4; i <= this.year + 5; i++) {
|
|
109
|
+
nfOptionsArray.push(i)
|
|
110
|
+
}
|
|
111
|
+
return nfOptionsArray
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
mounted() {
|
|
115
|
+
// 每次挂在时都对组件进行重置,那么就不需要在上级组件中进行重置
|
|
116
|
+
// this.getDefaultTime()
|
|
117
|
+
},
|
|
118
|
+
methods: {
|
|
119
|
+
prev() {
|
|
120
|
+
this.year = this.year * 1 - 1
|
|
121
|
+
},
|
|
122
|
+
next() {
|
|
123
|
+
this.year = this.year * 1 + 1
|
|
124
|
+
},
|
|
125
|
+
handleYear() {
|
|
126
|
+
this.isQuarter = false
|
|
127
|
+
},
|
|
128
|
+
changeFocus() {
|
|
129
|
+
this.isQuarter = true
|
|
130
|
+
this.$refs.quarterDate.blur()
|
|
131
|
+
},
|
|
132
|
+
selectYaer(i) {
|
|
133
|
+
this.year = i
|
|
134
|
+
this.isQuarter = true
|
|
135
|
+
},
|
|
136
|
+
selectSeason(i) {
|
|
137
|
+
let that = this
|
|
138
|
+
that.season = i + 1
|
|
139
|
+
let arr = that.valueArr[i].split('-')
|
|
140
|
+
that.showSeason = false
|
|
141
|
+
this.showValue = `${this.year} 年 ${this.season} 季度`
|
|
142
|
+
that.$emit('input', this.year + '-' + arr[0] + ' - ' + this.year + '-' + arr[1])
|
|
143
|
+
that.$emit('change', this.year + '-' + arr[0] + ' - ' + this.year + '-' + arr[1], this.year - this.season) // 每次选择时间都将当前选择时间发送到父组件
|
|
144
|
+
}
|
|
145
|
+
// getDefaultTime() {
|
|
146
|
+
// // 获取默认的上一个季度
|
|
147
|
+
// var year = this.defaultyear
|
|
148
|
+
// var month = this.month
|
|
149
|
+
// var season = null
|
|
150
|
+
// if (month <= 3) {
|
|
151
|
+
// this.season = 1
|
|
152
|
+
// year -= 1
|
|
153
|
+
// season = 4
|
|
154
|
+
// this.beforeyear = year
|
|
155
|
+
// } else if (month > 3 && month <= 6) {
|
|
156
|
+
// this.season = 2
|
|
157
|
+
// season = 1
|
|
158
|
+
// this.beforeyear = year
|
|
159
|
+
// } else if (month > 6 && month <= 9) {
|
|
160
|
+
// this.season = 3
|
|
161
|
+
// season = 2
|
|
162
|
+
// this.beforeyear = year
|
|
163
|
+
// } else if (month > 9 && month <= 12) {
|
|
164
|
+
// this.season = 4
|
|
165
|
+
// season = 3
|
|
166
|
+
// this.beforeyear = year
|
|
167
|
+
// }
|
|
168
|
+
// this.showValue = `${year} 年 ${season} 季度`
|
|
169
|
+
// }
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
</script>
|
|
173
|
+
|
|
174
|
+
<style lang="scss"></style>
|
package/src/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import './utils/importGlobal.js' // 联合加载组件保存位置
|
|
2
|
+
import './utils/storagePro.js' // 扩展Storage
|
|
2
3
|
/** 提供组件给外部使用的入口 */
|
|
3
4
|
import ContentLoading from './components/ContentLoading/index.vue'
|
|
4
5
|
import ContentNull from './components/ContentNull/index.vue'
|
|
@@ -55,6 +56,9 @@ import FileImport from './components/FileImport/index.vue'
|
|
|
55
56
|
import PageHeader from './components/PageHeader/index.vue'
|
|
56
57
|
import Descriptions from './components/Descriptions/index.vue'
|
|
57
58
|
import EventBubble from './components/EventBubble/index.vue'
|
|
59
|
+
import SelectDatePicker from './components/DateSelect/index.vue'
|
|
60
|
+
import QuarterDatePicker from './components/DateSelect/quarterDatePicker.vue'
|
|
61
|
+
|
|
58
62
|
// ECharts 不要打包进来
|
|
59
63
|
import Stamp from './components/Stamp/index.vue'
|
|
60
64
|
import Diff from './components/Diff/index.vue'
|
|
@@ -155,6 +159,8 @@ const components = [
|
|
|
155
159
|
ApprovalImg,
|
|
156
160
|
Stamp,
|
|
157
161
|
Diff,
|
|
162
|
+
SelectDatePicker,
|
|
163
|
+
QuarterDatePicker,
|
|
158
164
|
/* old */
|
|
159
165
|
TableO,
|
|
160
166
|
FiltersO,
|
|
@@ -274,6 +280,8 @@ export {
|
|
|
274
280
|
ApprovalImg,
|
|
275
281
|
Stamp,
|
|
276
282
|
Diff,
|
|
283
|
+
SelectDatePicker,
|
|
284
|
+
QuarterDatePicker,
|
|
277
285
|
/* 中建科 */
|
|
278
286
|
ApprovalCardZjk,
|
|
279
287
|
ApproveCardZjk,
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import LZString from 'lz-string'
|
|
2
|
+
|
|
3
|
+
if (!window.__POWERED_BY_QIANKUN__ && Storage) {
|
|
4
|
+
// 当字符串长度大于512kb,压缩保存
|
|
5
|
+
const setItemPro = function (key, str) {
|
|
6
|
+
if (str && str.length > 524288) {
|
|
7
|
+
this.removeItem(key)
|
|
8
|
+
let strLZ = LZString.compressToBase64(str)
|
|
9
|
+
this._setItem(key + ':[LZ]', strLZ)
|
|
10
|
+
} else {
|
|
11
|
+
return this._setItem(key, str)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const getItemPro = function (key) {
|
|
16
|
+
let str = this._getItem(key)
|
|
17
|
+
if (str === null && this[key + ':[LZ]']) {
|
|
18
|
+
let strLZ = this._getItem(key + ':[LZ]')
|
|
19
|
+
let str = strLZ ? LZString.decompressFromBase64(strLZ) : null
|
|
20
|
+
return str
|
|
21
|
+
} else {
|
|
22
|
+
return str
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const removeItemPro = function (key) {
|
|
27
|
+
this._removeItem(key)
|
|
28
|
+
this._removeItem(key + ':[LZ]')
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Storage.prototype._setItem = Storage.prototype.setItem
|
|
32
|
+
Storage.prototype.setItem = setItemPro
|
|
33
|
+
|
|
34
|
+
Storage.prototype._getItem = Storage.prototype.getItem
|
|
35
|
+
Storage.prototype.getItem = getItemPro
|
|
36
|
+
|
|
37
|
+
Storage.prototype._removeItem = Storage.prototype.removeItem
|
|
38
|
+
Storage.prototype.removeItem = removeItemPro
|
|
39
|
+
}
|