数通智联化工云平台
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

2 years ago
<!--
@ 作者: 鲁智强
@ 时间: 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>