提交 a617d282 编写于 作者: ibizdev's avatar ibizdev

ibiz4j 发布系统代码

上级 5c157552
......@@ -26,6 +26,41 @@
}
]
},
{
"srfkey": "SystemPick",
"emptytext": "未定义",
"codelisttype":"dynamic",
"appdataentity":"",
"appdedataset":"",
"items": []
},
{
"srfkey": "AppType",
"emptytext": "未定义",
"codelisttype":"static",
"items": [
{
"id": "INNER",
"label": "内置应用",
"text": "内置应用",
"data":"",
"codename":"Inner",
"value": "INNER",
"disabled": false
}
, {
"id": "THIRD-PARTY",
"label": "第三方应用",
"text": "第三方应用",
"data":"",
"codename":"Third_SUB_party",
"value": "THIRD-PARTY",
"disabled": false
}
]
},
{
"srfkey": "CLAuthCode",
"emptytext": "未定义",
......
/**
* 代码表--SystemPick
*
* @export
* @class SystemPick
*/
export default class SystemPick {
/**
* 是否启用缓存
*
* @type boolean
* @memberof SystemPick
*/
public isEnableCache:boolean = true;
/**
* 过期时间
*
* @type any
* @memberof SystemPick
*/
public expirationTime:any;
/**
* 缓存超长时长
*
* @type any
* @memberof SystemPick
*/
public cacheTimeout:any = -1;
/**
* 代码表模型对象
*
* @type any
* @memberof SystemPick
*/
public codelistModel:any = {
codelistid:"SystemPick"
};
/**
* 自定义参数集合
*
* @type any
* @memberof SystemPick
*/
public userParamNames:any ={
}
/**
* 查询参数集合
*
* @type any
* @memberof SystemPick
*/
public queryParamNames:any ={
}
/**
* 获取数据项
*
* @param {*} data
* @param {boolean} [isloading]
* @returns {Promise<any>}
* @memberof SystemPick
*/
public getItems(data: any={}, isloading?: boolean): Promise<any> {
return Promise.reject([]);
}
/**
* 处理查询参数
* @param data 传入data
* @memberof SystemPick
*/
public handleQueryParam(data:any){
let tempData:any = data?JSON.parse(JSON.stringify(data)):{};
if(this.userParamNames && Object.keys(this.userParamNames).length >0){
Object.keys(this.userParamNames).forEach((name: string) => {
if (!name) {
return;
}
let value: string | null = this.userParamNames[name];
if (value && value.startsWith('%') && value.endsWith('%')) {
const key = value.substring(1, value.length - 1);
if (this.codelistModel && this.codelistModel.hasOwnProperty(key)) {
value = (this.codelistModel[key] !== null && this.codelistModel[key] !== undefined) ? this.codelistModel[key] : null;
} else {
value = null;
}
}
Object.assign(tempData, { [name]: value });
});
}
Object.assign(tempData,{page: 0, size: 1000});
if(this.queryParamNames && Object.keys(this.queryParamNames).length > 0){
Object.assign(tempData,this.queryParamNames);
}
return tempData;
}
}
......@@ -3,7 +3,8 @@
<component
:is="viewname"
class="viewcontainer2"
:viewdata ="viewdata"
:viewdata ="viewdata"
:viewparam="viewparam"
:viewDefaultUsage="false"
:formDruipart="formDruipart"
:isformDruipart="true"
......@@ -119,6 +120,22 @@ export default class AppFormDRUIPart extends Vue {
*/
@Prop() public viewparams!: any;
/**
* 局部上下文
*
* @type {*}
* @memberof AppFormDRUIPart
*/
@Prop() public localContext!:any;
/**
* 局部参数
*
* @type {*}
* @memberof AppFormDRUIPart
*/
@Prop() public localParam!:any;
/**
* 应用实体参数名称
*
......@@ -240,21 +257,32 @@ export default class AppFormDRUIPart extends Vue {
}
const formData: any = data?data:JSON.parse(this.data);
const _paramitem = formData[this.paramItem];
let viewdata = {};
Object.assign(viewdata, this.$viewTool.getIndexViewParam());
let tempContext:any = {};
let tempParam:any = {};
Object.assign(tempContext, this.$viewTool.getIndexViewParam());
const _parameters: any[] = [...this.$viewTool.getIndexParameters(), ...this.parameters];
_parameters.forEach((parameter: any) => {
const { pathName, parameterName }: { pathName: string, parameterName: string } = parameter;
if (formData[parameterName] && !Object.is(formData[parameterName], '')) {
Object.assign(viewdata, { [parameterName]: formData[parameterName] });
Object.assign(tempContext, { [parameterName]: formData[parameterName] });
}
});
Object.assign(viewdata, { [this.paramItem]: _paramitem });
Object.assign(tempContext, { [this.paramItem]: _paramitem });
//设置顶层视图唯一标识
Object.assign(viewdata,this.context);
Object.assign(viewdata,{srfparentdename:this.parentName,srfparentkey:_paramitem});
this.viewdata = JSON.stringify(viewdata);
this.viewparam = JSON.stringify(this.viewparams);
Object.assign(tempContext,this.context);
Object.assign(tempContext,{srfparentdename:this.parentName,srfparentkey:_paramitem});
// 设置局部上下文
if(this.localContext && Object.keys(this.localContext).length >0){
let _context:any = this.$util.computedNavData(formData,tempContext,this.viewparams,this.localContext);
Object.assign(tempContext,_context);
}
this.viewdata = JSON.stringify(tempContext);
// 设置局部参数
if(this.localParam && Object.keys(this.localParam).length >0){
let _param:any = this.$util.computedNavData(formData,tempContext,this.viewparams,this.localParam);
Object.assign(tempParam,_param);
}
this.viewparam = JSON.stringify(tempParam);
if (this.isRelationalData) {
if (!_paramitem || _paramitem == null || Object.is(_paramitem, '')) {
this.blockUIStart();
......
<template>
<div class="app-picker-select-view">
<Dropdown :visible="visible" trigger="custom" style="left:0px;width: 100%" @on-clickoutside="() => {triggerMenu(false);}" >
<Input v-if="isSingleSelect" v-model="queryValue" class="tree-input" type="text" :placeholder="placeholder ? placeholder : $t('components.AppPickerSelectViewSelectView.placeholder')" :disabled="disabled" @on-change="OnInputChange" @on-focus="()=>{triggerMenu(true);}" >
<Input v-if="isSingleSelect" v-model="queryValue" class="tree-input" type="text" :placeholder="placeholder ? placeholder : $t('components.appPickerSelectView.placeholder')" :disabled="disabled" @on-change="OnInputChange" @on-focus="()=>{triggerMenu(true);}" >
<template v-slot:suffix>
<i v-if="queryValue && !disabled" class='el-icon-circle-close' @click="onClear"></i>
<Icon :type="visible ? 'ios-arrow-up' : 'ios-arrow-down'" class="icon-arrow" @click="() => {triggerMenu();}"></Icon>
......@@ -34,7 +34,7 @@ import { ViewTool } from '@/utils/view-tool/view-tool';
@Component({
})
export default class AppPickerSelectViewSelectView extends Vue {
export default class AppPickerSelectView extends Vue {
/**
* 视图上下文
*
......@@ -256,7 +256,7 @@ export default class AppPickerSelectViewSelectView extends Vue {
*/
public handlePublicParams(arg: any): boolean {
if (!this.data) {
this.$Notice.error({ title: (this.$t('components.AppPickerSelectViewSelectView.error') as any), desc: (this.$t('components.AppPickerSelectViewSelectView.formdataException') as any) });
this.$Notice.error({ title: (this.$t('components.appPickerSelectView.error') as any), desc: (this.$t('components.appPickerSelectView.formdataException') as any) });
return false;
}
// 合并表单参数
......@@ -306,7 +306,7 @@ export default class AppPickerSelectViewSelectView extends Vue {
if(this.isSingleSelect){
this.queryValue = newVal;
if (!this.data || !this.valueitem || !this.data[this.valueitem]) {
this.$Notice.error({ title: (this.$t('components.AppPickerSelectViewSelectView.error') as any), desc: (this.$t('components.AppPickerSelectViewSelectView.editor') as any)+this.name+(this.$t('components.AppPickerSelectViewSelectView.valueitemException') as any) });
this.$Notice.error({ title: (this.$t('components.appPickerSelectView.error') as any), desc: (this.$t('components.appPickerSelectView.editor') as any)+this.name+(this.$t('components.appPickerSelectView.valueitemException') as any) });
}else{
let _viewparam = JSON.parse(this.viewparam);
_viewparam.selectedData = [{srfkey: this.data[this.valueitem], srfmajortext: this.value }];
......@@ -418,7 +418,7 @@ export default class AppPickerSelectViewSelectView extends Vue {
*/
public openLinkView($event: any): void {
if (!this.data || !this.valueitem || !this.data[this.valueitem]) {
console.error({ title: (this.$t('components.AppPickerSelectViewSelectView.error') as any), desc: (this.$t('components.AppPickerSelectViewSelectView.editor') as any)+this.name+(this.$t('components.AppPickerSelectViewSelectView.valueitemException') as any) });
console.error({ title: (this.$t('components.appPickerSelectView.error') as any), desc: (this.$t('components.appPickerSelectView.editor') as any)+this.name+(this.$t('components.appPickerSelectView.valueitemException') as any) });
return;
}
// 公共参数处理
......
<template>
<codelist v-if="tag" :tag="tag" :value="value" :codelistType="codelistType" :renderMode="renderMode" :valueSeparator="valueSeparator" :textSeparator="textSeparator" :data="data" :itemParam="itemParam" :context="context" :viewparams="viewparams"></codelist>
<codelist v-if="tag" :tag="tag" :value="value" :codelistType="codelistType" :renderMode="renderMode" :valueSeparator="valueSeparator" :textSeparator="textSeparator" :data="data" :localContext="localContext" :localParam="localParam" :context="context" :viewparams="viewparams"></codelist>
<app-upload-file-info v-else-if="Object.is(this.editorType,'PICTURE') || Object.is(this.editorType,'PICTURE_ONE') || Object.is(this.editorType,'FILEUPLOADER')" :value="value" :name="name"></app-upload-file-info>
<span class="app-span" v-else >{{text}}</span>
</template>
......
......@@ -4,6 +4,14 @@ export default {
'0': '否',
empty: '',
},
SystemPick: {
empty: '',
},
AppType: {
'INNER': '内置应用',
'THIRD-PARTY': '第三方应用',
empty: '',
},
CLAuthCode: {
'200': '成功',
'400': '用户不存在',
......
......@@ -4,6 +4,14 @@ export default {
'0': '否',
empty: '',
},
SystemPick: {
empty: '',
},
AppType: {
'INNER': '内置应用',
'THIRD-PARTY': '第三方应用',
empty: '',
},
CLAuthCode: {
'200': '成功',
'400': '用户不存在',
......
......@@ -6,9 +6,10 @@ export default {
systemid: '系统标识',
fullname: '全称',
type: '类型',
addr: '地址',
group: '分组',
icon: '图标',
visabled: '可见',
addr: '地址',
},
views: {
editview: {
......@@ -35,6 +36,7 @@ export default {
appid: "应用标识",
appname: "应用名",
apptype: "类型",
appgroup: "分组",
fullname: "全称",
icon: "图标",
visabled: "可见",
......@@ -48,6 +50,7 @@ export default {
pssystemid: "系统标识",
appid: "应用标识",
appname: "应用名",
appgroup: "分组",
apptype: "类型",
fullname: "全称",
icon: "图标",
......
......@@ -5,9 +5,10 @@ export default {
systemid: '系统标识',
fullname: '全称',
type: '类型',
addr: '地址',
group: '分组',
icon: '图标',
visabled: '可见',
addr: '地址',
},
views: {
editview: {
......@@ -34,6 +35,7 @@ export default {
appid: '应用标识',
appname: '应用名',
apptype: '类型',
appgroup: '分组',
fullname: '全称',
icon: '图标',
visabled: '可见',
......@@ -47,6 +49,7 @@ export default {
pssystemid: '系统标识',
appid: '应用标识',
appname: '应用名',
appgroup: '分组',
apptype: '类型',
fullname: '全称',
icon: '图标',
......
......@@ -34,6 +34,41 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => {
},
]
},
{
"srfkey": "SystemPick",
"emptytext": "未定义",
"codelisttype":"dynamic",
"appdataentity":"",
"appdedataset":"",
"items": []
},
{
srfkey: 'AppType',
emptytext: '未定义',
"codelisttype":"static",
items: [
{
id: 'INNER',
label: '内置应用',
text: '内置应用',
"data":"",
"codename":"Inner",
value: 'INNER',
disabled: false,
},
{
id: 'THIRD-PARTY',
label: '第三方应用',
text: '第三方应用',
"data":"",
"codename":"Third_SUB_party",
value: 'THIRD-PARTY',
disabled: false,
},
]
},
{
srfkey: 'CLAuthCode',
emptytext: '未定义',
......
import SystemPick from '@/codelist/system-pick';
import { Store } from 'vuex';
/**
......@@ -49,6 +50,14 @@ export default class CodeListService {
public static codelistCached:Map<string,any> = new Map();
/**
* 代码表--SystemPick
*
* @type {SystemPick}
* @memberof CodeListService
*/
public SystemPick: SystemPick = new SystemPick();
/**
* 获取动态代码表
*
......
......@@ -8,7 +8,19 @@
<row>
<i-col v-show="detailsModel.pssystemid.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='pssystemid' :itemRules="this.rules.pssystemid" class='' :caption="$t('entities.sysapp.main_form.details.pssystemid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.pssystemid.error" :isEmptyCaption="false" labelPos="LEFT">
<input-box v-model="data.pssystemid" @enter="onEnter($event)" unit="" :disabled="detailsModel.pssystemid.disabled" type='text' style=""></input-box>
<dropdown-list
v-model="data.pssystemid"
:data="data"
:context="context"
:viewparams="viewparams"
:localContext ='{ }'
:localParam ='{ }'
:disabled="detailsModel.pssystemid.disabled"
tag='SystemPick'
codelistType='DYNAMIC'
placeholder='请选择...' style="">
</dropdown-list>
</app-form-item>
</i-col>
......@@ -26,7 +38,25 @@
</i-col>
<i-col v-show="detailsModel.apptype.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='apptype' :itemRules="this.rules.apptype" class='' :caption="$t('entities.sysapp.main_form.details.apptype')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.apptype.error" :isEmptyCaption="false" labelPos="LEFT">
<input-box v-model="data.apptype" @enter="onEnter($event)" unit="" :disabled="detailsModel.apptype.disabled" type='text' style=""></input-box>
<dropdown-list
v-model="data.apptype"
:data="data"
:context="context"
:viewparams="viewparams"
:localContext ='{ }'
:localParam ='{ }'
:disabled="detailsModel.apptype.disabled"
tag='AppType'
codelistType='STATIC'
placeholder='请选择...' style="">
</dropdown-list>
</app-form-item>
</i-col>
<i-col v-show="detailsModel.appgroup.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='appgroup' :itemRules="this.rules.appgroup" class='' :caption="$t('entities.sysapp.main_form.details.appgroup')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.appgroup.error" :isEmptyCaption="false" labelPos="LEFT">
<input-box v-model="data.appgroup" @enter="onEnter($event)" unit="" :disabled="detailsModel.appgroup.disabled" type='text' style=""></input-box>
</app-form-item>
</i-col>
......@@ -368,6 +398,7 @@ export default class MainBase extends Vue implements ControlInterface {
appid: null,
appname: null,
apptype: null,
appgroup: null,
fullname: null,
icon: null,
visabled: null,
......@@ -480,6 +511,12 @@ export default class MainBase extends Vue implements ControlInterface {
{ required: false, type: 'string', message: '类型 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '类型 值不能为空', trigger: 'blur' },
],
appgroup: [
{ type: 'string', message: '分组 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '分组 值必须为字符串类型', trigger: 'blur' },
{ required: false, type: 'string', message: '分组 值不能为空', trigger: 'change' },
{ required: false, type: 'string', message: '分组 值不能为空', trigger: 'blur' },
],
fullname: [
{ type: 'string', message: '全称 值必须为字符串类型', trigger: 'change' },
{ type: 'string', message: '全称 值必须为字符串类型', trigger: 'blur' },
......@@ -538,6 +575,8 @@ export default class MainBase extends Vue implements ControlInterface {
appname: new FormItemModel({ caption: '应用名', detailType: 'FORMITEM', name: 'appname', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 1 })
,
apptype: new FormItemModel({ caption: '类型', detailType: 'FORMITEM', name: 'apptype', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
appgroup: new FormItemModel({ caption: '分组', detailType: 'FORMITEM', name: 'appgroup', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
fullname: new FormItemModel({ caption: '全称', detailType: 'FORMITEM', name: 'fullname', visible: true, isShowCaption: true, form: this, disabled: false, enableCond: 3 })
,
......@@ -681,6 +720,18 @@ export default class MainBase extends Vue implements ControlInterface {
this.formDataChange({ name: 'apptype', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 appgroup 值
*
* @param {*} newVal
* @param {*} oldVal
* @memberof Main
*/
@Watch('data.appgroup')
onAppgroupChange(newVal: any, oldVal: any) {
this.formDataChange({ name: 'appgroup', newVal: newVal, oldVal: oldVal });
}
/**
* 监控表单属性 fullname 值
*
......@@ -782,6 +833,7 @@ export default class MainBase extends Vue implements ControlInterface {
}
/**
......
......@@ -68,6 +68,11 @@ export default class MainModel {
{
name: 'apptype',
prop: 'type',
dataType: 'SSCODELIST',
},
{
name: 'appgroup',
prop: 'group',
dataType: 'TEXT',
},
{
......
......@@ -32,38 +32,28 @@ export default class MainModel {
dataType: 'TEXT',
},
{
name: 'visabled',
prop: 'visabled',
dataType: 'YESNO',
},
{
name: 'appname',
prop: 'label',
dataType: 'TEXT',
name: 'pssystemid',
prop: 'systemid',
dataType: 'PICKUP',
},
{
name: 'appid',
prop: 'id',
dataType: 'TEXT',
},
{
name: 'pssystemid',
prop: 'systemid',
dataType: 'PICKUP',
},
{
name: 'addr',
prop: 'addr',
dataType: 'TEXT',
},
{
name: 'apptype',
prop: 'type',
name: 'srfmajortext',
prop: 'label',
dataType: 'TEXT',
},
{
name: 'srfmajortext',
prop: 'label',
name: 'srfkey',
prop: 'id',
dataType: 'TEXT',
},
{
......@@ -72,8 +62,28 @@ export default class MainModel {
dataType: 'TEXT',
},
{
name: 'srfkey',
prop: 'id',
name: 'appname',
prop: 'label',
dataType: 'TEXT',
},
{
name: 'visabled',
prop: 'visabled',
dataType: 'YESNO',
},
{
name: 'pssystemid_text',
prop: 'systemid',
dataType: 'PICKUP',
},
{
name: 'apptype',
prop: 'type',
dataType: 'SSCODELIST',
},
{
name: 'appgroup',
prop: 'group',
dataType: 'TEXT',
},
{
......
......@@ -47,6 +47,8 @@
]"
:context="context"
:viewparams="viewparams"
:localContext ='{}'
:localParam ='{}'
parameterName='sysrole'
parentName="SysRole"
refviewtype='DECUSTOMVIEW'
......@@ -83,6 +85,8 @@
]"
:context="context"
:viewparams="viewparams"
:localContext ='{}'
:localParam ='{}'
parameterName='sysrole'
parentName="SysRole"
refviewtype='DEGRIDVIEW'
......
......@@ -33,6 +33,8 @@
]"
:context="context"
:viewparams="viewparams"
:localContext ='{}'
:localParam ='{}'
parameterName='sysuser'
parentName="SysUser"
refviewtype='DEGRIDVIEW'
......
......@@ -72,11 +72,12 @@ public class SysApp extends EntityBase implements Serializable {
private String type;
/**
* 地址
* 分组
*/
@JSONField(name = "addr")
@JsonProperty("addr")
private String addr;
@DEField(name = "appgroup")
@JSONField(name = "group")
@JsonProperty("group")
private String group;
/**
* 图标
......@@ -92,6 +93,13 @@ public class SysApp extends EntityBase implements Serializable {
@JsonProperty("visabled")
private Integer visabled;
/**
* 地址
*/
@JSONField(name = "addr")
@JsonProperty("addr")
private String addr;
/**
*
......
......@@ -19,6 +19,7 @@ import com.alibaba.fastjson.JSONObject;
public interface SysPSSystemMapper extends BaseMapper<SysPSSystem>{
Page<SysPSSystem> searchPick(IPage page, @Param("srf") SysPSSystemSearchContext context, @Param("ew") Wrapper<SysPSSystem> wrapper) ;
Page<SysPSSystem> searchDefault(IPage page, @Param("srf") SysPSSystemSearchContext context, @Param("ew") Wrapper<SysPSSystem> wrapper) ;
@Override
SysPSSystem selectById(Serializable id);
......
......@@ -36,6 +36,7 @@ public interface ISysPSSystemService extends IService<SysPSSystem>{
void saveBatch(List<SysPSSystem> list) ;
boolean update(SysPSSystem et) ;
void updateBatch(List<SysPSSystem> list) ;
Page<SysPSSystem> searchPick(SysPSSystemSearchContext context) ;
Page<SysPSSystem> searchDefault(SysPSSystemSearchContext context) ;
/**
*自定义查询SQL
......
......@@ -143,6 +143,15 @@ public class SysPSSystemServiceImpl extends ServiceImpl<SysPSSystemMapper, SysPS
/**
* 查询集合 Pick
*/
@Override
public Page<SysPSSystem> searchPick(SysPSSystemSearchContext context) {
com.baomidou.mybatisplus.extension.plugins.pagination.Page<SysPSSystem> pages=baseMapper.searchPick(context.getPages(),context,context.getSelectCond());
return new PageImpl<SysPSSystem>(pages.getRecords(), context.getPageable(), pages.getTotal());
}
/**
* 查询集合 DEFAULT
*/
......
......@@ -88,7 +88,7 @@
<!--输出实体[SYS_PSSYSTEM]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-sys_pssystem-29-5">
<changeSet author="a_A_5d9d78509" id="tab-sys_pssystem-36-5">
<createTable tableName="IBZPSSYSTEM">
<column name="PSSYSTEMID" remarks="" type="VARCHAR(100)">
<constraints primaryKey="true" primaryKeyName="PK_SYS_PSSYSTEM_PSSYSTEMID"/>
......
......@@ -64,12 +64,12 @@ public class SysAppDTO extends DTOBase implements Serializable {
private String type;
/**
* 属性 [ADDR]
* 属性 [APPGROUP]
*
*/
@JSONField(name = "addr")
@JsonProperty("addr")
private String addr;
@JSONField(name = "group")
@JsonProperty("group")
private String group;
/**
* 属性 [ICON]
......@@ -87,6 +87,14 @@ public class SysAppDTO extends DTOBase implements Serializable {
@JsonProperty("visabled")
private Integer visabled;
/**
* 属性 [ADDR]
*
*/
@JSONField(name = "addr")
@JsonProperty("addr")
private String addr;
/**
* 设置 [APPNAME]
......@@ -121,11 +129,11 @@ public class SysAppDTO extends DTOBase implements Serializable {
}
/**
* 设置 [ADDR]
* 设置 [APPGROUP]
*/
public void setAddr(String addr){
this.addr = addr ;
this.modify("addr",addr);
public void setGroup(String group){
this.group = group ;
this.modify("appgroup",group);
}
/**
......@@ -144,6 +152,14 @@ public class SysAppDTO extends DTOBase implements Serializable {
this.modify("visabled",visabled);
}
/**
* 设置 [ADDR]
*/
public void setAddr(String addr){
this.addr = addr ;
this.modify("addr",addr);
}
}
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册