This commit is contained in:
BianLzhaoMin 2025-12-12 15:44:39 +08:00
parent ad01758eea
commit f0ae9790ac
1 changed files with 200 additions and 117 deletions

View File

@ -110,7 +110,19 @@
<el-table-column align="center" label="规格型号" prop="typeName" /> <el-table-column align="center" label="规格型号" prop="typeName" />
<el-table-column align="center" label="工具编码" prop="toolCode" /> <el-table-column align="center" label="工具编码" prop="toolCode" />
<el-table-column align="center" label="数量" prop="totalNum" /> <el-table-column align="center" label="数量" prop="totalNum" />
<el-table-column align="center" label="租赁价" prop="leasePrice" /> <el-table-column align="center" label="租赁价" width="180">
<template slot-scope="scope">
<el-input
:ref="`leasePriceInputNum${scope.$index}`"
clearable
style="width: 100%"
placeholder="请输入租赁价"
v-model.trim="scope.row.oldLeasePrice"
:class="{ 'lease-price-error': scope.row.priceError }"
@blur="handleLeasePriceBlur(scope.row, scope.$index)"
/>
</template>
</el-table-column>
<el-table-column align="center" label="操作" :width="220"> <el-table-column align="center" label="操作" :width="220">
<template slot-scope="scope"> <template slot-scope="scope">
@ -153,7 +165,7 @@
<!-- 上架数量工具 --> <!-- 上架数量工具 -->
<el-dialog <el-dialog
width="1600px" width="97%"
@close="handleNumberDialogClose" @close="handleNumberDialogClose"
destroy-on-close destroy-on-close
:title="dialogTitleByNumber" :title="dialogTitleByNumber"
@ -161,55 +173,56 @@
custom-class="simple-dialog" custom-class="simple-dialog"
> >
<!-- 搜索区域 --> <!-- 搜索区域 -->
<el-form :inline="true" :model="numberSearchParams" style="width: 100%; margin-bottom: 10px"> <el-form :inline="true" :model="numberSearchParams" label-width="auto">
<el-row style="display: flex; justify-content: center; gap: 10px"> <!-- <el-row style="display: flex; justify-content: center; gap: 10px">
<el-form-item label="工具专业" prop="fourthParentName">
<el-input
v-model="numberSearchParams.fourthParentName"
placeholder="请输入工具专业"
clearable
style="width: 220px"
/>
</el-form-item>
<el-form-item label="施工类型" prop="greatGrandparentName">
<el-input
v-model="numberSearchParams.greatGrandparentName"
placeholder="请输入施工类型"
clearable
style="width: 220px"
/>
</el-form-item>
<el-form-item label="工具名称" prop="parentTypeName">
<el-input
v-model="numberSearchParams.parentTypeName"
placeholder="请输入工具名称"
clearable
style="width: 220px"
/>
</el-form-item>
<el-form-item label="规格型号" prop="typeName">
<el-input
v-model="numberSearchParams.typeName"
placeholder="请输入规格型号"
clearable
style="width: 220px"
/>
</el-form-item>
<el-form-item style="text-align: right">
<el-button size="small" type="primary" @click="getListNumberTool">查询</el-button>
<el-button size="small" @click="handleNumberReset">重置</el-button>
<el-button </el-row> -->
size="mini" <el-form-item label="工具专业" prop="fourthParentName">
type="danger" <el-input
class="primary-lease" v-model="numberSearchParams.fourthParentName"
@click="handleBatchUpNum" placeholder="请输入工具专业"
:disabled="selectedNumberRows.length === 0" clearable
> style="width: 220px"
批量上架 />
</el-button> </el-form-item>
</el-form-item> <el-form-item label="施工类型" prop="greatGrandparentName">
</el-row> <el-input
v-model="numberSearchParams.greatGrandparentName"
placeholder="请输入施工类型"
clearable
style="width: 220px"
/>
</el-form-item>
<el-form-item label="工具名称" prop="parentTypeName">
<el-input
v-model="numberSearchParams.parentTypeName"
placeholder="请输入工具名称"
clearable
style="width: 220px"
/>
</el-form-item>
<el-form-item label="规格型号" prop="typeName">
<el-input
v-model="numberSearchParams.typeName"
placeholder="请输入规格型号"
clearable
style="width: 220px"
/>
</el-form-item>
<el-form-item style="text-align: right">
<el-button size="small" type="primary" @click="getListNumberTool">查询</el-button>
<el-button size="small" @click="handleNumberReset">重置</el-button>
<el-button
size="mini"
type="danger"
class="primary-lease"
@click="handleBatchUpNum"
:disabled="selectedNumberRows.length === 0"
>
批量上架
</el-button>
</el-form-item>
</el-form> </el-form>
<!-- 表格区域 --> <!-- 表格区域 -->
@ -231,6 +244,7 @@
<el-table-column align="center" label="工具名称" prop="parentTypeName" /> <el-table-column align="center" label="工具名称" prop="parentTypeName" />
<el-table-column align="center" label="规格型号" prop="typeName" /> <el-table-column align="center" label="规格型号" prop="typeName" />
<el-table-column align="center" label="数量" prop="totalNum" /> <el-table-column align="center" label="数量" prop="totalNum" />
<el-table-column align="center" label="租赁价" prop="leasePrice" />
</el-table> </el-table>
</div> </div>
@ -260,62 +274,60 @@
> >
<!-- 搜索区域 --> <!-- 搜索区域 -->
<el-form inline :model="codeSearchParams" label-width="auto"> <el-form inline :model="codeSearchParams" label-width="auto">
<el-row> <el-form-item label="工具专业" prop="fourthParentName">
<el-form-item label="工具专业" prop="fourthParentName" style="width: 300px"> <el-input
<el-input v-model="codeSearchParams.fourthParentName"
v-model="codeSearchParams.fourthParentName" placeholder="请输入工具专业"
placeholder="请输入工具专业" clearable
clearable style="width: 220px"
style="width: 220px" />
/> </el-form-item>
</el-form-item> <el-form-item label="施工类型" prop="greatGrandparentName">
<el-form-item label="施工类型" prop="greatGrandparentName" style="width: 300px"> <el-input
<el-input v-model="codeSearchParams.greatGrandparentName"
v-model="codeSearchParams.greatGrandparentName" placeholder="请输入施工类型"
placeholder="请输入施工类型" clearable
clearable style="width: 220px"
style="width: 220px" />
/> </el-form-item>
</el-form-item> <el-form-item label="工具名称" prop="parentTypeName">
<el-form-item label="工具名称" prop="parentTypeName" style="width: 300px"> <el-input
<el-input v-model="codeSearchParams.parentTypeName"
v-model="codeSearchParams.parentTypeName" placeholder="请输入工具名称"
placeholder="请输入工具名称" clearable
clearable style="width: 220px"
style="width: 220px" />
/> </el-form-item>
</el-form-item> <el-form-item label="规格型号" prop="typeName">
<el-form-item label="规格型号" prop="typeName" style="width: 300px"> <el-input
<el-input v-model="codeSearchParams.typeName"
v-model="codeSearchParams.typeName" placeholder="请输入规格型号"
placeholder="请输入规格型号" clearable
clearable style="width: 220px"
style="width: 220px" />
/> </el-form-item>
</el-form-item> <el-form-item label="工具编码" prop="toolCode">
<el-form-item label="工具编码" prop="toolCode" style="width: 300px"> <el-input
<el-input v-model="codeSearchParams.toolCode"
v-model="codeSearchParams.toolCode" placeholder="请输入工具编码"
placeholder="请输入工具编码" clearable
clearable style="width: 220px"
style="width: 220px" />
/> </el-form-item>
</el-form-item>
<el-form-item style="float: right; width: 220px"> <el-form-item style="float: right; width: 220px">
<el-button size="small" type="primary" @click="getListCodeTool">查询</el-button> <el-button size="small" type="primary" @click="getListCodeTool">查询</el-button>
<el-button size="small" @click="handleCodeReset">重置</el-button> <el-button size="small" @click="handleCodeReset">重置</el-button>
<el-button <el-button
size="mini" size="mini"
type="danger" type="danger"
class="primary-lease" class="primary-lease"
@click="handleBatchUpCode" @click="handleBatchUpCode"
:disabled="selectedCodeRows.length === 0" :disabled="selectedCodeRows.length === 0"
> >
批量上架 批量上架
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-row>
</el-form> </el-form>
<!-- 表格区域 --> <!-- 表格区域 -->
@ -477,7 +489,15 @@ export default {
try { try {
const res = await listNumberTool(this.numberSearchParams) const res = await listNumberTool(this.numberSearchParams)
if (res.code === 200) { if (res.code === 200) {
this.numberToolList = res.rows || [] this.numberToolList =
res.rows.map((e) => {
return {
...e,
isChangePrice: false, //
oldLeasePrice: e.leasePrice, //
priceError: false, //
}
}) || []
this.numberTotal = res.total || 0 this.numberTotal = res.total || 0
} else { } else {
Message.error(res.message || '获取工程列表失败') Message.error(res.message || '获取工程列表失败')
@ -657,6 +677,67 @@ export default {
return return
} }
// isChangePrice
const errorRows = []
for (let i = 0; i < this.numberToolList.length; i++) {
const listRow = this.numberToolList[i]
//
const isSelected = this.selectedNumberRows.some((selectedRow) => selectedRow.id === listRow.id)
if (!isSelected) continue
//
const validation = this.validateLeasePrice(listRow.oldLeasePrice)
if (!validation.valid) {
const displayIndex = i + 1
errorRows.push(displayIndex)
this.$set(listRow, 'priceError', true)
} else {
if (
listRow.oldLeasePrice === '' ||
listRow.oldLeasePrice === null ||
listRow.oldLeasePrice === undefined
) {
this.$set(listRow, 'oldLeasePrice', 0)
} else {
this.$set(listRow, 'oldLeasePrice', validation.value)
}
this.$set(listRow, 'priceError', false)
}
//
const originalPrice = listRow.leasePrice || 0
const newPrice =
listRow.oldLeasePrice === '' ||
listRow.oldLeasePrice === null ||
listRow.oldLeasePrice === undefined
? 0
: parseFloat(listRow.oldLeasePrice) || 0
this.$set(listRow, 'isChangePrice', originalPrice !== newPrice)
}
//
this.selectedNumberRows.forEach((selectedRow) => {
const listRow = this.numberToolList.find((item) => item.id === selectedRow.id)
if (listRow) {
selectedRow.oldLeasePrice = listRow.oldLeasePrice
selectedRow.isChangePrice = listRow.isChangePrice
selectedRow.priceError = listRow.priceError
}
})
//
if (errorRows.length > 0) {
this.$modal.msgError(
`${errorRows.join(
'、',
)} 行的租赁价格格式不正确请输入大于等于0且小于99999999.99的数字最多两位小数`,
)
return
}
try { try {
await this.$confirm(`确定上架选中的 ${this.selectedNumberRows.length} 个工具吗?`, '提示', { await this.$confirm(`确定上架选中的 ${this.selectedNumberRows.length} 个工具吗?`, '提示', {
type: 'warning', type: 'warning',
@ -664,25 +745,27 @@ export default {
cancelButtonText: '取消', cancelButtonText: '取消',
}) })
const ids = this.selectedNumberRows.map((row) => row.id) //
const launchList = this.selectedNumberRows.map((row) => {
return {
id: row.id,
leasePrice: row.oldLeasePrice,
isChangePrice: row.isChangePrice,
}
})
const res = await batchUpTool(ids) const res = await batchUpTool(launchList)
if (res.code === 200) { if (res.code === 200) {
Message.success(`成功上架 ${this.selectedNumberRows.length} 个工具`) this.$modal.msgSuccess(`成功上架 ${this.selectedNumberRows.length} 个工具`)
//
this.getListNumberTool() this.getListNumberTool()
//
this.getListTool() this.getListTool()
//
this.selectedNumberRows = [] this.selectedNumberRows = []
} else { } else {
Message.error(res.message || '批量上架失败') this.$modal.msgError(res.message || '批量上架失败')
} }
} catch (error) { } catch (error) {
if (error !== 'cancel') { console.log('error', error)
Message.error('网络错误,批量上架失败')
}
} }
}, },
@ -929,7 +1012,7 @@ export default {
::v-deep .el-form--inline .el-form-item { ::v-deep .el-form--inline .el-form-item {
margin-right: 6px; margin-right: 6px;
width: 95%; // width: 95%;
} }
.img-list { .img-list {