53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
<template>
 | 
						|
  <span>
 | 
						|
    <a-input type="text" :value="value.number" style="width: 100px" @change="onNumberChange" />
 | 
						|
    <a-select
 | 
						|
      :value="value.currency"
 | 
						|
      style="width: 80px; margin: 0 8px"
 | 
						|
      :options="[
 | 
						|
        { value: 'rmb', label: 'RMB' },
 | 
						|
        { value: 'dollar', label: 'Dollar' },
 | 
						|
      ]"
 | 
						|
      @change="onCurrencyChange"
 | 
						|
    ></a-select>
 | 
						|
  </span>
 | 
						|
</template>
 | 
						|
 | 
						|
<script lang="ts">
 | 
						|
import { defineComponent } from 'vue';
 | 
						|
import type { PropType } from 'vue';
 | 
						|
import { Form } from 'ant-design-vue';
 | 
						|
 | 
						|
export type Currency = 'rmb' | 'dollar';
 | 
						|
 | 
						|
interface PriceValue {
 | 
						|
  number: number;
 | 
						|
  currency: Currency;
 | 
						|
}
 | 
						|
export default defineComponent({
 | 
						|
  props: {
 | 
						|
    value: { type: Object as PropType<PriceValue>, isRequired: true },
 | 
						|
  },
 | 
						|
  emits: ['update:value'],
 | 
						|
  setup(props, { emit }) {
 | 
						|
    const formItemContext = Form.useInjectFormItemContext();
 | 
						|
    const triggerChange = (changedValue: { number?: number; currency?: Currency }) => {
 | 
						|
      emit('update:value', { ...props.value, ...changedValue });
 | 
						|
      formItemContext.onFieldChange();
 | 
						|
    };
 | 
						|
    const onNumberChange = (e: InputEvent) => {
 | 
						|
      const newNumber = parseInt((e.target as any).value || '0', 10);
 | 
						|
      triggerChange({ number: newNumber });
 | 
						|
    };
 | 
						|
    const onCurrencyChange = (newCurrency: Currency) => {
 | 
						|
      triggerChange({ currency: newCurrency });
 | 
						|
    };
 | 
						|
 | 
						|
    return {
 | 
						|
      onNumberChange,
 | 
						|
      onCurrencyChange,
 | 
						|
    };
 | 
						|
  },
 | 
						|
});
 | 
						|
</script>
 |