lanan-system-vue/src/views/base/customer/ChooseCarDraw.vue
2024-08-08 10:09:18 +08:00

273 lines
8.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 对话框(添加 / 修改) -->
<el-drawer
title="选择车辆"
size="60%"
:visible.sync="drawVisible"
@close="cancelForm"
>
<div style="padding: 0 10px;margin-bottom: 70px">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="车牌号" prop="licenseNumber">
<el-input v-model="queryParams.licenseNumber" placeholder="请输入车牌号" clearable
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="车辆型号" prop="carModel" label-width="90">
<el-input v-model="queryParams.carModel" placeholder="请输入车辆型号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="车辆品牌" prop="carBrand" label-width="90">
<el-input v-model="queryParams.carBrand" placeholder="请输入车辆品牌" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="发动机号" prop="engineNumber" label-width="90">
<el-input v-model="queryParams.engineNumber" placeholder="请输入发动机号" clearable
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row>
<el-col :span="3">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)"
v-hasPermi="['base:car-main:create']">新增
</el-button>
</el-col>
<el-col :span="3" v-for="car in multipleSelection">
<el-tag
:key="car.id"
type="danger"
@close="tagClose(car)"
closable>
{{car.licenseNumber}}
</el-tag>
</el-col>
</el-row>
<el-table
ref="multipleTable"
height="460"
v-loading="formLoading"
:data="list"
:stripe="true"
@select="selectRow"
@select-all="handleSelectAll"
:show-overflow-tooltip="true">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="车牌号" align="center" prop="licenseNumber"/>
<el-table-column label="车辆品牌" align="center" prop="brandStr"/>
<el-table-column label="车辆型号" align="center" prop="modelStr"/>
<el-table-column label="发动机号码" align="center" prop="engineNumber" />
<el-table-column label="车架号" align="center" prop="vin" />
<el-table-column label="登记时间" align="center" prop="createTime" >
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</div>
<div style="position: absolute;bottom: 0;width: 100%;right: 0;padding: 5px 20px 0;z-index: 999;background: white;text-align: right">
<div class="demo-drawer__footer" >
<el-button @click="cancelForm"> </el-button>
<el-button type="primary" @click="submitForm" > </el-button>
</div>
</div>
<CarMainForm ref="formRef" @success="getList" />
</el-drawer>
<!-- 对话框(添加 / 修改) -->
</template>
<script>
import * as CarMainApi from '@/api/base/carmain';
import CarMainForm from '@/views/base/carmain/CarMainForm.vue';
export default {
name: "ChooseCarDraw",
components: {CarMainForm},
data() {
return {
// 弹出层标题
// 是否显示弹出层
drawVisible: false,
// 表单的加载中1修改时的数据加载2提交的按钮禁用
formLoading: false,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
//回参
formData: {},
// 总条数
total: 0,
// 车辆信息列表
list: [],
multipleSelection:[],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
licenseNumber: null,
carModel: null,
carBrand: null,
engineNumber: null,
},
};
},
methods: {
/** 打开弹窗 */
async open(multipleSelection) {
this.drawVisible = true;
this.formLoading = true;
this.reset();
try {
const res = await CarMainApi.getCarMainPage(this.queryParams);
this.list = res.data.records;
this.total = res.data.total;
this.multipleSelection = JSON.parse(JSON.stringify(multipleSelection))
this.defaultChecked(multipleSelection)
} finally {
this.formLoading = false;
}
},
/**标签删除事件*/
tagClose(row){
const that = this;
let id1 = this.multipleSelection.findIndex(item => {
if (item.id == row.id) {
this.$nextTick(() => {
that.$refs.multipleTable.toggleRowSelection(
this.list.find( // 这是弹框表格的数据
carItem => item.id === carItem.id
), false);
});
return true
}
})
this.multipleSelection.splice(id1, 1)
},
/**选中*/
selectRow(val,row){
//当前点击是否勾选
let selectBool = val.length && val.indexOf(row) !== -1
if(!selectBool){
//取消勾选
this.multipleSelection.forEach((item,i) => {
if(item.id == row.id){
this.multipleSelection.splice(i,1)
}
})
}else{
//选中
this.multipleSelection.push(row)
}
},
/**全选*/
handleSelectAll(val){
if(val.length == this.list.length){ //全选
this.multipleSelection = this.multipleSelection.concat(val)
//去重
let obj = {}
let result = []
this.multipleSelection.forEach(item => {
if(!obj[item.id]){
result.push(item)
obj[item.id] = true
}
})
this.multipleSelection = result
}else{ //取消全选
this.list.forEach(item => {
this.multipleSelection.forEach((multItem,i) => {
if(item.id == multItem.id){
this.multipleSelection.splice(i,1)
}
})
})
}
},
/**设置默认选中*/
defaultChecked(multipleSelection) {
const that = this;
this.$nextTick(() => {
that.list.forEach((v, i) => {
multipleSelection.map(item => {
if (item.id === v.id){
that.$refs.multipleTable.toggleRowSelection(v, true);
}
})
});
});
},
cancelForm(){
this.drawVisible = false
},
/** 添加/修改操作 */
openForm(id) {
this.$refs["formRef"].open(id);
},
/** 查询列表 */
async getList() {
try {
this.formLoading = true
const res = await CarMainApi.getCarMainPage(this.queryParams);
this.list = res.data.records;
this.total = res.data.total;
this.defaultChecked(this.multipleSelection)
} finally {
this.formLoading = false
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/**重置参数*/
reset() {
this.queryParams= {
pageNo: 1,
pageSize: 10,
licenseNumber: null,
carModel: null,
carBrand: null,
engineNumber: null,
}
},
/** 提交按钮 */
submitForm() {
this.drawVisible = false
this.$emit('success',this.multipleSelection)
},
}
};
</script>