node-swallowjs
Version:
epp portal
494 lines (493 loc) • 18.6 kB
JSX
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,电话号码不得是1111111,1234567,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,电话号码不得是1111111,1234567,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>
);
}
}
});