base_ui/components/other/SelectComponentDefault.vue

209 lines
6.2 KiB
Vue
Raw Normal View History

2025-02-01 09:34:55 +00:00
<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>