领退管理优化

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="状态" label="状态"
align="center" align="center"
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
prop="status" prop="backStatus"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="备注" label="备注"

View File

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

View File

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

View File

@ -9,24 +9,20 @@
width="600px" width="600px"
> >
<div class="form_box_one"> <div class="form_box_one">
<el-form <el-form ref="dynamicValidateForm" :model="dynamicValidateForm" class="demo-dynamic" label-width="100px">
ref="dynamicValidateForm" <div v-for="(domain, index) in dynamicValidateForm.premiumList" :key="domain.key" class="bor_box">
: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> <p class="form_box_title">编码管理设备</p>
<div class="form_box_line"></div> <div class="form_box_line"></div>
<div class="form_box_item"> <div class="form_box_item">
<el-form-item <el-form-item :prop="'premiumList.' + index + '.technical'" label="技术鉴定:">
:prop="'premiumList.' + index + '.partId'" <el-input
label="选择配件:" v-model="domain.technical"
> placeholder="请输入"
size="small"
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item :prop="'premiumList.' + index + '.partId'" label="选择配件:">
<treeselect <treeselect
v-model="domain.partId" v-model="domain.partId"
style="width: 350px" style="width: 350px"
@ -40,11 +36,7 @@
@input="handleSelectTree($event, index)" @input="handleSelectTree($event, index)"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item v-if="index == 0" :prop="'premiumList.' + index + '.repairer'" label="维修人:">
v-if="index == 0"
:prop="'premiumListTwo.' + index + '.repairer'"
label="维修人:"
>
<el-select <el-select
v-model="domain.repairer" v-model="domain.repairer"
placeholder="请选择" placeholder="请选择"
@ -70,10 +62,7 @@
trigger: 'blur', trigger: 'blur',
}" }"
> >
<el-radio-group <el-radio-group style="width: 350px" v-model="domain.partType">
style="width: 350px"
v-model="domain.partType"
>
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio> <el-radio :label="0"></el-radio>
</el-radio-group> </el-radio-group>
@ -100,7 +89,7 @@
<el-form-item <el-form-item
v-if="domain.partType == 1" v-if="domain.partType == 1"
:prop="'premiumList.' + index + '.partCost'" :prop="'premiumList.' + index + '.partCost'"
label="配件单价" label="费用(元)"
:rules="{ :rules="{
required: false, required: false,
validator: meneyIntegerValidator, validator: meneyIntegerValidator,
@ -115,10 +104,7 @@
style="width: 350px" style="width: 350px"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :prop="'premiumList.' + index + '.repairContent'" label="维修内容:">
:prop="'premiumList.' + index + '.repairContent'"
label="维修内容:"
>
<el-input <el-input
v-model="domain.repairContent" v-model="domain.repairContent"
maxlength="100" maxlength="100"
@ -129,30 +115,60 @@
type="textarea" type="textarea"
></el-input> ></el-input>
</el-form-item> </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>
<div class="add_box"> <div class="add_box">
<el-button <el-button icon="el-icon-plus" size="mini" type="success" @click="addDomainOne"
icon="el-icon-plus"
size="mini"
type="success"
@click="addDomainOne"
>添加配件 >添加配件
</el-button> </el-button>
<el-button <el-button size="mini" icon="el-icon-delete" @click="delDomain(domain, 1)" v-show="index > 0"
size="mini"
icon="el-icon-delete"
@click="delDomain(domain, 1)"
v-show="index > 0"
>删除</el-button >删除</el-button
> >
</div> </div>
</div> </div>
</el-form> </el-form>
<div <div slot="footer" class="dialog-footer" v-if="rowObj.code !== null && rowObj.code !== ''">
slot="footer"
class="dialog-footer"
v-if="rowObj.code !== null && rowObj.code !== ''"
>
<el-button @click="cancel">取消</el-button> <el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submit">保存</el-button> <el-button type="primary" @click="submit">保存</el-button>
</div> </div>
@ -164,16 +180,18 @@
class="demo-dynamic" class="demo-dynamic"
label-width="100px" label-width="100px"
> >
<div <div v-for="(domain, index) in dynamicValidateFormTwo.premiumListTwo" :key="domain.key" class="bor_box">
v-for="(
domain, index
) in dynamicValidateFormTwo.premiumListTwo"
:key="domain.key"
class="bor_box"
>
<p class="form_box_title">数量管理设备</p> <p class="form_box_title">数量管理设备</p>
<div class="form_box_line"></div> <div class="form_box_line"></div>
<div class="form_box_item"> <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 <el-form-item
v-if="index == 0" v-if="index == 0"
:prop="'premiumListTwo.' + index + '.repairNum'" :prop="'premiumListTwo.' + index + '.repairNum'"
@ -212,10 +230,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :prop="'premiumListTwo.' + index + '.partId'" label="选择配件:">
:prop="'premiumList.' + index + '.partId'"
label="选择配件:"
>
<treeselect <treeselect
style="width: 350px" style="width: 350px"
v-model="domain.partId" v-model="domain.partId"
@ -239,10 +254,7 @@
trigger: 'blur', trigger: 'blur',
}" }"
> >
<el-radio-group <el-radio-group style="width: 350px" v-model="domain.partType">
style="width: 350px"
v-model="domain.partType"
>
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio> <el-radio :label="0"></el-radio>
</el-radio-group> </el-radio-group>
@ -268,7 +280,7 @@
<el-form-item <el-form-item
v-if="domain.partType == 1" v-if="domain.partType == 1"
:prop="'premiumListTwo.' + index + '.partCost'" :prop="'premiumListTwo.' + index + '.partCost'"
label="配件单价" label="费用(元)"
:rules="{ :rules="{
required: false, required: false,
validator: meneyIntegerValidator, validator: meneyIntegerValidator,
@ -283,10 +295,7 @@
style="width: 350px" style="width: 350px"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :prop="'premiumListTwo.' + index + '.repairContent'" label="维修内容:">
:prop="'premiumListTwo.' + index + '.repairContent'"
label="维修内容:"
>
<el-input <el-input
v-model="domain.repairContent" v-model="domain.repairContent"
maxlength="100" maxlength="100"
@ -297,30 +306,60 @@
type="textarea" type="textarea"
></el-input> ></el-input>
</el-form-item> </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>
<div class="add_box"> <div class="add_box">
<el-button <el-button icon="el-icon-plus" size="mini" type="success" @click="addDomainTwo"
icon="el-icon-plus"
size="mini"
type="success"
@click="addDomainTwo"
>添加配件 >添加配件
</el-button> </el-button>
<el-button <el-button size="mini" icon="el-icon-delete" @click="delDomain(domain, 2)" v-show="index > 0"
size="mini"
icon="el-icon-delete"
@click="delDomain(domain, 2)"
v-show="index > 0"
>删除</el-button >删除</el-button
> >
</div> </div>
</div> </div>
</el-form> </el-form>
<div <div slot="footer" class="dialog-footer" v-if="rowObj.code == null || rowObj.code == ''">
slot="footer"
class="dialog-footer"
v-if="rowObj.code == null || rowObj.code == ''"
>
<el-button @click="cancel">取消</el-button> <el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submitTwo">保存</el-button> <el-button type="primary" @click="submitTwo">保存</el-button>
</div> </div>
@ -328,16 +367,12 @@
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import { import { submitRepairApplyApi, getUserSelectApi, getRepairMaTypeListApi, listPartType } from '@/api/repairTest/repair'
submitRepairApplyApi,
getUserSelectApi,
getRepairMaTypeListApi,
listPartType,
} from '@/api/repairTest/repair'
// import { listPartType, } from "@/api/store/tools"; // import { listPartType, } from "@/api/store/tools";
import Treeselect from '@riophae/vue-treeselect' import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css' import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { getInfo } from '@/api/login' import { getInfo } from '@/api/login'
export default { export default {
components: { Treeselect }, components: { Treeselect },
props: { props: {
@ -381,6 +416,12 @@ export default {
}, },
data() { data() {
return { 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, fullscreenLoading: false,
dynamicValidateForm: { dynamicValidateForm: {
premiumList: [ premiumList: [
@ -396,6 +437,7 @@ export default {
downFee: undefined, downFee: undefined,
xiayoufeiyonge_unit: '', xiayoufeiyonge_unit: '',
isCharge: '', isCharge: '',
fileList: [], //
}, },
], ],
}, },
@ -412,6 +454,7 @@ export default {
downRate: undefined, downRate: undefined,
downFee: undefined, downFee: undefined,
xiayoufeiyonge_unit: '', xiayoufeiyonge_unit: '',
fileList: [], //
}, },
], ],
}, },
@ -431,8 +474,7 @@ export default {
methods: { methods: {
// //
meneyIntegerValidator(rule, value, callback) { meneyIntegerValidator(rule, value, callback) {
const reg = const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
if (value === '' || reg.test(value)) { if (value === '' || reg.test(value)) {
callback() callback()
} else { } else {
@ -517,7 +559,7 @@ export default {
selected: 'N', selected: 'N',
// partId: '', // partId: '',
repairer: '', repairer: '',
partType: '', partType: 0,
partNum: '', partNum: '',
partCost: '', partCost: '',
repairContent: '', repairContent: '',
@ -527,15 +569,13 @@ export default {
}, },
delDomain(domain, type) { delDomain(domain, type) {
if (type == 1) { if (type == 1) {
this.dynamicValidateForm.premiumList = this.dynamicValidateForm.premiumList = this.dynamicValidateForm.premiumList.filter(
this.dynamicValidateForm.premiumList.filter( (item) => item.key != domain.key,
(item) => item.key != domain.key, )
)
} else { } else {
this.dynamicValidateFormTwo.premiumListTwo = this.dynamicValidateFormTwo.premiumListTwo = this.dynamicValidateFormTwo.premiumListTwo.filter(
this.dynamicValidateFormTwo.premiumListTwo.filter( (item) => item.key != domain.key,
(item) => item.key != domain.key, )
)
} }
}, },
addDomainTwo() { addDomainTwo() {
@ -543,7 +583,7 @@ export default {
selected: 'N', selected: 'N',
// partId: '', // partId: '',
repairer: '', repairer: '',
partType: '', partType: 0,
partNum: '', partNum: '',
partCost: '', partCost: '',
repairContent: '', repairContent: '',
@ -555,10 +595,7 @@ export default {
this.$refs['dynamicValidateForm'].validate((valid) => { this.$refs['dynamicValidateForm'].validate((valid) => {
if (valid) { if (valid) {
// //
console.log( console.log('this.dynamicValidateForm.premiumList1111)', this.dynamicValidateForm.premiumList)
'this.dynamicValidateForm.premiumList1111)',
this.dynamicValidateForm.premiumList,
)
this.dynamicValidateForm.premiumList.forEach((e) => { this.dynamicValidateForm.premiumList.forEach((e) => {
if (e.partType == 0) { if (e.partType == 0) {
@ -572,9 +609,7 @@ export default {
id: this.rowObj.id, id: this.rowObj.id,
repairType: 1, repairType: 1,
companyId: this.companyId, companyId: this.companyId,
partStrList: JSON.stringify( partStrList: JSON.stringify(this.dynamicValidateForm.premiumList),
this.dynamicValidateForm.premiumList,
),
} }
this.fullscreenLoading = true this.fullscreenLoading = true
submitRepairApplyApi(params) submitRepairApplyApi(params)
@ -613,9 +648,7 @@ export default {
id: this.rowObj.id, id: this.rowObj.id,
companyId: this.companyId, companyId: this.companyId,
repairType: 1, repairType: 1,
partStrList: JSON.stringify( partStrList: JSON.stringify(this.dynamicValidateFormTwo.premiumListTwo),
this.dynamicValidateFormTwo.premiumListTwo,
),
} }
this.fullscreenLoading = true this.fullscreenLoading = true
submitRepairApplyApi(params) submitRepairApplyApi(params)
@ -647,6 +680,56 @@ export default {
this.isRequired = false 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> </script>
@ -723,4 +806,4 @@ export default {
margin-right: 3%; margin-right: 3%;
margin-top: 10px; margin-top: 10px;
} }
</> </style>

View File

@ -41,7 +41,7 @@
style="width: 350px" style="width: 350px"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<!-- <el-form-item <el-form-item
:prop="'premiumList.' + index + '.partType'" :prop="'premiumList.' + index + '.partType'"
label="是否收费:" label="是否收费:"
required required
@ -58,7 +58,7 @@
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio> <el-radio :label="0"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> --> </el-form-item>
<el-form-item <el-form-item
v-if="index == 0" v-if="index == 0"
:prop="'premiumList.' + index + '.supplierId'" :prop="'premiumList.' + index + '.supplierId'"
@ -97,15 +97,14 @@
<el-form-item <el-form-item
v-if="domain.partType == 1" v-if="domain.partType == 1"
:prop="'premiumList.' + index + '.partPrice'" :prop="'premiumList.' + index + '.partPrice'"
label="配件单价(元)" label="费用(元)"
label-width="120px"
> >
<el-input <el-input
v-model="domain.partPrice" v-model="domain.partPrice"
placeholder="请输入" placeholder="请输入"
size="small" size="small"
maxlength="10" maxlength="10"
style="width: 330px" style="width: 350px"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -139,6 +138,48 @@
type="textarea" type="textarea"
></el-input> ></el-input>
</el-form-item> </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>
</div> </div>
</el-form> </el-form>
@ -200,7 +241,7 @@
style="width: 350px" style="width: 350px"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<!-- <el-form-item <el-form-item
label="是否收费:" label="是否收费:"
required required
:rules="{ :rules="{
@ -216,7 +257,7 @@
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio> <el-radio :label="0"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> --> </el-form-item>
<el-form-item <el-form-item
v-if="index == 0" v-if="index == 0"
:prop="'premiumListTwo.' + index + '.supplierId'" :prop="'premiumListTwo.' + index + '.supplierId'"
@ -254,15 +295,14 @@
> --> > -->
<el-form-item <el-form-item
v-if="domain.partType == 1" v-if="domain.partType == 1"
label="配件单价(元)" label="费用(元)"
label-width="120px"
> >
<el-input <el-input
v-model="domain.partPrice" v-model="domain.partPrice"
placeholder="请输入" placeholder="请输入"
size="small" size="small"
maxlength="10" maxlength="10"
style="width: 330px" style="width: 350px"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -293,6 +333,48 @@
type="textarea" type="textarea"
></el-input> ></el-input>
</el-form-item> </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>
<!-- <el-button @click.prevent="removeDomain(domain, index)"--> <!-- <el-button @click.prevent="removeDomain(domain, index)"-->
@ -375,6 +457,12 @@ export default {
}, },
data() { data() {
return { 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: [], supplierSelectList: [],
fullscreenLoading: false, fullscreenLoading: false,
dynamicValidateForm: { dynamicValidateForm: {
@ -390,6 +478,7 @@ export default {
downRate: undefined, downRate: undefined,
downFee: undefined, downFee: undefined,
xiayoufeiyonge_unit: '', xiayoufeiyonge_unit: '',
fileList: [],
}, },
], ],
}, },
@ -406,6 +495,7 @@ export default {
downRate: undefined, downRate: undefined,
downFee: undefined, downFee: undefined,
xiayoufeiyonge_unit: '', xiayoufeiyonge_unit: '',
fileList: [],
}, },
], ],
}, },
@ -502,7 +592,7 @@ export default {
selected: 'N', selected: 'N',
partName: '', partName: '',
repairer: '', repairer: '',
partType: '', partType: 0,
partNum: '', partNum: '',
partCost: '', partCost: '',
repairContent: '', repairContent: '',
@ -517,7 +607,7 @@ export default {
selected: 'N', selected: 'N',
partName: '', partName: '',
repairer: '', repairer: '',
partType: '', partType: 0,
partNum: '', partNum: '',
partCost: '', partCost: '',
repairContent: '', 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> </script>