n20-common-lib 2.1.3 → 2.1.4

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.4",
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
  }
@@ -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
@@ -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: [],
@@ -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,26 @@ 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.countDown()
324
+ })
325
+ },
326
+ Logout() {
327
+ this.$router.push({ path: '/login' })
328
+ },
329
+ countDown() {
330
+ let secondsToGo = 5
331
+ this.$message({
332
+ type: 'success',
333
+ message: `设置成功,系统将在 ${secondsToGo} 秒后退出到登陆页面.`
334
+ })
335
+ const interval = setInterval(() => {
336
+ secondsToGo -= 1
337
+ }, 1000)
338
+ setTimeout(() => {
339
+ clearInterval(interval)
340
+ this.Logout()
341
+ }, secondsToGo * 1000)
319
342
  }
320
343
  }
321
344
  }
@@ -173,10 +173,11 @@ export default {
173
173
  },
174
174
  data() {
175
175
  this.realUrl = realUrl
176
+ let { protocol, host, pathname } = window.location
176
177
  return {
177
178
  wrapStyle: '',
178
179
  OL: false, // 切换到旧的登录页
179
- logUrl: window.location.host,
180
+ logUrl: `${protocol}//${host}${pathname}`,
180
181
  jsonData: {
181
182
  loginTypes: ['account'],
182
183
  loginBg: undefined,
@@ -474,7 +475,7 @@ export default {
474
475
  .login-form {
475
476
  position: absolute;
476
477
  right: 103px;
477
- top: calc(50% - 65px);
478
+ top: 50%;
478
479
  transform: translateY(-50%);
479
480
  width: 300px;
480
481
  min-height: 340px;
@@ -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
  }