UNPKG

node-swallowjs

Version:

epp portal

494 lines (493 loc) 18.6 kB
var Update = React.createClass({ mixins: [FormMixin], shouldUpdate: false, getInitialState() { return {} }, checked(a) { var s = {}; a && a.forEach(v => s[v] = 'checked'); return s; }, getPostal(info) { return { name: info.name, org: info.org, addr: { street: [info.street1, info.street2, info.street3], city: info.city, sp: info.sp, pc: info.pc, cc: info.cc } } }, getSecDNS(info){ return { dsData: [{ keyTag: info.keyTag, alg: info.alg, digestType: info.digestType, digest: info.digest }] } }, setPostal(info) { return { name: info.name, org: info.org, street1: info.addr.street[0], street2: info.addr.street[1], street3: info.addr.street[2], city: info.addr.city, sp: info.addr.sp, pc: info.addr.pc, cc: info.addr.cc } }, setSecDNS(info){ return { keyTag: info.dsData[0].keyTag, alg: info.dsData[0].alg, digestType: info.dsData[0].digestType, digest: info.dsData[0].digest } }, shouldComponentUpdate(nextProps, nextState) { if(this.shouldUpdate) return true; api.show(this.props.obj, nextState.id, function(code, data) { if(code !== '1000') { logout(); return; } data.id = nextState.id; data.s = this.checked(data.s); switch(this.props.obj) { case 'domain': case 'launch': data.ns = data.ns ? data.ns.join('\n') : ''; if(data.secDNS) data.secDNS = this.setSecDNS(data.secDNS); break; case 'host': data.ip = data.ip ? data.ip.join('\n') : ''; data.new_name = data.name; break; case 'contact': data.int = this.setPostal(data.int); if(data.loc) { data.loc = this.setPostal(data.loc); data.has_loc = 'block'; } else { data.has_loc = 'none'; } [data.xv, data.voice] = (data.voice || '+').split('+'); [data.xf, data.fax] = (data.fax || '+').split('+'); break; } this.shouldUpdate = true; this.replaceState(data, function() { this.shouldUpdate = false; }); }.bind(this)); return false; }, getParam() { switch(this.props.obj) { case 'domain': return { name: this.state.id, ns: SPLIT(this.state.ns), registrant: TRIM(this.state.registrant), admin: TRIM(this.state.admin), tech: TRIM(this.state.tech), billing: TRIM(this.state.billing), pw: this.state.pw, secDNS: this.getSecDNS(this.state.secDNS), s: forJSON(this.state.s, (key, value) => value ? key : undefined) }; case 'host': return { name: this.state.id, new_name: this.state.new_name, ip: SPLIT(this.state.ip), s: forJSON(this.state.s, (key, value) => value ? key : undefined) }; case 'contact': var r = { name: this.state.id, int: this.getPostal(this.state.int), loc: this.state.has_loc!=='none' ? this.getPostal(this.state.loc) : undefined }; if(TRIM(this.state.voice)){ if(/^86\.[0-9]{1,14}/.test(TRIM(this.state.voice))){ r.voice = '+'+TRIM(this.state.voice) + TRIM(this.state.xv); }else if(!/^86\.$/.test(TRIM(this.state.voice))){ r.voice = '+86.'+TRIM(this.state.voice) + TRIM(this.state.xv); }else{ r.voice = '+86.01012345678'; } }else{ r.voice = '+86.01012345678'; } if(TRIM(this.state.fax)){ if(/^86\.[0-9]{1,14}/.test(TRIM(this.state.fax))){ r.fax = '+'+TRIM(this.state.fax) + TRIM(this.state.xf); }else if(!/^86\.$/.test(TRIM(this.state.fax))){ r.fax = '+86.'+TRIM(this.state.fax) + TRIM(this.state.xf); }else { r.fax = '+86.01012345678'; } }else { r.fax = '+86.01012345678'; } r.email = TRIM(this.state.email); r.pw = this.state.pw; r.s = forJSON(this.state.s, (key, value) => value ? key : undefined); return r; case 'launch': return { name: this.state.name, ns: SPLIT(this.state.ns), registrant: TRIM(this.state.registrant), admin: TRIM(this.state.admin), tech: TRIM(this.state.tech), billing: TRIM(this.state.billing), pw: this.state.pw, dsData: this.state.dsData, phase: this.state.phase, applicationID: this.state.id, s: forJSON(this.state.s, (key, value) => value ? key : undefined) }; } }, handleSubmit(e) { api.update(this.props.obj==='launch' ? 'domain' : this.props.obj, this.getParam(), function(code, data) { switch(code) { case '1000': this.props.onFinish(); break; case '2501': logout(); break; default: this.state.value = data; this.forceUpdate(); } }.bind(this)); }, render() { switch(this.props.obj) { case 'domain': case 'launch': return ( <div> <table border="0" align="center"> <tbody> <tr align="center"> <td colSpan="2">{this.props.children}</td> </tr> <tr> <td colSpan="2" height="16"></td> </tr> <tr> <td>域名:{this.state.name || this.state.id}</td> <td> <input {...this.linkState({ name:"s.clientTransferProhibited", type:"checkbox", value:"checked" })} />禁转 <input {...this.linkState({ name:"s.clientDeleteProhibited", type:"checkbox", value:"checked" })} />禁删 <input {...this.linkState({ name:"s.clientUpdateProhibited", type:"checkbox", value:"checked" })} />禁改 <input {...this.linkState({ name:"s.clientRenewProhibited", type:"checkbox", value:"checked" })} />禁续 <input {...this.linkState({ name:"s.clientHold", type:"checkbox", value:"checked" })} />HOLD </td> </tr> <tr> <td>NS主机:</td> <td> <textarea {...this.linkState({ name:"ns", rows:"6", cols:"40" })}></textarea> </td> </tr> <tr> <td>登记人:</td> <td> <input {...this.linkState({ name:"registrant", type:"text", size:"16", maxLength:"16" })}/> </td> </tr> <tr> <td>管理联系人:</td> <td> <input {...this.linkState({ name:"admin", type:"text", size:"16", maxLength:"16" })}/> </td> </tr> <tr> <td>交费联系人:</td> <td> <input {...this.linkState({ name:"billing", type:"text", size:"16", maxLength:"16" })}/> </td> </tr> <tr> <td>技术联系人:</td> <td> <input {...this.linkState({ name:"tech", type:"text", size:"16", maxLength:"16" })}/> </td> </tr> <tr> <td>口令:</td> <td> <input {...this.linkState({ name:"pw", type:"text", size:"16", maxLength:"16" })}/> </td> </tr> <tr> <td colSpan="2" height="16"></td> </tr> <tr> <td>secDNS:</td> <td><DsData name="secDNS" linkState={this.linkState}/></td> </tr> <tr> <td colSpan="2" height="16"></td> </tr> <tr align="center"> <td colSpan="2"> <input type="button" value="提交" onClick={this.handleSubmit}/> </td> </tr> </tbody> </table> <OpResult content={this.state.value} /> </div> ); case 'host': return ( <div> <table> <tbody> <tr> <td colSpan="2">{this.props.children}</td> </tr> <tr> <td colSpan="2" height="16"></td> </tr> <tr> <td>主机名:</td> <td> <input {...this.linkState({ readOnly:true, name:"new_name", type:"text", size:"40", maxLength:"255" })} /> <input {...this.linkState({ name:"s.clientDeleteProhibited", type:"checkbox", value:"checked" })} />禁删 <input {...this.linkState({ name:"s.clientUpdateProhibited", type:"checkbox", value:"checked" })} />禁改 </td> </tr> <tr> <td>IP地址:</td> <td><textarea {...this.linkState({ name:"ip", rows:"6", cols:"40" })} /> </td> </tr> <tr> <td colSpan="2" height="16"></td> </tr> <tr align="center"> <td colSpan="2"><input type="button" value="提交" onClick={this.handleSubmit} /></td> </tr> </tbody> </table> <OpResult content={this.state.value} /> </div> ); case 'contact': return ( <div> <table border="0" align="center"> <tbody> <tr align="center"> <td colSpan="2"><b>修改联系人信息</b><span className="help"></span></td> </tr> <tr> <td colSpan="2" height="16"></td> </tr> <tr> <td>联系人ID:</td> <td>{this.state.id}</td> </tr> <tr> <td>状态:</td> <td> <input {...this.linkState({ name:"s.clientTransferProhibited", type:"checkbox", value:"checked" })} />禁转 <input {...this.linkState({ name:"s.clientDeleteProhibited", type:"checkbox", value:"checked" })} />禁删 <input {...this.linkState({ name:"s.clientUpdateProhibited", type:"checkbox", value:"checked" })} />禁改 </td> </tr> <tr> <td colSpan="2"><PostalInfo name="int" linkState={this.linkState} readOnly={true}/></td> </tr> <tr> <td colSpan="2"> <input {...this.linkState({ name: 'has_loc', type: 'radio', value: 'none' })}/>没有本地语言联系方式 <input {...this.linkState({ name: 'has_loc', type: 'radio', value: 'table-row' })}/>有本地语言联系方式 </td> </tr> <tr style={{display: this.state.has_loc}}> <td colSpan="2"><PostalInfo name="loc" linkState={this.linkState} readOnly={true}/></td> </tr> <tr> <td>电话:</td> <td> <input {...this.linkState({ name: 'voice', type: 'text', size: '17', maxLength: '17' })}/> 转 <input {...this.linkState({ name: 'xv', type: 'text', size: '5', maxLength: '5' })}/> <label>格式为国别(<strong className="red">86</strong>).区号(<strong className="red">531</strong>)座机号,如:86.53186920439或国别.手机号,如:86.13425668204,电话号码不得是11111111234567,00000等无意义的号码</label> </td> </tr> <tr> <td>传真:</td> <td> <input {...this.linkState({ name: 'fax', type: 'text', size: '17', maxLength: '17' })}/> 转 <input {...this.linkState({ name: 'xf', type: 'text', size: '5', maxLength: '5' })}/> <label>格式为国别(<strong className="red">86</strong>).区号(<strong className="red">531</strong>)座机号,如:86.53186920439或国别.手机号,如:86.13425668204,电话号码不得是11111111234567,00000等无意义的号码</label> </td> </tr> <tr> <td>电子邮件:</td> <td> <input {...this.linkState({ name: 'email', type: 'text', size: '40', maxLength: '255' })}/> <label>必须真实有效,用于接收有关所注册域名的重要通知,<strong className="red">不可用中文邮箱</strong></label> </td> </tr> <tr> <td>口令:</td> <td> <input {...this.linkState({ name:"pw", type:"text", size:"16", maxLength:"16" })}/> </td> </tr> <tr> <td colSpan="2" height="16"></td> </tr> <tr align="center"> <td colSpan="2"><input type="button" value="提交" onClick={this.handleSubmit} /></td> </tr> </tbody> </table> <OpResult content={this.state.value} /> </div> ); } } });