Browse Source

upload 组件处理

old
wangqing 5 years ago
parent
commit
078a9ace9e
  1. 4
      src/components/generator/config.js
  2. 9
      src/components/parser/Parser.vue
  3. 25
      src/components/render/render.js
  4. 1
      src/utils/convert.js
  5. 17
      src/views/form/ProjectForm.vue

4
src/components/generator/config.js

@ -494,14 +494,14 @@ export const selectComponents = [
buttonText: '点击上传',
regList: [],
changeTag: true,
fileSize: 1,
fileSize: 10,
sizeUnit: 'MB',
document: 'https://element.eleme.cn/#/zh-CN/component/upload'
},
__slot__: {
'list-type': true
},
action: 'https://api.freebrio.com/api/v1/file/upload',
action: '/tduck-api/project/file/upload/',
disabled: false,
accept: '',
name: 'file',

9
src/components/parser/Parser.vue

@ -1,5 +1,5 @@
<script>
import {deepClone} from '@/utils/index'
import {deepClone, jsonClone} from '@/utils/index'
import render from '@/components/render/render.js'
import _ from 'lodash'
@ -34,7 +34,10 @@ const layouts = {
this.serialNumber = this.serialNumber + 1
label = serialNumber + ': ' + label
}
//
if (config.tag === 'el-upload') {
scheme.action = scheme.action + this.formConf.projectKey
}
return (
<el-col span={config.span}>
<el-form-item label-width={labelWidth} prop={scheme.__vModel__}
@ -235,7 +238,7 @@ export default {
},
data() {
const data = {
serialNumber: 1,//
// serialNumber: 1,//
formConfCopy: deepClone(this.formConf),
[this.formConf.formModel]: {},
[this.formConf.labelFormModel]: {},

25
src/components/render/render.js

@ -25,8 +25,29 @@ function vModel(dataObject, defaultValue) {
dataObject.attrs['on-remove'] = (file, fileList) => {
this.$emit('deleteUpload', file, fileList)
}
dataObject.attrs['on-exceed']=(file, fileList) => {
this.$emit('deleteUpload', file, fileList)
dataObject.attrs['on-exceed'] = (files, fileList) => {
this.$message.error(`最多上传${config.limit}个文件`);
},
dataObject.attrs['before-upload'] = (file) => {
let sizeUnitNum = 1
//文件大小判断
switch (config.sizeUnit) {
case 'KB':
sizeUnitNum = 1024
break
case 'MB':
sizeUnitNum = 1024 * 1024
break
case 'GB':
sizeUnitNum = 1024 * 1024 * 1024
break
}
let totalSize= config.fileSize*sizeUnitNum
if (file.size> totalSize) {
this.$message.error(`上传图片大小不能超过${config.fileSize}${config.sizeUnit}`);
return false
}
console.log(dataObject)
}
} else {
dataObject.props.value = defaultValue

1
src/utils/convert.js

@ -65,6 +65,7 @@ export function dbDataConvertForItemJson(data) {
jsonItem.__config__.defaultValue = data.defaultValue.value
}
}
jsonItem.regList = data.regList
jsonItem.placeholder = data.placeholder
jsonItem.__vModel__ = 'field' + data.formItemId

17
src/views/form/ProjectForm.vue

@ -20,7 +20,7 @@
</p>
<el-divider>
</el-divider>
<parser v-if="formConf.fields.length" :form-conf="formConf" @submit="submitForm"/>
<parser v-if="startParser" :form-conf="formConf" @submit="submitForm"/>
</div>
</div>
</template>
@ -51,7 +51,7 @@ export default {
},
data() {
return {
projectKey: '',
startParser:false,
projectTheme: {
headImgUrl: '',
logoImg: '',
@ -60,6 +60,7 @@ export default {
},
formConf: {
fields: [],
projectKey:'',
__methods__: {},
formRef: 'elForm',
formModel: 'formData',
@ -87,17 +88,17 @@ export default {
},
created() {
if (this.projectConfig && this.projectConfig.projectKey) {
this.projectKey = this.projectConfig.projectKey
this.formConf.projectKey = this.projectConfig.projectKey
// this.formConf.formBtns = this.projectConfig.showBtns
// iframe
} else if (this.$route.query.key) {
this.projectKey = this.$route.query.key
this.formConf.projectKey = this.$route.query.key
this.formConf.formBtns = true
}
this.formConf.size = window.innerWidth < 480 ? 'medium' : 'small'
},
mounted() {
this.$api.get(`/user/project/details/${this.projectKey}`).then(res => {
this.$api.get(`/user/project/details/${this.formConf.projectKey }`).then(res => {
if (res.data) {
let fields = res.data.projectItems.map(item => {
return dbDataConvertForItemJson(item)
@ -119,6 +120,7 @@ export default {
this.formConf.submitBtnColor = btnsColor
}
}
this.startParser=true
}
})
@ -182,4 +184,9 @@ export default {
width: 80%;
}
}
@media screen and (max-width: 500px) {
.el-message {
min-width: 300px !important;
}
}
</style>

Loading…
Cancel
Save