| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // module/user/components/field-picker/field-picker.ts
- Component({
- behaviors: ['wx://form-field'],
- lifetimes: {},
- properties: {
- name: { type: String, value: '' },
- title: { type: String, value: '' },
- options: { type: Array, value: [] },
- optionsColumns: { type: Number, value: 3 },
- itemHeight: { type: Number, value: 64 },
- multiple: { type: Boolean, value: true },
- closeOnOverlayClick: { type: Boolean, value: true },
- },
- data: {
- visible: false,
- value: [],
- selected: [] as Option[],
- },
- observers: {
- 'value, options'(values: Option[] | Option | string, options: Option[]) {
- const selected = new Set<Option>();
- if (options.length) {
- const _values = Array.isArray(values) ? values : values ? [values] : [];
- for (const item of _values) {
- const value = typeof item === 'object' ? item?.value : item;
- const [v,l] = value.split(':');
- const option = options.find(item => item.value === v)
- if (option) selected.add({...option, label: l ?? option.label});
- }
- }
- this.setData({ selected: [...selected] });
- },
- },
- methods: {
- onShow() {
- this.setData({ visible: true });
- },
- onPickerConfirm(event: any) {
- const { options } = event.detail;
- this.setData({ value: options })
- const name = this.data.name;
- if (name) this.triggerEvent('change', { [name]: options }, { bubbles: true, composed: true });
- },
- onPickerClose() {
- this.setData({ visible: false })
- }
- }
- })
|