MyComponent.vue
2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!--
* @Date: 2023-03-29 14:55:46
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-07-03 15:25:10
* @FilePath: /data-table/src/components/PickerField/MyComponent.vue
* @Description: 文件描述
-->
<template>
<div style="width: 100%;">
<div v-if="props.component_props.readonly" style="padding: 0.5rem 1rem 1rem 0.3rem; font-size: 0.9rem;">
{{ picker_value }}
</div>
<van-field
v-else
v-model="picker_value"
is-link
readonly
:name="props.key"
:required="props.component_props.required"
:placeholder="props.component_props.placeholder"
@click="onClick"
:border="false"
/>
<!-- <van-field v-if="has_add_info" :name="add_info_name" v-model="add_info" label="" placeholder="请输入补充信息" :border="false" style="border: 1px solid #eaeaea;border-radius: 0.25rem; padding: 0.25rem 0.5rem; margin-top: 0.25rem;" /> -->
<van-popup v-model:show="showPicker" position="bottom">
<van-picker
:columns="props.component_props.options"
@confirm="onConfirm"
@cancel="showPicker = false"
/>
</van-popup>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { useCustomFieldValue } from '@vant/use';
// 获取父组件传值
const props = inject('props');
const emit = defineEmits(["active"]);
const showPicker = ref(false);
const picker_value = ref(props.component_props.default);
const onClick = () => {
if (!props.component_props.readonly) { // 非只读状态下可以点击弹出
showPicker.value = true;
}
};
const onConfirm = ({ selectedOptions }) => {
// console.warn(props);
picker_value.value = selectedOptions[0]?.value;
showPicker.value = false;
// 触发点自定义监听事件,配合规则显示隐藏其他字段
props.value = { key: props.key, value: picker_value.value, type: "picker" };
emit("active", props.value);
// if (add_info_key.value === props.item.value) {
// has_add_info.value = true;
// }
};
// 此处传入的值会替代 Field 组件内部的 value
useCustomFieldValue(() => picker_value.value);
// 绑定值发生变化时回调,处理选项为其他时的输入项录入
// const has_add_info = ref(false); // 文字不一定是其他,后续可能需要字段绑定一个值,标识是否有其他输入框进行判断
// const add_info = ref('');
// const add_info_name = ref(props.item.key + '#');
// const add_info_key = ref('其他'); // 以后动态获取
onMounted(() => {
// add_info_name.value = `${props.item.key}#${add_info_key.value}`
// props.item.component_props.options = props.item.component_props.options.map((opt) => {
// return {
// text: opt,
// value: opt,
// };
// });
// 如果有默认值需要触发数值变化进行规则检查
if (props.component_props.default) {
onConfirm({ selectedOptions: [{ value: props.component_props.default }] });
}
});
</script>
<style lang="less" scoped>
</style>