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.
195 lines
4.3 KiB
195 lines
4.3 KiB
<!--
|
|
@ 作者: 鲁智强
|
|
@ 时间: 2023-08-15 11:34:38
|
|
@ 备注:
|
|
-->
|
|
<template>
|
|
<el-dialog :model-value="true" :title="title" @close="handleClose">
|
|
<el-form
|
|
ref="ruleFormRef"
|
|
:model="formData"
|
|
label-width="120px"
|
|
class="demo-ruleForm"
|
|
>
|
|
<el-form-item label="类型:" prop="sex">
|
|
<el-select v-model="formData.sex">
|
|
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="文章标题:" prop="name">
|
|
<el-input v-model="formData.name" placeholder="请输入标题"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="发布时间:">
|
|
<el-input
|
|
v-model="formData.ccc"
|
|
placeholder="请输入发布时间"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="文档正文:">
|
|
<Editor v-model="editContvalue" style="height: calc(100vh - 124px)"/>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" @click="submitForm">提交</el-button>
|
|
<el-button @click="resetForm">重置</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-dialog>
|
|
</template>
|
|
<script lang="ts">
|
|
import { reactive, toRefs, ref, onMounted} from "vue";
|
|
import { Delete, Download, Plus, ZoomIn } from "@element-plus/icons-vue";
|
|
import { ElMessage,UploadProps} from "element-plus";
|
|
import Editor from "@/components/WangEditor/index.vue";
|
|
import type { UploadFile } from 'element-plus'
|
|
interface FormInfo {
|
|
id: string;
|
|
age: string;
|
|
name: string;
|
|
sex: string;
|
|
ccc: string;
|
|
ade: string;
|
|
iop: string;
|
|
ddd: string;
|
|
dialogVis: boolean;
|
|
dialogImageUrl: string;
|
|
}
|
|
const childBorder = ref(false);
|
|
const parentBorder = ref(false);
|
|
const editContvalue = ref("");
|
|
export default {
|
|
components: {
|
|
Editor
|
|
},
|
|
props: {
|
|
title: {
|
|
type: String,
|
|
default: "",
|
|
},
|
|
dialogShow: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
rowInfo: {
|
|
type: Object as () => FormInfo,
|
|
default() {
|
|
return {};
|
|
},
|
|
},
|
|
arrayNum: {
|
|
type: Number,
|
|
default: 0,
|
|
},
|
|
},
|
|
emits: ['image-uploaded', 'update:dialogShow', 'editRow', 'addRow'],
|
|
setup(props, { emit }) {
|
|
const data = reactive({
|
|
dialogFlag: false,
|
|
dialogVis: false,
|
|
dialogImageUrl: "",
|
|
formData: {
|
|
id: props.arrayNum.toString(),
|
|
age: "'公开'",
|
|
name: "",
|
|
sex: "",
|
|
ccc: "",
|
|
ade: "",
|
|
iop: "1",
|
|
ddd: "",
|
|
dialogVis: false, // 初始化为 false
|
|
dialogImageUrl: "", // 初始化为空字符串
|
|
},
|
|
});
|
|
const handleAvatar = (response:any, uploadFile:UploadFile) => {
|
|
if (uploadFile.raw) {
|
|
const imageUrl = URL.createObjectURL(uploadFile.raw);
|
|
// 触发自定义事件,传递图片URL给父组件
|
|
emit('image-uploaded', imageUrl);
|
|
}
|
|
};
|
|
const method = reactive({
|
|
// 关闭弹窗
|
|
handleClose() {
|
|
emit("update:dialogShow", false);
|
|
},
|
|
// 重置
|
|
resetForm() {
|
|
data.formData = Object.assign({}, props.rowInfo);
|
|
},
|
|
// 提交表单内容
|
|
submitForm() {
|
|
method.handleClose();
|
|
if (props.rowInfo.name) {
|
|
// 修改
|
|
const id = props.rowInfo;
|
|
emit("editRow", data.formData);
|
|
} else {
|
|
// 新增
|
|
data.formData["id"] = (props.arrayNum + 1).toString();
|
|
emit("addRow", data.formData);
|
|
}
|
|
|
|
}
|
|
});
|
|
const editorInstance = ref(null);
|
|
onMounted(() => {
|
|
data.formData = Object.assign({}, props.rowInfo);
|
|
});
|
|
const imageUrl = ref("");
|
|
const handlePictureCardPreview = (file: UploadFile) => {};
|
|
const disabled = ref(false);
|
|
const handleRemove = (file: UploadFile) => {};
|
|
const handleDownload = (file: UploadFile) => {};
|
|
return {
|
|
...toRefs(data),
|
|
...method,
|
|
disabled,
|
|
handleRemove,
|
|
handlePictureCardPreview,
|
|
handleDownload,
|
|
editContvalue,
|
|
parentBorder,
|
|
childBorder,
|
|
imageUrl,
|
|
editorInstance,
|
|
handleAvatar
|
|
};
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped>
|
|
|
|
|
|
.avatar-uploader .avatar {
|
|
display: block;
|
|
width: 178px;
|
|
height: 178px;
|
|
}
|
|
</style>
|
|
|
|
<style lang="scss">
|
|
.avatar-uploader .el-upload {
|
|
position: relative;
|
|
overflow: hidden;
|
|
cursor: pointer;
|
|
border: 1px dashed var(--el-border-color);
|
|
border-radius: 6px;
|
|
transition: var(--el-transition-duration-fast);
|
|
}
|
|
|
|
.avatar-uploader .el-upload:hover {
|
|
border-color: var(--el-color-primary);
|
|
}
|
|
|
|
.el-icon.avatar-uploader-icon {
|
|
width: 178px;
|
|
height: 178px;
|
|
font-size: 28px;
|
|
color: #8c939d;
|
|
text-align: center;
|
|
}
|
|
.el-dialog{
|
|
width:1200px;
|
|
}
|
|
</style>
|
|
|