UNPKG

node-swallowjs

Version:

epp portal

82 lines (78 loc) 2.69 kB
var FormMixin = { linkState(attr) { var dots = attr.name.split('.'), state = this.state, name = dots[0]; for(let i=1; i<dots.length; i++) { let r = /^(.+)\[(\d+)\]$/.exec(name); if(r) { name = r[1]; if(state[name]===undefined) state[name] = []; state = state[name]; name = Number(r[2]); } if(state[name]===undefined) state[name] = {}; state = state[name]; name = dots[i]; } var getter = function() { return state[name]; }; var setter = function(value) { state[name] = value; this.forceUpdate(); }.bind(this); switch(attr.type) { case 'checkbox': case 'radio': attr.checked = getter()===attr.value; break; case 'file': break; default: attr.value = getter(); } attr.onChange = function(e) { var that = e.target; switch(that.type) { case 'checkbox': setter(that.checked ? that.value : undefined); break; case 'radio': that.checked && setter(that.value); break; case 'file': var file = that.files[0]; var reader = new FileReader(); switch(that.name){ case 'encodedSignedMark': reader.onloadend = function(e) { setter(e.target.result); }; reader.readAsText(file); break; default: var size = file && file.size/1024; var types = ["image/png","image/jpeg","image/bmp"]; if(size < 5 || size > 5120 || types.indexOf(file.type)<0){ that.nextElementSibling.innerHTML = "上传的文件,大小或者类型不符合要求"; return; } that.nextElementSibling.innerHTML = ""; reader.onloadend = function(e) { setter(e.target.result.split(',')[1]); }; reader.readAsDataURL(file); break; } break; default: setter(that.value); } }; return attr; }, onSetState(attr) { return e => this.setState(attr); } };