提交 771e7c1e 编写于 作者: Shine-zwj's avatar Shine-zwj

新增单选项列表根据值类型进行转化

上级 76cadfbd
<template> <template>
<radio-group class="app-radio-group" v-model="value" > <radio-group class="app-radio-group" v-model="currentVal">
<radio v-for="(_item,index) in items" :key = "index" :label="_item.value" :disabled="isDisabled || _item.disabled"> <radio v-for="(_item,index) in items" :key = "index" :label="_item.value" :disabled="isDisabled || _item.disabled">
<span>{{Object.is(codelistType,'STATIC') ? $t('codelist.'+tag+'.'+_item.value) : _item.text}}</span> <span>{{Object.is(codelistType,'STATIC') ? $t('codelist.'+tag+'.'+_item.value) : _item.text}}</span>
</radio> </radio>
...@@ -28,22 +28,12 @@ export default class AppRadioGroup extends Vue { ...@@ -28,22 +28,12 @@ export default class AppRadioGroup extends Vue {
@Model('change') item?: any; @Model('change') item?: any;
/** /**
* 获取值 * 实际值
*
* @memberof AppRadioGroup
*/
get value() {
return this.item;
}
/**
* 设置值
* *
* @type {*}
* @memberof AppRadioGroup * @memberof AppRadioGroup
*/ */
set value(val: any) { public value: any = null;
this.$emit('change', val);
}
/** /**
* 代码表标识 * 代码表标识
...@@ -69,29 +59,65 @@ export default class AppRadioGroup extends Vue { ...@@ -69,29 +59,65 @@ export default class AppRadioGroup extends Vue {
*/ */
@Prop() public data?: any; @Prop() public data?: any;
/**
* 属性类型
*
* @type {'string' | 'number'}
* @memberof AppRadioGroup
*/
@Prop({ default: 'string' })
public valueType!: 'string' | 'number';
/**
* 监控值变化,根据属性类型强制转换
*
* @memberof AppRadioGroup
*/
@Watch('item',{immediate:true,deep:true})
public itemWatch(){
this.readyValue();
}
/**
* 获取值
*
* @memberof AppRadioGroup
*/
get currentVal() {
return this.item;
}
/**
* 设置值
*
* @memberof AppRadioGroup
*/
set currentVal(val: any) {
this.$emit('change', val);
}
/** /**
* 监听表单数据变化 * 监听表单数据变化
* *
* @memberof AppRadioGroup * @memberof AppRadioGroup
*/ */
@Watch('data',{immediate:true,deep:true}) @Watch('data',{immediate:true,deep:true})
onDataChange(newVal: any, oldVal: any) { public onDataChange(newVal: any, oldVal: any) {
if(newVal){ if(newVal){
if(this.tag && this.codelistType == 'DYNAMIC'){ if(this.tag && this.codelistType == 'DYNAMIC'){
// 公共参数处理 // 公共参数处理
let data: any = {}; let data: any = {};
this.handlePublicParams(data); this.handlePublicParams(data);
// 参数处理 // 参数处理
let _context = data.context; let _context = data.context;
let _param = data.param; let _param = data.param;
console.log("app-radio-group") this.codeListService.getItems(this.tag,_context,_param).then((res:any) => {
this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.formatCodeList(this.$util.deepCopy(res));
this.items = res; }).catch((error:any)=>{
}).catch((error:any)=>{ console.log(`----${this.tag}----${(this.$t('app.commonWords.codeNotExist') as string)}`);
console.log(`----${this.tag}----${(this.$t('app.commonWords.codeNotExist') as string)}`); })
}) }
} }
}
} }
/** /**
...@@ -193,7 +219,8 @@ export default class AppRadioGroup extends Vue { ...@@ -193,7 +219,8 @@ export default class AppRadioGroup extends Vue {
*/ */
public created() { public created() {
if(this.tag && this.codelistType == 'STATIC'){ if(this.tag && this.codelistType == 'STATIC'){
this.items = this.$store.getters.getCodeListItems(this.tag); const items = this.$store.getters.getCodeListItems(this.tag);
this.formatCodeList(this.$util.deepCopy(items));
}else if(this.tag && this.codelistType == 'DYNAMIC'){ }else if(this.tag && this.codelistType == 'DYNAMIC'){
// 公共参数处理 // 公共参数处理
let data: any = {}; let data: any = {};
...@@ -202,12 +229,78 @@ export default class AppRadioGroup extends Vue { ...@@ -202,12 +229,78 @@ export default class AppRadioGroup extends Vue {
let _context = data.context; let _context = data.context;
let _param = data.param; let _param = data.param;
this.codeListService.getItems(this.tag,_context,_param).then((res:any) => { this.codeListService.getItems(this.tag,_context,_param).then((res:any) => {
this.items = res; this.formatCodeList(this.$util.deepCopy(res));
}).catch((error:any)=>{ }).catch((error:any)=>{
console.log(`----${this.tag}----${(this.$t('app.commonWords.codeNotExist') as string)}`); console.log(`----${this.tag}----${(this.$t('app.commonWords.codeNotExist') as string)}`);
}) })
} }
} }
/**
* 格式化代码表值类型
*
* @param {any[]} items
* @returns
* @memberof AppRadioGroup
*/
protected formatCodeList(items: any[]): void {
// 判断类型是否和属性一致
let judge = false;
this.items = [];
try {
items.forEach((item: any) => {
const type = this.$util.typeOf(item.value);
if (type !== this.valueType) {
judge = true;
if (type === 'number') {
item.value = item.value.toString();
} else {
if(type == "null") {
this.valueType == "number" ? item.value = 0 : item.value = '';
}else if (item.value.indexOf('.') === -1) {
item.value = parseInt(item.value);
} else {
item.value = parseFloat(item.value);
}
}
}
this.items.push(item);
});
if (judge) {
console.warn(
`代码表「${this.tag}」值类型和属性类型不符,目前采用强制转换模式。请修正代码表值类型和属性类型匹配。`
);
}
} catch (error) {
console.warn(
'代码表值类型和属性类型不符,目前采用强制转换模式。转换过程异常,请修正代码表值类型和属性类型匹配。'
);
}
}
/**
* 准备值
*
* @memberof AppRadioGroup
*/
public readyValue() {
if (this.item == null) {
this.value = null;
return;
}
if (this.$util.typeOf(this.item) === this.valueType) {
this.value = this.item;
} else if (this.valueType === 'number') {
if (this.item.indexOf('.') === -1) {
this.value = parseInt(this.item);
} else {
this.value = parseFloat(this.item);
}
} else {
this.value = this.item.toString();
}
this.$emit('change',this.value);
}
} }
</script> </script>
<style lang="less"> <style lang="less">
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册