You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<vxe-modal
:value="isShow"
show-footer
title="车船管理"
show-confirm-button
:width="840"
:height="620"
esc-closable
@input="e => $emit('update:isShow',e)"
>
<el-form ref="elForm" :model="form" :rules="rules" label-position="top" label-width="100">
<el-form-item label="型号" prop="name" required>
<el-input v-model="form.name" />
</el-form-item>
<el-form-item label="号码" prop="license" required>
<el-input v-model="form.license" />
</el-form-item>
<el-form-item label="驾驶员" prop="driver" required>
<el-input v-model="form.driver" />
</el-form-item>
<el-form-item label="照片" prop="photo_file_id" required>
<el-upload
:action="action"
:headers="{
Authorization: `Bearer ${getToken()}`
}"
:file-list="fileList"
:before-upload="beforePhotoUpload"
list-type="picture"
:limit="1"
:on-success="photoSuccess"
:on-remove="photoRemove"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件且不超过10Mb</div>
</el-upload>
</el-form-item>
<el-form-item label="上牌日期" prop="start_date">
<el-date-picker v-model="form.start_date" style="width: 100%;" value-format="yyyy-MM-dd" />
</el-form-item>
<el-form-item label="保险到期日期" prop="insurance_expire">
<el-date-picker v-model="form.insurance_expire" style="width: 100%;" value-format="yyyy-MM-dd" />
</el-form-item>
<el-form-item label="年检日期" prop="inspect_date">
<el-date-picker v-model="form.inspect_date" style="width: 100%;" value-format="yyyy-MM-dd" />
</el-form-item>
<el-form-item label="保养日期" prop="maintain_expire">
<el-date-picker v-model="form.maintain_expire" style="width: 100%;" value-format="yyyy-MM-dd" />
</el-form-item>
<el-form-item label="报废日期" prop="discard_date">
<el-date-picker v-model="form.discard_date" style="width: 100%;" value-format="yyyy-MM-dd" />
</el-form-item>
<el-form-item label="所在部门" prop="department_id">
<el-select v-model="form.department_id" style="width: 100%;">
<el-option v-for="item in departments" :key="item.id" :value="item.id" :label="item.name" />
</el-select>
</el-form-item>
<el-form-item label="归属结束日期" prop="end_date">
<el-date-picker v-model="form.end_date" style="width: 100%;" value-format="yyyy-MM-dd" />
</el-form-item>
<el-form-item label="车辆状态" prop="status">
<el-select v-model="form.status" style="width: 100%;">
<el-option :value="1" label="正常可用" />
<el-option :value="-1" label="维修中" />
</el-select>
</el-form-item>
<el-form-item label="是否开放精准预约" prop="is_open_detail">
<el-select v-model="form.is_open_detail" style="width: 100%;">
<el-option :value="1" label="开放" />
<el-option :value="0" label="不开放" />
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button type="primary" :loading="loading" @click="submit">确认</el-button>
</template>
</vxe-modal>
</div>
</template>
<script>
import { getToken } from '@/utils/auth'
import { save } from '@/api/vehicle'
export default {
props: {
departments: {
type: Array,
default: () => []
},
isShow: {
type: Boolean,
default: false,
required: true
}
},
data() {
return {
action: process.env.VUE_APP_UPLOAD_API,
fileList: [],
loading: false,
form: {
name: '',
license: '',
driver: '',
photo_file_id: '',
start_date: '',
insurance_expire: '',
maintain_expire: '',
status: 1,
department_id: '',
discard_date: '',
inspect_date: '',
is_open_detail: 1,
type: '',
end_date: ''
},
rules: {
name: [
{ required: true, message: '请填写型号' }
],
license: [
{ required: true, message: '请填写号码' }
],
driver: [
{ required: true, message: '请填写驾驶员' }
],
photo_file_id: [
{ required: true, message: '请上传照片' }
]
}
}
},
computed: {},
methods: {
getToken,
setType(type) {
this.form.type = type
},
photoRemove() {
this.form.photo_file_id = ''
},
photoSuccess(response, file, fileList) {
if (response.code) {
fileList.splice(fileList.indexOf(file), 1)
this.$message.warning(response.msg)
}
this.fileList = fileList
this.form.photo_file_id = this.fileList[0]?.response?.data?.id
},
beforePhotoUpload(file) {
const isJPG = file.type === 'image/jpeg'
const isLt20M = file.size / 1024 / 1024 < 20
if (!isJPG) {
this.$message.error('上传头像图片只能是 JPG 格式!')
}
if (!isLt20M) {
this.$message.error('上传头像图片大小不能超过 20MB!')
}
return isJPG && isLt20M
},
submit() {
this.$refs['elForm'].validate(async valid => {
if (valid) {
this.loading = true
try {
await save(this.form)
this.$message.success('新增成功')
this.$emit('refresh')
this.$emit('update:isShow', false)
this.loading = false
this.$refs['elForm'].resetFields()
} catch (err) {
this.loading = false
}
}
})
}
}
}
</script>
<style scoped lang="scss">
::v-deep .el-form {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 10px 20px;
}
</style>