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.

193 lines
5.4 KiB

5 years ago
<template>
<div class="project-form"
:style="{backgroundColor:projectTheme.backgroundColor,
background:projectTheme.backgroundImg?'url('+projectTheme.backgroundImg+') no-repeat center':''}">
5 years ago
<div class="">
5 years ago
<div :style="{textAlign:projectTheme.logoPosition}">
<img
:src="projectTheme.logoImg" class="logo-img">
</div>
5 years ago
<el-image
5 years ago
v-if="projectTheme.headImgUrl"
:src="projectTheme.headImgUrl"
style="width: 100%"
5 years ago
fit="scale-down"></el-image>
5 years ago
<h4 class="form-name-text" v-if="projectTheme.showTitle" style="text-align: center">
{{ formConf.title }}
</h4>
<p class="form-name-text" v-if="projectTheme.showDescribe" style="text-align: center">
{{ formConf.description }}
</p>
5 years ago
<el-divider>
</el-divider>
<parser v-if="startParser" :form-conf="formConf" @submit="submitForm"/>
5 years ago
</div>
</div>
</template>
<script>
import Parser from '@/components/parser/Parser'
import {dbDataConvertForItemJson} from '@/utils/convert'
window.onload = function() {
document.addEventListener('touchstart', function(event) {
if (event.touches.length > 1) {
event.preventDefault()
}
})
document.addEventListener('gesturestart', function(event) {
event.preventDefault()
})
}
export default {
components: {
Parser
},
props: {
projectConfig: {
projectKey: '',
5 years ago
showBtns: true
5 years ago
}
},
data() {
return {
startParser:false,
5 years ago
projectTheme: {
5 years ago
headImgUrl: '',
5 years ago
logoImg: '',
5 years ago
showTitle: true,
showDescribe: true
5 years ago
},
5 years ago
formConf: {
fields: [],
projectKey:'',
5 years ago
__methods__: {},
formRef: 'elForm',
formModel: 'formData',
5 years ago
labelFormModel: 'labelFormData',
5 years ago
size: 'small',
labelPosition: 'top',
labelWidth: 100,
formRules: 'rules',
gutter: 15,
disabled: false,
span: 24,
formBtns: true,
resetBtn: false,
submitBtnText: '提交',
submitBtnColor: '#205bb5',
showNumber: false,
5 years ago
unFocusedComponentBorder: true
}
}
},
computed: {},
watch: {},
5 years ago
beforeCreate() {
document.querySelector('body').className = 'project-body'
},
5 years ago
created() {
if (this.projectConfig && this.projectConfig.projectKey) {
this.formConf.projectKey = this.projectConfig.projectKey
// this.formConf.formBtns = this.projectConfig.showBtns
5 years ago
//不存去路由中尝试获取 iframe
5 years ago
} else if (this.$route.query.key) {
this.formConf.projectKey = this.$route.query.key
this.formConf.formBtns = true
5 years ago
}
this.formConf.size = window.innerWidth < 480 ? 'medium' : 'small'
},
mounted() {
this.$api.get(`/user/project/details/${this.formConf.projectKey }`).then(res => {
5 years ago
if (res.data) {
let fields = res.data.projectItems.map(item => {
return dbDataConvertForItemJson(item)
})
this.formConf.fields = fields
this.formConf.title = res.data.project.name
this.formConf.description = res.data.project.describe
this.formConf.description = res.data.project.describe
5 years ago
if (res.data.userProjectTheme) {
5 years ago
this.projectTheme = res.data.userProjectTheme
5 years ago
let {submitBtnText, showNumber, btnsColor} = res.data.userProjectTheme
if (submitBtnText) {
this.formConf.submitBtnText = submitBtnText
}
if (showNumber) {
this.formConf.showNumber = showNumber
}
5 years ago
if (btnsColor) {
this.formConf.submitBtnColor = btnsColor
}
}
this.startParser=true
5 years ago
}
5 years ago
})
},
methods: {
submitForm(data) {
5 years ago
this.$emit('submit', data)
5 years ago
}
}
}
</script>
5 years ago
<style lang="scss">
5 years ago
5 years ago
.project-form {
margin: 15px auto;
width: 800px;
padding: 15px;
background-repeat: repeat;
background-color: rgba(229, 239, 247, 0.87);
5 years ago
}
.project-body::-webkit-scrollbar {
width: 0 !important;
background: transparent;
}
.project-body {
-ms-overflow-style: none;
overflow: -moz-scrollbars-none;
5 years ago
}
5 years ago
.logo-img {
max-height: 120px;
}
5 years ago
.submit-btn-form-item {
text-align: left;
}
5 years ago
.submit-btn-form-item button {
width: 20%;
}
5 years ago
5 years ago
@media screen and (max-width: 750px) {
.project-form {
margin: 0px;
height: 100%;
width: 100% !important;
5 years ago
background-color: white;
}
5 years ago
5 years ago
.logo-img {
max-height: 2.94rem;
}
5 years ago
.submit-btn-form-item {
text-align: center;
}
5 years ago
.submit-btn-form-item button {
width: 80%;
}
5 years ago
}
@media screen and (max-width: 500px) {
.el-message {
min-width: 300px !important;
}
}
5 years ago
</style>