|
@@ -52,7 +52,6 @@
|
|
|
<wd-picker v-model:visible="pickerShow" :columns="pickerColumns" @confirm="pickerConfirm" />
|
|
<wd-picker v-model:visible="pickerShow" :columns="pickerColumns" @confirm="pickerConfirm" />
|
|
|
</view>
|
|
</view>
|
|
|
</template>
|
|
</template>
|
|
|
-
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
import { computed, ref } from 'vue'
|
|
import { computed, ref } from 'vue'
|
|
|
|
|
|
|
@@ -61,22 +60,15 @@ import type { PersonalBusinessCardResponse } from '@/services/modules/mine/perso
|
|
|
|
|
|
|
|
type PickerType = 'gender' | 'degree'
|
|
type PickerType = 'gender' | 'degree'
|
|
|
|
|
|
|
|
-interface PickerConfirmEvent {
|
|
|
|
|
- selectedItems?: DictItem | DictItem[]
|
|
|
|
|
- value?: string | string[]
|
|
|
|
|
|
|
+interface Props {
|
|
|
|
|
+ disabled?: boolean
|
|
|
|
|
+ genderColumns: DictItem[]
|
|
|
|
|
+ degreeColumns: DictItem[]
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const props = withDefaults(
|
|
|
|
|
- defineProps<{
|
|
|
|
|
- title?: string
|
|
|
|
|
- disabled: false
|
|
|
|
|
- genderColumns: DictItem[]
|
|
|
|
|
- degreeColumns: DictItem[]
|
|
|
|
|
- }>(),
|
|
|
|
|
- {
|
|
|
|
|
- title: '基本信息',
|
|
|
|
|
- }
|
|
|
|
|
-)
|
|
|
|
|
|
|
+const props = withDefaults(defineProps<Props>(), {
|
|
|
|
|
+ disabled: false,
|
|
|
|
|
+})
|
|
|
|
|
|
|
|
const model = defineModel<PersonalBusinessCardResponse>({
|
|
const model = defineModel<PersonalBusinessCardResponse>({
|
|
|
required: true,
|
|
required: true,
|
|
@@ -84,50 +76,50 @@ const model = defineModel<PersonalBusinessCardResponse>({
|
|
|
|
|
|
|
|
const pickerType = ref<PickerType>('gender')
|
|
const pickerType = ref<PickerType>('gender')
|
|
|
const pickerShow = ref(false)
|
|
const pickerShow = ref(false)
|
|
|
-const pickerColumns = ref<DictItem[]>([])
|
|
|
|
|
-
|
|
|
|
|
-const genderLabel = computed<string>({
|
|
|
|
|
- get() {
|
|
|
|
|
- if (!model.value.gender) return ''
|
|
|
|
|
-
|
|
|
|
|
- const current = props.genderColumns.find((item) => item.value === model.value.gender)
|
|
|
|
|
- return current?.label ?? ''
|
|
|
|
|
- },
|
|
|
|
|
- set() {
|
|
|
|
|
- // readonly input 占位 setter,避免 v-model 绑定 readonly computed 报警告
|
|
|
|
|
- },
|
|
|
|
|
-})
|
|
|
|
|
|
|
|
|
|
-const degreeLabel = computed<string>({
|
|
|
|
|
- get() {
|
|
|
|
|
- if (!model.value.degree) return ''
|
|
|
|
|
|
|
+const pickerColumns = computed<DictItem[]>(() =>
|
|
|
|
|
+ pickerType.value === 'gender' ? props.genderColumns : props.degreeColumns
|
|
|
|
|
+)
|
|
|
|
|
|
|
|
- const current = props.degreeColumns.find((item) => item.value === model.value.degree)
|
|
|
|
|
- return current?.label ?? ''
|
|
|
|
|
- },
|
|
|
|
|
- set() {
|
|
|
|
|
- // readonly input 占位 setter,避免 v-model 绑定 readonly computed 报警告
|
|
|
|
|
- },
|
|
|
|
|
-})
|
|
|
|
|
|
|
+const getDictLabel = (columns: DictItem[], value?: string | number) => {
|
|
|
|
|
+ if (!value) return ''
|
|
|
|
|
|
|
|
-function showPicker(type: PickerType) {
|
|
|
|
|
|
|
+ return columns.find((item) => item.value === value)?.label ?? ''
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const createLabelComputed = (type: PickerType) =>
|
|
|
|
|
+ computed<string>({
|
|
|
|
|
+ get: () =>
|
|
|
|
|
+ getDictLabel(
|
|
|
|
|
+ type === 'gender' ? props.genderColumns : props.degreeColumns,
|
|
|
|
|
+ type === 'gender' ? model.value.gender : model.value.degree
|
|
|
|
|
+ ),
|
|
|
|
|
+
|
|
|
|
|
+ set: () => {},
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+const genderLabel = createLabelComputed('gender')
|
|
|
|
|
+
|
|
|
|
|
+const degreeLabel = createLabelComputed('degree')
|
|
|
|
|
+
|
|
|
|
|
+const showPicker = (type: PickerType): void => {
|
|
|
if (props.disabled) return
|
|
if (props.disabled) return
|
|
|
|
|
+
|
|
|
pickerType.value = type
|
|
pickerType.value = type
|
|
|
- pickerColumns.value = type === 'gender' ? props.genderColumns : props.degreeColumns
|
|
|
|
|
pickerShow.value = true
|
|
pickerShow.value = true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-function pickerConfirm(event: PickerConfirmEvent) {
|
|
|
|
|
- const currentValue = Array.isArray(event.value) ? event.value[0] : event.value
|
|
|
|
|
|
|
+const pickerConfirm = (event: PickerConfirmEvent): void => {
|
|
|
|
|
+ const value = Array.isArray(event.value) ? event.value[0] : event.value
|
|
|
|
|
|
|
|
- if (!currentValue) return
|
|
|
|
|
|
|
+ if (!value) return
|
|
|
|
|
|
|
|
if (pickerType.value === 'gender') {
|
|
if (pickerType.value === 'gender') {
|
|
|
- model.value.gender = currentValue
|
|
|
|
|
|
|
+ model.value.gender = value
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- model.value.degree = currentValue
|
|
|
|
|
|
|
+ model.value.degree = value
|
|
|
}
|
|
}
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|