bonus-ui/src/views/sourcingNeed/index.vue

1307 lines
37 KiB
Vue

<template>
<div class="app-container">
<el-form
:inline="true"
label-width="auto" size="small"
ref="searchFormRef"
:model="searchParams"
>
<el-card class="search-box">
<el-row :gutter="5" style="display: flex; justify-content: space-between">
<el-col :span="5" style="width: 320px">
<el-form-item prop="leaseName" label="需求名称">
<el-input
clearable
style="width: 100%"
placeholder="请输入需求名称"
v-model="searchParams.leaseName"
/>
</el-form-item>
</el-col>
<el-col :span="5" style="width: 320px">
<el-form-item prop="leaseCode" label="需求编号">
<el-input
clearable
style="width: 100%"
placeholder="请输入需求编号"
v-model="searchParams.leaseCode"
/>
</el-form-item>
</el-col>
<el-col :span="5" style="width: 320px">
<el-form-item prop="leaseStatus" label="需求状态">
<el-select
clearable
style="width: 100%"
placeholder="选择需求状态"
v-model="searchParams.leaseStatus"
>
<el-option label="待接单" :value="0"/>
<el-option label="已接单" :value="1"/>
<el-option label="已到期" :value="2"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="截止日期">
<el-date-picker
v-model="endTime"
type="daterange"
style="width: 240px"
range-separator="-"
value-format="YYYY-MM-DD"
start-placeholder="截止开始日期"
end-placeholder="截止结束日期"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="发布日期">
<el-date-picker
type="daterange"
style="width: 240px"
v-model="releaseTime"
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; margin-top: 10px;padding-right: 15px">
<el-button @click="getLeaseListData" size="mini" icon="el-icon-search" type="primary" class="primary-lease"
>查询
</el-button
>
<el-button @click="onReset" icon="el-icon-refresh" size="mini" class="primary-lease">重置</el-button>
</el-col>
</el-row>
</el-card>
</el-form>
<el-card class="content-box">
<el-row>
<el-col :span="24" style="text-align: right;">
<el-button size="mini"
@click="
() => {
isRepublish = true
dialogTitle = '新增'
addOrEditDialogVisible = true
}
"
type="primary"
class="primary-lease"
>
需求新建
</el-button>
</el-col>
</el-row>
<div class="table-container">
<!-- 表格 -->
<el-table
:data="leaseList"
show-overflow-tooltip
border stripe height="546"
>
<el-table-column align="center" label="序号" type="index" width="80"/>
<el-table-column align="center" label="需求编号">
<template slot-scope="scope">
<a
style="cursor: pointer; color: #00a288; text-decoration: underline"
@click="handleToDetails(scope.row.id)"
>
{{ scope.row.leaseCode }}
</a>
</template>
</el-table-column>
<el-table-column align="center" prop="leaseName" label="需求名称"/>
<el-table-column align="center" prop="cityName" label="需求所在地"/>
<el-table-column align="center" prop="publishUser" label="发布人"/>
<el-table-column align="center" prop="endTime" label="需求截止日期" width="120"/>
<el-table-column align="center" prop="startTime" label="发布时间"/>
<el-table-column align="center" prop="orderUser" label="接单人"/>
<el-table-column align="center" prop="orderPhone" label="接单人联系方式" width="140"/>
<el-table-column align="center" prop="leaseStatusName" label="需求状态"/>
<el-table-column align="center" label="操作" :width="220">
<template slot-scope="scope">
<el-button
size="small"
type="primary"
class="primary-lease"
v-if="scope.row.leaseStatus === 2 || scope.row.leaseStatus === 4"
@click="onRepublish(scope.row.id, false)"
>
重新发布
</el-button>
<el-button
size="small"
type="primary"
class="primary-lease"
v-if="
scope.row.leaseStatus === 2 || scope.row.leaseStatus === 0 || scope.row.leaseStatus === 4
"
@click="onRepublish(scope.row.id, true, scope.row.leaseStatus)"
>
编辑
</el-button>
<el-button
size="small"
type="primary"
class="primary-lease"
v-if="scope.row.leaseStatus === 3"
@click="onAuditing(scope.row.id, 1)"
>
通过
</el-button>
<el-button
size="small"
type="primary"
class="primary-lease"
v-if="scope.row.leaseStatus === 3"
@click="onAuditing(scope.row.id, 4)"
>
驳回
</el-button>
<el-popconfirm
width="220"
icon="el-icon-info"
icon-color="#626AEF"
title="确定删除该项需求吗?"
@confirm="onDelete(scope.row.id)"
v-if="scope.row.leaseStatus === 2 || scope.row.leaseStatus === 0"
>
<template slot="reference">
<el-button size="small" type="primary" class="primary-lease">
删除
</el-button>
</template>
<template slot="actions">
<el-button type="primary" class="primary-lease" size="small"
>取消
</el-button
>
<el-button
class="primary-lease"
type="primary"
size="small"
@click="confirmDelete"
>
确定
</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-wrapper">
<pagination
:total="total"
@pagination="getLeaseListData"
:page.sync="searchParams.pageNum"
:limit.sync="searchParams.pageSize"
/>
</div>
</el-card>
<!-- 新增修改对话框 -->
<el-dialog
width="60%"
align-center
@close="onClose"
destroy-on-close
:title="dialogTitle"
:visible.sync="addOrEditDialogVisible"
>
<el-form
label-width="auto"
label-position="right"
ref="addOrEditFormRef"
:model="addOrEditForm"
:rules="addOrEditFormRules"
>
<el-row>
<el-col :span="24">
<el-form-item label="项目所在地" style="width: 100%" prop="provinceCode">
<el-row style="width: 100%">
<el-col :span="6">
<el-form-item>
<el-select
clearable
style="width: 95%"
placeholder="请选择项目所在省"
v-model="addOrEditForm.provinceCode"
@change="onProvinceChange"
>
<el-option
:key="item.areaId"
:value="item.areaCode * 1"
:label="item.areaName"
v-for="item in areaList"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="cityCode">
<el-select
clearable
style="width: 95%"
placeholder="请选择项目所在市"
v-model="addOrEditForm.cityCode"
@change="onCityChange"
>
<el-option
:key="item.areaId"
:value="item.areaCode * 1"
:label="item.areaName"
v-for="item in areaCityList"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="areaCode">
<el-select
clearable
style="width: 95%"
placeholder="请选择项目所在区/县"
v-model="addOrEditForm.areaCode"
@change="onCountyChange"
>
<el-option
:key="item.areaId"
:value="item.areaCode * 1"
:label="item.areaName"
v-for="item in areaCountyList"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="address">
<el-input
style="width: 100%"
clearable
placeholder="请输入详细地址"
v-model="addOrEditForm.address"
/>
</el-form-item>
</el-col>
</el-row>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="需求名称" prop="leaseName">
<el-input
v-model="addOrEditForm.leaseName"
placeholder="请输入需求名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="需求截止日期" prop="endTime">
<el-date-picker
clearable
type="date"
style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss"
:disabled-date="disabledDate"
v-model="addOrEditForm.endTime"
placeholder="请选择需求截止日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="联系人" prop="person">
<el-input
clearable
placeholder="请输入联系人"
v-model="addOrEditForm.person"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="personPhone">
<el-input
clearable
placeholder="请输入联系电话"
v-model="addOrEditForm.personPhone"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="租赁开始日期" prop="leaseStartTime">
<el-date-picker
clearable
type="date"
style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss"
:disabled-date="disabledDate"
v-model="addOrEditForm.leaseStartTime"
placeholder="请选择需求截止日期"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="租赁结束日期" prop="leaseEndTime">
<el-date-picker
clearable
type="date"
style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss"
:disabled-date="disabledLeaseEndTime"
v-model="addOrEditForm.leaseEndTime"
placeholder="请选择需求截止日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" v-if="dialogTitle === '新增'">
<el-col :span="24">
<el-form-item label="是否短信通知" prop="isSms">
<el-radio-group v-model="addOrEditForm.isSms">
<el-radio label="0">是</el-radio>
<el-radio label="1">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" v-if="addOrEditForm.isSms == 0">
<el-col :span="12">
<el-form-item label="组织机构" prop="dept">
<el-cascader
clearable
:props="orgProps"
:options="orgList"
:show-all-levels="false"
placeholder="请选择组织机构"
v-model="addOrEditForm.deptIdList"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色" prop="roleId">
<el-select
clearable
style="width: 95%"
placeholder="请选择角色"
v-model="addOrEditForm.roleId"
>
<el-option
:key="item.roleId"
:value="item.roleId"
:label="item.roleName"
v-for="item in roleList"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="需求描述" prop="description">
<el-input
clearable
type="textarea"
placeholder="请输入需求描述"
v-model="addOrEditForm.description"
:autosize="{ minRows: 4, maxRows: 6 }"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item
label="装备需求信息"
style="font-weight: bold"
prop="detailsList"
>
<el-button
class="primary-lease"
type="primary"
@click="onAddDemandInfo"
>
添加装备描述
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form
label-width="auto"
label-position="right"
v-for="(item, index) in addOrEditForm.detailsList"
:key="item.newId"
:model="item"
:rules="addOrEditDemandFormRules"
:ref="'demandForm_' + index"
style="position: relative"
>
<div
style="
position: absolute;
left: -28px;
top: 0;
width: 26px;
height: 26px;
border-radius: 13px;
font-weight: bold;
text-align: center;
line-height: 26px;
color: #fff;
background-color: #00a288;
"
>
{{ index + 1 }}
</div>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="装备类目选择" prop="typeIds">
<el-cascader
clearable
style="width: 100%"
:options="classOptions"
:show-all-levels="false"
placeholder="请选择装备类目"
v-model="item.typeIds"
:props="{
value: 'id',
label: 'name',
checkStrictly: true,
}"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预估数量" prop="leaseNum">
<el-input-number
clearable
:min="1"
:max="9999"
style="width: 100%"
placeholder="请输入预估数量"
v-model="item.leaseNum"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="装备描述">
<el-input
clearable
type="textarea"
placeholder="请输入装备描述"
v-model="item.description"
:autosize="{ minRows: 2, maxRows: 4 }"
/>
</el-form-item>
</el-col>
<el-col :span="4" v-if="index !== 0">
<el-button
size="small"
type="danger"
class="primary-lease"
@click="onDeleteDemand(index)"
>
移除
</el-button>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" class="primary-lease" @click="onCancel"
>取消
</el-button
>
<el-button
type="primary"
class="primary-lease"
@click="onSubmit(false)"
v-if="isSave"
>
保存
</el-button>
<el-button class="primary-lease" type="primary" @click="onSubmit(true)">
提交
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getCompanyListApi,
getGoodsClassListApi,
getAreaApi,
getOrgApi,
getRoleApi,
addLeaseInfoApi,
getLeaseListApi,
maLeaseAuditApi,
editLeaseInfoApi,
deleteLeaseInfoApi,
getLeaseDetailsByIdApi
} from '@/api/sourcingNeed/index'
import {MessageBox, Message} from 'element-ui'
export default {
data() {
return {
total: 0,
endTime: [],
isSave: false,
releaseTime: [],
isRepublish: true,
areaList: [],
leaseList: [],
dialogTitle: '新增',
classOptions: [],
fileListTemp: [],
companyOptions: [],
searchFormRef: null,
addOrEditFormRef: null,
addOrEditDialogVisible: false,
addOrEditDemandFormList: [],
addOrEditDemandFormRefList: [],
areaProvinceList: [],
areaCityList: [],
areaCountyList: [],
uploadUrl: process.env.VUE_APP_API_URL + '/file/upload',
searchParams: {
leaseName: '',
leaseCode: '',
leaseStatus: '',
finishStartTime: '',
finishEndTime: '',
publishStartTime: '',
publishEndTime: '',
pageSize: 10,
pageNum: 1
},
addOrEditForm: {
leaseName: '',
companyId: '',
person: '',
personPhone: '',
leaseStartTime: '',
leaseEndTime: '',
endTime: '',
description: '',
isSubmit: '',
fileInfoList: [],
fileInfoTempList: [],
areaCode: '',
cityCode: '',
provinceCode: '',
address: '',
detailsList: [],
isSms: '1',
roleId: '',
deptId: '',
deptIdList: ''
},
addOrEditFormTemp: {
leaseName: '',
companyId: '',
person: '',
personPhone: '',
leaseStartTime: '',
leaseEndTime: '',
endTime: '',
description: '',
isSubmit: '',
fileInfoList: [],
fileInfoTempList: [],
areaCode: '',
cityCode: '',
provinceCode: '',
address: '',
detailsList: [],
isMessage: 0,
roleId: '',
deptId: '',
isSms: '1',
deptIdList: []
},
orgList: [],
roleList: [],
orgProps: {
value: 'id'
}
}
},
computed: {
minLimit() {
return this.addOrEditForm.fileInfoList.length
}
},
methods: {
// 跳转到详情页
handleToDetails(id) {
this.$router.push({name: 'demand-details', query: {id}})
},
// 验证结束时间
checkEndTime(rule, value, callback) {
if (!value) {
return callback(new Error('请选择租赁结束日期'))
}
const startTime = this.addOrEditForm.leaseStartTime
if (startTime && new Date(value) <= new Date(startTime)) {
return callback(new Error('租赁结束日期必须大于租赁开始日期'))
}
callback()
},
// 验证开始时间
checkStartTime(rule, value, callback) {
if (!value) {
return callback(new Error('请选择租赁开始日期'))
}
const endTime = this.addOrEditForm.leaseEndTime
if (endTime && new Date(value) >= new Date(endTime)) {
return callback(new Error('租赁开始日期必须小于租赁结束日期'))
}
callback()
},
// 禁用今天之前的日期
disabledDate(date) {
const today = new Date()
return date.getTime() < today.getTime()
},
// 禁用租赁结束日期
disabledLeaseEndTime(date) {
const today = new Date()
return date.getTime() < today.getTime()
},
// 获取分类和公司数据
async getClassAndCompanyData() {
const classResult = await getGoodsClassListApi()
const companyResult = await getCompanyListApi()
// 只需要前3个层级
const filterData = (data, level = 1) => {
return data.map(item => {
if (level < 3 && item.children) {
item.children = filterData(item.children, level + 1)
} else {
item.children = []
}
return item
})
}
this.classOptions = filterData(classResult.data)
this.companyOptions = companyResult.data
},
// 获取列表数据
async getLeaseListData() {
if (this.endTime.length > 0) {
this.searchParams.finishStartTime = this.endTime[0]
this.searchParams.finishEndTime = this.endTime[1]
}
if (this.releaseTime.length > 0) {
this.searchParams.publishStartTime = this.releaseTime[0]
this.searchParams.publishEndTime = this.releaseTime[1]
}
const res = await getLeaseListApi(this.searchParams)
this.leaseList = res.rows
this.total = res.total
},
// 获取地区数据
async getAreaData() {
const res = await getAreaApi(0)
this.areaList = res.data
},
// 重置表单
onReset() {
this.endTime = []
this.releaseTime = []
this.searchParams.finishStartTime = ''
this.searchParams.finishEndTime = ''
this.searchParams.publishStartTime = ''
this.searchParams.publishEndTime = ''
this.searchParams.pageNum = 1
this.searchParams.pageSize = 10
this.$refs.searchFormRef.resetFields()
this.getLeaseListData()
},
// 删除需求
async onDelete(id) {
const res = await deleteLeaseInfoApi({id})
if (res.code === 200) {
Message({
type: 'success',
message: '删除成功'
})
this.getLeaseListData()
}
},
// 确认删除
confirmDelete() {
// 由el-popconfirm自动处理
},
// 重新发布
async onRepublish(id, type, leaseStatus) {
this.dialogTitle = '编辑'
this.isRepublish = false
this.isSave = type
if (leaseStatus === 0) this.isSave = false
const res = await getLeaseDetailsByIdApi({id})
const {
leaseName,
companyId,
person,
personPhone,
endTime,
description,
fileInfoList,
areaCode,
address,
cityCode,
provinceCode,
detailsList,
leaseStartTime,
leaseEndTime
} = res.data
Object.assign(this.addOrEditForm, {
leaseName,
companyId,
person,
personPhone,
endTime,
description,
id,
fileInfoList: fileInfoList ? fileInfoList : [],
areaCode,
address,
cityCode,
provinceCode,
detailsList,
leaseStartTime,
leaseEndTime
})
detailsList.forEach(e => {
if (!e.fileInfoList) {
e.fileInfoList = []
}
e.fileInfoTempList = []
e.typeIds = e.typeIds.map(j => {
return j * 1
})
})
await Promise.all([
this.onProvinceChange(provinceCode),
this.onCityChange(cityCode)
])
this.addOrEditDialogVisible = true
},
// 提交表单
async onSubmit(type) {
this.$refs.addOrEditFormRef.validate(async (valid) => {
if (valid) {
this.addOrEditForm.isSubmit = type
this.addOrEditForm.fileInfoList.push(...this.fileListTemp)
let isDemand = false
for (let index = 0; index < this.addOrEditForm.detailsList.length; index++) {
try {
const valid = await new Promise((resolve) => {
this.$refs[`demandForm_${index}`].validate(valid => {
resolve(valid)
})
})
if (!valid) {
isDemand = true
throw new Error('表单校验失败')
}
} catch (error) {
}
}
if (isDemand) return
this.addOrEditForm.fileInfoList = [
...this.addOrEditForm.fileInfoList,
...this.addOrEditForm.fileInfoTempList
]
this.addOrEditForm.detailsList.forEach(e => {
e.fileInfoList = [...e.fileInfoList, ...e.fileInfoTempList]
e.typeId = e.typeIds[e.typeIds.length - 1]
})
this.addOrEditForm.endTime = this.addOrEditForm.endTime.replace(
'00:00:00',
'23:59:59'
)
this.addOrEditForm.leaseEndTime = this.addOrEditForm.leaseEndTime.replace(
'00:00:00',
'23:59:59'
)
if (this.addOrEditForm.deptIdList && this.addOrEditForm.deptIdList.length > 0) {
this.addOrEditForm.deptId =
this.addOrEditForm.deptIdList[this.addOrEditForm.deptIdList.length - 1]
}
const SUBMIT_API = this.isRepublish ? addLeaseInfoApi : editLeaseInfoApi
const res = await SUBMIT_API(this.addOrEditForm)
if (res.code === 200) {
Message({
type: 'success',
message: '提交成功'
})
this.addOrEditDialogVisible = false
this.getLeaseListData()
}
}
})
},
// 文件变化处理
onFileChange(fileList) {
this.addOrEditForm.fileInfoTempList = []
const fileListTemp = fileList.map(e => {
return {
fileName: e.name,
fileUrl: e.url
}
})
this.addOrEditForm.fileInfoTempList.push(...fileListTemp)
},
// 详情中的文件变化
onFileChangeInDetails(fileList, index) {
this.addOrEditForm.detailsList[index].fileInfoTempList = []
const fileListTemp = fileList.map(e => {
return {
fileName: e.name,
fileUrl: e.url
}
})
this.addOrEditForm.detailsList[index].fileInfoTempList.push(...fileListTemp)
},
// 取消按钮
onCancel() {
this.addOrEditDialogVisible = false
},
// 关闭对话框
onClose() {
this.addOrEditDemandFormList = []
this.$refs.addOrEditFormRef.resetFields()
this.addOrEditForm = JSON.parse(JSON.stringify(this.addOrEditFormTemp))
this.fileListTemp = []
},
// 删除图片
onDeleteImg(index) {
this.addOrEditForm.fileInfoList.splice(index, 1)
},
// 删除详情中的图片
onDeleteImgInDetails(index, j) {
this.addOrEditForm.detailsList[index].fileInfoList.splice(j, 1)
},
// 分类变化
onChangeClass(val) {
console.log(val, '***')
},
// 添加需求信息
onAddDemandInfo() {
const newId = Date.now()
this.addOrEditForm.detailsList.push({
newId,
typeIds: [],
typeId: '',
leaseNum: 1,
fileInfoList: [],
fileInfoTempList: [],
description: ''
})
},
// 删除需求项
onDeleteDemand(index) {
this.addOrEditForm.detailsList.splice(index, 1)
// 重新命名表单引用
this.$nextTick(() => {
this.addOrEditDemandFormRefList.forEach((e, i) => {
if (i > index && e) e.clearValidate()
})
})
},
// 省份变化
async onProvinceChange(id) {
const res = await getAreaApi(id)
this.areaCityList = res.data
},
// 城市变化
async onCityChange(id) {
const res = await getAreaApi(id)
this.areaCountyList = res.data
},
// 区县变化
async onCountyChange(id) {
},
// 审核处理
onAuditing(id, leaseStatus) {
MessageBox.confirm(`是否${leaseStatus === 1 ? '通过' : '驳回'}此次接单申请?`, '温馨提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'success'
})
.then(async () => {
const res = await maLeaseAuditApi({
id,
leaseStatus
})
if (res.code == 200) {
Message({
type: 'success',
message: '提交成功'
})
// 刷新列表
this.getLeaseListData()
}
})
.catch(() => {
})
},
// 获取组织机构和角色列表
async getDeptAndRolesList() {
const res = await getOrgApi()
const result = await getRoleApi({pageNum: 1, pageSize: 100})
this.orgList = res.data
this.roleList = result.rows
}
},
mounted() {
this.getClassAndCompanyData()
this.getLeaseListData()
this.getAreaData()
this.getDeptAndRolesList()
},
created() {
// 表单验证规则
this.addOrEditFormRules = {
person: [{required: true, message: '请输入联系人', trigger: 'blur'}],
leaseName: [{required: true, message: '请输入需求名称', trigger: 'blur'}],
areaCode: [{required: true, message: '请选择项目所在区/县', trigger: 'change'}],
cityCode: [{required: true, message: '请选择项目所在市', trigger: 'change'}],
provinceCode: [{required: true, message: '请选择项目所在省', trigger: 'change'}],
address: [{required: true, message: '请输入项目详细地址', trigger: 'blur'}],
companyId: [{required: true, message: '请选择租赁公司', trigger: 'change'}],
fileInfoList: [{required: true, message: '请上传参考图片', trigger: 'blur'}],
endTime: [{required: true, message: '请选择需求截止日期', trigger: 'change'}],
leaseStartTime: [
{required: true, message: '请选择租赁开始日期', trigger: 'change'},
{validator: this.checkStartTime, trigger: 'blur'}
],
leaseEndTime: [
{required: true, message: '请选择需租赁结束日期', trigger: 'change'},
{validator: this.checkEndTime, trigger: 'blur'}
],
detailsList: [{required: true, message: '请添加需求装备信息', trigger: 'change'}],
personPhone: [
{required: true, message: '请输入联系电话', trigger: 'blur'},
{
pattern: /^1[3456789]\d{9}$/,
message: '请输入正确的联系电话',
trigger: 'blur'
}
],
isSms: [{required: true, message: '请选择是否短信通知', trigger: 'change'}]
}
this.addOrEditDemandFormRules = {
typeIds: [{required: true, message: '请选择装备类目', trigger: 'change'}],
leaseNum: [{required: true, message: '请输入预估数量', trigger: 'blur'}]
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .upload-tip .el-form-item__label {
color: transparent;
}
.el-pagination {
justify-content: flex-end;
padding: 5px 0;
}
::v-deep .el-pagination.is-background .el-pager li.is-active {
background-color: #3cb4a6;
}
::v-deep .el-form--inline .el-form-item {
margin-right: 6px;
width: 95%;
}
.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;
}
}
.app-container-content {
::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;
padding: 20px 40px;
}
.dialog-content {
padding: 20px;
}
}
}
.search-box {
margin-bottom: 20px;
border-radius: 8px;
padding: 0;
::v-deep .el-card__body {
padding: 20px !important;
}
}
.el-form-item--small.el-form-item {
margin-bottom: 0px;
}
.content-box {
border-radius: 8px;
height: calc(100vh - 210px);
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;
}
}
}
</style>