n20-common-lib 2.1.3 → 2.1.5

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": "2.1.3",
3
+ "version": "2.1.5",
4
4
  "private": false,
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -1,13 +1,7 @@
1
- $--font-size-base: 14px !default;
2
- $--border-color-base: #dcdfe6 !default;
3
- $--border-radius-base: 4px !default;
4
- $--input-width: 224px !default;
5
-
6
1
  // 项目中可以直接使用
7
2
  // .input-w {width: $--input-width;}
8
3
  // .button-4em{min-width: 72px;}
9
- /* 格式化样式
10
- ---------------- */
4
+ /* 格式化样式 */
11
5
  html {
12
6
  height: 100%;
13
7
  }
@@ -31,8 +25,7 @@ iframe {
31
25
  outline: none;
32
26
  }
33
27
 
34
- /* 滚动条样式
35
- --------------- */
28
+ /* 滚动条样式 */
36
29
  ::-webkit-scrollbar {
37
30
  width: 6px;
38
31
  height: 6px;
@@ -81,8 +74,7 @@ iframe {
81
74
  --client-height: calc(100vh - 116px);
82
75
  }
83
76
 
84
- /* 内外边距
85
- --------------- */
77
+ /* 内外边距 */
86
78
  @mixin set-pm($m, $p) {
87
79
  .p-a#{$m} {
88
80
  padding: $p;
@@ -148,8 +140,7 @@ iframe {
148
140
  @include set-pm('-ss', 4px !important);
149
141
  @include set-pm('-0', 0 !important);
150
142
 
151
- /* 内外边距
152
- --------------- */
143
+ /* 内外边距 */
153
144
  @mixin pm-fn($n) {
154
145
  .pa-#{$n} {
155
146
  padding: #{$n}px;
@@ -221,8 +212,7 @@ iframe {
221
212
  @include pm-fn(12);
222
213
  @include pm-fn(14);
223
214
 
224
- /* 浮动布局
225
- --------------- */
215
+ /* 浮动布局 */
226
216
  .left,
227
217
  .float-left {
228
218
  float: left;
@@ -265,8 +255,7 @@ iframe {
265
255
  clear: right;
266
256
  }
267
257
 
268
- /* 行内块元素水平垂直对齐方式
269
- --------------- */
258
+ /* 行内块元素水平垂直对齐方式 */
270
259
  .b-center {
271
260
  text-align: center;
272
261
 
@@ -294,8 +283,7 @@ iframe {
294
283
  }
295
284
  }
296
285
 
297
- /* 文字居中
298
- --------------- */
286
+ /* 文字居中 */
299
287
  .text {
300
288
  &-c {
301
289
  text-align: center !important;
@@ -321,8 +309,7 @@ iframe {
321
309
  }
322
310
  }
323
311
 
324
- /* 弹性盒模型
325
- --------------- */
312
+ /* 弹性盒模型 */
326
313
  .flex-box {
327
314
  display: flex;
328
315
  }
@@ -573,34 +560,29 @@ iframe {
573
560
  color: #333;
574
561
  }
575
562
 
576
- /* 鼠标默认样式
577
- --------------- */
563
+ /* 鼠标默认样式 */
578
564
  .cursor-d {
579
565
  cursor: default;
580
566
  }
581
567
 
582
- /* 鼠标小手
583
- --------------- */
568
+ /* 鼠标小手 */
584
569
  .pointer {
585
570
  cursor: pointer;
586
571
  }
587
572
 
588
- /* 鼠标禁止
589
- ---------------- */
573
+ /* 鼠标禁止- */
590
574
  .cursor-not {
591
575
  cursor: not-allowed;
592
576
  }
593
577
 
594
- /* 字重
595
- --------------- */
578
+ /* 字重 */
596
579
  .font {
597
580
  &-w600 {
598
581
  font-weight: var(--font-weight-bold);
599
582
  }
600
583
  }
601
584
 
602
- /* 字号
603
- --------------- */
585
+ /* 字号 */
604
586
  .f-s {
605
587
  &-s {
606
588
  /* 12号字 */
@@ -627,8 +609,7 @@ iframe {
627
609
  }
628
610
  }
629
611
 
630
- /* 宽高范围是 60-1000
631
- ---------------- */
612
+ /* 宽高范围是 60-1000- */
632
613
  $list: 45, 60, 80, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290,
633
614
  300, 400, 500, 600, 700, 800, 900, 1000;
634
615
 
@@ -690,8 +671,7 @@ $list: 45, 60, 80, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 2
690
671
  }
691
672
  }
692
673
 
693
- /* 垂直对齐
694
- --------------- */
674
+ /* 垂直对齐 */
695
675
  .align {
696
676
  &-baseline {
697
677
  vertical-align: baseline; // 将一个元素的基线与其父元素的基线对齐。
@@ -166,7 +166,7 @@ export default {
166
166
  this.pickerOptions
167
167
  )
168
168
 
169
- this.listeners = Object.assign({}, this.$listeners, { input: () => {} })
169
+ this.listeners = Object.assign({}, this.$listeners, { input: () => {}, change: () => {} })
170
170
  return {}
171
171
  },
172
172
  computed: {
@@ -1,253 +1,161 @@
1
1
  <template>
2
2
  <div class="file-upload-table">
3
- <!-- 查看附件信息 -->
4
- <template v-if="readonly">
5
- <div class="p-b-s">
6
- <div class="flex-box flex-v flex-lr">
7
- <div><slot name="title"></slot></div>
8
- <slot v-if="tableData.length" name="down-btn">
9
- <el-button size="mini" plain @click="downRows">{{ '批量下载' | $lc }}</el-button>
10
- </slot>
11
- </div>
12
- </div>
13
-
14
- <el-table :data="tableData" :row-key="keys.rowKey" @selection-change="(selection) => (selectionList = selection)">
15
- <slot name="selection-column">
16
- <el-table-column type="selection" width="50" align="center" />
3
+ <div class="flex-box flex-v flex-lr m-b-s">
4
+ <div><slot name="title"></slot></div>
5
+ <div>
6
+ <slot v-if="!readonly" name="add-btn">
7
+ <el-button type="primary" size="mini" @click="addRow">{{ '新增' | $lc }}</el-button>
17
8
  </slot>
18
- <template v-if="dataPorp.slotHeader">
19
- <el-table-column
20
- v-for="item in dataPorp.slotHeader"
21
- :key="item.prop"
22
- :label="item.label"
23
- :prop="item.prop"
24
- :align="item.align || 'center'"
25
- :width="item.width || 'auto'"
26
- :show-overflow-tooltip="item['show-overflow-tooltip']"
27
- />
28
- </template>
29
- <template v-else>
30
- <el-table-column :label="'附件类型' | $lc" :prop="keys.type">
31
- <template slot="header" slot-scope="scope">
32
- <slot name="type-header" :column="scope.column">{{ '附件类型' | $lc }}</slot>
33
- </template>
34
- <template slot-scope="{ row }">
35
- <slot name="type" :row="row">{{ row[keys.type] | typeFiter(typeOptions) }}</slot>
36
- </template>
37
- </el-table-column>
38
- <el-table-column :label="'附件名称' | $lc" :prop="keys.name">
39
- <template slot="header" slot-scope="scope">
40
- <slot name="name-header" :column="scope.column">{{ '附件名称' | $lc }}</slot>
41
- </template>
42
- <template slot-scope="{ row }">
43
- <slot name="name" :row="row">{{ row[keys.name] ? row[keys.name].replace(/\.[A-z0-9]+$/, '') : '' }}</slot>
44
- </template>
45
- </el-table-column>
46
- <el-table-column :label="'附件上传' | $lc" :prop="keys.name">
47
- <template slot="header" slot-scope="scope">
48
- <slot name="name-header" :column="scope.column">{{ '附件上传' | $lc }}</slot>
49
- </template>
50
- <template slot-scope="{ row }">
51
- <slot name="name" :row="row">{{ $options.filters.fileName(row, keys.url) || row[keys.name] }}</slot>
52
- </template>
53
- </el-table-column>
54
- <template slot-scope="{ row }">
55
- <slot name="slotCol" :row="row"></slot>
56
- </template>
57
- <el-table-column :label="'上传时间' | $lc" :prop="keys.time" width="170" align="left">
58
- <template slot="header" slot-scope="scope">
59
- <slot name="time-header" :column="scope.column">{{ '上传时间' | $lc }}</slot>
60
- </template>
61
- <template slot-scope="{ row }">
62
- <slot name="time" :row="row">{{ row[keys.time] }}</slot>
63
- </template>
64
- </el-table-column>
65
- <el-table-column :label="'上传人' | $lc" :prop="keys.user">
66
- <template slot="header" slot-scope="scope">
67
- <slot name="user-header" :column="scope.column">{{ '上传人' | $lc }}</slot>
68
- </template>
69
- <template slot-scope="{ row }">
70
- <slot name="user" :row="row">{{ row[keys.user] }}</slot>
71
- </template>
72
- </el-table-column>
73
- </template>
74
- <el-table-column :label="'操作' | $lc" align="center" width="80" fixed="right">
75
- <template slot="header" slot-scope="scope">
76
- <slot name="handle-header" :column="scope.column">{{ '操作' | $lc }}</slot>
77
- </template>
78
- <template slot-scope="{ row }">
79
- <slot name="handle" :row="row">
80
- <el-button type="text" icon="el-icon-view" @click="seeFile(row)" />
81
- <el-button type="text" icon="el-icon-download" :disabled="!row[keys.url]" @click="downFile(row)" />
82
- </slot>
83
- </template>
84
- </el-table-column>
85
- </el-table>
86
- </template>
87
- <!-- 上传附件 -->
88
- <template v-else>
89
- <div class="p-b-s">
90
- <div class="flex-box flex-v flex-lr">
91
- <div><slot name="title"></slot></div>
92
- <div>
93
- <slot name="add-btn">
94
- <el-button type="primary" size="mini" @click="addRow">{{ '新增' | $lc }}</el-button>
95
- </slot>
96
- <slot v-if="showBatchUpload" name="batch-btn">
97
- <el-button size="mini" plain @click="visibleBatch = true">{{ '批量上传' | $lc }}</el-button>
98
- </slot>
99
- <slot v-if="tableData.length" name="down-btn">
100
- <el-button size="mini" plain @click="downRows">{{ '下载' | $lc }}</el-button>
101
- </slot>
102
- <slot v-if="tableData.length" name="delete-btn">
103
- <el-button type="danger" plain size="mini" @click="deleteRows">{{ '删除' | $lc }}</el-button>
104
- </slot>
105
- </div>
106
- </div>
107
- </div>
108
- <el-table :data="tableData" :row-key="keys.rowKey" @selection-change="(selection) => (selectionList = selection)">
109
- <slot name="selection-column">
110
- <el-table-column type="selection" width="50" align="center" />
9
+ <slot v-if="!readonly && showBatchUpload" name="batch-btn">
10
+ <el-button size="mini" plain @click="visibleBatch = true">{{ '批量上传' | $lc }}</el-button>
111
11
  </slot>
112
- <template v-if="dataPorp.slotHeader">
113
- <el-table-column
114
- v-for="item in dataPorp.slotHeader"
115
- :key="item.prop"
116
- :label="item.label"
117
- :prop="item.prop"
118
- :align="item.align || 'center'"
119
- :width="item.width || 'auto'"
120
- :show-overflow-tooltip="item['show-overflow-tooltip']"
121
- />
122
- </template>
123
- <template v-else>
124
- <el-table-column :label="'附件类型' | $lc" min-width="160">
125
- <template slot="header" slot-scope="scope">
126
- <slot name="type-header" :column="scope.column">{{ '附件类型' | $lc }}</slot>
127
- </template>
128
- <template slot-scope="{ row }">
129
- <slot name="type" :row="row">
130
- <el-select
131
- v-model="row[keys.type]"
132
- :disabled="row['_typeDisabled']"
133
- :placeholder="'请选择' | $lc"
134
- style="width: 100%"
135
- >
136
- <el-option
137
- v-for="item in typeOptions"
138
- :key="item.type"
139
- :disabled="item.disabled"
140
- :value="item.type"
141
- :label="item.label"
142
- />
143
- </el-select>
144
- </slot>
145
- </template>
146
- </el-table-column>
147
- <el-table-column :label="'附件名称' | $lc" min-width="160">
148
- <template slot="header" slot-scope="scope">
149
- <slot name="name-header" :column="scope.column">{{ '附件名称' | $lc }}</slot>
150
- </template>
151
- <template slot-scope="{ row }">
152
- <slot name="name" :row="row">
153
- <el-input
154
- :value="row[keys.name] ? row[keys.name].replace(/\.[A-z0-9]+$/, '') : ''"
155
- disabled
156
- :placeholder="'请输入' | $lc"
157
- />
158
- </slot>
159
- </template>
160
- </el-table-column>
161
- <el-table-column :label="'附件上传' | $lc" min-width="160">
162
- <template slot="header" slot-scope="scope">
163
- <slot name="upload-header" :column="scope.column">{{ '附件上传' | $lc }}</slot>
164
- </template>
165
- <template slot-scope="{ row, $index }">
166
- <slot name="upload" :row="row" :$index="$index">
167
- <Upload
168
- :ref="'upload' + $index"
169
- class="n20-upload-table-up"
170
- :file-name="row | fileName(keys.url)"
171
- :data="row['_fileData'] || fileData"
172
- :msg-type="null"
173
- :show-clear="false"
174
- :action="action"
175
- :headers="headers"
176
- :disabled="!row[keys.type] || row['_typeDisabled']"
177
- :accept="row[keys.type] | acceptFilter(typeOptions, fileAccept)"
178
- :size="row[keys.type] | sizeFilter(typeOptions, fileSize)"
179
- :http-request="uploadHttpRequest ? (options) => uploadHttpRequest(options, row) : undefined"
180
- :before-upload="(file) => beforeUploadFn(file, row)"
181
- :on-progress="(event) => onProgressFn(event, row)"
182
- :on-success="(response, file, fileList) => onSuccessFn(response, file, fileList, row)"
183
- :on-error="(err, file, fileList) => errorFn(err, file, fileList, row, $index)"
184
- />
185
- </slot>
186
- </template>
187
- </el-table-column>
188
- <slot name="slotCol"></slot>
189
- <el-table-column :label="'上传时间' | $lc" :prop="keys.time" width="170" align="left">
190
- <template slot="header" slot-scope="scope">
191
- <slot name="time-header" :column="scope.column">{{ '上传时间' | $lc }}</slot>
192
- </template>
193
- <template slot-scope="{ row }">
194
- <slot name="time" :row="row">{{ row[keys.time] }}</slot>
195
- </template>
196
- </el-table-column>
197
- <el-table-column :label="'上传人' | $lc" :prop="keys.user" width="100">
198
- <template slot="header" slot-scope="scope">
199
- <slot name="user-header" :column="scope.column">{{ '上传人' | $lc }}</slot>
200
- </template>
201
- <template slot-scope="{ row }">
202
- <slot name="user" :row="row">{{ row[keys.user] }}</slot>
203
- </template>
204
- </el-table-column>
205
- </template>
206
- <el-table-column :label="'上传进度' | $lc" width="220">
207
- <template slot="header" slot-scope="scope">
208
- <slot name="percent-header" :column="scope.column">{{ '上传进度' | $lc }}</slot>
209
- </template>
210
- <template slot-scope="{ row, $index }">
211
- <slot name="percent" :row="row" :$index="$index">
212
- <div v-if="row['_percent'] >= 0 || !row['_typeDisabled']" class="flex-box flex-v">
213
- <el-progress
214
- class="n20-upload-table-progress"
215
- :percentage="row['_percent']"
216
- :status="row['_status']"
217
- style="width: 140px"
218
- />
219
- <el-button
220
- v-if="row['_status'] === 'exception' || !row['_typeDisabled']"
221
- type="text"
222
- size="mini"
223
- style="width: 60px"
224
- @click="anewSubmitFn(row, $index)"
225
- >{{ '重新上传' | $lc }}</el-button
226
- >
227
- <el-button
228
- v-else-if="(row['_percent'] >= 0 && row['_percent'] < 100) || !row['_typeDisabled']"
229
- type="text"
230
- size="mini"
231
- style="width: 60px"
232
- @click="abortFn(row, $index)"
233
- >{{ '取消' | $lc }}</el-button
234
- >
235
- </div>
236
- </slot>
237
- </template>
12
+ <slot name="down-btn">
13
+ <el-button size="mini" plain @click="downRows">{{ '下载' | $lc }}</el-button>
14
+ </slot>
15
+ <slot v-if="!readonly" name="delete-btn">
16
+ <el-button type="danger" plain size="mini" @click="deleteRows">{{ '删除' | $lc }}</el-button>
17
+ </slot>
18
+ </div>
19
+ </div>
20
+ <el-table :data="tableData" :row-key="keys.rowKey" @selection-change="(selection) => (selectionList = selection)">
21
+ <slot name="selection-column">
22
+ <el-table-column type="selection" width="50" align="center" />
23
+ </slot>
24
+ <template v-if="dataPorp.slotHeader">
25
+ <el-table-column
26
+ v-for="item in dataPorp.slotHeader"
27
+ :key="item.prop"
28
+ :label="item.label"
29
+ :prop="item.prop"
30
+ :align="item.align || 'center'"
31
+ :width="item.width || 'auto'"
32
+ :show-overflow-tooltip="item.showOverflowTooltip || item['show-overflow-tooltip']"
33
+ />
34
+ </template>
35
+ <template v-else>
36
+ <el-table-column :label="'附件类型' | $lc" :prop="keys.type">
37
+ <slot slot="header" slot-scope="scope" name="type-header" :column="scope.column">{{ '附件类型' | $lc }}</slot>
38
+ <slot slot-scope="{ row }" name="type" :row="row">
39
+ <span v-if="readonly">{{ row[keys.type] | typeFiter(typeOptions) }}</span>
40
+ <el-select
41
+ v-else
42
+ v-model="row[keys.type]"
43
+ :disabled="row._typeDisabled"
44
+ :placeholder="'请选择' | $lc"
45
+ style="width: 100%"
46
+ >
47
+ <el-option
48
+ v-for="item in typeOptions"
49
+ :key="item.type"
50
+ :disabled="item.disabled"
51
+ :value="item.type"
52
+ :label="item.label"
53
+ />
54
+ </el-select>
55
+ </slot>
56
+ </el-table-column>
57
+ <el-table-column :label="'附件名称' | $lc" :prop="keys.name">
58
+ <slot slot="header" slot-scope="scope" name="name-header" :column="scope.column">{{ '附件名称' | $lc }}</slot>
59
+ <slot slot-scope="{ row }" name="name" :row="row">
60
+ <span v-if="readonly">{{ row[keys.name] ? row[keys.name].replace(/\.[A-z0-9]+$/, '') : '' }}</span>
61
+ <el-input
62
+ v-else
63
+ :value="row[keys.name] ? row[keys.name].replace(/\.[A-z0-9]+$/, '') : ''"
64
+ disabled
65
+ :placeholder="'请输入' | $lc"
66
+ />
67
+ </slot>
68
+ </el-table-column>
69
+ <el-table-column v-if="readonly" :label="'附件上传' | $lc" :prop="keys.name">
70
+ <slot slot="header" slot-scope="scope" name="name-header" :column="scope.column">{{ '附件上传' | $lc }}</slot>
71
+ <slot slot-scope="{ row }" name="name" :row="row">
72
+ {{ $options.filters.fileName(row, keys.url) || row[keys.name] }}
73
+ </slot>
74
+ </el-table-column>
75
+ <el-table-column :label="'附件上传' | $lc">
76
+ <slot slot="header" slot-scope="scope" name="upload-header" :column="scope.column">{{
77
+ '附件上传' | $lc
78
+ }}</slot>
79
+ <slot slot-scope="{ row, $index }" name="upload" :row="row" :$index="$index">
80
+ <Upload
81
+ :ref="'upload' + $index"
82
+ class="n20-upload-table-up"
83
+ :file-name="row | fileName(keys.url)"
84
+ :data="row['_fileData'] || fileData"
85
+ :msg-type="null"
86
+ :show-clear="false"
87
+ :action="action"
88
+ :headers="headers"
89
+ :disabled="!row[keys.type] || row._typeDisabled"
90
+ :accept="row[keys.type] | acceptFilter(typeOptions, fileAccept)"
91
+ :size="row[keys.type] | sizeFilter(typeOptions, fileSize)"
92
+ :http-request="uploadHttpRequest ? (options) => uploadHttpRequest(options, row) : undefined"
93
+ :before-upload="(file) => beforeUploadFn(file, row)"
94
+ :on-progress="(event) => onProgressFn(event, row)"
95
+ :on-success="(response, file, fileList) => onSuccessFn(response, file, fileList, row)"
96
+ :on-error="(err, file, fileList) => errorFn(err, file, fileList, row, $index)"
97
+ />
98
+ </slot>
238
99
  </el-table-column>
239
- <el-table-column :label="'操作' | $lc" align="center" width="80" fixed="right">
240
- <template slot="header" slot-scope="scope">
241
- <slot name="handle-header" :column="scope.column">{{ '操作' | $lc }}</slot>
242
- </template>
243
- <template slot-scope="{ row }">
244
- <slot name="handle" :row="row">
245
- <el-button type="text" icon="el-icon-view" :disabled="!row[keys.url]" @click="seeFile(row)" />
246
- </slot>
247
- </template>
100
+ <slot name="slotCol"></slot>
101
+ <el-table-column :label="'上传时间' | $lc" :prop="keys.time" width="170" align="center">
102
+ <slot slot="header" slot-scope="scope" name="time-header" :column="scope.column">{{ '上传时间' | $lc }}</slot>
103
+ <slot slot-scope="{ row }" name="time" :row="row">{{ row[keys.time] }}</slot>
248
104
  </el-table-column>
249
- </el-table>
250
- </template>
105
+ <el-table-column :label="'上传人' | $lc" :prop="keys.user">
106
+ <slot slot="header" slot-scope="scope" name="user-header" :column="scope.column">{{ '上传人' | $lc }}</slot>
107
+ <slot slot-scope="{ row }" name="user" :row="row">{{ row[keys.user] }}</slot>
108
+ </el-table-column>
109
+ </template>
110
+ <el-table-column v-if="!readonly" :label="'上传进度' | $lc" width="220">
111
+ <template slot="header" slot-scope="scope">
112
+ <slot name="percent-header" :column="scope.column">{{ '上传进度' | $lc }}</slot>
113
+ </template>
114
+ <template slot-scope="{ row, $index }">
115
+ <slot name="percent" :row="row" :$index="$index">
116
+ <div v-if="row['_percent'] >= 0 && !row._typeDisabled" class="flex-box flex-v">
117
+ <el-progress
118
+ class="n20-upload-table-progress"
119
+ :percentage="row['_percent']"
120
+ :status="row['_status']"
121
+ text-color=""
122
+ style="width: 140px"
123
+ />
124
+ <el-button
125
+ v-if="row['_status'] === 'exception'"
126
+ type="text"
127
+ size="mini"
128
+ style="width: 60px"
129
+ @click="anewSubmitFn(row, $index)"
130
+ >{{ '重新上传' | $lc }}</el-button
131
+ >
132
+ <el-button
133
+ v-else-if="row['_percent'] >= 0 && row['_percent'] < 100"
134
+ type="text"
135
+ size="mini"
136
+ style="width: 60px"
137
+ @click="abortFn(row, $index)"
138
+ >{{ '取消' | $lc }}</el-button
139
+ >
140
+ </div>
141
+ </slot>
142
+ </template>
143
+ </el-table-column>
144
+ <el-table-column :label="'操作' | $lc" align="center" width="80" fixed="right">
145
+ <slot slot="header" slot-scope="scope" name="handle-header" :column="scope.column">{{ '操作' | $lc }}</slot>
146
+ <slot slot-scope="{ row }" name="handle" :row="row">
147
+ <el-button type="text" icon="el-icon-view" :disabled="!row[keys.url]" @click="seeFile(row)" />
148
+ <el-button
149
+ v-if="readonly"
150
+ type="text"
151
+ icon="el-icon-download"
152
+ :disabled="!row[keys.url]"
153
+ @click="downFile(row)"
154
+ />
155
+ </slot>
156
+ </el-table-column>
157
+ </el-table>
158
+
251
159
  <Dialog
252
160
  v-drag
253
161
  class="p-a-0"
@@ -263,7 +171,7 @@
263
171
  <img :src="previewUrl" :alt="previewName" style="display: none" />
264
172
  </ViewerImg>
265
173
  <component
266
- :is="previewSameOrg ? 'object' : 'div'"
174
+ :is="previewSameOrg ? 'object' : 'object'"
267
175
  v-else
268
176
  :key="previewUrl"
269
177
  :data="previewUrl"
@@ -281,6 +189,7 @@
281
189
  </div>
282
190
  </Dialog>
283
191
  <Dialog
192
+ v-drag
284
193
  :title="'附件批量上传' | $lc"
285
194
  :visible.sync="visibleBatch"
286
195
  top="5vh"
@@ -328,15 +237,18 @@ import Dialog from '../Dialog/index.vue'
328
237
 
329
238
  import 'viewerjs/dist/viewer.css'
330
239
  import importG from '../../utils/importGlobal.js'
240
+
241
+ const ViewerImg = async function () {
242
+ let { component } = await importG('v-viewer', () => import(/*webpackChunkName: "v-viewer"*/ 'v-viewer'))
243
+ return component
244
+ }
245
+
331
246
  export default {
332
247
  name: 'FileUploadTable',
333
248
  components: {
334
249
  Upload,
335
250
  Dialog,
336
- ViewerImg: async function () {
337
- let { component } = await importG('v-viewer', () => import(/*webpackChunkName: "v-viewer"*/ 'v-viewer'))
338
- return component
339
- }
251
+ ViewerImg
340
252
  },
341
253
  filters: {
342
254
  typeFiter(type, typeOptions) {
@@ -483,9 +395,9 @@ export default {
483
395
  this.$emit('delete-rows', this.selectionList)
484
396
  },
485
397
 
486
- async getFileInfo(row) {
398
+ async getFileInfo(row, type) {
487
399
  if (this.getFileMethod) {
488
- return this.getFileMethod(row)
400
+ return this.getFileMethod(row, type)
489
401
  }
490
402
 
491
403
  let _url = row[this.keys.url]
@@ -519,7 +431,7 @@ export default {
519
431
  }
520
432
  },
521
433
  async seeFile(row) {
522
- let { url, name, sameOrg } = await this.getFileInfo(row)
434
+ let { url, name, sameOrg } = await this.getFileInfo(row, 'preview')
523
435
  if (url) {
524
436
  this.previewSameOrg = sameOrg
525
437
  this.previewUrl = url
@@ -575,18 +487,17 @@ export default {
575
487
 
576
488
  let clUpload = this.$refs['upload' + $index]
577
489
  let elUpload = clUpload.$refs['upload']
578
- let uploadFiles = elUpload.uploadFiles
579
490
 
580
- /* 重置文件状态,并加入文件队列 */
581
- let file = uploadFiles[uploadFiles.length - 1]
582
- file.status = 'ready'
583
- clUpload.fileList = [file]
491
+ // let uploadFiles = elUpload.uploadFiles
492
+ // /* 重置文件状态,并加入文件队列 */
493
+ // let file = uploadFiles[uploadFiles.length - 1]
494
+ // file.status = 'ready'
495
+ // clUpload.fileList = [file]
584
496
 
585
497
  elUpload.abort()
586
498
  },
587
499
  anewSubmitFn(row, $index) {
588
500
  this.$set(row, '_status', undefined)
589
-
590
501
  this.$refs['upload' + $index]?.$refs['upload']?.submit()
591
502
  }
592
503
  }
@@ -43,7 +43,12 @@
43
43
  </template>
44
44
  <template v-else-if="type === 'remote'">
45
45
  <!-- 服务端保存筛选条件组 -->
46
- <el-form-item v-for="(item, i) in remoteList" :key="i" class="m-b" :label="item.label">
46
+ <el-form-item
47
+ v-for="(item, i) in remoteList"
48
+ :key="(item.slotName || item.label || '') + i"
49
+ class="m-b"
50
+ :label="item.label"
51
+ >
47
52
  <slot v-if="item.slotName" :name="item.slotName"></slot>
48
53
  <form-item-input v-else :form="form" :item="item" />
49
54
  </el-form-item>
@@ -1,5 +1,6 @@
1
1
  <template>
2
2
  <el-popover
3
+ ref="filterPop"
3
4
  v-model="showPop"
4
5
  :width="width"
5
6
  placement="bottom-end"
@@ -14,7 +15,7 @@
14
15
 
15
16
  <div v-click-outside="clickOut" class="n20-filter p-a-s">
16
17
  <slot></slot>
17
- <el-button v-if="$slots.more" class="p-t-0 m-b-s" type="text" @click="showMore = !showMore"
18
+ <el-button v-if="$slots.more" class="p-t-0 m-b-s" type="text" @click="handleMore"
18
19
  ><span>{{ showMore ? $lc('收起') : $lc('更多') }}{{ '条件' | $lc }}</span
19
20
  ><i :class="showMore ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"></i
20
21
  ></el-button>
@@ -93,6 +94,10 @@ export default {
93
94
  this.showPop = false
94
95
  }
95
96
  }
97
+ },
98
+ handleMore() {
99
+ this.showMore = !this.showMore
100
+ setTimeout(() => this.$refs['filterPop'].updatePopper(), 360)
96
101
  }
97
102
  }
98
103
  }
@@ -110,10 +110,8 @@ export default {
110
110
  this.valueStr = this.num2str(val)
111
111
  return
112
112
  }
113
- if (val) {
114
- this.valueStr = this.num2str(val)
115
- this.preValue = this.valueStr
116
- }
113
+ this.valueStr = this.num2str(val)
114
+ this.preValue = this.valueStr
117
115
  },
118
116
  immediate: true
119
117
  }
@@ -116,14 +116,12 @@
116
116
  <span class="_edit el-icon-edit" @click="editByLabel"></span>
117
117
  </div>
118
118
  </div>
119
- <dialogWrap
120
- :title="'修改密码' | $lc"
121
- :visible.sync="cpwdV"
122
- append-to-body
123
- :width="_lang == 'zh' ? '400px' : '460px'"
124
- >
125
- <changePwd :visible.sync="cpwdV" />
126
- </dialogWrap>
119
+ <el-dropdown-item command="changePassword">
120
+ <div class="flex-box flex-v">
121
+ <span>{{ '修改密码' | $lc }}</span>
122
+ <i class="el-icon-caret-right m-l-auto m-r-0"></i>
123
+ </div>
124
+ </el-dropdown-item>
127
125
  <el-dropdown-item v-if="customOpt.agency" command="myAgency">
128
126
  <div class="flex-box flex-v">
129
127
  <span>{{ '工作代理' | $lc }}</span>
@@ -106,7 +106,9 @@ export default {
106
106
  },
107
107
  computed: {
108
108
  activeNavC() {
109
- return getShowUuid(this.activeNav, this.menuList)
109
+ let acTab = this.tabList.find((t) => t.uuid === this.activeNav)
110
+ let acNav = acTab?.query?.startPath || this.activeNav
111
+ return getShowUuid(acNav, this.menuList)
110
112
  }
111
113
  },
112
114
  watch: {
@@ -292,7 +292,7 @@ export default {
292
292
  let secondsToGo = 5
293
293
  this.$message({
294
294
  type: 'success',
295
- message: `系统将在 ${secondsToGo} 秒后退出到登陆页面.`
295
+ message: `设置成功,系统将在 ${secondsToGo} 秒后退出到登陆页面.`
296
296
  })
297
297
  const interval = setInterval(() => {
298
298
  secondsToGo -= 1
@@ -35,7 +35,13 @@
35
35
  </div>
36
36
  </div>
37
37
  <template v-for="item in munList">
38
- <SetItem v-if="activateMunId === item.id" :key="item.id" class="flex-item" :id-no="activateMunId" />
38
+ <SetItem
39
+ v-if="activateMunId === item.id"
40
+ :key="item.id + siKey"
41
+ class="flex-item"
42
+ :id-no="activateMunId"
43
+ @renewal="siKey = siKey + 1"
44
+ />
39
45
  </template>
40
46
  </div>
41
47
  <div slot="footer" style="height: 44px"></div>
@@ -51,7 +57,8 @@ export default {
51
57
  return {
52
58
  userNo: sessionStorage.getItem('userNo'),
53
59
  munList: [],
54
- activateMunId: undefined
60
+ activateMunId: undefined,
61
+ siKey: 0
55
62
  }
56
63
  },
57
64
  created() {
@@ -82,7 +82,7 @@
82
82
  <el-table-column label="系统名称" prop="NAME" />
83
83
  <el-table-column label="是否在登陆页显示" align="center">
84
84
  <template slot-scope="{ row }">
85
- <el-switch v-model="row.OPEN" />
85
+ <el-switch v-model="row.OPEN" @change="openCg" />
86
86
  </template>
87
87
  </el-table-column>
88
88
  </el-table>
@@ -91,7 +91,8 @@
91
91
  label="页面展示方式"
92
92
  :rules="{ required: true, message: '页面展示方式不能为空', trigger: 'change' }"
93
93
  >
94
- <el-select v-model="form.LOGIN_TYPE" class="input-w-u">
94
+ <el-select v-model="form.LOGIN_TYPE" class="input-w-u" :disabled="loginTypeDisabled">
95
+ <el-option label="平铺展示" value="T0" />
95
96
  <el-option label="左右切换" value="T1" />
96
97
  <el-option label="平铺展示" value="T2" />
97
98
  </el-select>
@@ -131,15 +132,8 @@
131
132
  </cl-expandable-pane>
132
133
  </el-form>
133
134
  <div class="fixed-button-shadow flex-box flex-c flex-v">
134
- <el-button
135
- type="primary"
136
- @click="
137
- () => {
138
- save()
139
- }
140
- "
141
- >保存</el-button
142
- >
135
+ <el-button type="primary" @click="save()">保存</el-button>
136
+ <!-- <el-button @click="queryLoginPage">{{'预览' | $lc}}</el-button> -->
143
137
  </div>
144
138
  </div>
145
139
  </template>
@@ -158,6 +152,7 @@ export default {
158
152
  this.setingId = {}
159
153
  return {
160
154
  userNo: sessionStorage.getItem('userNo'),
155
+ loginTypeDisabled: false,
161
156
  form: {
162
157
  LOGIN_URL: '',
163
158
  LOGIN_MODE: [],
@@ -168,56 +163,56 @@ export default {
168
163
  LOGIN_TYPE: 'T1',
169
164
  SYSTEM_LIST: [
170
165
  {
171
- NO: 'N01',
166
+ NO: 'CSZHYW',
172
167
  NAME: '财司综合业务系统',
173
168
  ICON: undefined,
174
169
  LOGIN_MODE: [],
175
170
  OPEN: true
176
171
  },
177
172
  {
178
- NO: 'N02',
173
+ NO: 'CSYWGL',
179
174
  NAME: '财司业务管理系统',
180
175
  ICON: undefined,
181
176
  LOGIN_MODE: [],
182
177
  OPEN: false
183
178
  },
184
179
  {
185
- NO: 'N03',
180
+ NO: 'CSFZJC',
186
181
  NAME: '财司辅助决策系统',
187
182
  ICON: undefined,
188
183
  LOGIN_MODE: [],
189
184
  OPEN: false
190
185
  },
191
186
  {
192
- NO: 'N04',
187
+ NO: 'CSWY',
193
188
  NAME: '财司网银系统',
194
189
  ICON: undefined,
195
190
  LOGIN_MODE: [],
196
191
  OPEN: false
197
192
  },
198
193
  {
199
- NO: 'N05',
194
+ NO: 'JTZL',
200
195
  NAME: '财司直连平台系统',
201
196
  ICON: undefined,
202
197
  LOGIN_MODE: [],
203
198
  OPEN: false
204
199
  },
205
200
  {
206
- NO: 'N06',
201
+ NO: 'JRWG',
207
202
  NAME: '金融网管系统',
208
203
  ICON: undefined,
209
204
  LOGIN_MODE: [],
210
205
  OPEN: false
211
206
  },
212
207
  {
213
- NO: 'N07',
208
+ NO: 'JTSKYWGK',
214
209
  NAME: '集团司库业务管控系统',
215
210
  ICON: undefined,
216
211
  LOGIN_MODE: [],
217
212
  OPEN: false
218
213
  },
219
214
  {
220
- NO: 'N08',
215
+ NO: 'JTSKSJFX',
221
216
  NAME: '集团数据分析系统',
222
217
  ICON: undefined,
223
218
  LOGIN_MODE: [],
@@ -275,6 +270,7 @@ export default {
275
270
  })
276
271
  }
277
272
  }
273
+ this.openCg()
278
274
 
279
275
  // this.$axios.get(`/bems/1.0/download/${this.idNo}_bg`, null, { responseType: 'blob' })
280
276
  })
@@ -282,6 +278,14 @@ export default {
282
278
  sltRow(row) {
283
279
  this.systemItem = row
284
280
  },
281
+ openCg() {
282
+ if (this.form.SYSTEM_LIST.filter((d) => d.OPEN).length <= 1) {
283
+ this.form.LOGIN_TYPE = 'T0'
284
+ this.loginTypeDisabled = true
285
+ } else {
286
+ this.loginTypeDisabled = false
287
+ }
288
+ },
285
289
  async save() {
286
290
  await this.$refs['form'].validate()
287
291
  let errItem = this.form.SYSTEM_LIST.find((d) => d.OPEN && !d.NAME)
@@ -315,7 +319,30 @@ export default {
315
319
  }
316
320
  }
317
321
 
318
- this.$axios.post(`/bems/1.0/sysSetting`, data).then((res) => {})
322
+ this.$axios.post(`/bems/1.0/sysSetting`, data).then((res) => {
323
+ this.$message({
324
+ type: 'success',
325
+ message: `设置成功.`
326
+ })
327
+ this.$emit('renewal')
328
+ })
329
+ },
330
+ Logout() {
331
+ this.$router.push({ path: '/login' })
332
+ },
333
+ countDown() {
334
+ let secondsToGo = 5
335
+ this.$message({
336
+ type: 'success',
337
+ message: `设置成功,系统将在 ${secondsToGo} 秒后退出到登陆页面.`
338
+ })
339
+ const interval = setInterval(() => {
340
+ secondsToGo -= 1
341
+ }, 1000)
342
+ setTimeout(() => {
343
+ clearInterval(interval)
344
+ this.Logout()
345
+ }, secondsToGo * 1000)
319
346
  }
320
347
  }
321
348
  }
@@ -181,6 +181,10 @@ export default {
181
181
  asyncRelaNos: {
182
182
  type: Boolean,
183
183
  default: false
184
+ },
185
+ extraForm: {
186
+ type: Object,
187
+ default: () => ({})
184
188
  }
185
189
  },
186
190
  data() {
@@ -570,7 +574,10 @@ export default {
570
574
  this.loadingAdd()
571
575
  let { data } = await axios.get(
572
576
  '/bems/1.0/menuTree/tree',
573
- { resType: this.asyncRelaNos ? '1' : undefined },
577
+ {
578
+ resType: this.asyncRelaNos ? '1' : undefined,
579
+ ...this.extraForm
580
+ },
574
581
  { loading: this.loadingSub }
575
582
  )
576
583
  data || (data = [])
@@ -56,6 +56,7 @@
56
56
  v-for="(item, i) in systemList"
57
57
  :key="item.NO"
58
58
  class="sys-item float-left"
59
+ :class="{ active: item.NO === sltSys.NO }"
59
60
  :style="{
60
61
  marginRight: (i + 1) % 4 ? '32px' : undefined,
61
62
  marginBottom: systemList.length > 4 && i < 4 ? '54px' : undefined
@@ -76,8 +77,9 @@
76
77
  v-if="operateType === 'login'"
77
78
  :before-login="beforeLogin"
78
79
  :login-types="loginTypes"
79
- :login-then="loginThen"
80
+ :login-then="loginThenT"
80
81
  :async-rela-nos="asyncRelaNos"
82
+ :extra-form="extraForm"
81
83
  class="login-form"
82
84
  @changType="getChangetype"
83
85
  >
@@ -173,10 +175,11 @@ export default {
173
175
  },
174
176
  data() {
175
177
  this.realUrl = realUrl
178
+ let { protocol, host, pathname } = window.location
176
179
  return {
177
180
  wrapStyle: '',
178
181
  OL: false, // 切换到旧的登录页
179
- logUrl: window.location.host,
182
+ logUrl: `${protocol}//${host}${pathname}`,
180
183
  jsonData: {
181
184
  loginTypes: ['account'],
182
185
  loginBg: undefined,
@@ -199,56 +202,56 @@ export default {
199
202
  LOGIN_TYPE: undefined,
200
203
  SYSTEM_LIST: [
201
204
  {
202
- NO: 'N01',
205
+ NO: 'CSZHYW',
203
206
  NAME: '财司综合业务系统',
204
207
  ICON: undefined,
205
208
  LOGIN_MODE: [],
206
209
  OPEN: false
207
210
  },
208
211
  {
209
- NO: 'N02',
212
+ NO: 'CSYWGL',
210
213
  NAME: '财司业务管理系统',
211
214
  ICON: undefined,
212
215
  LOGIN_MODE: [],
213
216
  OPEN: false
214
217
  },
215
218
  {
216
- NO: 'N03',
219
+ NO: 'CSFZJC',
217
220
  NAME: '财司辅助决策系统',
218
221
  ICON: undefined,
219
222
  LOGIN_MODE: [],
220
223
  OPEN: false
221
224
  },
222
225
  {
223
- NO: 'N04',
226
+ NO: 'CSWY',
224
227
  NAME: '财司网银系统',
225
228
  ICON: undefined,
226
229
  LOGIN_MODE: [],
227
230
  OPEN: false
228
231
  },
229
232
  {
230
- NO: 'N05',
233
+ NO: 'JTZL',
231
234
  NAME: '财司直连平台系统',
232
235
  ICON: undefined,
233
236
  LOGIN_MODE: [],
234
237
  OPEN: false
235
238
  },
236
239
  {
237
- NO: 'N06',
240
+ NO: 'JRWG',
238
241
  NAME: '金融网管系统',
239
242
  ICON: undefined,
240
243
  LOGIN_MODE: [],
241
244
  OPEN: false
242
245
  },
243
246
  {
244
- NO: 'N07',
247
+ NO: 'JTSKYWGK',
245
248
  NAME: '集团司库业务管控系统',
246
249
  ICON: undefined,
247
250
  LOGIN_MODE: [],
248
251
  OPEN: false
249
252
  },
250
253
  {
251
- NO: 'N08',
254
+ NO: 'JTSKSJFX',
252
255
  NAME: '集团数据分析系统',
253
256
  ICON: undefined,
254
257
  LOGIN_MODE: [],
@@ -256,7 +259,7 @@ export default {
256
259
  }
257
260
  ]
258
261
  },
259
- sltSys: undefined,
262
+ sltSys: {},
260
263
  inspectionV: false
261
264
  }
262
265
  },
@@ -299,6 +302,16 @@ export default {
299
302
  },
300
303
  systemList() {
301
304
  return this.form.SYSTEM_LIST.filter((d) => d.OPEN)
305
+ },
306
+ extraForm() {
307
+ let form = {}
308
+ if (this?.sltSys?.NO) {
309
+ form.systemNo = this.sltSys.NO
310
+ } else if (this.systemList.length === 1) {
311
+ form.systemNo = this.systemList[0].NO
312
+ }
313
+
314
+ return form
302
315
  }
303
316
  },
304
317
  created() {
@@ -315,6 +328,16 @@ export default {
315
328
  window.removeEventListener('resize', this.setWrapSty)
316
329
  },
317
330
  methods: {
331
+ async loginThenT() {
332
+ if (this.sltSys?.NO) {
333
+ localStorage.setItem('pageInSystemNo', this.sltSys.NO)
334
+ } else {
335
+ localStorage.removeItem('pageInSystemNo')
336
+ }
337
+ if (this.loginThen) {
338
+ await this.loginThen()
339
+ }
340
+ },
318
341
  setWrapSty() {
319
342
  let winW = document.documentElement.clientWidth
320
343
  let winH = document.documentElement.clientHeight
@@ -376,8 +399,18 @@ export default {
376
399
  this.jsonData = _layoutData
377
400
 
378
401
  this.$nextTick(() => {
402
+ let systemNo = localStorage.getItem('pageInSystemNo')
403
+ let acSysI = this.systemList.findIndex((s) => s.NO === systemNo)
404
+
379
405
  if (this.form.LOGIN_TYPE === 'T1') {
380
406
  this.newSwiper()
407
+ if (acSysI !== -1) {
408
+ window.loginSwiperSys(acSysI)
409
+ }
410
+ } else {
411
+ if (acSysI !== -1) {
412
+ this.selSystem(this.systemList[acSysI])
413
+ }
381
414
  }
382
415
  })
383
416
  },
@@ -474,7 +507,7 @@ export default {
474
507
  .login-form {
475
508
  position: absolute;
476
509
  right: 103px;
477
- top: calc(50% - 65px);
510
+ top: 50%;
478
511
  transform: translateY(-50%);
479
512
  width: 300px;
480
513
  min-height: 340px;
@@ -660,6 +693,10 @@ export default {
660
693
  background: linear-gradient(180deg, rgba(153, 165, 186, 0.53), rgba(96, 108, 133, 0.15));
661
694
  border-radius: 6px;
662
695
  }
696
+ .login-wrap-2 .sys-item:hover,
697
+ .login-wrap-2 .sys-item.active {
698
+ background: linear-gradient(180deg, #327bff, rgba(74, 102, 158, 0.3));
699
+ }
663
700
  .login-wrap-2 .sys-item-title {
664
701
  height: 58px;
665
702
  font-size: 14px;
@@ -1,10 +1,10 @@
1
1
  export default {
2
- N01: '/server-assets/N01.png',
3
- N02: '/server-assets/N02.png',
4
- N03: '/server-assets/N03.png',
5
- N04: '/server-assets/N04.png',
6
- N05: '/server-assets/N05.png',
7
- N06: '/server-assets/N06.png',
8
- N07: '/server-assets/N07.png',
9
- N08: '/server-assets/N08.png'
2
+ CSZHYW: '/server-assets/N01.png',
3
+ CSYWGL: '/server-assets/N02.png',
4
+ CSFZJC: '/server-assets/N03.png',
5
+ CSWY: '/server-assets/N04.png',
6
+ JTZL: '/server-assets/N05.png',
7
+ JRWG: '/server-assets/N06.png',
8
+ JTSKYWGK: '/server-assets/N07.png',
9
+ JTSKSJFX: '/server-assets/N08.png'
10
10
  }
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <el-table
3
3
  ref="el-table"
4
+ :key="colsKey"
4
5
  :header-cell-style="{ 'text-align': 'center' }"
5
6
  :data="data"
6
7
  :height="height"
@@ -85,11 +86,14 @@ export default {
85
86
  default: undefined
86
87
  }
87
88
  },
89
+ data() {
90
+ return {
91
+ colsKey: 0
92
+ }
93
+ },
88
94
  watch: {
89
95
  columns() {
90
- this.$nextTick(() => {
91
- this.$refs['el-table']?.doLayout()
92
- })
96
+ this.colsKey = this.colsKey + 1
93
97
  }
94
98
  },
95
99
  mounted() {
@@ -49,6 +49,7 @@
49
49
  </template>
50
50
 
51
51
  <script>
52
+ import _axios from 'axios'
52
53
  import { $lc } from '../../utils/i18n/index'
53
54
  import auth from '../../utils/auth'
54
55
  import axios from '../../utils/axios'
@@ -244,7 +245,8 @@ export default {
244
245
  }
245
246
  }
246
247
 
247
- return axios.post(opt.action, FD, {
248
+ let abort
249
+ let Pro = axios.post(opt.action, FD, {
248
250
  headers: Object.assign(auth.setHeaders(this.headers), { 'Content-Type': 'multipart/form-data' }),
249
251
  loading: false,
250
252
  onUploadProgress: (arg) => {
@@ -252,8 +254,13 @@ export default {
252
254
  arg.percent = arg.progress * 100
253
255
  opt.onProgress(arg)
254
256
  }
255
- }
257
+ },
258
+ cancelToken: new _axios.CancelToken((cancel) => {
259
+ abort = cancel
260
+ })
256
261
  })
262
+ Pro.abort = abort
263
+ return Pro
257
264
  }
258
265
  },
259
266
  progressFn(event, file, fileList) {
@@ -55,28 +55,55 @@ function buildURL(url, params) {
55
55
  return url
56
56
  }
57
57
 
58
- export function linkPush(url, params = {}) {
59
- params._fromNo = Date.now()
60
- sessionStorage.setItem(params._fromNo, location.href)
58
+ export function linkPush(url = '', query = {}, $router) {
59
+ query._fromNo = Date.now()
60
+ sessionStorage.setItem(query._fromNo, location.href)
61
+ // 如果提供vue-router
62
+ if ($router && $router.options && $router.push) {
63
+ let base = $router.options.base || ''
64
+ base = base.replace(/\/$/, '')
65
+ base = new RegExp('^' + base)
61
66
 
62
- url = buildURL(url, params)
67
+ if (base.test(url)) {
68
+ $router.push({
69
+ path: url.replace(base, ''),
70
+ query: query
71
+ })
72
+ $router = undefined
73
+ return
74
+ }
75
+ }
76
+
77
+ url = buildURL(url, query)
63
78
  history.pushState(null, null, url)
64
79
  }
65
80
 
66
- export function linkGo() {
81
+ export function linkGo(N = -1, $router) {
67
82
  let _fromUrl
68
83
  const search = window.location.search
69
84
  let _fromRe = search.includes('_fromNo=') ? /_fromNo=(\d+)/ : /_fromId=(\d+)/
70
85
  let _fromM = search.match(_fromRe)
71
- if (_fromM?.[1]) {
86
+ if (_fromM && _fromM[1]) {
72
87
  _fromUrl = sessionStorage.getItem(_fromM[1])
73
88
  }
74
89
 
75
90
  if (_fromUrl) {
91
+ // 如果提供vue-router
92
+ if ($router && $router.options && $router.push) {
93
+ let base = $router.options.base || ''
94
+ base = base.replace(/\/$/, '')
95
+ base = new RegExp('^' + base)
96
+
97
+ if (base.test(_fromUrl)) {
98
+ $router.push(_fromUrl.replace(base, ''))
99
+ $router = undefined
100
+ return
101
+ }
102
+ }
76
103
  // window.history.go(-1)
77
104
  // window.history.replaceState(null, null, _fromUrl)
78
105
  history.pushState(null, null, _fromUrl)
79
106
  } else {
80
- window.history.go(-1)
107
+ window.history.go(N)
81
108
  }
82
109
  }