base_ui/pages/data-setting/admin-guides.vue

225 lines
5.7 KiB
Vue
Raw Normal View History

2025-02-01 09:34:55 +00:00
<template>
<div class="page">
<div class="container">
<form>
<div class="form-row">
<div class="col-3">
<label for=""> انتخاب بخش:</label>
<multiselect
:allow-empty="false"
:searchable="true"
:close-on-select="true"
:show-labels="false"
:value="value"
:options="options"
class="multi"
@select="select"
label="label"
track-by="key"
placeholder="دسته"
:hide-selected="false"
:max-height="200"
>
</multiselect>
</div>
</div>
<div class="form-row">
<div class="col-6">
<label for="">عنوان سوال:</label>
<input
type="text"
class="form-control"
placeholder="عنوان سوال را کوتاه و واضح وارد نمایید"
v-model="title"
/>
</div>
<div class="col-6">
<label for="">نشانی صفحه:</label>
<input
type="text"
class="form-control"
placeholder="نشانی از همین سامانه انتخاب کنید"
v-model="link"
/>
</div>
</div>
<div class="form-row">
<div class="col">
<label for="">توضیح کوتاه:</label>
<input
type="text"
placeholder="توضیح مختصر حداکثر یک خط باشد"
v-model="description"
maxlength="500"
/>
</div>
</div>
<div class="form-row">
<div class="col">
<label for="" class="mt-2">توضیح مفصل:</label>
<!-- <VueEditor
dir="rtl"
v-model="editorData"
:editorOptions="editorOptions"
></VueEditor> -->
</div>
</div>
</form>
<button class="btn-save" @click="saveData">ذخیره</button>
</div>
</div>
</template>
<script>
import searchApi from "~/apis/searchApi";
import settingsApi from "~/apis/settingsApi";
// import { VueEditor } from "vue2-editor";
import { mapState, mapActions } from "pinia";
import { useStorage } from "@vueuse/core";
export default {
name: "adminGuides",
setup() {
definePageMeta({
name: "adminGuides",
});
},
beforeMount() {
this.httpService = new HttpService(import.meta.env.VITE_REPO_BASE_URL);
},
computed: {
...mapState(useSearchStore, ["helpSchemaGetter"]),
...mapState(["organNameGetter"]),
},
mounted() {
let localStoageHelpSchema = useStorage("settingSchema",undefined).value;
if (localStoageHelpSchema) {
let helpSchema = JSON.parse(localStoageHelpSchema);
this.helpSchemaSetter(helpSchema);
this.options = this.helpSchemaGetter[0].category;
} else this.getSchemas();
},
data() {
return {
value: "",
editorData: "",
title: "",
link: "",
description: "",
fullDesc: "",
httpService: undefined,
options: [{ name: "جستجو" }, { name: "محتوا" }, { name: "مطالعه" }],
editorOptions: {
formats: {
direction: "rtl",
align: "right",
},
placeholder: "توضیحات...",
// readOnly: true,
// theme: "snow",
},
};
},
methods: {
...mapActions("search", ["helpSchemaSetter"]),
select(e) {
this.value = e;
},
getSchemas() {
this.httpService
.postRequest(searchApi.schema.list, {
organ: this.organNameGetter,
system: "setting",
build_state: buildState(),
})
.then((response) => {
this.helpSchemaSetter(response.data.setting);
this.options = this.helpSchemaGetter[0].category;
// this.options = response;
});
},
saveData() {
var origin = location.origin;
let cleaned = this.link;
if (this.link.startsWith(origin) || this.link == "") {
cleaned = this.link.replace(origin, "");
} else {
let errorMessage = "نشانی پیوند باید با " + origin + "شروع شود";
this.mySwalToast({
title: errorMessage,
// html: response.data.message,
icon: "error",
timer: 7000,
});
return "";
}
let payload = {
value_key: this.value.key,
value: this.editorData,
meta : {
title: this.title,
link: cleaned,
description: this.description,
}
}
this.httpService
.postRequest(settingsApi.help.addItem, payload)
.then((response) => {
this.mySwalToast({
title: "با موفقیت ثبت شد",
// html: response.data.message,
icon: "success",
});
this.resetItem();
// this.helpSchemaSetter(response.data.setting);
// this.options = response;
});
},
resetItem() {
this.title = "";
this.link = "";
this.description = "";
this.editorData = "";
},
},
};
</script>
<style scoped lang="scss">
input {
border-radius: 0.5rem;
border: 2px solid rgb(127, 170, 170);
font-size: 14px;
height: 3em;
width: 100%;
&::placeholder {
color: #a7a098;
}
}
.multi {
// width: 200px;
border: 2px solid rgb(127, 170, 170);
border-radius: 0.5rem;
}
.btn-save {
width: 100px;
height: 2.5em;
float: left;
background-color: white;
margin-top: 0.8em;
border-radius: 0.5rem;
border: 2px solid rgb(127, 170, 170);
}
.page {
height: calc(100vh - 5em);
}
</style>