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.
220 lines
4.8 KiB
220 lines
4.8 KiB
<!--
|
|
@ 作者: 鲁智强
|
|
@ 时间: 2023-08-15 11:34:38
|
|
@ 备注:
|
|
-->
|
|
<template>
|
|
<el-dialog :model-value="true" :title="title" @close="handleClose">
|
|
<el-button class="new_btn" type="primary" @click="handleNew"
|
|
>新增</el-button>
|
|
<el-table
|
|
ref="multipleTableRef"
|
|
:data="studentInfoac"
|
|
border
|
|
style="width: 100%"
|
|
stripe
|
|
>
|
|
<el-table-column type="selection" width="55" />
|
|
<el-table-column prop="name" label="文章标题" />
|
|
<el-table-column prop="sex" label="所属栏目" />
|
|
<el-table-column prop="age" label="可见范围" />
|
|
<el-table-column prop="num" label="访问数据" width="440" />
|
|
</el-table>
|
|
</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 type { UploadFile } from 'element-plus'
|
|
interface FormInfo {
|
|
id: string;
|
|
age: string;
|
|
name: string;
|
|
sex: string;
|
|
ccc: string;
|
|
ade: string;
|
|
num: string,
|
|
abc: string,
|
|
acc: string,
|
|
ace: string,
|
|
acf: string,
|
|
acg: string,
|
|
acd: string,
|
|
abg: string,
|
|
}
|
|
const childBorder = ref(false);
|
|
const parentBorder = ref(false);
|
|
const editContvalue = ref("");
|
|
const imageUrl = ref("");
|
|
const nameRules = [
|
|
{ required: true, message: "文章标题不能为空", trigger: "blur" },
|
|
// 名称字段的其他验证规则
|
|
];
|
|
const handleAvatarSuccess: UploadProps["onSuccess"] = (
|
|
response,
|
|
uploadFile
|
|
) => {
|
|
imageUrl.value = URL.createObjectURL(uploadFile.raw!);
|
|
};
|
|
export default {
|
|
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({
|
|
formData: {
|
|
id: props.arrayNum.toString(),
|
|
age: "'公开'",
|
|
name: "",
|
|
sex: "",
|
|
ccc: "",
|
|
ade: "",
|
|
num: "",
|
|
abc: "",
|
|
acd: "",
|
|
acc: "",
|
|
ace: "",
|
|
acf: "",
|
|
acg: "",
|
|
abg:"",
|
|
},
|
|
studentInfoac:[
|
|
|
|
],
|
|
});
|
|
const handleAvatar = (response:any, uploadFile:UploadFile) => {
|
|
if (uploadFile.raw) {
|
|
const imageUrl = URL.createObjectURL(uploadFile.raw);
|
|
// 触发自定义事件,传递图片URL给父组件
|
|
emit('image-uploaded', imageUrl);
|
|
}
|
|
};
|
|
const methods = reactive({
|
|
// 关闭弹窗
|
|
handleClose() {
|
|
emit("update:dialogShow", false);
|
|
},
|
|
// 重置
|
|
resetForm() {
|
|
data.formData = Object.assign({}, props.rowInfo);
|
|
},
|
|
// 提交表单内容
|
|
submitForm() {
|
|
methods.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);
|
|
}
|
|
},
|
|
handleNew() {
|
|
ElMessageBox.prompt('Please input your e-mail', 'Tip', {
|
|
confirmButtonText: 'OK',
|
|
cancelButtonText: 'Cancel',
|
|
inputPattern:
|
|
/[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/,
|
|
inputErrorMessage: 'Invalid Email',
|
|
})
|
|
.then(({ value }) => {
|
|
ElMessage({
|
|
type: 'success',
|
|
message: `Your email is:${value}`,
|
|
})
|
|
})
|
|
.catch(() => {
|
|
ElMessage({
|
|
type: 'info',
|
|
message: 'Input canceled',
|
|
})
|
|
})
|
|
}
|
|
});
|
|
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),
|
|
...methods,
|
|
disabled,
|
|
handleRemove,
|
|
handlePictureCardPreview,
|
|
handleDownload,
|
|
editContvalue,
|
|
nameRules,
|
|
parentBorder,
|
|
childBorder,
|
|
imageUrl,
|
|
handleAvatarSuccess,
|
|
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>
|
|
|