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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n20-common-lib",
3
- "version": "1.3.111",
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
+ }