Browse Source

表单upload 组件

old
wangqing 5 years ago
parent
commit
d9447fa020
  1. 2
      src/components/generator/config.js
  2. 24
      src/components/parser/Parser.vue
  3. 13
      src/components/render/render.js
  4. 4
      src/views/form/statistics.vue

2
src/components/generator/config.js

@ -501,7 +501,7 @@ export const selectComponents = [
__slot__: {
'list-type': true
},
action: 'https://jsonplaceholder.typicode.com/posts/',
action: 'https://api.freebrio.com/api/v1/file/upload',
disabled: false,
accept: '',
name: 'file',

24
src/components/parser/Parser.vue

@ -135,6 +135,28 @@ function renderChildren(h, scheme) {
return renderFormItem.call(this, h, config.children)
}
function setUpload(config, scheme, response, file, fileList) {
debugger
console.log(this[this.formConf.formModel][scheme.__vModel__])
let newValue = JSON.parse(this[this.formConf.formModel][scheme.__vModel__])
if (!newValue) {
newValue = []
}
newValue.push({name: file.name, url: response.data})
this.$set(config, 'defaultValue', JSON.stringify(newValue))
this.$set(this[this.formConf.formModel], scheme.__vModel__, JSON.stringify(newValue))
}
function deleteUpload(event, config, scheme, file, fileList) {
let newValue = []
fileList.forEach(element => {
newValue.push({name: element.name, url: element.url})
})
this.$set(config, 'defaultValue', JSON.stringify(newValue))
this.$set(this[this.formConf.formModel], scheme.__vModel__, JSON.stringify(newValue))
}
function setValue(event, config, scheme) {
this.$set(config, 'defaultValue', event)
this.$set(this[this.formConf.formModel], scheme.__vModel__, event)
@ -183,6 +205,8 @@ function buildListeners(scheme) {
})
// render.js vModel $emit('input', val)
listeners.input = event => setValue.call(this, event, config, scheme)
listeners.upload = (response, file, fileList) => setUpload.call(this, config, scheme, response, file, fileList)
listeners.deleteUpload = event => setValue.call(this, event, config, scheme)
return listeners
}

13
src/components/render/render.js

@ -15,6 +15,17 @@ keys.forEach(key => {
})
function vModel(dataObject, defaultValue) {
let config = dataObject.attrs.__config__
//表单组件特殊处理
if (config.tag === 'el-upload') {
//增加上传回调事件
dataObject.attrs['on-success'] = (response, file, fileList) => {
this.$emit('upload', response, file, fileList)
}
dataObject.attrs['on-remove'] = (file, fileList) => {
this.$emit('deleteUpload', file, fileList)
}
} else {
dataObject.props.value = defaultValue
dataObject.on.input = val => {
@ -22,6 +33,8 @@ function vModel(dataObject, defaultValue) {
}
}
}
function mountSlotFlies(h, confClone, children) {
const childObjs = componentChild[confClone.__config__.tag]
if (childObjs) {

4
src/views/form/statistics.vue

@ -25,7 +25,7 @@
</div>
<div class="result-table-view">
<el-table
stripe :header-cell-style="{background:'#2466a0'}"
stripe
:data="projectResultList">
<el-table-column
type="selection"
@ -198,7 +198,7 @@ export default {
.result-table-view {
width: 80%;
margin: 0px auto;
margin: 6px auto;
}
.filter-table-view {

Loading…
Cancel
Save