<template>
<div class="container">
<div class="center-content">
<el-form :rules="formRules" ref="form" :inline="true" :model="formInline" class="demo-form-inline">
<el-row>
<el-col :span="12">
<el-form-item label="设备名称" prop="user">
<el-input v-model="formInline.user" placeholder="请输入设备名称" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属部门" prop="region">
<el-select
v-model="formInline.region"
placeholder="请选择所属部门"
clearable
>
<el-option label="资讯科" value="资讯科" />
<el-option label="行政部" value="行政部" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row class="row-right">
<el-col :span="12">
<el-form-item label="归属人" prop="persion">
<el-select
v-model="formInline.persion"
placeholder="请选择归属人"
clearable
>
<el-option label="吴德章" value="吴德章" />
<el-option label="田登响" value="田登响" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备状况" prop="state">
<el-select
v-model="formInline.state"
placeholder="请选择设备状态"
clearable
>
<el-option label="租用" value="租用" />
<el-option label="待归还" value="待归还" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否可租借">
<el-switch v-model="formInline.delivery" inline-prompt active-text="可以"></el-switch>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="购买时间" prop="date">
<el-date-picker
v-model="formInline.date"
type="date"
placeholder="请选择购买时间"
clearable
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="设备情况" prop="states">
<el-select
v-model="formInline.states"
placeholder="请选择设备情况"
clearable
>
<el-option label="可用" value="可用" />
<el-option label="故障" value="故障" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备类型" prop="type">
<el-select
v-model="formInline.type"
placeholder="请选择设备类型"
clearable
>
<el-option label="支架" value="支架" />
<el-option label="电脑" value="电脑" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row style="padding-left: 10px;">
<el-col :span="12">
<!-- 上传照片 -->
<el-form-item label="设备图片">
<el-upload
class="avatar-uploader"
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
</el-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备描述">
<el-input :autosize="{ minRows: 5, maxRows: 3 }" style="width: 220px;" placeholder="请描述设备详情" v-model="formInline.desc" type="textarea" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="配件来源">
<el-button style="color: white; background-color: #2FBBC2;" text @click="showAddAccessoriesDialog">添加配件</el-button>
<el-button style="color: white; background-color: #2FBBC2;" >添加闲置配件</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="30">
<el-form-item label="设备列表">
<el-table
:data="tableData"
:header-cell-style="{
'text-align': 'center',
'font-size': '16px',
'background-color': '#f5f5f5 !important',
'border': '1px solid #EBEEF5 !important'
}"
style="width:560px;" >
<el-table-column prop="date" label="配件名" width="115" />
<el-table-column prop="name" label="配件情况" width="115" />
<el-table-column prop="state" label="购买时间" width="115" />
<el-table-column prop="city" label="配件说明" width="115" />
<el-table-column prop="zip" label="配件描述" width="120" />
<el-table-column fixed="right" label="操作" width="80">
<template #default>
<el-button link type="primary" size="small" @click="handleClick"
>删除</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-col>
</el-row>
<el-row class="row-button">
<el-col :span="30">
<el-form-item>
<el-button @click="onReset">取消</el-button>
<el-button style="color: white; background-color: #2FBBC2;" @click="onSubmit">确认</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 弹框 -->
<el-dialog
title="添加配件"
v-model="dialogFormVisible"
width="20%"
>
<el-form :model="forms" :rules="fromsRules" ref="formDialog">
<el-row >
<el-col :span="60">
<el-form-item label="配件名称" prop="name">
<el-input class="inputop" placeholder="请输入配件名" v-model="forms.name" autocomplete="off" />
</el-form-item>
<el-form-item label="配件状态" prop="region">
<el-select class="inputop" v-model="forms.region" placeholder="请选择配件状态">
<el-option label="租用" value="租用" />
<el-option label="待归还" value="待归还" />
</el-select>
</el-form-item>
<el-form-item label="购买时间" prop="date">
<el-date-picker
class="inputop"
v-model="forms.date"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择购买时间"
clearable
/>
</el-form-item>
<el-form-item label="配件标签" prop="them">
<el-select class="inputop" v-model="forms.them" placeholder="请选择配件标签">
<el-option label="标签1" value="标签1" />
<el-option label="标签2" value="标签2" />
</el-select>
</el-form-item>
<el-form-item class="texta" label="配件描述">
<el-input class="inputop" placeholder="请对配件进行描述" v-model="forms.desc" type="textarea" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogFormVisible = false">取消</el-button>
<el-button style="color: white; background-color: #2FBBC2;" @click="handleAddAccessories">
确认
</el-button>
</span>
</template>
</el-dialog>
</div>
</div>
</template>
<script setup>
import { reactive, ref} from 'vue'
import { Plus } from '@element-plus/icons-vue'
const dialogFormVisible = ref(false); // 控制弹窗显示和隐藏
const showAddAccessoriesDialog = () => {
dialogFormVisible.value = true;
};
const forms = reactive({
name: '',
region: '',
date: '',
them: '',
desc: '',
})
const fromsRules = {
name: [{ required: true, message: '请输入配件名', trigger: 'blur' }],
region:[{required: true, message: '请选择配件状态', trigger: 'change' }],
date:[{required: true, message: '请选择购买时间', trigger: 'change'}],
them:[{required: true, message: '请选择配件标签', trigger: 'change'}],
}
// table
const tableData = ref([
{ date: '推土机', name: '租用', state: '2023-11-16', city: '标签1',zip:'1212' },
]);
const handleClick = () => {
console.log('click')
}
const handleAddAccessories = () => {
// 将 el-dialog 中的数据添加到 tableData 中
tableData.value.push({
date: forms.name,
name: forms.region,
state: forms.date,
city: forms.them,
zip:forms.desc,
});
// 关闭 el-dialog
dialogFormVisible.value = false;
};
const formRef = ref(null)
const formRules = {
user: [{ required: true, message: '请输入设备名称', trigger: 'blur' }],
region: [{ required: true, message: '请选择所属部门', trigger: 'change' }],
persion:[{required: true, message: '请选择归属人', trigger: 'change' }],
date:[{required: true, message: '请选择购买时间', trigger: 'change'}],
state:[{required: true, message: '请选择设备状态', trigger: 'change'}],
states:[{required: true, message: '请选择设备情况', trigger: 'change'}],
type:[{required: true, message: '请请选择设备类型', trigger: 'change'}]
}
const formInline = reactive({
user: '',
region: '',
persion:'',
date: '',
delivery:true,
states:'',
state:'',
type:'',
desc:''
})
const onSubmit = () => {
formRef.value.validate((valid) => {
if (valid) {
console.log('submit!')
} else {
console.log('error submit!')
return false
}
})
}
const onReset = () => {
formRef.value.resetFields()
}
</script>
<style>
.el-dialog__body{
border-top: 1px solid #8c939d;
border-bottom: 1px solid #8c939d;
}
.texta{
padding-left:10px;
}
.inputop{
width: 220px;
}
.container {
display: grid;
place-items: center;
/* height: 100vh; */
}
.center-content {
width: 40%;
/* height: 40%; */
/* background-color:bisque ; */
display: flex;
justify-content: center;
align-items: center;
padding-top: 20px;
}
.avatar-uploader .avatar {
width: 178px;
height: 178px;
display: block;
}
.avatar-uploader .el-upload {
/* border: 1px dashed var(--el-border-color); */
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 150px;
height: 120px;
text-align: center;
}
.demo-form-inline .el-input {
--el-input-width: 220px;
}
.row-right{
text-align: right;
}
/* .el-row{
background-color: #8c939d;
}
.el-col{
background-color:saddlebrown;
} */
.row-button{
/* text-align: right; */
display: flex;
justify-content: flex-end;
align-items: center;
/* background-color: #8c939d; */
}
</style>