<template> <div class="row form-group mt-3" :key="$attrs.key"> <label :for="localFormElement.key" :class="$attrs.labelClass ?? 'col-md-3'" >{{ getLabel() }}:</label > <div class="mt-2" :class="[$attrs.inputClass ?? ' col-md-9', { error: hasError }]" > <select class="form-control form-select in-advanced-search" @focus="clearErrors" @change="validate" :placeholder="localFormElement.placeholder" :id="localFormElement.key" :name="localFormElement.key" v-model="textValue" > <option v-for="(option, index) in listOptions" :value="option.value" :key="index" > {{ option.title ?? option.value }} </option> </select> </div> </div> </template> <script> import formBuilderMixin from "~/extensions/formBuilderExtension.js"; export default { // props:["listOptions"], extends: formBuilderMixin, beforeMount() { this.httpService = useNuxtApp()["$http"]; }, mounted() { setTimeout(() => { this.setOptions(); }, 500); // console.log(this.localFormElement.initValue) }, data() { return { httpService: undefined, optionRendering: false, listOptions: [], }; }, methods: { updateOptionsViaEventBus(value) { // console.log("updateOptionsViaEventBus", this.localFormElement.key, value); this.localFormElement.options = []; this.setOptions(value); }, setOptions(filter = "", schemaElemant = undefined) { if (this.optionRendering) return; schemaElemant = schemaElemant ? schemaElemant : this.localFormElement; if (schemaElemant?.options && schemaElemant?.options.length) { this.listOptions = schemaElemant?.options; this.initTextValue(); } //موقت گذاشتم تا بک مجلس بروزرسانی بشه else if (schemaElemant.key == "ts_ref") { this.listOptions = [ { value: "مجلس شورای اسلامی", }, { value: "شورای عالی انقلاب فرهنگی", }, { value: "کمیسیون امور قضایی و حقوقی مجلس", }, { value: "مقام معظم رهبری", }, { value: "مجمع تشخیص مصلحت نظام", }, { value: "شورای نگهبان", }, { value: "کمیسیون مشترک اجتماعی و امنیت ملی و سیاست خارجی و برنامه و بودجه و محاسبات مجلس شورای اسلامی", }, { value: "همه پرسی", }, { value: "رییس مجلس شورای اسلامی", }, { value: "کمیسیون تلفیق مجلس شورای سلامی", }, { value: "کمیسیون اقتصادی مجلس شورای اسلامی", }, { value: "کمیسیون اجتماعی مجلس", }, { value: "کمیسیون برنامه و بودجه و محاسبات مجلس شورای اسلامی", }, { value: "کمیسیون صنایع و معادن مجلس شورای اسلامی", }, { value: "کمیسیون آموزش و تحقیقات مجلس شورای اسلامی", }, { value: "مجلس خبرگان رهبری", }, { value: "کمیسیون برنامه مجلس شورای ملی", }, { value: "کمیسیون امور دفاعی مجلس شورای اسلامی", }, { value: "شورای توسعه فرهنگ قرآنی", }, { value: "کمیسیون بهداری مجلس شورای اسلامی", }, { value: "کمیسیون امور داخلی مجلس شورای اسلامی", }, { value: "کمیسیون های ارشاد اسلامی و قضایی مجلس شورای اسلامی", }, { value: "کمیسیون های 1و2 شورای عالی انقلاب فرهنگی", }, ]; this.initTextValue(); } else if (schemaElemant.url_GET) { let url = schemaElemant.url_GET; if (schemaElemant.url_filter && !filter) return; if (filter) url = url.replace("@filter", filter); // console.log("url", schemaElemant.key, url); this.getDynamicOption(url); } else this.listOptions = []; }, // setDefault(schemaElemant) { // let value_defualt = this.localFormElement.value; // if (!value_defualt) value_defualt = schemaElemant.value_defualt ?? ""; // if (!value_defualt) { // this.textValue = // this.listOptions.length > 0 ? this.listOptions[0].value : ""; // return; // } // // this.disableEmitTemprory(2000); // if (!this.textValue) { // this.textValue = // this.listOptions.length > 0 ? this.listOptions[0].value : ""; // } // }, getDynamicOption(url) { if (this.optionRendering) return; let vm = this; // this.httpService = new HttpService(); this.optionRendering = true; this.httpService.getRequest(url).then((res) => { vm.listOptions = []; res.data.forEach((el) => { let obj = { value: el.id, title: el.title ?? el.value, }; // if(schemaElemant.value_save) // obj.value = el[schemaElemant.value_save] vm.listOptions.push(obj); }); vm.initTextValue(); // vm.setDefault(vm.localFormElement); // vm.textValue = vm.listOptions.length > 0 ? vm.listOptions[0].value : ""; // vm.objectValue = vm.listOptions.length > 0 ? vm.listOptions[0] : {}; vm.optionRendering = false; }); }, }, }; </script> <style scoped lang="scss"> .form-select { background-position: left 0.25em center; } </style>