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

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