lshcom 1.0.0
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/README.md +31 -0
- package/package.json +14 -0
- package/src/assets/Porsche/iconfont.css +19 -0
- package/src/assets/Porsche/iconfont.eot +0 -0
- package/src/assets/Porsche/iconfont.js +1 -0
- package/src/assets/Porsche/iconfont.svg +36 -0
- package/src/assets/Porsche/iconfont.ttf +0 -0
- package/src/assets/Porsche/iconfont.woff +0 -0
- package/src/assets/cluemanagement/demo.css +539 -0
- package/src/assets/cluemanagement/demo_index.html +207 -0
- package/src/assets/cluemanagement/iconfont.css +17 -0
- package/src/assets/cluemanagement/iconfont.js +1 -0
- package/src/assets/cluemanagement/iconfont.json +16 -0
- package/src/assets/cluemanagement/iconfont.ttf +0 -0
- package/src/assets/css/_bootstrap-variables.scss +108 -0
- package/src/assets/css/_core-variables.scss +1 -0
- package/src/assets/css/_custom.scss +4 -0
- package/src/assets/css/bootstrap/_alert.scss +48 -0
- package/src/assets/css/bootstrap/_badge.scss +48 -0
- package/src/assets/css/bootstrap/_breadcrumb.scss +38 -0
- package/src/assets/css/bootstrap/_button-group.scss +198 -0
- package/src/assets/css/bootstrap/_buttons.scss +141 -0
- package/src/assets/css/bootstrap/_card.scss +223 -0
- package/src/assets/css/bootstrap/_carousel.scss +185 -0
- package/src/assets/css/bootstrap/_close.scss +29 -0
- package/src/assets/css/bootstrap/_code.scss +64 -0
- package/src/assets/css/bootstrap/_custom-forms.scss +254 -0
- package/src/assets/css/bootstrap/_dropdown.scss +128 -0
- package/src/assets/css/bootstrap/_forms.scss +390 -0
- package/src/assets/css/bootstrap/_functions.scss +90 -0
- package/src/assets/css/bootstrap/_grid.scss +53 -0
- package/src/assets/css/bootstrap/_images.scss +43 -0
- package/src/assets/css/bootstrap/_input-group.scss +176 -0
- package/src/assets/css/bootstrap/_jumbotron.scss +16 -0
- package/src/assets/css/bootstrap/_list-group.scss +114 -0
- package/src/assets/css/bootstrap/_media.scss +8 -0
- package/src/assets/css/bootstrap/_mixins.scss +41 -0
- package/src/assets/css/bootstrap/_modal.scss +142 -0
- package/src/assets/css/bootstrap/_nav.scss +120 -0
- package/src/assets/css/bootstrap/_navbar.scss +284 -0
- package/src/assets/css/bootstrap/_pagination.scss +66 -0
- package/src/assets/css/bootstrap/_popover.scss +195 -0
- package/src/assets/css/bootstrap/_print.scss +111 -0
- package/src/assets/css/bootstrap/_progress.scss +32 -0
- package/src/assets/css/bootstrap/_reboot.scss +481 -0
- package/src/assets/css/bootstrap/_tables.scss +142 -0
- package/src/assets/css/bootstrap/_tooltip.scss +107 -0
- package/src/assets/css/bootstrap/_transitions.scss +34 -0
- package/src/assets/css/bootstrap/_type.scss +123 -0
- package/src/assets/css/bootstrap/_utilities.scss +14 -0
- package/src/assets/css/bootstrap/_variables.scss +636 -0
- package/src/assets/css/bootstrap/bootstrap-grid.scss +37 -0
- package/src/assets/css/bootstrap/bootstrap-reboot.scss +9 -0
- package/src/assets/css/bootstrap/bootstrap.scss +48 -0
- package/src/assets/css/bootstrap/mixins/_alert.scss +13 -0
- package/src/assets/css/bootstrap/mixins/_background-variant.scss +12 -0
- package/src/assets/css/bootstrap/mixins/_badge.scss +12 -0
- package/src/assets/css/bootstrap/mixins/_border-radius.scss +35 -0
- package/src/assets/css/bootstrap/mixins/_box-shadow.scss +5 -0
- package/src/assets/css/bootstrap/mixins/_breakpoints.scss +105 -0
- package/src/assets/css/bootstrap/mixins/_buttons.scss +83 -0
- package/src/assets/css/bootstrap/mixins/_clearfix.scss +7 -0
- package/src/assets/css/bootstrap/mixins/_float.scss +9 -0
- package/src/assets/css/bootstrap/mixins/_forms.scss +81 -0
- package/src/assets/css/bootstrap/mixins/_gradients.scss +37 -0
- package/src/assets/css/bootstrap/mixins/_grid-framework.scss +56 -0
- package/src/assets/css/bootstrap/mixins/_grid.scss +47 -0
- package/src/assets/css/bootstrap/mixins/_hover.scss +60 -0
- package/src/assets/css/bootstrap/mixins/_image.scss +36 -0
- package/src/assets/css/bootstrap/mixins/_list-group.scss +26 -0
- package/src/assets/css/bootstrap/mixins/_lists.scss +7 -0
- package/src/assets/css/bootstrap/mixins/_nav-divider.scss +10 -0
- package/src/assets/css/bootstrap/mixins/_navbar-align.scss +9 -0
- package/src/assets/css/bootstrap/mixins/_pagination.scss +22 -0
- package/src/assets/css/bootstrap/mixins/_reset-text.scss +18 -0
- package/src/assets/css/bootstrap/mixins/_resize.scss +6 -0
- package/src/assets/css/bootstrap/mixins/_screen-reader.scss +35 -0
- package/src/assets/css/bootstrap/mixins/_size.scss +6 -0
- package/src/assets/css/bootstrap/mixins/_table-row.scss +30 -0
- package/src/assets/css/bootstrap/mixins/_text-emphasis.scss +12 -0
- package/src/assets/css/bootstrap/mixins/_text-hide.scss +8 -0
- package/src/assets/css/bootstrap/mixins/_text-truncate.scss +8 -0
- package/src/assets/css/bootstrap/mixins/_transition.scss +9 -0
- package/src/assets/css/bootstrap/mixins/_visibility.scss +5 -0
- package/src/assets/css/bootstrap/utilities/_align.scss +6 -0
- package/src/assets/css/bootstrap/utilities/_background.scss +6 -0
- package/src/assets/css/bootstrap/utilities/_borders.scss +52 -0
- package/src/assets/css/bootstrap/utilities/_clearfix.scss +3 -0
- package/src/assets/css/bootstrap/utilities/_display.scss +53 -0
- package/src/assets/css/bootstrap/utilities/_embed.scss +52 -0
- package/src/assets/css/bootstrap/utilities/_flex.scss +44 -0
- package/src/assets/css/bootstrap/utilities/_float.scss +9 -0
- package/src/assets/css/bootstrap/utilities/_position.scss +25 -0
- package/src/assets/css/bootstrap/utilities/_screenreaders.scss +11 -0
- package/src/assets/css/bootstrap/utilities/_sizing.scss +10 -0
- package/src/assets/css/bootstrap/utilities/_spacing.scss +41 -0
- package/src/assets/css/bootstrap/utilities/_text.scss +49 -0
- package/src/assets/css/bootstrap/utilities/_visibility.scss +11 -0
- package/src/assets/css/core/_animate.scss +44 -0
- package/src/assets/css/core/_aside.scss +64 -0
- package/src/assets/css/core/_avatars.scss +51 -0
- package/src/assets/css/core/_badge.scss +3 -0
- package/src/assets/css/core/_breadcrumb-menu.scss +35 -0
- package/src/assets/css/core/_breadcrumb.scss +6 -0
- package/src/assets/css/core/_buttons.scss +575 -0
- package/src/assets/css/core/_callout.scss +55 -0
- package/src/assets/css/core/_card.scss +191 -0
- package/src/assets/css/core/_charts.scss +9 -0
- package/src/assets/css/core/_dropdown.scss +69 -0
- package/src/assets/css/core/_footer.scss +8 -0
- package/src/assets/css/core/_grid.scss +15 -0
- package/src/assets/css/core/_input-group.scss +6 -0
- package/src/assets/css/core/_input.scss +26 -0
- package/src/assets/css/core/_layout.scss +397 -0
- package/src/assets/css/core/_loading.scss +128 -0
- package/src/assets/css/core/_mixins.scss +116 -0
- package/src/assets/css/core/_mobile.scss +0 -0
- package/src/assets/css/core/_modal.scss +16 -0
- package/src/assets/css/core/_nav.scss +32 -0
- package/src/assets/css/core/_navbar.scss +106 -0
- package/src/assets/css/core/_others.scss +4 -0
- package/src/assets/css/core/_progress.scss +15 -0
- package/src/assets/css/core/_rtl.scss +267 -0
- package/src/assets/css/core/_sidebar.scss +426 -0
- package/src/assets/css/core/_switches.scss +301 -0
- package/src/assets/css/core/_tables.scss +72 -0
- package/src/assets/css/core/_temp.scss +47 -0
- package/src/assets/css/core/_typography.scss +36 -0
- package/src/assets/css/core/_utilities.scss +3 -0
- package/src/assets/css/core/_variables.scss +174 -0
- package/src/assets/css/core/_widgets.scss +253 -0
- package/src/assets/css/core/core.scss +40 -0
- package/src/assets/css/core/utilities/_background.scss +8 -0
- package/src/assets/css/core/utilities/_borders.scss +18 -0
- package/src/assets/css/core/utilities/_display.scss +18 -0
- package/src/assets/css/iconfont.css +85 -0
- package/src/assets/css/loading.css +18 -0
- package/src/assets/css/main.scss +15 -0
- package/src/assets/css/themes/default.scss +518 -0
- package/src/assets/css/themes/first.css +25 -0
- package/src/assets/css/vendors/_vendors.scss +1 -0
- package/src/assets/css/vendors/chart.js/chart.scss +45 -0
- package/src/assets/financial/demo.css +539 -0
- package/src/assets/financial/demo_index.html +230 -0
- package/src/assets/financial/iconfont.css +21 -0
- package/src/assets/financial/iconfont.js +1 -0
- package/src/assets/financial/iconfont.json +23 -0
- package/src/assets/financial/iconfont.ttf +0 -0
- package/src/assets/font_jipan/demo.css +539 -0
- package/src/assets/font_jipan/demo_index.html +211 -0
- package/src/assets/font_jipan/iconfont.css +19 -0
- package/src/assets/font_jipan/iconfont.js +1 -0
- package/src/assets/font_jipan/iconfont.json +16 -0
- package/src/assets/font_jipan/iconfont.ttf +0 -0
- package/src/assets/font_jipan/iconfont.woff +0 -0
- package/src/assets/font_jipan/iconfont.woff2 +0 -0
- package/src/assets/fontgift/demo.css +539 -0
- package/src/assets/fontgift/demo_index.html +207 -0
- package/src/assets/fontgift/iconfont.css +17 -0
- package/src/assets/fontgift/iconfont.js +1 -0
- package/src/assets/fontgift/iconfont.json +16 -0
- package/src/assets/fontgift/iconfont.ttf +0 -0
- package/src/assets/fonts/iconfont.eot +0 -0
- package/src/assets/fonts/iconfont.svg +79 -0
- package/src/assets/fonts/iconfont.ttf +0 -0
- package/src/assets/fonts/iconfont.woff +0 -0
- package/src/assets/img/1.jpg +0 -0
- package/src/assets/img/2.jpg +0 -0
- package/src/assets/img/404.jpg +0 -0
- package/src/assets/img/A01-Line.png +0 -0
- package/src/assets/img/A01.png +0 -0
- package/src/assets/img/W02-Line.png +0 -0
- package/src/assets/img/W02.png +0 -0
- package/src/assets/img/arrow-left.png +0 -0
- package/src/assets/img/arrow-right.png +0 -0
- package/src/assets/img/borad-check.png +0 -0
- package/src/assets/img/call-conference-end.png +0 -0
- package/src/assets/img/call-conference.png +0 -0
- package/src/assets/img/call-consult-end.png +0 -0
- package/src/assets/img/call-consult-out.png +0 -0
- package/src/assets/img/call-consult.png +0 -0
- package/src/assets/img/call-expansion-menu.png +0 -0
- package/src/assets/img/call-expansion.png +0 -0
- package/src/assets/img/call-hang-up.png +0 -0
- package/src/assets/img/call-hold.png +0 -0
- package/src/assets/img/call-holding.png +0 -0
- package/src/assets/img/call-shrink-menu.png +0 -0
- package/src/assets/img/call-shrink.png +0 -0
- package/src/assets/img/call-transfer-end.png +0 -0
- package/src/assets/img/call-transfer.png +0 -0
- package/src/assets/img/call.png +0 -0
- package/src/assets/img/cancle-keep.png +0 -0
- package/src/assets/img/card.png +0 -0
- package/src/assets/img/cash.png +0 -0
- package/src/assets/img/customer-portrayal-blue.png +0 -0
- package/src/assets/img/customer-portrayal-white.png +0 -0
- package/src/assets/img/error.png +0 -0
- package/src/assets/img/iris.png +0 -0
- package/src/assets/img/left-kuang.png +0 -0
- package/src/assets/img/lockimg.png +0 -0
- package/src/assets/img/offLine.png +0 -0
- package/src/assets/img/success.png +0 -0
- package/src/assets/img/tishi.png +0 -0
- package/src/assets/img/userimg.png +0 -0
- package/src/assets/iocnfont/AI/demo.css +539 -0
- package/src/assets/iocnfont/AI/demo_index.html +211 -0
- package/src/assets/iocnfont/AI/iconfont.css +19 -0
- package/src/assets/iocnfont/AI/iconfont.js +1 -0
- package/src/assets/iocnfont/AI/iconfont.json +16 -0
- package/src/assets/iocnfont/AI/iconfont.ttf +0 -0
- package/src/assets/iocnfont/AI/iconfont.woff +0 -0
- package/src/assets/iocnfont/AI/iconfont.woff2 +0 -0
- package/src/assets/iocnfont/add/demo.css +539 -0
- package/src/assets/iocnfont/add/demo_index.html +212 -0
- package/src/assets/iocnfont/add/iconfont.css +20 -0
- package/src/assets/iocnfont/add/iconfont.js +1 -0
- package/src/assets/iocnfont/add/iconfont.json +16 -0
- package/src/assets/iocnfont/add/iconfont.svg +21 -0
- package/src/assets/iocnfont/add/iconfont.ttf +0 -0
- package/src/assets/iocnfont/add/iconfont.woff +0 -0
- package/src/assets/iocnfont/add/iconfont.woff2 +0 -0
- package/src/assets/iocnfont/addsf/demo.css +539 -0
- package/src/assets/iocnfont/addsf/demo_index.html +506 -0
- package/src/assets/iocnfont/addsf/iconfont.css +69 -0
- package/src/assets/iocnfont/addsf/iconfont.js +1 -0
- package/src/assets/iocnfont/addsf/iconfont.json +107 -0
- package/src/assets/iocnfont/addsf/iconfont.ttf +0 -0
- package/src/assets/iocnfont/arrow/demo.css +370 -0
- package/src/assets/iocnfont/arrow/demo_fontclass.html +58 -0
- package/src/assets/iocnfont/arrow/demo_symbol.html +87 -0
- package/src/assets/iocnfont/arrow/demo_unicode.html +96 -0
- package/src/assets/iocnfont/arrow/iconfont.css +36 -0
- package/src/assets/iocnfont/arrow/iconfont.eot +0 -0
- package/src/assets/iocnfont/arrow/iconfont.js +1 -0
- package/src/assets/iocnfont/arrow/iconfont.svg +35 -0
- package/src/assets/iocnfont/arrow/iconfont.ttf +0 -0
- package/src/assets/iocnfont/arrow/iconfont.woff +0 -0
- package/src/assets/iocnfont/company/demo.css +539 -0
- package/src/assets/iocnfont/company/demo_index.html +253 -0
- package/src/assets/iocnfont/company/iconfont.css +24 -0
- package/src/assets/iocnfont/company/iconfont.js +1 -0
- package/src/assets/iocnfont/company/iconfont.json +30 -0
- package/src/assets/iocnfont/company/iconfont.ttf +0 -0
- package/src/assets/iocnfont/iconfont-otr/iconfont.css +39 -0
- package/src/assets/iocnfont/iconfont-otr/iconfont.eot +0 -0
- package/src/assets/iocnfont/iconfont-otr/iconfont.js +1 -0
- package/src/assets/iocnfont/iconfont-otr/iconfont.json +23 -0
- package/src/assets/iocnfont/iconfont-otr/iconfont.svg +14 -0
- package/src/assets/iocnfont/iconfont-otr/iconfont.ttf +0 -0
- package/src/assets/iocnfont/iconfont-otr/iconfont.woff +0 -0
- package/src/assets/iocnfont/iconfont.css +89 -0
- package/src/assets/iocnfont/iconfont.eot +0 -0
- package/src/assets/iocnfont/iconfont.js +1 -0
- package/src/assets/iocnfont/iconfont.svg +134 -0
- package/src/assets/iocnfont/iconfont.ttf +0 -0
- package/src/assets/iocnfont/iconfont.woff +0 -0
- package/src/assets/iocnfont/vehicle/iconfont.css +31 -0
- package/src/assets/iocnfont/vehicle/iconfont.eot +0 -0
- package/src/assets/iocnfont/vehicle/iconfont.js +1 -0
- package/src/assets/iocnfont/vehicle/iconfont.svg +54 -0
- package/src/assets/iocnfont/vehicle/iconfont.ttf +0 -0
- package/src/assets/iocnfont/vehicle/iconfont.woff +0 -0
- package/src/assets/lixinghang/iconfont.css +50 -0
- package/src/assets/lixinghang/iconfont.eot +0 -0
- package/src/assets/lixinghang/iconfont.js +1 -0
- package/src/assets/lixinghang/iconfont.json +58 -0
- package/src/assets/lixinghang/iconfont.svg +18 -0
- package/src/assets/lixinghang/iconfont.ttf +0 -0
- package/src/assets/lixinghang/iconfont.woff +0 -0
- package/src/assets/lixinghang/iconfont.woff2 +0 -0
- package/src/assets/privacy/demo.css +539 -0
- package/src/assets/privacy/demo_index.html +207 -0
- package/src/assets/privacy/iconfont.css +17 -0
- package/src/assets/privacy/iconfont.js +1 -0
- package/src/assets/privacy/iconfont.json +16 -0
- package/src/assets/privacy/iconfont.ttf +0 -0
- package/src/assets/sheche/demo.css +539 -0
- package/src/assets/sheche/demo_index.html +230 -0
- package/src/assets/sheche/iconfont.css +21 -0
- package/src/assets/sheche/iconfont.js +1 -0
- package/src/assets/sheche/iconfont.json +23 -0
- package/src/assets/sheche/iconfont.ttf +0 -0
- package/src/assets/suggtion/demo.css +539 -0
- package/src/assets/suggtion/demo_index.html +207 -0
- package/src/assets/suggtion/iconfont.css +17 -0
- package/src/assets/suggtion/iconfont.js +1 -0
- package/src/assets/suggtion/iconfont.json +16 -0
- package/src/assets/suggtion/iconfont.ttf +0 -0
- package/src/assets/survey/demo.css +539 -0
- package/src/assets/survey/demo_index.html +207 -0
- package/src/assets/survey/iconfont.css +17 -0
- package/src/assets/survey/iconfont.js +1 -0
- package/src/assets/survey/iconfont.json +16 -0
- package/src/assets/survey/iconfont.ttf +0 -0
- package/src/common/common.js +599 -0
- package/src/common/global.js +214 -0
- package/src/components/LshCust/index.vue +926 -0
- package/src/components/LshVehicle/index.vue +1002 -0
- package/src/components/el/DatePicker.vue +113 -0
- package/src/components/el/Dialog.vue +66 -0
- package/src/components/el/Page.vue +69 -0
- package/src/components/el/Select.vue +173 -0
- package/src/components/el/Table.vue +98 -0
- package/src/components/el/Upload.vue +175 -0
- package/src/components/lsh-customer/dialog.vue +66 -0
- package/src/components/lsh-customer/index.vue +453 -0
- package/src/components/lsh-vehicle/dialog.vue +47 -0
- package/src/components/lsh-vehicle/index.vue +534 -0
- package/src/components/lsh-vehicle/lshCust.vue +715 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-date-picker
|
|
3
|
+
ref="datePicker"
|
|
4
|
+
:readonly="readonly"
|
|
5
|
+
:disabled="disabled"
|
|
6
|
+
:editable="editable"
|
|
7
|
+
:clearable="clearable"
|
|
8
|
+
:size="size"
|
|
9
|
+
v-model="date"
|
|
10
|
+
:type="type"
|
|
11
|
+
:placeholder="placeholder"
|
|
12
|
+
:format="format"
|
|
13
|
+
:align="align"
|
|
14
|
+
:picker-options="pickerOptions"
|
|
15
|
+
:range-separator="rangeSeparator"
|
|
16
|
+
:default-value="defaultValue"
|
|
17
|
+
@change="change">
|
|
18
|
+
</el-date-picker>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script>
|
|
22
|
+
export default {
|
|
23
|
+
props:{
|
|
24
|
+
readonly: { type: Boolean, default: false }, // 完全只读
|
|
25
|
+
value: [String, Number, Array, Date], // 双向绑定,父组件选中的值
|
|
26
|
+
placeholder: { type: String, default: '请选择日期' }, // 占位符
|
|
27
|
+
type: { type: String, default: 'date' }, // 显示类型 year/month/date/week/datetime/datetimerange/daterange
|
|
28
|
+
disabled: { type: Boolean, default: false }, // 是否禁用
|
|
29
|
+
editable: { type: Boolean, default: false }, // 文本框可输入
|
|
30
|
+
clearable: { type: Boolean, default: true }, // 是否可以清空选项
|
|
31
|
+
size: {type: String, default: ''}, // 输入框尺寸 large/small/mini
|
|
32
|
+
format: {type: String, default: 'yyyy-MM-dd'}, // 时间日期格式化 年 yyyy,月 MM,日 dd,小时 HH,分 mm,秒 ss
|
|
33
|
+
align: {type: String, default: 'left'}, // 对齐方式 left/center/right
|
|
34
|
+
rangeSeparator: {type: String, default: ' - '}, // 选择范围时的分隔符
|
|
35
|
+
defaultValue: [String, Number, Array, Date], // 可选,DatePicker打开时默认显示的时间,可被new Date()解析
|
|
36
|
+
maxDate: {type: Number, default: 0}, // 可选,设置最大可选时间(天数)
|
|
37
|
+
valueFormat: {type: String, default: ''}, // 可选,绑定值的格式。不指定则绑定值为 Date 对象
|
|
38
|
+
},
|
|
39
|
+
data() {
|
|
40
|
+
return {
|
|
41
|
+
date: '',
|
|
42
|
+
pickerMinDate: '',
|
|
43
|
+
pickerOptions: {
|
|
44
|
+
disabledDate: (time) => {
|
|
45
|
+
if (this.maxDate){
|
|
46
|
+
if (this.pickerMinDate !== '') {
|
|
47
|
+
let maxTime = this.pickerMinDate + this.maxDate * 3600000 * 24
|
|
48
|
+
if (maxTime > new Date()) {
|
|
49
|
+
maxTime = new Date()
|
|
50
|
+
}
|
|
51
|
+
return time.getTime() > maxTime
|
|
52
|
+
}
|
|
53
|
+
return time.getTime() > Date.now()
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
onPick: ({ maxDate, minDate }) => {
|
|
57
|
+
if (this.maxDate){
|
|
58
|
+
this.pickerMinDate = minDate.getTime()
|
|
59
|
+
if (maxDate) {
|
|
60
|
+
this.pickerMinDate = ''
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
watch: {
|
|
68
|
+
value: function (val, oldVal) {
|
|
69
|
+
if(['daterange'].includes(this.type)){
|
|
70
|
+
if (!val || !val.length) {
|
|
71
|
+
this.change()
|
|
72
|
+
} else if(val[0] !== this.date[0] || val[1] !== this.date[1]){
|
|
73
|
+
this.change(val[0] + this.rangeSeparator + val[1])
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
this.date = val
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
mounted() {
|
|
81
|
+
this.date = this.value
|
|
82
|
+
},
|
|
83
|
+
methods: {
|
|
84
|
+
change(value){
|
|
85
|
+
if(['daterange'].includes(this.type)){
|
|
86
|
+
if (!value) {
|
|
87
|
+
value = [undefined, undefined]
|
|
88
|
+
} else {
|
|
89
|
+
let valueArr = value.split(this.rangeSeparator)
|
|
90
|
+
if(this.valueFormat){
|
|
91
|
+
value = [
|
|
92
|
+
valueArr[0] ? new Date(valueArr[0]).Format(this.valueFormat) : undefined,
|
|
93
|
+
valueArr[1] ? new Date(valueArr[1]).Format(this.valueFormat) : undefined,
|
|
94
|
+
]
|
|
95
|
+
}else{
|
|
96
|
+
value = [
|
|
97
|
+
valueArr[0] ? new Date(valueArr[0]).Format('yyyy-MM-dd') + ' 00:00:00' : undefined,
|
|
98
|
+
valueArr[1] ? new Date(valueArr[1]).Format('yyyy-MM-dd') + ' 23:59:59' : undefined,
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
} else if(['date'].includes(this.type)){
|
|
103
|
+
if(this.valueFormat && value){
|
|
104
|
+
value = new Date(value).Format(this.valueFormat)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
this.date = value
|
|
108
|
+
this.$emit('input', value)
|
|
109
|
+
this.$emit('change', value)
|
|
110
|
+
},
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
</script>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-dialog
|
|
3
|
+
:title="title"
|
|
4
|
+
ref="dialog"
|
|
5
|
+
:visible.sync="visible"
|
|
6
|
+
:size="size"
|
|
7
|
+
:top="top"
|
|
8
|
+
:modal="modal"
|
|
9
|
+
:modal-append-to-body="modalAppendToBody"
|
|
10
|
+
:before-close="handleClose">
|
|
11
|
+
<template v-if="customTitle" slot="title">
|
|
12
|
+
<slot name="title"></slot>
|
|
13
|
+
</template>
|
|
14
|
+
<slot v-if="visible"></slot>
|
|
15
|
+
<span v-if="showFooter" slot="footer" class="dialog-footer">
|
|
16
|
+
<slot v-if="customFooter" name="footer"></slot>
|
|
17
|
+
<div v-else>
|
|
18
|
+
<el-button @click="visible = false">取 消</el-button>
|
|
19
|
+
<el-button type="primary" @click="$emit('confirm')">确 定</el-button>
|
|
20
|
+
</div>
|
|
21
|
+
</span>
|
|
22
|
+
</el-dialog>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<script>
|
|
26
|
+
export default {
|
|
27
|
+
props:{
|
|
28
|
+
title: {type: String, default: '提示'}, // Dialog 的标题
|
|
29
|
+
customTitle: Boolean, // 是否使用自定义标题
|
|
30
|
+
beforeClose: Boolean, // 关闭前的回调,会暂停 Dialog 的关闭
|
|
31
|
+
show: Boolean, // 是否默认显示
|
|
32
|
+
showFooter: Boolean, // 是否显示底部按钮
|
|
33
|
+
customFooter: Boolean, // 是否使用自定义底部按钮
|
|
34
|
+
size: {type: String, default: 'small'}, // tiny/small/large/full
|
|
35
|
+
top: {type: String,default: '15%'}, // Dialog CSS 中的 top 值(仅在 size 不为 full 时有效)
|
|
36
|
+
modal: {type: Boolean, default: true}, // 是否需要遮罩层
|
|
37
|
+
modalAppendToBody: {type: Boolean, default: true}, // 遮罩层是否插入至 body 元素上,若为 false,则遮罩层会插入至 Dialog 的父元素上
|
|
38
|
+
},
|
|
39
|
+
data() {
|
|
40
|
+
return {
|
|
41
|
+
visible: false
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
mounted(){
|
|
45
|
+
this.visible = this.show;
|
|
46
|
+
},
|
|
47
|
+
methods: {
|
|
48
|
+
close(){
|
|
49
|
+
this.$refs.dialog.handleClose()
|
|
50
|
+
},
|
|
51
|
+
handleClose(done) {
|
|
52
|
+
if(this.beforeClose){
|
|
53
|
+
this.$confirm('确认关闭?')
|
|
54
|
+
.then(_ => {
|
|
55
|
+
this.$emit('close')
|
|
56
|
+
done();
|
|
57
|
+
})
|
|
58
|
+
.catch(_ => {});
|
|
59
|
+
} else {
|
|
60
|
+
this.$emit('close')
|
|
61
|
+
done()
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
</script>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-pagination
|
|
3
|
+
class="f-tar f-mt10"
|
|
4
|
+
@size-change="handleSizeChange"
|
|
5
|
+
@current-change="handleCurrentChange"
|
|
6
|
+
:current-page="currentPage"
|
|
7
|
+
:page-sizes="pageSizes"
|
|
8
|
+
:page-size="pageSize"
|
|
9
|
+
:layout="layout"
|
|
10
|
+
:total="total">
|
|
11
|
+
</el-pagination>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script>
|
|
15
|
+
export default {
|
|
16
|
+
props:{
|
|
17
|
+
pageStart: { type: Number, default: 1 }, // 当前页数
|
|
18
|
+
pageNums: { type: Number, default: 10 }, // 每页显示条目个数
|
|
19
|
+
total: { type: Number, default: 0 }, // 总条目数
|
|
20
|
+
layout: {type: String, default: 'total, sizes, prev, pager, next, jumper'}, // 组件布局,子组件名用逗号分隔
|
|
21
|
+
pageSizes: {type: Array, default: () => [10, 20, 50, 100]}, // 每页显示个数选择器的选项设置
|
|
22
|
+
isStartGetData: { type: Boolean, default: true }, // 是否开始加载数据
|
|
23
|
+
},
|
|
24
|
+
data() {
|
|
25
|
+
return {
|
|
26
|
+
currentPage: 1,
|
|
27
|
+
pageSize: 10,
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
mounted() {
|
|
31
|
+
this.currentPage = this.pageStart
|
|
32
|
+
this.pageSize = this.pageNums
|
|
33
|
+
if (this.isStartGetData){
|
|
34
|
+
this.change()
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
methods: {
|
|
38
|
+
handleSizeChange(val) {
|
|
39
|
+
this.pageSize = val
|
|
40
|
+
this.change()
|
|
41
|
+
},
|
|
42
|
+
handleCurrentChange(val) {
|
|
43
|
+
this.currentPage = val
|
|
44
|
+
this.change()
|
|
45
|
+
},
|
|
46
|
+
change(){
|
|
47
|
+
this.$emit('change', {
|
|
48
|
+
pageStart: this.currentPage,
|
|
49
|
+
pageNums: this.pageSize
|
|
50
|
+
})
|
|
51
|
+
},
|
|
52
|
+
reset(){
|
|
53
|
+
this.currentPage = this.pageStart
|
|
54
|
+
this.pageSize = this.pageNums
|
|
55
|
+
},
|
|
56
|
+
resetCurrent(currentPage){
|
|
57
|
+
if (this.currentPage != currentPage) {
|
|
58
|
+
this.currentPage = currentPage
|
|
59
|
+
} else {
|
|
60
|
+
this.change()
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<style lang="scss" scoped>
|
|
68
|
+
/deep/ .el-pagination__sizes{width: 100px !important}
|
|
69
|
+
</style>
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-select
|
|
3
|
+
ref="select"
|
|
4
|
+
v-model="selectValue"
|
|
5
|
+
:placeholder="placeholderComputed"
|
|
6
|
+
:multiple="multiple"
|
|
7
|
+
:collapse-tags="collapseTags"
|
|
8
|
+
:disabled="disabled"
|
|
9
|
+
:clearable="clearable"
|
|
10
|
+
:filterable="filterable"
|
|
11
|
+
:value-key="valueKey"
|
|
12
|
+
@change="change"
|
|
13
|
+
@remove-tag="removeTag"
|
|
14
|
+
@clear="clear"
|
|
15
|
+
@visible-change="visibleChange"
|
|
16
|
+
v-select-loadmore="loadmore"
|
|
17
|
+
:remote="remote"
|
|
18
|
+
:remote-method="remote ? remoteMethod : null"
|
|
19
|
+
>
|
|
20
|
+
<el-option
|
|
21
|
+
v-for="(item,index) in selectOptions"
|
|
22
|
+
:key="item.id || index"
|
|
23
|
+
:label="item[optionLabel]"
|
|
24
|
+
:value="optionValue ? item[optionValue] : item"
|
|
25
|
+
:disabled="item.disabled">
|
|
26
|
+
<slot :item="item"></slot>
|
|
27
|
+
</el-option>
|
|
28
|
+
</el-select>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script>
|
|
32
|
+
export default {
|
|
33
|
+
props:{
|
|
34
|
+
options: {type: Array, default: ()=>{return []}}, // 选项
|
|
35
|
+
value: [String, Number, Array], // 双向绑定,父组件选中的值
|
|
36
|
+
placeholder: { type: String, default: '请选择' }, // 占位符
|
|
37
|
+
multiple: { type: Boolean, default: false }, // 是否多选
|
|
38
|
+
selectAllable: Boolean, // 是否可全选
|
|
39
|
+
collapseTags: { type: Boolean, default: false }, // 多选时是否将选中值按文字的形式展示
|
|
40
|
+
disabled: { type: Boolean, default: false }, // 是否禁用
|
|
41
|
+
clearable: { type: Boolean, default: true }, // 是否可以清空选项
|
|
42
|
+
filterable: { type: Boolean, default: true }, // 是否可搜索
|
|
43
|
+
size: {type: String, default: 'small'}, // 输入框尺寸 large/small/mini
|
|
44
|
+
optionLabel: {type: String, default: 'label',}, // 选项的label
|
|
45
|
+
optionValue: {type: String, default: 'value',}, // 选项的value
|
|
46
|
+
valueKey: {type: String, default: 'value',}, // 作为 value 唯一标识的键名,绑定值为对象类型时必填
|
|
47
|
+
remote: Boolean, // 是否远程搜索
|
|
48
|
+
api: { type: String, default: '' }, // 接口地址
|
|
49
|
+
query: { type: Object, default: () => ({}) }, // 接口参数
|
|
50
|
+
pageKey: { type: Array, default: () => (['pageStart', 'pageNums']) }, // 分页key
|
|
51
|
+
pageStart: { type: Number, default: 1 }, // 当前页数
|
|
52
|
+
pageNums: { type: Number, default: 10 }, // 每页显示条目个数
|
|
53
|
+
queryKey: { type: String, default: 'name' }, // 搜索关键字key
|
|
54
|
+
},
|
|
55
|
+
data() {
|
|
56
|
+
return {
|
|
57
|
+
selectValue: this.multiple ? [] : '',
|
|
58
|
+
selectOptions: [],
|
|
59
|
+
firstGetData: true,
|
|
60
|
+
queryParams: {},
|
|
61
|
+
nomore: false,
|
|
62
|
+
multipleChangeFlag: false,
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
watch: {
|
|
66
|
+
value: function (val, oldVal) {
|
|
67
|
+
this.selectValue = val
|
|
68
|
+
},
|
|
69
|
+
options: function (val, oldVal) {
|
|
70
|
+
this.selectOptions = val
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
computed: {
|
|
74
|
+
placeholderComputed() {
|
|
75
|
+
if(this.placeholder != '请选择') return this.placeholder
|
|
76
|
+
let str = this.placeholder
|
|
77
|
+
if(this.remote) str = '请输入关键词'
|
|
78
|
+
if(this.multiple) str += '(可多选)'
|
|
79
|
+
return str
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
mounted() {
|
|
83
|
+
this.selectValue = this.value
|
|
84
|
+
this.selectOptions = this.options
|
|
85
|
+
this.queryParams[this.pageKey[0]] = this.pageStart
|
|
86
|
+
this.queryParams[this.pageKey[1]] = this.pageNums
|
|
87
|
+
},
|
|
88
|
+
methods: {
|
|
89
|
+
change(value){
|
|
90
|
+
if(this.remote && this.multiple) {
|
|
91
|
+
this.multipleChangeFlag = true
|
|
92
|
+
this.$nextTick(() => {
|
|
93
|
+
this.$refs.select.query = this.queryParams[this.queryKey]
|
|
94
|
+
this.$refs.select.previousQuery = this.queryParams[this.queryKey]
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if(this.multiple && this.selectAllable){
|
|
98
|
+
if(value.includes(this.selectOptions[0][this.optionValue])) {
|
|
99
|
+
if(value.length > 1){
|
|
100
|
+
value = [this.selectOptions[0][this.optionValue]]
|
|
101
|
+
}
|
|
102
|
+
this.selectOptions.map(item => item.disabled = true)
|
|
103
|
+
this.selectOptions[0].disabled = false
|
|
104
|
+
} else {
|
|
105
|
+
this.selectOptions.map(item => item.disabled = false)
|
|
106
|
+
}
|
|
107
|
+
this.selectOptions = JSON.parse(JSON.stringify(this.selectOptions))
|
|
108
|
+
}
|
|
109
|
+
this.$emit('input', value)
|
|
110
|
+
this.$emit('change', value)
|
|
111
|
+
},
|
|
112
|
+
removeTag(value){
|
|
113
|
+
this.$emit('remove-tag', value)
|
|
114
|
+
},
|
|
115
|
+
clear(){
|
|
116
|
+
this.$emit('change', this.multiple ? [] : '')
|
|
117
|
+
this.$emit('clear')
|
|
118
|
+
},
|
|
119
|
+
getData(){
|
|
120
|
+
if(this.api) {
|
|
121
|
+
this.nomore = false
|
|
122
|
+
this.global.post(this.api, {
|
|
123
|
+
...this.query,
|
|
124
|
+
...this.queryParams,
|
|
125
|
+
}, obj => {
|
|
126
|
+
this.firstGetData = false
|
|
127
|
+
if (obj.list.length < this.pageNums) this.nomore = true
|
|
128
|
+
this.selectOptions = this.selectOptions.concat(obj.list)
|
|
129
|
+
this.$emit('getData', this.selectOptions)
|
|
130
|
+
})
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
loadmore(){
|
|
134
|
+
if (!this.remote) return;
|
|
135
|
+
if (this.nomore) return;
|
|
136
|
+
this.queryParams[this.pageKey[0]]++;
|
|
137
|
+
this.getData();
|
|
138
|
+
},
|
|
139
|
+
// 远程搜索
|
|
140
|
+
remoteMethod(query) {
|
|
141
|
+
if(this.multiple && this.multipleChangeFlag) {
|
|
142
|
+
this.multipleChangeFlag = false
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
this.selectOptions = [];
|
|
146
|
+
this.queryParams[this.pageKey[0]] = this.pageStart;
|
|
147
|
+
this.queryParams[this.queryKey] = query;
|
|
148
|
+
this.getData();
|
|
149
|
+
},
|
|
150
|
+
// 下拉框出现时,第一次获取数据
|
|
151
|
+
visibleChange(val) {
|
|
152
|
+
if (val && this.api) {
|
|
153
|
+
if (this.firstGetData) this.getData();
|
|
154
|
+
// 远程搜索把搜索值附上
|
|
155
|
+
if(this.remote){
|
|
156
|
+
this.$nextTick(() => {
|
|
157
|
+
if(this.multiple) {
|
|
158
|
+
this.$refs.select.query = this.queryParams[this.queryKey]
|
|
159
|
+
} else {
|
|
160
|
+
this.$refs.select.selectedLabel = this.queryParams[this.queryKey]
|
|
161
|
+
}
|
|
162
|
+
this.$refs.select.previousQuery = this.queryParams[this.queryKey]
|
|
163
|
+
})
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
</script>
|
|
170
|
+
|
|
171
|
+
<style lang="scss" scoped>
|
|
172
|
+
.el-select{display:block;width:auto;}
|
|
173
|
+
</style>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<el-table ref="table" :data="list" :stripe="stripe" :border="border" :max-height="maxHeight" :highlight-current-row="highlightCurrentRow" @current-change="handleCurrentChange" :row-class-name="rowClassName" @selection-change="handleSelectionChange">
|
|
4
|
+
<slot></slot>
|
|
5
|
+
</el-table>
|
|
6
|
+
<ElePage v-if="ifPage" ref="ElePage" :isStartGetData="isStartGetData" :total="pageTotal" @change="getData"></ElePage>
|
|
7
|
+
</div>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script>
|
|
11
|
+
export default {
|
|
12
|
+
props:{
|
|
13
|
+
border: { type: Boolean, default: true }, // 是否带有纵向边框
|
|
14
|
+
data: { type: Array, default: () => ([]) }, // 表格数据
|
|
15
|
+
total: { type: Number, default: 0 }, // 数据总数
|
|
16
|
+
api: { type: String, default: '' }, // 接口地址
|
|
17
|
+
query: { type: Object, default: () => ({}) }, // 接口参数
|
|
18
|
+
ifPage: { type: Boolean, default: true }, // 是否分页
|
|
19
|
+
maxHeight: [String, Number], // Table 的最大高度
|
|
20
|
+
stripe: { type: Boolean, default: true }, // 是否为斑马纹 table
|
|
21
|
+
highlightCurrentRow: { type: Boolean, default: false }, // 是否要高亮当前行,可实现单选
|
|
22
|
+
rowClassName: { type: Function, default: () => '' }, // 行的 className 的回调方法,也可以使用字符串为所有行设置一个固定的 className
|
|
23
|
+
isStartGetData: { type: Boolean, default: true }, // 是否开始就获取数据
|
|
24
|
+
pageKey: { type: Array, default: () => (['pageStart', 'pageNums']) }, // 分页参数
|
|
25
|
+
},
|
|
26
|
+
data() {
|
|
27
|
+
return {
|
|
28
|
+
list: [],
|
|
29
|
+
pageTotal: 0,
|
|
30
|
+
currentRow: null,
|
|
31
|
+
multipleSelection: [],
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
watch: {
|
|
35
|
+
data: {
|
|
36
|
+
handler(val) {
|
|
37
|
+
this.list = val
|
|
38
|
+
},
|
|
39
|
+
deep: true
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
mounted() {
|
|
43
|
+
this.pageTotal = this.total
|
|
44
|
+
if(this.data && this.data.length){
|
|
45
|
+
this.list = this.data
|
|
46
|
+
}
|
|
47
|
+
if(!this.ifPage && this.isStartGetData && this.api){
|
|
48
|
+
this.getData({})
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
methods: {
|
|
52
|
+
// 获取数据
|
|
53
|
+
getData(page){
|
|
54
|
+
this.$nextTick(() => {
|
|
55
|
+
this.global.post(this.api, {
|
|
56
|
+
...this.query,
|
|
57
|
+
[this.pageKey[0]]: page.pageStart,
|
|
58
|
+
[this.pageKey[1]]: page.pageNums,
|
|
59
|
+
}, obj => {
|
|
60
|
+
if(!this.ifPage){
|
|
61
|
+
this.list = obj
|
|
62
|
+
} else {
|
|
63
|
+
this.list = obj.list || [obj]
|
|
64
|
+
this.pageTotal = obj.total
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
// 从默认第一页开始获取数据
|
|
70
|
+
resetData(currentPage = 1){
|
|
71
|
+
if(this.ifPage) {
|
|
72
|
+
this.$refs.ElePage.resetCurrent(currentPage)
|
|
73
|
+
} else {
|
|
74
|
+
this.getData({})
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
setCurrent(row) {
|
|
78
|
+
this.$refs.table.setCurrentRow(row);
|
|
79
|
+
},
|
|
80
|
+
handleCurrentChange(val) {
|
|
81
|
+
this.currentRow = val;
|
|
82
|
+
},
|
|
83
|
+
toggleSelection(rows) {
|
|
84
|
+
if (rows) {
|
|
85
|
+
rows.forEach(row => {
|
|
86
|
+
this.$refs.table.toggleRowSelection(row);
|
|
87
|
+
});
|
|
88
|
+
} else {
|
|
89
|
+
this.$refs.table.clearSelection();
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
handleSelectionChange(val) {
|
|
93
|
+
this.multipleSelection = val;
|
|
94
|
+
this.$emit('selection-change', val)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
</script>
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="f-ib f-maw1">
|
|
3
|
+
<el-upload
|
|
4
|
+
class="f-ib f-maw1"
|
|
5
|
+
ref="upload"
|
|
6
|
+
:action="global.uploadUrl"
|
|
7
|
+
:data="params"
|
|
8
|
+
:accept="accept"
|
|
9
|
+
:show-file-list="showFileList"
|
|
10
|
+
:auto-upload="autoUpload"
|
|
11
|
+
:before-upload="beforeUpload"
|
|
12
|
+
:on-success ='onSuccess'
|
|
13
|
+
:on-preview="onPreview"
|
|
14
|
+
:on-remove="onRemove"
|
|
15
|
+
:file-list="fileList">
|
|
16
|
+
<el-button :size="size" :type="type" :class="btnClass" :style="btnStyle">{{ text }}</el-button>
|
|
17
|
+
</el-upload>
|
|
18
|
+
<el-button v-if="importRelationCode && importFlag" :type="importType" :size="size" :class="btnClass" :style="btnStyle" @click.stop="global.getFileList(importRelationCode,'download')">{{ importText }}</el-button>
|
|
19
|
+
<el-button v-if="abnormal" type="danger" :disabled="!downloadErrorInfo.downloadErrorUrl" :size="size" :class="btnClass" @click.stop="global.open(downloadErrorInfo.downloadErrorUrl)">异常数据下载</el-button>
|
|
20
|
+
<el-button v-if="importRelationCode && !importFlag" :type="importType" :size="size" :class="btnClass" :style="btnStyle" @click.stop="global.getFileList(importRelationCode,'download')">{{ importText }}</el-button>
|
|
21
|
+
</div>
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<script>
|
|
25
|
+
export default {
|
|
26
|
+
props:{
|
|
27
|
+
text: { type: String, default: '点击上传' }, // 按钮文字
|
|
28
|
+
size: { type: String, default: 'small' }, // 按钮大小 large,small,mini
|
|
29
|
+
type: { type: String, default: 'primary' }, // 按钮类型 primary,success,warning,danger,info
|
|
30
|
+
data: { type: Object, required: true, default: () => ({}) }, // 可选参数, 上传时附带的额外参数 relationCode必传
|
|
31
|
+
paramMap: { type: Object, default: () => ({}) }, // 可选参数, 上传时附带的额外参数
|
|
32
|
+
accept: { type: String, default: '' }, // 可选参数, 接受上传的文件类型(thumbnail-mode 模式下此参数无效)
|
|
33
|
+
showFileList: { type: Boolean, default: true }, // 可选参数, 是否显示已上传文件列表
|
|
34
|
+
autoUpload: { type: Boolean, default: true }, // 可选参数, 是否在选取文件后立即进行上传
|
|
35
|
+
importRelationCode: { type: String, default: '' }, // 导入模板的relationCode
|
|
36
|
+
importText: { type: String, default: '导入模板' }, // 导入模板按钮文字
|
|
37
|
+
importType: { type: String, default: 'primary' }, // 导入模板类型
|
|
38
|
+
importFlag: { type: Boolean, default: true }, // 导入模板标识显示顺序
|
|
39
|
+
abnormal: { type: Boolean, default: false }, // 是否显示异常数据下载
|
|
40
|
+
btnClass: { type: String, default: '' }, // 按钮class
|
|
41
|
+
btnStyle: { type: Object, default: () => ({}) }, // 按钮style
|
|
42
|
+
},
|
|
43
|
+
data() {
|
|
44
|
+
return {
|
|
45
|
+
params:{
|
|
46
|
+
relationCode: '',
|
|
47
|
+
singleFlag: '0',
|
|
48
|
+
businessType: '',
|
|
49
|
+
createBy: this.global.userInfo.empVo.empCode,
|
|
50
|
+
updateBy: this.global.userInfo.empVo.empCode,
|
|
51
|
+
createOrgCode: this.global.userInfo.inCharegOrgVo.orgCode,
|
|
52
|
+
...this.data
|
|
53
|
+
},
|
|
54
|
+
fileList: [],
|
|
55
|
+
downloadErrorInfo: {
|
|
56
|
+
downloadErrorUrl: '',
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
mounted() {
|
|
61
|
+
if(this.showFileList){
|
|
62
|
+
this.getFileList()
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
methods: {
|
|
66
|
+
// 获取上传的文件列表
|
|
67
|
+
async getFileList() {
|
|
68
|
+
this.fileList = await this.global.getFileList(this.data.relationCode)
|
|
69
|
+
},
|
|
70
|
+
// 上传文件之前的钩子
|
|
71
|
+
beforeUpload(file) {
|
|
72
|
+
if(!this.checkFileFormat(file)) return false
|
|
73
|
+
},
|
|
74
|
+
// 检查文件格式
|
|
75
|
+
checkFileFormat(file){
|
|
76
|
+
if(this.accept){
|
|
77
|
+
if(this.accept.indexOf(file.name.slice(file.name.lastIndexOf('.'))) > -1){
|
|
78
|
+
return true
|
|
79
|
+
} else {
|
|
80
|
+
this.$message.warning('请上传'+this.accept+'格式的文件')
|
|
81
|
+
return false
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return true
|
|
85
|
+
},
|
|
86
|
+
// 文件上传成功时的钩子
|
|
87
|
+
onSuccess(response, file, fileList) {
|
|
88
|
+
if (response.code === "success") {
|
|
89
|
+
this.$emit('onSuccess', file, fileList);
|
|
90
|
+
if(this.abnormal){
|
|
91
|
+
this.global.post(this.global.isdev + this.global.api.collectionApi.useSelf.importFile, response.obj.map(item => {
|
|
92
|
+
return {
|
|
93
|
+
...item,
|
|
94
|
+
refCode: this.data.relationCode,
|
|
95
|
+
paramMap: {
|
|
96
|
+
storeCode: this.global.userInfo.userAvailableInfo.storeInfoVo.storeCode,
|
|
97
|
+
...this.paramMap,
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}), obj => {
|
|
101
|
+
this.timer = setInterval(() => {
|
|
102
|
+
this.getByUserCodeAndRefCode();
|
|
103
|
+
}, 1000);
|
|
104
|
+
})
|
|
105
|
+
} else {
|
|
106
|
+
this.$message.success('上传成功')
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
// 查询导入异常
|
|
111
|
+
getByUserCodeAndRefCode() {
|
|
112
|
+
this.global.api.useSelf.getByUserCodeAndRefCode(
|
|
113
|
+
{
|
|
114
|
+
refCodes: [this.data.relationCode]
|
|
115
|
+
},
|
|
116
|
+
res => {
|
|
117
|
+
const { code, obj } = res.data;
|
|
118
|
+
if (code === "success") {
|
|
119
|
+
const { status } = obj[0];
|
|
120
|
+
|
|
121
|
+
if (status > 1) {
|
|
122
|
+
clearInterval(this.timer);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
switch (status) {
|
|
126
|
+
case "2":
|
|
127
|
+
this.$emit('importsClosure', obj[0]);
|
|
128
|
+
this.$message({
|
|
129
|
+
message: "导入完成",
|
|
130
|
+
type: "success"
|
|
131
|
+
});
|
|
132
|
+
break;
|
|
133
|
+
case "3":
|
|
134
|
+
this.downloadErrorInfo = {
|
|
135
|
+
downloadErrorUrl: obj[0].errorFilePath,
|
|
136
|
+
downloadErrorFileName: obj[0].errorFileName
|
|
137
|
+
};
|
|
138
|
+
this.$message({
|
|
139
|
+
message: "导入失败,请点击异常数据按钮下载查看失败信息",
|
|
140
|
+
type: "warning"
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
case "4":
|
|
144
|
+
this.$message({
|
|
145
|
+
message: "处理异常,请检查上传文件,或稍后再试",
|
|
146
|
+
type: "warning"
|
|
147
|
+
});
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
},
|
|
154
|
+
// 点击已上传的文件链接时的钩子
|
|
155
|
+
onPreview(file) {
|
|
156
|
+
if(file.filePath){
|
|
157
|
+
this.global.open(file.filePath)
|
|
158
|
+
} else {
|
|
159
|
+
this.global.open(file.response.obj[0].filePath)
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
// 文件列表移除文件时的钩子
|
|
163
|
+
onRemove(file, fileList) {
|
|
164
|
+
if(file.id){
|
|
165
|
+
this.global.api.accessory.del([file], result => {
|
|
166
|
+
if(result.data.code === 'success') {
|
|
167
|
+
this.$message.success('删除成功')
|
|
168
|
+
this.$emit('onRemove', file, fileList);
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
</script>
|