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.

367 lines
8.9 KiB

1 year ago
<template>
<div>
<el-drawer
:title="$route.meta.title"
direction="rtl"
size="68%"
:visible.sync="visible"
append-to-body
:before-close="handleClose"
@close="$emit('update:isShow', false)"
>
<section class="drawer-container">
<el-form
class="drawer-container__form"
ref="elForm"
:model="form"
:rules="rules"
label-position="top"
label-width="120px"
size="small"
>
<div class="form-layout">
<el-form-item label="学校名称" prop="name">
<el-input
v-model="form['name']"
clearable
placeholder="请填写学校名称"
style="width: 100%"
></el-input>
</el-form-item>
<el-form-item label="区域" prop="area_id" clearable>
<el-select
v-model="form['area_id']"
clearable
placeholder="请填写区域"
style="width: 100%"
>
<el-option
v-for="(option, optionIndex) in area"
:key="optionIndex"
:label="option['name']"
:value="option['id']"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="学校代码" prop="code">
<el-input
v-model="form['code']"
clearable
placeholder="请填写学校代码"
style="width: 100%"
></el-input>
</el-form-item>
<el-form-item label="星级" prop="star">
<el-input
v-model="form['star']"
clearable
placeholder="请填写星级"
style="width: 100%"
></el-input>
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input
v-model="form['address']"
clearable
placeholder="请填写地址"
style="width: 100%"
></el-input>
</el-form-item>
<el-form-item label="性质" prop="nature" clearable>
<el-select
v-model="form['nature']"
clearable
placeholder="请填写性质"
style="width: 100%"
>
<el-option
v-for="(option, optionIndex) in [
{ value: 1, label: '公办' },
{ value: 2, label: '民办' },
]"
:key="optionIndex"
:label="option['label']"
:value="option['value']"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="学校类型" prop="type" clearable>
<el-select
v-model="form['type']"
clearable
placeholder="请填写学校类型"
multiple
style="width: 100%"
>
<el-option
1 year ago
v-for="(option, optionIndex) in schoolType"
1 year ago
:key="optionIndex"
:label="option['label']"
:value="option['value']"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="建校年份" prop="build_year">
<el-input
v-model="form['build_year']"
clearable
placeholder="请填写建校年份"
style="width: 100%"
></el-input>
</el-form-item>
<el-form-item label="是否显示" prop="is_show">
<el-select
v-model="form['is_show']"
placeholder="请选择"
style="width: 100%"
>
<el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option>
</el-select>
</el-form-item>
1 year ago
<el-form-item label="学校介绍" prop="introduce" class="span2">
1 year ago
<my-tinymce
1 year ago
:key="key"
1 year ago
v-model="form['introduce']"
clearable
placeholder="请填写学校介绍"
style="width: 100%"
></my-tinymce>
</el-form-item>
1 year ago
<el-form-item label="教师信息" prop="teacher" class="span2">
1 year ago
<my-tinymce
1 year ago
:key="key"
1 year ago
v-model="form['teacher']"
clearable
placeholder="请填写教师信息"
style="width: 100%"
></my-tinymce>
</el-form-item>
</div>
</el-form>
<div class="drawer-container__footer">
<el-button @click="reset"> </el-button>
<el-button type="primary" @click="submit" :loading="loading">{{
loading ? "提交中 ..." : "确 定"
}}</el-button>
</div>
</section>
</el-drawer>
</div>
</template>
<script>
import { save, show } from "@/api/school/school";
import axios from "axios";
import { getToken } from "@/utils/auth";
import { uploadSize } from "@/settings";
import { formatFileSize } from "@/utils";
export default {
name: "SchoolDrawer",
props: {
isShow: {
type: Boolean,
default: false,
required: true,
},
area: {
type: Array,
default: () => [],
},
1 year ago
schoolType: {
type: Array,
default: () => [],
}
1 year ago
},
data() {
return {
1 year ago
key: 0,
1 year ago
uploadSize,
action: process.env.VUE_APP_UPLOAD_API,
loading: false,
visible: false,
form: {
name: "",
area_id: "",
code: "",
star: "",
address: "",
nature: "",
type: "",
build_year: "",
introduce: "",
teacher: "",
is_show: 1,
1 year ago
},
rules: {
name: [
{
required: true,
message: "学校名称" + "必填",
},
],
area_id: [
{
required: true,
message: "区域" + "必填",
},
],
},
};
},
watch: {
isShow(newVal) {
1 year ago
++this.key;
1 year ago
this.visible = newVal;
},
visible(newVal) {
this.$emit("update:isShow", newVal);
},
},
methods: {
uploadBefore(file) {
if (file.size > uploadSize) {
this.$message({
type: "warning",
message: `上传图片大小超过${formatFileSize(uploadSize)}`,
});
return false;
}
window.$_uploading = true;
},
uploadSuccess(response, file, fileList, fieldName) {
window.$_uploading = false;
fileList.forEach((file) => {
if (file.response?.data && !file.response?.code) {
file.response = file.response.data;
}
});
this.form[fieldName] = fileList;
},
uploadRemove(file, fileList, fieldName) {
this.form[fieldName] = fileList;
},
uploadError(err, file, fileList, fieldName) {
window.$_uploading = false;
this.form[fieldName] = fileList;
this.$message({
type: "warning",
message: err,
});
},
formatFileSize,
getToken,
handleClose(done) {
this.$confirm("确定关闭窗口?")
.then((_) => {
done();
})
.catch((_) => {});
},
reset() {
this.form = {
name: "",
area_id: "",
code: "",
star: "",
address: "",
nature: "",
type: "",
build_year: "",
introduce: "",
teacher: "",
is_show: 1,
1 year ago
};
this.$refs["elForm"].resetFields();
},
submit() {
if (window.$_uploading) {
this.$message.warning("文件正在上传中");
return;
}
this.$refs["elForm"].validate(async (valid) => {
if (valid) {
this.loading = true;
try {
1 year ago
this.form.from = this.$route.meta?.params?.from;
1 year ago
await save(this.form);
this.$message.success("新增成功");
this.$emit("refresh");
this.$emit("update:isShow", false);
this.loading = false;
this.reset();
} catch (err) {
this.loading = false;
}
}
});
},
},
};
</script>
<style scoped lang="scss">
.span2 {
grid-column: span 2;
}
::v-deep .el-form-item > * {
max-width: 100%;
}
.form-layout {
display: grid;
grid-gap: 2%;
grid-template-columns: repeat(2, 1fr);
}
.drawer-container {
height: 100%;
padding: 20px;
display: flex;
flex-direction: column;
&__form {
flex: 1;
overflow-y: scroll;
}
&__footer {
margin-top: 20px;
display: flex;
}
}
</style>