领退管理优化

This commit is contained in:
bb_pan 2025-03-07 18:03:12 +08:00
parent ec2dab7662
commit a3de867e63
7 changed files with 417 additions and 165 deletions

BIN
src/assets/images/pdf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
src/assets/images/word.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -101,7 +101,7 @@
label="状态"
align="center"
class-name="small-padding fixed-width"
prop="status"
prop="backStatus"
></el-table-column>
<el-table-column
label="备注"

View File

@ -239,23 +239,23 @@
:action="uploadUrl"
:headers="headers"
accept="image/*,application/pdf"
multiple
:limit="5"
:file-list="scope.row.fileList"
:before-upload="beforeUpload"
:before-remove="beforeRemove"
:on-preview="handlePreview"
:on-remove="(file, fileList) => handleRemove(file, fileList, scope.row)"
:on-exceed="handleExceed"
:on-success="(res, file, fileList) => handleSuccess(file, fileList, scope.row)"
:on-success="(res, file, fileList) => handleSuccess(res, file, fileList, scope.row)"
>
<el-button v-if="!dialogIsView" size="mini" type="primary">点击上传</el-button>
</el-upload>
</template>
</el-table-column>
<el-table-column label="待维修备注" align="center" prop="serviceRemark" :show-overflow-tooltip="true">
<el-table-column label="待维修备注" align="center" prop="repairRemark" :show-overflow-tooltip="true">
<template slot-scope="scope">
<el-input
v-model="scope.row.serviceRemark"
v-model="scope.row.repairRemark"
placeholder="待维修备注"
clearable
:disabled="dialogIsView"
@ -272,8 +272,8 @@
:disabled="dialogIsView"
style="width: 100%"
>
<el-option label="人为" value="1" />
<el-option label="自然损坏" value="2" />
<el-option label="人为" :value="1" />
<el-option label="自然损坏" :value="2" />
</el-select>
</template>
</el-table-column>
@ -388,7 +388,7 @@
<el-table-column label="序号" align="center" type="index" />
<el-table-column label="机具名称" align="center" prop="typeName" :show-overflow-tooltip="true" />
<el-table-column label="规格型号" align="center" prop="typeCode" :show-overflow-tooltip="true" />
<el-table-column label="最大退料数量" align="center" prop="backNum" :show-overflow-tooltip="true" />
<!-- <el-table-column label="最大退料数量" align="center" prop="backNum" :show-overflow-tooltip="true" /> -->
<el-table-column label="附件" align="center" prop="fileList">
<template slot-scope="scope">
<el-upload
@ -396,14 +396,14 @@
:action="uploadUrl"
:headers="headers"
accept="image/*,application/pdf"
multiple
:limit="5"
:file-list="scope.row.fileList"
:before-upload="beforeUpload"
:before-remove="beforeRemove"
:on-preview="handlePreview"
:on-remove="(file, fileList) => handleRemove(file, fileList, scope.row)"
:on-exceed="handleExceed"
:on-success="(res, file, fileList) => handleSuccess(file, fileList, scope.row)"
:on-success="(res, file, fileList) => handleSuccess(res, file, fileList, scope.row)"
>
<el-button v-if="!dialogIsView" size="mini" type="primary">点击上传</el-button>
</el-upload>
@ -435,10 +435,10 @@
/>
</template>
</el-table-column>
<el-table-column label="待维修备注" align="center" prop="serviceRemark" :show-overflow-tooltip="true">
<el-table-column label="待维修备注" align="center" prop="repairRemark" :show-overflow-tooltip="true">
<template slot-scope="scope">
<el-input
v-model="scope.row.serviceRemark"
v-model="scope.row.repairRemark"
placeholder="待维修备注"
clearable
:disabled="dialogIsView"
@ -468,8 +468,8 @@
:disabled="dialogIsView"
style="width: 100%"
>
<el-option label="人为" value="1" />
<el-option label="自然损坏" value="2" />
<el-option label="人为" :value="1" />
<el-option label="自然损坏" :value="2" />
</el-select>
</template>
</el-table-column>
@ -763,7 +763,7 @@ export default {
item.qualifiedNum = item.hgNum
item.serviceNum = item.wxNum
item.scrapNum = item.bfNum
// item.serviceRemark = item.wxRemark
// item.repairRemark = item.wxRemark
// item.scrapRemark = item.bfRemark
// item.scrapReason = item.bfReason
// item.fileList = item.fileList
@ -851,6 +851,13 @@ export default {
this.openNum = true
this.dialogIsView = false
this.$set(row, 'backNum', row.maxBackNum) //退
this.$set(row, 'qualifiedNum', undefined)
this.$set(row, 'serviceNum', undefined)
this.$set(row, 'scrapNum', undefined)
this.$set(row, 'repairRemark', undefined)
this.$set(row, 'scrapRemark', undefined)
this.$set(row, 'fileList', [])
this.$set(row, 'scrapReason', undefined)
this.returnNum = Number(row.maxBackNum)
this.dialogData.typeMange = row.manageType
this.dialogData.typeName = row.typeName
@ -860,14 +867,15 @@ export default {
this.$set(item, 'qualifiedNum', undefined)
this.$set(item, 'serviceNum', undefined)
this.$set(item, 'scrapNum', undefined)
this.$set(item, 'serviceRemark', undefined)
this.$set(item, 'scrapRemark', undefined)
this.$set(item, 'fileList', [])
this.$set(item, 'scrapReason', undefined)
// this.$set(item, 'repairRemark', undefined)
// this.$set(item, 'scrapRemark', undefined)
// this.$set(item, 'fileList', undefined)
// this.$set(item, 'scrapReason', undefined)
})
this.dialogData.maTypeDetails = row.maTypeDetails
}
this.numList = [row]
console.log('🚀 ~ handleNumReturn ~ this.numList:', this.numList)
// this.getNumList()
},
//
@ -913,7 +921,7 @@ export default {
this.codeTotal = response.data.total
this.codeList.forEach((item) => {
this.$set(item, 'fileList', [])
this.$set(item, 'serviceRemark', '')
this.$set(item, 'repairRemark', '')
this.$set(item, 'scrapRemark', '')
this.$set(item, 'scrapReason', '')
})
@ -954,13 +962,16 @@ export default {
} else {
data = this.dialogData.maTypeDetails
}
console.log('🚀 ~ saveNumReturn ~ data:', data)
let arr = []
let fileList = []
for (const item of data) {
let sumUnmber = (item.qualifiedNum || 0) + (item.serviceNum || 0) + (item.scrapNum || 0)
if (sumUnmber > item.partNum && sumUnmber > item.num) {
this.$modal.msgError('退料总量已大于待退料数量!')
return
} else {
fileList = item.fileList
if (item.qualifiedNum > 0) {
let obj = {
parentId: parentId,
@ -969,9 +980,9 @@ export default {
createBy: this.createBy,
backStatus: 1,
backNum: item.qualifiedNum,
serviceRemark: item.serviceRemark,
scrapRemark: item.scrapRemark,
fileList: item.fileList,
// repairRemark: item.repairRemark,
// scrapRemark: item.scrapRemark,
// fileList: item.fileList,
}
arr.push(obj)
}
@ -983,9 +994,9 @@ export default {
createBy: this.createBy,
backStatus: 2,
backNum: item.serviceNum,
serviceRemark: item.serviceRemark,
scrapRemark: item.scrapRemark,
fileList: item.fileList,
repairRemark: item.repairRemark, //
// scrapRemark: item.scrapRemark,
// fileList: item.fileList,
}
arr.push(obj)
}
@ -997,9 +1008,9 @@ export default {
createBy: this.createBy,
backStatus: 3,
backNum: item.scrapNum,
serviceRemark: item.serviceRemark,
scrapRemark: item.scrapRemark,
fileList: item.fileList,
scrapReason: item.scrapReason, //
scrapRemark: item.scrapRemark, //
// fileList: item.fileList,
}
arr.push(obj)
}
@ -1008,6 +1019,7 @@ export default {
let param = {
taskId: taskId,
arr: arr,
fileList: fileList,
}
setNumBack(param).then((response) => {
if (response.code == 200) {
@ -1033,7 +1045,7 @@ export default {
maId: row.maId,
scrapReason: row.scrapReason,
scrapRemark: row.scrapRemark,
serviceRemark: row.serviceRemark,
repairRemark: row.repairRemark,
fileList: row.fileList,
},
]
@ -1075,7 +1087,7 @@ export default {
maId: item.maId,
scrapReason: item.scrapReason,
scrapRemark: item.scrapRemark,
serviceRemark: item.serviceRemark,
repairRemark: item.repairRemark,
fileList: item.fileList,
}
})
@ -1109,6 +1121,7 @@ export default {
fileUrl = item.fileUrl
}
return {
typeId: row.typeId,
fileName: fileName,
fileUrl: fileUrl,
}
@ -1117,28 +1130,43 @@ export default {
},
handlePreview(file) {
console.log('🚀 ~ handlePreview ~ file:', file)
// if (file.response) {
// window.open(file.response.data.fileUrl)
// } else {
// window.open(file.fileUrl)
// }
if (file.response) {
window.open(file.response.data.fileUrl)
} else {
window.open(file.fileUrl)
}
},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`,
)
},
beforeUpload(file) {
const isLtMB = file.size / 1024 / 1024 < 20
if (!isLtMB) {
this.$message.error('上传文件大小不能超过 20MB!')
}
return isLtMB
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name} `)
},
handleSuccess(file, fileList, row) {
console.log(file, fileList, row)
row.fileList = fileList.map((item) => {
return {
fileName: item.response?.data.fileName,
fileUrl: item.response?.data.fileUrl,
handleSuccess(res, file, fileList, row) {
console.log('🚀 ~ handleSuccess ~ res:', res)
console.log('🚀 ~ handleSuccess ~ file:', file)
console.log('🚀 ~ handleSuccess ~ fileList:', fileList)
console.log('🚀 ~ handleSuccess ~ row:', row)
if (res.code == 200) {
if (!row.fileList) {
row.fileList = []
}
})
row.fileList.push({
typeId: row.typeId,
fileName: res.data.fileName,
fileUrl: res.data.fileUrl,
})
}
console.log('🚀 ~ row.fileList=fileList.map ~ row.fileList:', row.fileList)
},
},

View File

@ -57,6 +57,7 @@
<el-form-item label="附件" prop="bmFileInfos">
<el-upload
:action="uploadUrl"
:headers="headers"
:file-list="maForm.bmFileInfos"
:show-file-list="true"
:auto-upload="true"
@ -316,11 +317,11 @@ export default {
//
// upload: {
// //
// headers: {Authorization: 'Bearer ' + getToken()},
headers: {Authorization: 'Bearer ' + getToken()},
// //
// url: process.env.VUE_APP_BASE_API + '/file/upload'
// },
uploadUrl: process.env.VUE_APP_BASE_API + '/system/user/imgUpLoad' //
uploadUrl: process.env.VUE_APP_BASE_API + '/system/sys/file/upload' //
}
},
computed: {

View File

@ -9,24 +9,20 @@
width="600px"
>
<div class="form_box_one">
<el-form
ref="dynamicValidateForm"
:model="dynamicValidateForm"
class="demo-dynamic"
label-width="100px"
>
<div
v-for="(domain, index) in dynamicValidateForm.premiumList"
:key="domain.key"
class="bor_box"
>
<el-form ref="dynamicValidateForm" :model="dynamicValidateForm" class="demo-dynamic" label-width="100px">
<div v-for="(domain, index) in dynamicValidateForm.premiumList" :key="domain.key" class="bor_box">
<p class="form_box_title">编码管理设备</p>
<div class="form_box_line"></div>
<div class="form_box_item">
<el-form-item
:prop="'premiumList.' + index + '.partId'"
label="选择配件:"
>
<el-form-item :prop="'premiumList.' + index + '.technical'" label="技术鉴定:">
<el-input
v-model="domain.technical"
placeholder="请输入"
size="small"
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item :prop="'premiumList.' + index + '.partId'" label="选择配件:">
<treeselect
v-model="domain.partId"
style="width: 350px"
@ -40,11 +36,7 @@
@input="handleSelectTree($event, index)"
/>
</el-form-item>
<el-form-item
v-if="index == 0"
:prop="'premiumListTwo.' + index + '.repairer'"
label="维修人:"
>
<el-form-item v-if="index == 0" :prop="'premiumList.' + index + '.repairer'" label="维修人:">
<el-select
v-model="domain.repairer"
placeholder="请选择"
@ -70,10 +62,7 @@
trigger: 'blur',
}"
>
<el-radio-group
style="width: 350px"
v-model="domain.partType"
>
<el-radio-group style="width: 350px" v-model="domain.partType">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -100,7 +89,7 @@
<el-form-item
v-if="domain.partType == 1"
:prop="'premiumList.' + index + '.partCost'"
label="配件单价"
label="费用(元)"
:rules="{
required: false,
validator: meneyIntegerValidator,
@ -115,10 +104,7 @@
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item
:prop="'premiumList.' + index + '.repairContent'"
label="维修内容:"
>
<el-form-item :prop="'premiumList.' + index + '.repairContent'" label="维修内容:">
<el-input
v-model="domain.repairContent"
maxlength="100"
@ -129,30 +115,60 @@
type="textarea"
></el-input>
</el-form-item>
<el-form-item :prop="'premiumList.' + index + '.fileList'" label="维修内容:">
<el-upload
ref="upload_attach"
class="upload-demo"
:action="uploadUrl"
:headers="headers"
list-type="picture-card"
accept="image/*,application/pdf,application/msword"
multiple
:limit="5"
:file-list="domain.fileList"
:before-upload="beforeUpload"
:on-exceed="handleExceed"
:on-success="(res, file, fileList) => handleSuccess(file, fileList, domain)"
style="width: 350px"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img
v-if="/\.(pdf|PDF)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="pdfImg"
alt=""
/>
<img
v-else-if="/\.(doc|docx)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="wordImg"
alt=""
/>
<img v-else class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
<span class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="handlePreview(file)">
<i class="el-icon-zoom-in" />
</span>
<span class="el-upload-list__item-delete" @click="handleRemove(file, domain)">
<i class="el-icon-delete" />
</span>
</span>
</div>
</el-upload>
</el-form-item>
</div>
<div class="add_box">
<el-button
icon="el-icon-plus"
size="mini"
type="success"
@click="addDomainOne"
<el-button icon="el-icon-plus" size="mini" type="success" @click="addDomainOne"
>添加配件
</el-button>
<el-button
size="mini"
icon="el-icon-delete"
@click="delDomain(domain, 1)"
v-show="index > 0"
<el-button size="mini" icon="el-icon-delete" @click="delDomain(domain, 1)" v-show="index > 0"
>删除</el-button
>
</div>
</div>
</el-form>
<div
slot="footer"
class="dialog-footer"
v-if="rowObj.code !== null && rowObj.code !== ''"
>
<div slot="footer" class="dialog-footer" v-if="rowObj.code !== null && rowObj.code !== ''">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submit">保存</el-button>
</div>
@ -164,16 +180,18 @@
class="demo-dynamic"
label-width="100px"
>
<div
v-for="(
domain, index
) in dynamicValidateFormTwo.premiumListTwo"
:key="domain.key"
class="bor_box"
>
<div v-for="(domain, index) in dynamicValidateFormTwo.premiumListTwo" :key="domain.key" class="bor_box">
<p class="form_box_title">数量管理设备</p>
<div class="form_box_line"></div>
<div class="form_box_item">
<el-form-item :prop="'premiumListTwo.' + index + '.technical'" label="技术鉴定:">
<el-input
v-model="domain.technical"
placeholder="请输入"
size="small"
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item
v-if="index == 0"
:prop="'premiumListTwo.' + index + '.repairNum'"
@ -212,10 +230,7 @@
/>
</el-select>
</el-form-item>
<el-form-item
:prop="'premiumList.' + index + '.partId'"
label="选择配件:"
>
<el-form-item :prop="'premiumListTwo.' + index + '.partId'" label="选择配件:">
<treeselect
style="width: 350px"
v-model="domain.partId"
@ -239,10 +254,7 @@
trigger: 'blur',
}"
>
<el-radio-group
style="width: 350px"
v-model="domain.partType"
>
<el-radio-group style="width: 350px" v-model="domain.partType">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -268,7 +280,7 @@
<el-form-item
v-if="domain.partType == 1"
:prop="'premiumListTwo.' + index + '.partCost'"
label="配件单价"
label="费用(元)"
:rules="{
required: false,
validator: meneyIntegerValidator,
@ -283,10 +295,7 @@
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item
:prop="'premiumListTwo.' + index + '.repairContent'"
label="维修内容:"
>
<el-form-item :prop="'premiumListTwo.' + index + '.repairContent'" label="维修内容:">
<el-input
v-model="domain.repairContent"
maxlength="100"
@ -297,30 +306,60 @@
type="textarea"
></el-input>
</el-form-item>
<el-form-item :prop="'premiumListTwo.' + index + '.fileList'" label="维修内容:">
<el-upload
ref="upload_attach"
class="upload-demo"
:action="uploadUrl"
:headers="headers"
list-type="picture-card"
accept="image/*,application/pdf,application/msword"
multiple
:limit="5"
:file-list="domain.fileList"
:before-upload="beforeUpload"
:on-exceed="handleExceed"
:on-success="(res, file, fileList) => handleSuccess(file, fileList, domain)"
style="width: 350px"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img
v-if="/\.(pdf|PDF)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="pdfImg"
alt=""
/>
<img
v-else-if="/\.(doc|docx)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="wordImg"
alt=""
/>
<img v-else class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
<span class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="handlePreview(file)">
<i class="el-icon-zoom-in" />
</span>
<span class="el-upload-list__item-delete" @click="handleRemove(file, domain)">
<i class="el-icon-delete" />
</span>
</span>
</div>
</el-upload>
</el-form-item>
</div>
<div class="add_box">
<el-button
icon="el-icon-plus"
size="mini"
type="success"
@click="addDomainTwo"
<el-button icon="el-icon-plus" size="mini" type="success" @click="addDomainTwo"
>添加配件
</el-button>
<el-button
size="mini"
icon="el-icon-delete"
@click="delDomain(domain, 2)"
v-show="index > 0"
<el-button size="mini" icon="el-icon-delete" @click="delDomain(domain, 2)" v-show="index > 0"
>删除</el-button
>
</div>
</div>
</el-form>
<div
slot="footer"
class="dialog-footer"
v-if="rowObj.code == null || rowObj.code == ''"
>
<div slot="footer" class="dialog-footer" v-if="rowObj.code == null || rowObj.code == ''">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submitTwo">保存</el-button>
</div>
@ -328,16 +367,12 @@
</el-dialog>
</template>
<script>
import {
submitRepairApplyApi,
getUserSelectApi,
getRepairMaTypeListApi,
listPartType,
} from '@/api/repairTest/repair'
import { submitRepairApplyApi, getUserSelectApi, getRepairMaTypeListApi, listPartType } from '@/api/repairTest/repair'
// import { listPartType, } from "@/api/store/tools";
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { getInfo } from '@/api/login'
export default {
components: { Treeselect },
props: {
@ -381,6 +416,12 @@ export default {
},
data() {
return {
uploadUrl: process.env.VUE_APP_BASE_API + '/system/sys/file/upload', //
headers: {
Authorization: 'Bearer ' + localStorage.getItem('token'),
},
pdfImg: require('@/assets/images/pdf.png'),
wordImg: require('@/assets/images/word.png'),
fullscreenLoading: false,
dynamicValidateForm: {
premiumList: [
@ -396,6 +437,7 @@ export default {
downFee: undefined,
xiayoufeiyonge_unit: '',
isCharge: '',
fileList: [], //
},
],
},
@ -412,6 +454,7 @@ export default {
downRate: undefined,
downFee: undefined,
xiayoufeiyonge_unit: '',
fileList: [], //
},
],
},
@ -431,8 +474,7 @@ export default {
methods: {
//
meneyIntegerValidator(rule, value, callback) {
const reg =
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
if (value === '' || reg.test(value)) {
callback()
} else {
@ -517,7 +559,7 @@ export default {
selected: 'N',
// partId: '',
repairer: '',
partType: '',
partType: 0,
partNum: '',
partCost: '',
repairContent: '',
@ -527,15 +569,13 @@ export default {
},
delDomain(domain, type) {
if (type == 1) {
this.dynamicValidateForm.premiumList =
this.dynamicValidateForm.premiumList.filter(
(item) => item.key != domain.key,
)
this.dynamicValidateForm.premiumList = this.dynamicValidateForm.premiumList.filter(
(item) => item.key != domain.key,
)
} else {
this.dynamicValidateFormTwo.premiumListTwo =
this.dynamicValidateFormTwo.premiumListTwo.filter(
(item) => item.key != domain.key,
)
this.dynamicValidateFormTwo.premiumListTwo = this.dynamicValidateFormTwo.premiumListTwo.filter(
(item) => item.key != domain.key,
)
}
},
addDomainTwo() {
@ -543,7 +583,7 @@ export default {
selected: 'N',
// partId: '',
repairer: '',
partType: '',
partType: 0,
partNum: '',
partCost: '',
repairContent: '',
@ -555,10 +595,7 @@ export default {
this.$refs['dynamicValidateForm'].validate((valid) => {
if (valid) {
//
console.log(
'this.dynamicValidateForm.premiumList1111)',
this.dynamicValidateForm.premiumList,
)
console.log('this.dynamicValidateForm.premiumList1111)', this.dynamicValidateForm.premiumList)
this.dynamicValidateForm.premiumList.forEach((e) => {
if (e.partType == 0) {
@ -572,9 +609,7 @@ export default {
id: this.rowObj.id,
repairType: 1,
companyId: this.companyId,
partStrList: JSON.stringify(
this.dynamicValidateForm.premiumList,
),
partStrList: JSON.stringify(this.dynamicValidateForm.premiumList),
}
this.fullscreenLoading = true
submitRepairApplyApi(params)
@ -613,9 +648,7 @@ export default {
id: this.rowObj.id,
companyId: this.companyId,
repairType: 1,
partStrList: JSON.stringify(
this.dynamicValidateFormTwo.premiumListTwo,
),
partStrList: JSON.stringify(this.dynamicValidateFormTwo.premiumListTwo),
}
this.fullscreenLoading = true
submitRepairApplyApi(params)
@ -647,6 +680,56 @@ export default {
this.isRequired = false
}
},
handleRemove(file, domain) {
// console.log('🚀 ~ handleRemove ~ this.$refs.upload_attach:', this.$refs.upload_attach[0].uploadFiles)
// console.log('🚀 ~ handleRemove ~ row:', domain.fileList)
// console.log('🚀 ~ handleRemove ~ file:', file)
let fileList = this.$refs.upload_attach[0].uploadFiles
this.$refs.upload_attach[0].uploadFiles = fileList.filter((item) => item.name !== file.name)
// console.log('🚀 ~ handleRemove ~ fileList:', fileList)
domain.fileList = this.$refs.upload_attach[0].uploadFiles.map((item) => {
return {
fileName: item.name,
fileUrl: item.url,
}
})
console.log('🚀 ~ domain.fileList:', domain.fileList)
},
handlePreview(file) {
if (file.response) {
window.open(file.response.data.fileUrl)
} else {
window.open(file.fileUrl)
}
},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`,
)
},
beforeUpload(file) {
const isLtMB = file.size / 1024 / 1024 < 20
if (!isLtMB) {
this.$message.error('上传文件大小不能超过 20MB!')
}
return isLtMB
},
beforeRemove(file) {
return this.$confirm(`确定移除 ${file.name} `)
},
handleSuccess(file, fileList, row) {
console.log('🚀 ~ handleSuccess ~ row:', row)
console.log('🚀 ~ handleSuccess ~ file:', file)
if (!row.fileList) {
row.fileList = []
}
row.fileList.push({
fileName: file.response.data.fileName,
fileUrl: file.response.data.fileUrl,
})
},
},
}
</script>
@ -723,4 +806,4 @@ export default {
margin-right: 3%;
margin-top: 10px;
}
</>
</style>

View File

@ -41,7 +41,7 @@
style="width: 350px"
></el-input>
</el-form-item>
<!-- <el-form-item
<el-form-item
:prop="'premiumList.' + index + '.partType'"
label="是否收费:"
required
@ -58,7 +58,7 @@
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item> -->
</el-form-item>
<el-form-item
v-if="index == 0"
:prop="'premiumList.' + index + '.supplierId'"
@ -97,15 +97,14 @@
<el-form-item
v-if="domain.partType == 1"
:prop="'premiumList.' + index + '.partPrice'"
label="配件单价(元)"
label-width="120px"
label="费用(元)"
>
<el-input
v-model="domain.partPrice"
placeholder="请输入"
size="small"
maxlength="10"
style="width: 330px"
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item
@ -139,6 +138,48 @@
type="textarea"
></el-input>
</el-form-item>
<el-form-item :prop="'premiumList.' + index + '.fileList'" label="维修内容:">
<el-upload
ref="upload_attach"
class="upload-demo"
:action="uploadUrl"
:headers="headers"
list-type="picture-card"
accept="image/*,application/pdf,application/msword"
multiple
:limit="5"
:file-list="domain.fileList"
:before-upload="beforeUpload"
:on-exceed="handleExceed"
:on-success="(res, file, fileList) => handleSuccess(file, fileList, domain)"
style="width: 350px"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img
v-if="/\.(pdf|PDF)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="pdfImg"
alt=""
/>
<img
v-else-if="/\.(doc|docx)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="wordImg"
alt=""
/>
<img v-else class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
<span class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="handlePreview(file)">
<i class="el-icon-zoom-in" />
</span>
<span class="el-upload-list__item-delete" @click="handleRemove(file, domain)">
<i class="el-icon-delete" />
</span>
</span>
</div>
</el-upload>
</el-form-item>
</div>
</div>
</el-form>
@ -200,7 +241,7 @@
style="width: 350px"
></el-input>
</el-form-item>
<!-- <el-form-item
<el-form-item
label="是否收费:"
required
:rules="{
@ -216,7 +257,7 @@
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item> -->
</el-form-item>
<el-form-item
v-if="index == 0"
:prop="'premiumListTwo.' + index + '.supplierId'"
@ -254,15 +295,14 @@
> -->
<el-form-item
v-if="domain.partType == 1"
label="配件单价(元)"
label-width="120px"
label="费用(元)"
>
<el-input
v-model="domain.partPrice"
placeholder="请输入"
size="small"
maxlength="10"
style="width: 330px"
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item
@ -293,6 +333,48 @@
type="textarea"
></el-input>
</el-form-item>
<el-form-item :prop="'premiumListTwo.' + index + '.fileList'" label="维修内容:">
<el-upload
ref="upload_attach"
class="upload-demo"
:action="uploadUrl"
:headers="headers"
list-type="picture-card"
accept="image/*,application/pdf,application/msword"
multiple
:limit="5"
:file-list="domain.fileList"
:before-upload="beforeUpload"
:on-exceed="handleExceed"
:on-success="(res, file, fileList) => handleSuccess(file, fileList, domain)"
style="width: 350px"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img
v-if="/\.(pdf|PDF)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="pdfImg"
alt=""
/>
<img
v-else-if="/\.(doc|docx)$/i.test(file.name)"
class="el-upload-list__item-thumbnail"
:src="wordImg"
alt=""
/>
<img v-else class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
<span class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="handlePreview(file)">
<i class="el-icon-zoom-in" />
</span>
<span class="el-upload-list__item-delete" @click="handleRemove(file, domain)">
<i class="el-icon-delete" />
</span>
</span>
</div>
</el-upload>
</el-form-item>
</div>
<!-- <el-button @click.prevent="removeDomain(domain, index)"-->
@ -375,6 +457,12 @@ export default {
},
data() {
return {
uploadUrl: process.env.VUE_APP_BASE_API + '/system/sys/file/upload', //
headers: {
Authorization: 'Bearer ' + localStorage.getItem('token'),
},
pdfImg: require('@/assets/images/pdf.png'),
wordImg: require('@/assets/images/word.png'),
supplierSelectList: [],
fullscreenLoading: false,
dynamicValidateForm: {
@ -390,6 +478,7 @@ export default {
downRate: undefined,
downFee: undefined,
xiayoufeiyonge_unit: '',
fileList: [],
},
],
},
@ -406,6 +495,7 @@ export default {
downRate: undefined,
downFee: undefined,
xiayoufeiyonge_unit: '',
fileList: [],
},
],
},
@ -502,7 +592,7 @@ export default {
selected: 'N',
partName: '',
repairer: '',
partType: '',
partType: 0,
partNum: '',
partCost: '',
repairContent: '',
@ -517,7 +607,7 @@ export default {
selected: 'N',
partName: '',
repairer: '',
partType: '',
partType: 0,
partNum: '',
partCost: '',
repairContent: '',
@ -626,6 +716,56 @@ export default {
}
})
},
handleRemove(file, domain) {
// console.log('🚀 ~ handleRemove ~ this.$refs.upload_attach:', this.$refs.upload_attach[0].uploadFiles)
// console.log('🚀 ~ handleRemove ~ row:', domain.fileList)
// console.log('🚀 ~ handleRemove ~ file:', file)
let fileList = this.$refs.upload_attach[0].uploadFiles
this.$refs.upload_attach[0].uploadFiles = fileList.filter((item) => item.name !== file.name)
// console.log('🚀 ~ handleRemove ~ fileList:', fileList)
domain.fileList = this.$refs.upload_attach[0].uploadFiles.map((item) => {
return {
fileName: item.name,
fileUrl: item.url,
}
})
console.log('🚀 ~ domain.fileList:', domain.fileList)
},
handlePreview(file) {
if (file.response) {
window.open(file.response.data.fileUrl)
} else {
window.open(file.fileUrl)
}
},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`,
)
},
beforeUpload(file) {
const isLtMB = file.size / 1024 / 1024 < 20
if (!isLtMB) {
this.$message.error('上传文件大小不能超过 20MB!')
}
return isLtMB
},
beforeRemove(file) {
return this.$confirm(`确定移除 ${file.name} `)
},
handleSuccess(file, fileList, row) {
console.log('🚀 ~ handleSuccess ~ row:', row)
console.log('🚀 ~ handleSuccess ~ file:', file)
if (!row.fileList) {
row.fileList = []
}
row.fileList.push({
fileName: file.response.data.fileName,
fileUrl: file.response.data.fileUrl,
})
},
},
}
</script>