1039 lines
29 KiB
Vue
1039 lines
29 KiB
Vue
<template>
|
|
<!-- 装备维保页面 -->
|
|
<div class="app-container">
|
|
<!-- 搜索表单 -->
|
|
<el-form
|
|
ref="searchFormRef"
|
|
:model="searchParams"
|
|
:rules="searchFormRules"
|
|
:inline="true"
|
|
label-width="auto" size="small"
|
|
>
|
|
<el-card class="search-box">
|
|
<el-row :gutter="20" type="flex">
|
|
<el-col :span="6">
|
|
<el-form-item label="装备编码" prop="deviceCode">
|
|
<el-input
|
|
v-model.trim="searchParams.deviceCode"
|
|
placeholder="请输入装备编码"
|
|
clearable
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6" >
|
|
<el-form-item label="质检次数" prop="minNum">
|
|
<el-input
|
|
v-model="searchParams.minNum"
|
|
placeholder="质检次数"
|
|
inputmode="numeric"
|
|
size="small"
|
|
style="width: 100px"
|
|
/> -
|
|
<el-input
|
|
v-model.trim="searchParams.maxNum"
|
|
placeholder="质检次数"
|
|
inputmode="numeric"
|
|
size="small"
|
|
style="width: 100px"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="9">
|
|
<el-form-item label="质检日期" prop="leaseStatus">
|
|
<el-date-picker
|
|
v-model="qcTime"
|
|
type="daterange"
|
|
placeholder="最新质检日期"
|
|
range-separator="-"
|
|
value-format="yyyy-MM-dd"
|
|
start-placeholder="开始日期"
|
|
end-placeholder="结束日期"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="9">
|
|
<el-form-item label="更新日期" prop="createTime">
|
|
<el-date-picker
|
|
v-model="createTime"
|
|
type="daterange"
|
|
placeholder="更新日期"
|
|
range-separator="-"
|
|
value-format="yyyy-MM-dd"
|
|
start-placeholder="开始日期"
|
|
end-placeholder="结束日期"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row>
|
|
<el-col :span="24" style="text-align: right;">
|
|
<el-button type="primary" icon="el-icon-search" size="mini" class="primary-lease" @click="onSearch">查询</el-button>
|
|
<el-button icon="el-icon-refresh" size="mini" class="primary-lease" @click="onReset">重置</el-button>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
</el-card>
|
|
</el-form>
|
|
<el-card class="content-box">
|
|
<div class="table-container">
|
|
<!-- 维保列表表格 -->
|
|
<el-table
|
|
:data="qualityLis"
|
|
border
|
|
stripe
|
|
show-overflow-tooltip
|
|
>
|
|
<el-table-column label="序号" type="index" align="center" width="80"/>
|
|
<el-table-column prop="deviceCode" label="装备编码" align="center"/>
|
|
<el-table-column prop="deviceName" label="装备名称" align="center"/>
|
|
<el-table-column prop="qcTime" label="最新质检日期" align="center"/>
|
|
<el-table-column prop="createBy" label="创建人" align="center" width="120"/>
|
|
<el-table-column prop="createTime" label="上传时间" align="center"/>
|
|
<el-table-column prop="updateTime" label="更新时间" align="center"/>
|
|
<el-table-column label="操作" align="center" width="280">
|
|
<template slot-scope="{ row }">
|
|
<el-button
|
|
size="mini"
|
|
type="primary"
|
|
class="primary-lease"
|
|
@click="handleOpenAddDialog(row)"
|
|
>
|
|
新建
|
|
</el-button>
|
|
<el-button
|
|
size="mini"
|
|
type="primary"
|
|
class="primary-lease"
|
|
@click="handleOpenDetailDialog(row)"
|
|
>
|
|
装备质检记录
|
|
</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
<div class="pagination-wrapper">
|
|
<!-- 分页组件 -->
|
|
<pagination
|
|
:total="total"
|
|
:page.sync="searchParams.pageNum"
|
|
:limit.sync="searchParams.pageSize"
|
|
@pagination="getLeaseListData"
|
|
/>
|
|
</div>
|
|
|
|
</el-card>
|
|
<!-- 新增/详情对话框 -->
|
|
<el-dialog
|
|
:title="dialogTitle"
|
|
:visible.sync="addOrEditDialogVisible"
|
|
:width="dialogTitle === '质检新增' ? '40%' : '60%'"
|
|
align-center
|
|
destroy-on-close
|
|
@close="onClose"
|
|
>
|
|
<!-- 新增质检表单 -->
|
|
<template v-if="dialogTitle === '质检新增'">
|
|
<el-form
|
|
v-if="addOrEditDialogVisible"
|
|
ref="addOrEditFormRef"
|
|
:model="addOrEditForm"
|
|
:rules="addOrEditFormRules"
|
|
label-width="auto"
|
|
label-position="right"
|
|
>
|
|
<el-row :gutter="20">
|
|
<el-col :span="24">
|
|
<el-form-item label="质检员" prop="qcUser">
|
|
<el-input
|
|
v-model="addOrEditForm.qcUser"
|
|
placeholder="请输入质检员"
|
|
clearable
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="20">
|
|
<el-col :span="24">
|
|
<el-form-item label="质检日期" prop="qcTime">
|
|
<el-date-picker
|
|
v-model="addOrEditForm.qcTime"
|
|
type="date"
|
|
placeholder="请选择质检日期"
|
|
value-format="yyyy-MM-dd"
|
|
clearable
|
|
style="width: 100%"
|
|
@change="onQcChange"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="20">
|
|
<el-col :span="24">
|
|
<el-form-item label="下次质检日期" prop="nextCheckTime">
|
|
<el-date-picker
|
|
v-model="addOrEditForm.nextCheckTime"
|
|
type="date"
|
|
placeholder="请选择下次质检日期"
|
|
value-format="yyyy-MM-dd"
|
|
clearable
|
|
style="width: 100%"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="20">
|
|
<el-col :span="24">
|
|
<el-form-item label="质检附件" prop="fileInfoList">
|
|
<!-- 使用el-upload替换自定义上传组件 -->
|
|
<el-upload
|
|
:action="uploadUrl"
|
|
:headers="{ Authorization: getToken() }"
|
|
:file-list="fileList"
|
|
:on-success="handleUploadSuccess"
|
|
:on-error="handleUploadError"
|
|
:on-remove="handleRemove"
|
|
:before-upload="beforeUpload"
|
|
:limit="1"
|
|
:on-exceed="handleExceed"
|
|
accept=".jpg,.png,.pdf,.doc,.docx"
|
|
list-type="picture-card"
|
|
>
|
|
<i class="el-icon-plus" style="font-size: 48px; color: #aaa;"></i>
|
|
<div slot="tip" class="el-upload__tip">
|
|
支持格式:.jpg、.png、.pdf、.doc、.docx 单个文件大小不能超过10M
|
|
</div>
|
|
</el-upload>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
</template>
|
|
|
|
<!-- 质检记录详情 -->
|
|
<template v-if="dialogTitle === '质检记录'">
|
|
<el-row style="padding-bottom: 20px">
|
|
<el-col :span="6">
|
|
<span>装备编号:</span>
|
|
<span>{{ qualityDetails.deviceCode }}</span>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<span>装备名称:</span>
|
|
<span>{{ qualityDetails.deviceName }}</span>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<!-- 详情页搜索表单 -->
|
|
<el-form
|
|
ref="searchFormRefInDialog"
|
|
:model="searchParamsInDialog"
|
|
:inline="true"
|
|
size="default"
|
|
label-width="0"
|
|
>
|
|
<el-row>
|
|
<el-col :span="6">
|
|
<el-form-item prop="qcCode">
|
|
<el-input
|
|
v-model="searchParamsInDialog.qcCode"
|
|
placeholder="请输入质检编码"
|
|
clearable
|
|
style="width: 100%"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item>
|
|
<el-date-picker
|
|
v-model="qcTime_1"
|
|
type="daterange"
|
|
placeholder="质检日期"
|
|
range-separator="-"
|
|
value-format="yyyy-MM-dd"
|
|
start-placeholder="质检日期"
|
|
end-placeholder="质检日期"
|
|
style="width: 100%"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item>
|
|
<el-date-picker
|
|
v-model="createTime_1"
|
|
type="daterange"
|
|
placeholder="上传日期"
|
|
range-separator="-"
|
|
value-format="yyyy-MM-dd"
|
|
start-placeholder="上传日期"
|
|
end-placeholder="上传日期"
|
|
style="width: 100%"
|
|
/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item>
|
|
<el-button type="primary" icon="el-icon-search" class="primary-lease" @click="getLeaseListDataInDialog">查询</el-button>
|
|
<el-button icon="el-icon-refresh" class="primary-lease" @click="onResetInDialog">重置</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
|
|
<!-- 详情表格 -->
|
|
<el-table
|
|
:data="qualityDetailsList"
|
|
border
|
|
stripe
|
|
show-overflow-tooltip
|
|
>
|
|
<el-table-column label="序号" type="index" align="center" width="80"/>
|
|
<el-table-column prop="qcCode" label="质检编码" align="center"/>
|
|
<el-table-column prop="qcTime" label="维修保养日期" align="center"/>
|
|
<el-table-column prop="nickName" label="上传人" align="center" width="120"/>
|
|
<el-table-column prop="createTime" label="上传时间" align="center"/>
|
|
<el-table-column label="附件" align="center">
|
|
<template slot-scope="{ row }">
|
|
<el-image
|
|
v-if="row.url.includes('.jpg') || row.url.includes('.png')"
|
|
:src="row.url"
|
|
:zoom-rate="1.2"
|
|
:max-scale="7"
|
|
:min-scale="0.2"
|
|
:preview-src-list="[row.url]"
|
|
:initial-index="0"
|
|
:z-index="9999999999"
|
|
:preview-teleported="true"
|
|
style="width: 60px; height: 60px"
|
|
fit="cover"
|
|
/>
|
|
<span v-else>
|
|
<a
|
|
:href="row.url"
|
|
target="_blank"
|
|
style="color: #00a288; text-decoration: underline; cursor: pointer"
|
|
>
|
|
查看
|
|
</a>
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="操作" align="center" width="80">
|
|
<template slot-scope="{ row }">
|
|
<el-popconfirm
|
|
width="220"
|
|
icon-color="#626AEF"
|
|
title="确定删除该记录吗?"
|
|
@confirm="onDelete(row)"
|
|
>
|
|
<template #reference>
|
|
<el-button size="small" type="danger"> 删除</el-button>
|
|
</template>
|
|
<template #actions="{ confirm }">
|
|
<el-button type="primary" class="primary-lease" size="small">取消</el-button>
|
|
<el-button type="primary" class="primary-lease" size="small" @click="confirm()">确定</el-button>
|
|
</template>
|
|
</el-popconfirm>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<!-- 详情页分页 -->
|
|
<pagination
|
|
:total="totalInDialog"
|
|
:page.sync="searchParamsInDialog.pageNum"
|
|
:limit.sync="searchParamsInDialog.pageSize"
|
|
@pagination="getLeaseListDataInDialog"
|
|
/>
|
|
</template>
|
|
|
|
<!-- 对话框底部按钮 -->
|
|
<template #footer v-if="dialogTitle === '质检新增'">
|
|
<div class="dialog-footer">
|
|
<el-button type="primary" class="primary-lease" @click="onCancel">取消</el-button>
|
|
<el-button type="primary" class="primary-lease" @click="onSubmit">提交</el-button>
|
|
</div>
|
|
</template>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
addQualityDataApi,
|
|
getQualityListApi,
|
|
getQualityDetailsApi,
|
|
qualityDeleteByIdApi,
|
|
getAssociationListApi
|
|
} from '@/api/EquipmentServicing/index'
|
|
import { getSelectEquipmentListAPI } from '@/api/EquipmentLedger/equ-out'
|
|
import { getToken } from '@/utils/auth' // 引入获取token的工具函数
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
// 列表数据相关
|
|
total: 0,
|
|
qualityLis: [],
|
|
associationList: [],
|
|
|
|
// 详情页相关
|
|
totalInDialog: 0,
|
|
qualityDetailsList: [],
|
|
qualityDetails: {},
|
|
|
|
// 时间选择器相关
|
|
qcTime: [],
|
|
createTime: [],
|
|
qcTime_1: [],
|
|
createTime_1: [],
|
|
|
|
// 对话框相关
|
|
dialogTitle: '',
|
|
addOrEditDialogVisible: false,
|
|
isRepublish: true,
|
|
|
|
// 搜索参数
|
|
searchParams: {
|
|
deviceCode: '',
|
|
qcStartTime: '',
|
|
qcEndTime: '',
|
|
createStartTime: '',
|
|
createEndTime: '',
|
|
minNum: '',
|
|
maxNum: '',
|
|
pageSize: 10,
|
|
pageNum: 1
|
|
},
|
|
|
|
// 详情页搜索参数
|
|
searchParamsInDialog: {
|
|
id: '',
|
|
qcCode: '',
|
|
qcStartTime: '',
|
|
qcEndTime: '',
|
|
createStartTime: '',
|
|
createEndTime: '',
|
|
maId: '',
|
|
pageSize: 10,
|
|
pageNum: 1
|
|
},
|
|
|
|
// 表单数据
|
|
addOrEditForm: {
|
|
maId: '',
|
|
qcName: '',
|
|
qcUser: '',
|
|
qcTime: '',
|
|
nextCheckTime: '',
|
|
fileInfoList: [], // 存储上传成功的文件信息
|
|
},
|
|
|
|
// 文件上传相关
|
|
fileList: [], // el-upload使用的文件列表
|
|
uploadUrl: process.env.VUE_APP_BASE_API + '/file/upload',
|
|
warningDays: 0
|
|
}
|
|
},
|
|
computed: {
|
|
// 搜索表单验证规则
|
|
searchFormRules() {
|
|
return {
|
|
minNum: [
|
|
{
|
|
pattern: /^[1-9][0-9]*$/,
|
|
message: '请输入大于0的正整数',
|
|
trigger: 'blur'
|
|
},
|
|
{ validator: this.checkMinNum, trigger: 'blur' }
|
|
],
|
|
maxNum: [
|
|
{
|
|
pattern: /^[1-9][0-9]*$/,
|
|
message: '请输入大于0的正整数',
|
|
trigger: 'blur'
|
|
},
|
|
{ validator: this.checkMaxNum, trigger: 'blur' }
|
|
]
|
|
}
|
|
},
|
|
// 新增表单验证规则
|
|
addOrEditFormRules() {
|
|
return {
|
|
maId: [{ required: true, message: '请选择关联装备', trigger: 'change' }],
|
|
nextCheckTime: [{ required: true, message: '请输入下次质检日期', trigger: 'blur' }],
|
|
qcUser: [{ required: true, message: '请输入质检员', trigger: 'change' }],
|
|
qcTime: [{ required: true, message: '请选择质检日期', trigger: 'change' }],
|
|
fileInfoList: [{ required: true, message: '请上传质检附件', trigger: 'blur' }]
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
getToken,
|
|
// 验证最小次数不能大于最大次数
|
|
checkMinNum(rule, value, callback) {
|
|
const maxNum = parseInt(this.searchParams.maxNum)
|
|
if (value > maxNum && maxNum > 0) {
|
|
return callback(new Error('查询开始次数不能大于查询结束次数'))
|
|
}
|
|
callback()
|
|
},
|
|
// 验证最大次数不能小于最小次数
|
|
checkMaxNum(rule, value, callback) {
|
|
const minNum = parseInt(this.searchParams.minNum)
|
|
if (value < minNum && minNum > 0) {
|
|
return callback(new Error('查询结束次数不能小于查询开始次数'))
|
|
}
|
|
callback()
|
|
},
|
|
|
|
// 获取列表数据
|
|
async getLeaseListData() {
|
|
// 处理日期范围
|
|
if (this.qcTime.length > 0) {
|
|
console.log(this.qcTime)
|
|
this.searchParams.qcStartTime = this.qcTime[0]
|
|
this.searchParams.qcEndTime = this.qcTime[1]
|
|
}
|
|
if (this.createTime.length > 0) {
|
|
this.searchParams.createStartTime = this.createTime[0]
|
|
this.searchParams.createEndTime = this.createTime[1]
|
|
}
|
|
|
|
try {
|
|
getQualityListApi(this.searchParams).then((res) => {
|
|
console.log(res)
|
|
this.qualityLis = res.data.rows
|
|
this.total = res.data.total
|
|
})
|
|
} catch (error) {
|
|
console.error('获取质检列表失败:', error)
|
|
this.$message.error('获取数据失败,请重试')
|
|
}
|
|
},
|
|
|
|
// 搜索
|
|
onSearch() {
|
|
this.$refs.searchFormRef.validate(valid => {
|
|
if (valid) {
|
|
this.getLeaseListData()
|
|
}
|
|
})
|
|
},
|
|
|
|
// 重置搜索条件
|
|
onReset() {
|
|
this.qcTime = []
|
|
this.createTime = []
|
|
this.searchParams = {
|
|
deviceCode: '',
|
|
qcStartTime: '',
|
|
qcEndTime: '',
|
|
createStartTime: '',
|
|
createEndTime: '',
|
|
minNum: '',
|
|
maxNum: '',
|
|
pageSize: 10,
|
|
pageNum: 1
|
|
}
|
|
this.$refs.searchFormRef.resetFields()
|
|
this.getLeaseListData()
|
|
},
|
|
|
|
// 获取关联装备列表
|
|
async getAssociationListData() {
|
|
try {
|
|
const res = await getAssociationListApi()
|
|
this.associationList = res.data
|
|
} catch (error) {
|
|
console.error('获取关联装备失败:', error)
|
|
this.$message.error('获取关联装备失败,请重试')
|
|
}
|
|
},
|
|
|
|
// 打开新增对话框
|
|
handleOpenAddDialog(row) {
|
|
this.isRepublish = true
|
|
this.dialogTitle = '质检新增'
|
|
this.addOrEditDialogVisible = true
|
|
// 重置表单和文件列表
|
|
this.addOrEditForm = {
|
|
maId: row.maId,
|
|
qcName: '',
|
|
qcUser: '',
|
|
qcTime: '',
|
|
nextCheckTime: '',
|
|
fileInfoList: [],
|
|
}
|
|
this.fileList = []
|
|
this.warningDays = row.maintenanceAlarmDay
|
|
},
|
|
|
|
// 打开详情对话框
|
|
handleOpenDetailDialog(row) {
|
|
this.qualityDetails = row
|
|
this.searchParamsInDialog.maId = row.maId
|
|
this.searchParamsInDialog.qcCode = ''
|
|
this.qcTime_1 = []
|
|
this.createTime_1 = []
|
|
this.searchParamsInDialog.qcStartTime = ''
|
|
this.searchParamsInDialog.qcEndTime = ''
|
|
this.searchParamsInDialog.createStartTime = ''
|
|
this.searchParamsInDialog.createEndTime = ''
|
|
this.dialogTitle = '质检记录'
|
|
this.addOrEditDialogVisible = true
|
|
this.getLeaseListDataInDialog()
|
|
},
|
|
|
|
// 获取详情列表数据
|
|
async getLeaseListDataInDialog() {
|
|
// 处理日期范围
|
|
if (this.qcTime_1.length > 0) {
|
|
this.searchParamsInDialog.qcStartTime = this.qcTime_1[0]
|
|
this.searchParamsInDialog.qcEndTime = this.qcTime_1[1]
|
|
}
|
|
if (this.createTime_1.length > 0) {
|
|
this.searchParamsInDialog.createStartTime = this.createTime_1[0]
|
|
this.searchParamsInDialog.createEndTime = this.createTime_1[1]
|
|
}
|
|
|
|
try {
|
|
const { data: res } = await getQualityDetailsApi(this.searchParamsInDialog)
|
|
this.qualityDetailsList = res.rows
|
|
this.totalInDialog = res.total
|
|
} catch (error) {
|
|
console.error('获取质检详情失败:', error)
|
|
this.$message.error('获取详情数据失败,请重试')
|
|
}
|
|
},
|
|
|
|
// 重置详情页搜索条件
|
|
onResetInDialog() {
|
|
this.qcTime_1 = []
|
|
this.createTime_1 = []
|
|
this.searchParamsInDialog = {
|
|
...this.searchParamsInDialog,
|
|
qcCode: '',
|
|
qcStartTime: '',
|
|
qcEndTime: '',
|
|
createStartTime: '',
|
|
createEndTime: '',
|
|
pageNum: 1,
|
|
pageSize: 10
|
|
}
|
|
this.$refs.searchFormRefInDialog.resetFields()
|
|
this.getLeaseListDataInDialog()
|
|
},
|
|
|
|
// 删除质检记录
|
|
async onDelete(row) {
|
|
try {
|
|
const res = await qualityDeleteByIdApi({
|
|
fileId: row.fileId,
|
|
maId: row.maId
|
|
})
|
|
if (res.code === 200) {
|
|
this.$message.success('删除成功')
|
|
this.getLeaseListData()
|
|
this.getLeaseListDataInDialog()
|
|
} else {
|
|
this.$message.error(res.msg || '删除失败')
|
|
}
|
|
} catch (error) {
|
|
console.error('删除质检记录失败:', error)
|
|
// this.$message.error('删除失败,请重试')
|
|
}
|
|
},
|
|
|
|
// 提交新增表单
|
|
onSubmit() {
|
|
this.$refs.addOrEditFormRef.validate(async valid => {
|
|
if (valid) {
|
|
try {
|
|
const res = await addQualityDataApi(this.addOrEditForm)
|
|
if (res.code === 200) {
|
|
this.$message.success('提交成功')
|
|
this.addOrEditDialogVisible = false
|
|
this.getLeaseListData()
|
|
} else {
|
|
this.$message.error(res.msg || '提交失败')
|
|
}
|
|
} catch (error) {
|
|
console.error('提交质检数据失败:', error)
|
|
this.$message.error('提交失败,请重试')
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
// 取消
|
|
onCancel() {
|
|
this.addOrEditDialogVisible = false
|
|
},
|
|
|
|
// 关闭对话框
|
|
onClose() {
|
|
if (this.dialogTitle !== '质检记录') {
|
|
this.$refs.addOrEditFormRef.resetFields()
|
|
this.fileList = []
|
|
this.addOrEditForm.fileInfoList = []
|
|
}
|
|
},
|
|
|
|
// 文件上传成功处理
|
|
handleUploadSuccess(response, file, fileList) {
|
|
if (response.code === 200) {
|
|
this.$message.success('文件上传成功')
|
|
// 按后端返回格式调整文件信息
|
|
let fileUrl = ''
|
|
if (process.env.VUE_APP_BASE_API !== '/iws/jxhzb-api') {
|
|
fileUrl = response.data.url // 公司-测试环境
|
|
} else {
|
|
fileUrl = 'http://sgwpdm.ah.sgcc.com.cn/iws/ahbns/' + response.data.url // 宏源-测试环境
|
|
}
|
|
|
|
// 更新表单文件列表
|
|
this.addOrEditForm.fileInfoList = [{
|
|
fileName: file.name,
|
|
fileUrl: fileUrl,
|
|
fileId: response.data.fileId // 假设后端返回fileId
|
|
}]
|
|
} else {
|
|
this.$message.error(response.msg || '文件上传失败')
|
|
// 上传失败时从文件列表中移除
|
|
this.fileList = this.fileList.filter(f => f.uid !== file.uid)
|
|
}
|
|
},
|
|
|
|
// 文件上传失败处理
|
|
handleUploadError(error, file, fileList) {
|
|
this.$message.error('文件上传失败,请重试')
|
|
// 从文件列表中移除失败的文件
|
|
this.fileList = this.fileList.filter(f => f.uid !== file.uid)
|
|
},
|
|
|
|
// 移除文件处理
|
|
handleRemove(file, fileList) {
|
|
this.fileList = fileList
|
|
// 同时清空表单中的文件信息
|
|
this.addOrEditForm.fileInfoList = []
|
|
},
|
|
|
|
// 上传前校验
|
|
beforeUpload(file) {
|
|
// 校验文件大小
|
|
const isLt10M = file.size / 1024 / 1024 < 10
|
|
if (!isLt10M) {
|
|
this.$message.error('上传文件大小不能超过 10MB!')
|
|
return false
|
|
}
|
|
|
|
// 校验文件类型
|
|
const fileExtension = file.name.split('.').pop().toLowerCase()
|
|
const allowedTypes = ['jpg', 'png', 'pdf', 'doc', 'docx']
|
|
if (!allowedTypes.includes(fileExtension)) {
|
|
this.$message.error('只支持 jpg、png、pdf、doc、docx 格式的文件!')
|
|
return false
|
|
}
|
|
|
|
return true
|
|
},
|
|
|
|
// 超过文件数量限制处理
|
|
handleExceed(files, fileList) {
|
|
this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,已自动忽略多余文件。`)
|
|
},
|
|
|
|
// 质检日期变化时自动计算下次质检日期
|
|
onQcChange(value) {
|
|
if (!value || !this.warningDays) return
|
|
const currentDate = new Date(value)
|
|
currentDate.setDate(currentDate.getDate() + this.warningDays)
|
|
this.addOrEditForm.nextCheckTime = this.formatDate(currentDate)
|
|
},
|
|
|
|
// 格式化日期
|
|
formatDate(date) {
|
|
const year = date.getFullYear()
|
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
const day = String(date.getDate()).padStart(2, '0')
|
|
const hours = String(date.getHours()).padStart(2, '0')
|
|
const minutes = String(date.getMinutes()).padStart(2, '0')
|
|
const seconds = String(date.getSeconds()).padStart(2, '0')
|
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
|
|
}
|
|
},
|
|
mounted() {
|
|
this.getLeaseListData()
|
|
this.getAssociationListData()
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.app-container {
|
|
padding: 20px;
|
|
}
|
|
|
|
.page-header {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-bottom: 20px;
|
|
padding-bottom: 15px;
|
|
border-bottom: 1px solid #e6e6e6;
|
|
|
|
.page-title {
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
color: #303133;
|
|
}
|
|
}
|
|
|
|
::v-deep .el-form--inline .el-form-item {
|
|
margin-right: 6px;
|
|
width: 95%;
|
|
}
|
|
|
|
::v-deep .upload-tip .el-form-item__label {
|
|
color: transparent;
|
|
}
|
|
|
|
::v-deep .el-pagination {
|
|
justify-content: flex-end;
|
|
padding: 5px 0;
|
|
margin-top: 15px;
|
|
}
|
|
|
|
::v-deep .el-pagination.is-background .el-pager li.is-active {
|
|
background-color: #3cb4a6;
|
|
}
|
|
|
|
::v-deep .el-dialog {
|
|
display: flex !important;
|
|
flex-direction: column !important;
|
|
margin: 0 !important;
|
|
position: absolute !important;
|
|
top: 50% !important;
|
|
left: 50% !important;
|
|
transform: translate(-50%, -50%) !important;
|
|
max-height: 100vh !important;
|
|
|
|
.el-dialog__body {
|
|
flex: 1;
|
|
overflow-y: scroll !important;
|
|
}
|
|
|
|
.dialog-content {
|
|
padding: 20px;
|
|
}
|
|
}
|
|
|
|
::v-deep .el-upload--picture-card {
|
|
width: 100px;
|
|
height: 100px;
|
|
line-height: 100px;
|
|
}
|
|
|
|
.img-list {
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
.img-items {
|
|
width: 100px;
|
|
height: 100px;
|
|
margin-right: 8px;
|
|
position: relative;
|
|
|
|
img {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.mask-img {
|
|
visibility: hidden;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background-color: #000;
|
|
opacity: 0.5;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
|
|
.delete-icon {
|
|
font-size: 20px;
|
|
cursor: pointer;
|
|
z-index: 9;
|
|
color: #fff;
|
|
}
|
|
}
|
|
}
|
|
|
|
.img-items:hover .mask-img {
|
|
visibility: visible;
|
|
}
|
|
}
|
|
|
|
.search-box {
|
|
margin-bottom: 20px;
|
|
border-radius: 8px;
|
|
padding: 0;
|
|
}
|
|
|
|
.content-box {
|
|
border-radius: 8px;
|
|
height: calc(100vh - 260px);
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
|
|
::v-deep .el-card__body {
|
|
display: flex !important;
|
|
flex-direction: column !important;
|
|
height: 100% !important;
|
|
padding: 20px;
|
|
}
|
|
|
|
.el-row:first-child {
|
|
margin-bottom: 16px;
|
|
flex-shrink: 0;
|
|
|
|
.el-col {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
}
|
|
|
|
.table-container {
|
|
flex: 1;
|
|
overflow: hidden;
|
|
margin-bottom: 0;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.pagination-wrapper {
|
|
flex-shrink: 0;
|
|
padding-top: 6px;
|
|
margin-top: auto;
|
|
|
|
::v-deep .pagination-container {
|
|
padding: 0px 20px !important;
|
|
margin-bottom: 30px;
|
|
}
|
|
}
|
|
|
|
::v-deep .el-table {
|
|
// 启用斑马纹
|
|
&.el-table--striped .el-table__body {
|
|
tr.el-table__row--striped td {
|
|
background-color: #F6FBFA !important; // 浅紫色
|
|
}
|
|
}
|
|
|
|
.el-table__header {
|
|
background: #E9F0EE;
|
|
|
|
th {
|
|
background: #E9F0EE !important;
|
|
color: #606266;
|
|
font-weight: 600;
|
|
height: 50px;
|
|
}
|
|
}
|
|
|
|
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
|
|
background-color: #CCF1E9 !important;
|
|
}
|
|
}
|
|
}
|
|
.dialog-table {
|
|
border-radius: 6px;
|
|
overflow: hidden;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
|
|
::v-deep .el-table {
|
|
border-radius: 6px;
|
|
overflow: hidden;
|
|
|
|
// 启用斑马纹
|
|
&.el-table--striped .el-table__body {
|
|
tr.el-table__row--striped td {
|
|
background-color: #F6FBFA !important;
|
|
}
|
|
}
|
|
|
|
.el-table__header {
|
|
background: #E9F0EE;
|
|
|
|
th {
|
|
background: #E9F0EE !important;
|
|
color: #606266;
|
|
font-weight: 600;
|
|
height: 45px;
|
|
font-size: 14px;
|
|
border-bottom: 2px solid #e4e7ed;
|
|
}
|
|
}
|
|
|
|
.el-table__body {
|
|
tr {
|
|
transition: all 0.2s ease;
|
|
|
|
&:hover {
|
|
background-color: #f8f9fa;
|
|
}
|
|
|
|
td {
|
|
padding: 12px 8px;
|
|
font-size: 13px;
|
|
border-bottom: 1px solid #f0f2f5;
|
|
}
|
|
}
|
|
}
|
|
|
|
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
|
|
background-color: #CCF1E9 !important;
|
|
}
|
|
|
|
// 表格边框优化
|
|
&::before {
|
|
display: none;
|
|
}
|
|
|
|
&::after {
|
|
display: none;
|
|
}
|
|
}
|
|
}
|
|
|
|
::v-deep .el-table {
|
|
// 启用斑马纹
|
|
&.el-table--striped .el-table__body {
|
|
tr.el-table__row--striped td {
|
|
background-color: #F6FBFA !important; // 浅紫色
|
|
}
|
|
}
|
|
|
|
.el-table__header {
|
|
background: #E9F0EE;
|
|
|
|
th {
|
|
background: #E9F0EE !important;
|
|
color: #606266;
|
|
font-weight: 600;
|
|
height: 50px;
|
|
}
|
|
}
|
|
|
|
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
|
|
background-color: #CCF1E9 !important;
|
|
}
|
|
}
|
|
</style>
|
|
|