ilk commit
This commit is contained in:
47
src/module/site-yonetimi/components/form/FormSayfaAyar.vue
Normal file
47
src/module/site-yonetimi/components/form/FormSayfaAyar.vue
Normal file
@ -0,0 +1,47 @@
|
||||
<template>
|
||||
<div class="form-part">
|
||||
<div class="form-part-title">
|
||||
<h4>Sayfa Durumu</h4>
|
||||
<div class="form-part-title-buttons"></div>
|
||||
</div>
|
||||
<div class="form-part-content" v-if="siteManagementPageStore.loaded">
|
||||
<form-select
|
||||
v-model="siteManagementPageStore.pageForm.status"
|
||||
:listData="pageStatus"
|
||||
listVal="id"
|
||||
listText="deger"
|
||||
modelKey="status"
|
||||
label="Durum"
|
||||
@change="OnKeyup" />
|
||||
<form-select
|
||||
v-model="siteManagementPageStore.pageForm.parentPageId"
|
||||
:listData="siteManagementPageStore.allPagesList"
|
||||
listVal="id"
|
||||
listText="title"
|
||||
modelKey="parentPageId"
|
||||
label="Üst Sayfa"
|
||||
@change="OnKeyup" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, onBeforeMount } from 'vue'
|
||||
|
||||
import { useSiteManagementPageStore } from '../../stores/siteManagementPageStore'
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
import { useSiteManagementPageService } from '../../service/siteManagementPageService'
|
||||
const siteManagementPageService = useSiteManagementPageService()
|
||||
|
||||
const pageStatus = ref<Record<string,any>[]>([
|
||||
{ id: 1, deger: 'Taslak' },
|
||||
{ id: 2, deger: 'Yayınla' }
|
||||
])
|
||||
|
||||
const OnKeyup = () => {
|
||||
siteManagementPageStore.formChanged = true
|
||||
}
|
||||
onBeforeMount(async () => {
|
||||
await siteManagementPageService.GetAllPages()
|
||||
})
|
||||
|
||||
</script>
|
||||
@ -0,0 +1,67 @@
|
||||
<template>
|
||||
<div class="form-part form-title" v-if="siteManagementPageStore.loaded">
|
||||
<form-input
|
||||
required
|
||||
modelKey="title"
|
||||
v-model="siteManagementPageStore.pageForm.title"
|
||||
:invalidText="siteManagementPageValidationStore.invalidTexts.title"
|
||||
placeholder="Sayfa Başlığı"
|
||||
@keyup="siteManagementPageStore.CreateSlug()" />
|
||||
<div class="title-second">
|
||||
<strong>Sayfa Linki:</strong>
|
||||
<span class="page-slug">
|
||||
{{ siteManagementPageStore.pageForm.slug }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
:class="[
|
||||
'form-part',
|
||||
siteManagementPageStore.formChanged && !siteManagementPageStore.isNew
|
||||
? 'changed'
|
||||
: ''
|
||||
]">
|
||||
<div class="form-part-title">
|
||||
<h4>Sayfa İçeriği</h4>
|
||||
<div class="form-part-title-buttons"></div>
|
||||
</div>
|
||||
<div class="form-part-content" v-if="siteManagementPageStore.loaded">
|
||||
<form-summer
|
||||
label="İçerik"
|
||||
modelKey="content"
|
||||
v-model="siteManagementPageStore.pageForm.content"
|
||||
@change="OnKeyup" />
|
||||
<form-input
|
||||
modelKey="etiket"
|
||||
v-model="siteManagementPageStore.pageForm.etiket"
|
||||
label="Etiketler"
|
||||
description="Etiketleri , ile ayırark yazınız"
|
||||
@keyup="OnKeyup" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onBeforeMount } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
|
||||
import { useSiteManagementPageStore } from '../../stores/siteManagementPageStore'
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
import { useSiteManagementPageValidationStore } from '../../validation/siteManagementPageValidationStore'
|
||||
const siteManagementPageValidationStore = useSiteManagementPageValidationStore()
|
||||
import { useSiteManagementPageService } from '../../service/siteManagementPageService'
|
||||
const siteManagementPageService = useSiteManagementPageService()
|
||||
|
||||
const OnKeyup = () => {
|
||||
siteManagementPageStore.formChanged = true
|
||||
}
|
||||
|
||||
onBeforeMount(async () => {
|
||||
if (!siteManagementPageStore.isNew) {
|
||||
await siteManagementPageService.GetData()
|
||||
} else {
|
||||
siteManagementPageStore.ResetForm()
|
||||
siteManagementPageStore.loaded = true
|
||||
}
|
||||
})
|
||||
</script>
|
||||
114
src/module/site-yonetimi/components/form/FormSayfaPicture.vue
Normal file
114
src/module/site-yonetimi/components/form/FormSayfaPicture.vue
Normal file
@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<div class="form-part">
|
||||
<div class="form-part-title">
|
||||
<h4>Sayfa Görseli</h4>
|
||||
</div>
|
||||
<div class="form-part-content">
|
||||
<template v-if="file.fileUrl !== '' && file.fileUrl !== null">
|
||||
<file-list-item
|
||||
:data="file"
|
||||
@click="ReplaceImage"
|
||||
onlyPreview
|
||||
:filePath="file.fileUrl" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="form-item form-item-picture clickable" @click="picturePanel = true">
|
||||
<div class="image-c">
|
||||
<i class="ico-c">
|
||||
<svg>
|
||||
<use href="@/assets/images/icons.svg#plus"></use>
|
||||
</svg>
|
||||
</i>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<panel-wrapper
|
||||
v-if="picturePanel"
|
||||
v-model="picturePanel"
|
||||
panel-title="Profil Resmi Ekle">
|
||||
<template #panelContent>
|
||||
<panel-sayfa-picture />
|
||||
</template>
|
||||
<template #footerButton>
|
||||
<div class="button-c button-save" @click="FileUpload">Ekle</div>
|
||||
</template>
|
||||
</panel-wrapper>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onBeforeMount } from 'vue'
|
||||
import PanelSayfaPicture from '../panel/PanelSayfaPicture.vue'
|
||||
import PanelWrapper from '@/components/PanelWrapper.vue'
|
||||
|
||||
import { useDataStore } from '@/stores/dataStore'
|
||||
const dataStore = useDataStore()
|
||||
import { useGlobalStore } from '@/stores/globalStore'
|
||||
const globalStore = useGlobalStore()
|
||||
import { useValidationStore } from '@/stores/validationStore'
|
||||
const validationStore = useValidationStore()
|
||||
import { useSiteManagementPageStore } from '../../stores/siteManagementPageStore'
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
|
||||
const picturePanel = ref<boolean>(false)
|
||||
const isUpdate = ref<boolean>(false)
|
||||
|
||||
const file = reactive<Record<string,any>>({
|
||||
title: '',
|
||||
fileUrl: ''
|
||||
})
|
||||
|
||||
const ReplaceImage = (d: object) => {
|
||||
Object.assign(dataStore.panelData, d)
|
||||
isUpdate.value = true
|
||||
picturePanel.value = true
|
||||
}
|
||||
|
||||
const GetData = async () => {
|
||||
let dt = await dataStore.dataGet(
|
||||
'DocumentPage/GetDocumentsByPageId/' + siteManagementPageStore.selectedPage
|
||||
)
|
||||
Object.assign(file, dt[0])
|
||||
}
|
||||
|
||||
const FormCheck = (): boolean => {
|
||||
let check: any = true
|
||||
if (dataStore.panelData.file === null) {
|
||||
validationStore.panelInvalidText.file = 'Bir dosya seçmelisiniz'
|
||||
check = false
|
||||
} else delete validationStore.panelInvalidText.file
|
||||
if (check === '') check = true
|
||||
return check
|
||||
}
|
||||
|
||||
const FileUpload = async () => {
|
||||
if (FormCheck()) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', dataStore.panelData.file)
|
||||
formData.append('title', '-')
|
||||
formData.append('pageId', String(siteManagementPageStore.selectedPage))
|
||||
let dt: any
|
||||
|
||||
if (!isUpdate.value) {
|
||||
dt = await dataStore.dataPost('DocumentPage/upload', {
|
||||
data: formData,
|
||||
headers: { 'Content-Type': 'multipart/form-data' }
|
||||
})
|
||||
} else {
|
||||
dt = await dataStore.dataPut('DocumentPage/' + dataStore.panelData.id, {
|
||||
data: formData,
|
||||
headers: { 'Content-Type': 'multipart/form-data' }
|
||||
})
|
||||
}
|
||||
if (dt !== 'errorfalse') {
|
||||
Object.assign(file, {})
|
||||
await GetData()
|
||||
picturePanel.value = false
|
||||
isUpdate.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
onBeforeMount(async () => {
|
||||
await GetData()
|
||||
})
|
||||
</script>
|
||||
29
src/module/site-yonetimi/components/panel/PanelMenuItem.vue
Normal file
29
src/module/site-yonetimi/components/panel/PanelMenuItem.vue
Normal file
@ -0,0 +1,29 @@
|
||||
<template>
|
||||
<form-input
|
||||
modelKey="title"
|
||||
v-model="siteManagementMenuStore.menuItemData.title"
|
||||
required
|
||||
label="Başlık"
|
||||
minlength="2"
|
||||
:invalidText="siteManagementMenuValidationStore.invalidTexts.title" />
|
||||
|
||||
<form-input
|
||||
modelKey="slug"
|
||||
v-model="siteManagementMenuStore.menuItemData.slug"
|
||||
required
|
||||
label="Adres"
|
||||
minlength="2"
|
||||
:invalidText="siteManagementMenuValidationStore.invalidTexts.slug" />
|
||||
<div class="form-item">
|
||||
<form-checkbox
|
||||
label="Yeni Pencerede Aç"
|
||||
val="_blank"
|
||||
v-model="siteManagementMenuStore.menuItemData.targetKey" />
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { useSiteManagementMenuStore } from '../../stores/siteManagementMenuStore'
|
||||
const siteManagementMenuStore = useSiteManagementMenuStore()
|
||||
import { useSiteManagementMenuValidationStore } from '../../validation/siteManagementMenuValidationStore'
|
||||
const siteManagementMenuValidationStore = useSiteManagementMenuValidationStore()
|
||||
</script>
|
||||
@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<form-file
|
||||
v-model="dataStore.panelData.file"
|
||||
elclass="panel-documents-item"
|
||||
:invalidText="validationStore.panelInvalidText.file"/>
|
||||
</template>
|
||||
<script setup lang="ts">import { useDataStore } from '@/stores/dataStore'
|
||||
const dataStore = useDataStore()
|
||||
import { useValidationStore } from '@/stores/validationStore'
|
||||
const validationStore = useValidationStore()
|
||||
</script>
|
||||
10
src/module/site-yonetimi/routes/ayarlar.ts
Normal file
10
src/module/site-yonetimi/routes/ayarlar.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import Ayarlar from "@/module/site-yonetimi/views/Ayarlar.vue";
|
||||
|
||||
export default {
|
||||
path: '/site-yonetimi/ayarlar',
|
||||
name: 'SiteAyarlari',
|
||||
component: Ayarlar,
|
||||
meta: {
|
||||
authRequired: true
|
||||
}
|
||||
}
|
||||
8
src/module/site-yonetimi/routes/index.ts
Normal file
8
src/module/site-yonetimi/routes/index.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import sayfaYeni from '@/module/site-yonetimi/routes/sayfa-yeni'
|
||||
import sayfDetay from '@/module/site-yonetimi/routes/sayfa-detay'
|
||||
import sayfaListe from '@/module/site-yonetimi/routes/sayfa-liste'
|
||||
import menuYonetimi from '@/module/site-yonetimi/routes/menu-yonetimi'
|
||||
import menuListe from '@/module/site-yonetimi/routes/menu-liste'
|
||||
import ayarlar from '@/module/site-yonetimi/routes/ayarlar'
|
||||
|
||||
export default [sayfaYeni, sayfDetay, sayfaListe, menuYonetimi, menuListe, ayarlar]
|
||||
10
src/module/site-yonetimi/routes/menu-liste.ts
Normal file
10
src/module/site-yonetimi/routes/menu-liste.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import MenuListe from "../views/MenuListe.vue";
|
||||
|
||||
export default {
|
||||
path: '/site-yonetimi/menu-listesi',
|
||||
name: 'MenuListe',
|
||||
component: MenuListe,
|
||||
meta: {
|
||||
authRequired: true
|
||||
}
|
||||
}
|
||||
10
src/module/site-yonetimi/routes/menu-yonetimi.ts
Normal file
10
src/module/site-yonetimi/routes/menu-yonetimi.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import MenuYonetimi from "../views/MenuYonetimi.vue";
|
||||
|
||||
export default {
|
||||
path: '/site-yonetimi/menu-yonetimi/:menuId',
|
||||
name: 'MenuYonetimi',
|
||||
component: MenuYonetimi,
|
||||
meta: {
|
||||
authRequired: true
|
||||
}
|
||||
}
|
||||
10
src/module/site-yonetimi/routes/sayfa-detay.ts
Normal file
10
src/module/site-yonetimi/routes/sayfa-detay.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import SayfaDetay from '@/module/site-yonetimi/views/SayfaDetay.vue'
|
||||
|
||||
export default {
|
||||
path: '/sayfalar/detay/:pageId',
|
||||
name: 'SayfaDetay',
|
||||
component: SayfaDetay,
|
||||
meta: {
|
||||
authRequired: true
|
||||
}
|
||||
}
|
||||
10
src/module/site-yonetimi/routes/sayfa-liste.ts
Normal file
10
src/module/site-yonetimi/routes/sayfa-liste.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import SayfaListesi from '@/module/site-yonetimi/views/SayfaListesi.vue'
|
||||
|
||||
export default {
|
||||
path: '/site-yonetimi/sayfa-listesi',
|
||||
name: 'SayfaListe',
|
||||
component: SayfaListesi,
|
||||
meta: {
|
||||
authRequired: true
|
||||
}
|
||||
}
|
||||
10
src/module/site-yonetimi/routes/sayfa-yeni.ts
Normal file
10
src/module/site-yonetimi/routes/sayfa-yeni.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import SayfaYeni from "@/module/site-yonetimi/views/SayfaYeni.vue";
|
||||
|
||||
export default {
|
||||
path: '/site-yonetimi/yeni-sayfa',
|
||||
name: 'SayfaYeni',
|
||||
component: SayfaYeni,
|
||||
meta: {
|
||||
authRequired: true
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { useDataStore } from '@/stores/dataStore'
|
||||
import { useSiteManagementMenuStore } from '../stores/siteManagementMenuStore'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
export const useSiteManagementMenuService = defineStore('siteManagementMenuService', () => {
|
||||
const dataStore = useDataStore()
|
||||
const siteManagementMenuStore = useSiteManagementMenuStore()
|
||||
const route = useRoute()
|
||||
|
||||
const GetMenuContentList = async () => {
|
||||
let data: Record<string, any> | any = await dataStore.dataGet(
|
||||
'Menu/Konum/' + route.params.menuId
|
||||
)
|
||||
|
||||
if (data !== 'errorfalse') {
|
||||
siteManagementMenuStore.menuContentList = data
|
||||
}
|
||||
}
|
||||
|
||||
return { GetMenuContentList }
|
||||
})
|
||||
@ -0,0 +1,83 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { useDataStore } from '@/stores/dataStore'
|
||||
import { useSiteManagementPageStore } from '../stores/siteManagementPageStore'
|
||||
import { useSiteManagementPageValidationStore } from '../validation/siteManagementPageValidationStore'
|
||||
import { useToastStore } from '@/components/global/toastStore'
|
||||
import { useUsersStore } from '@/stores/usersStore'
|
||||
import router from '@/router'
|
||||
|
||||
export const useSiteManagementPageService = defineStore(
|
||||
'siteManagementPageService',
|
||||
() => {
|
||||
const dataStore = useDataStore()
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
const siteManagementPageValidationStore = useSiteManagementPageValidationStore()
|
||||
const toastStore = useToastStore()
|
||||
const usersStore = useUsersStore()
|
||||
|
||||
const GetAllPages = async () => {
|
||||
if (siteManagementPageStore.allPagesList.length === 0) {
|
||||
let data: Record<string, any> | any = await dataStore.dataGet(
|
||||
'Page/?pageNumber=0'
|
||||
)
|
||||
|
||||
if (data !== 'errorfalse') {
|
||||
siteManagementPageStore.allPagesList = data
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const GetData = async () => {
|
||||
siteManagementPageStore.loaded = false
|
||||
|
||||
let data = await dataStore.dataGet('Page/' + siteManagementPageStore.selectedPage)
|
||||
|
||||
if (data !== 'errorfalse') {
|
||||
Object.assign(siteManagementPageStore.pageForm, data)
|
||||
Object.assign(siteManagementPageStore.pageSafeForm, data)
|
||||
|
||||
setTimeout(() => {
|
||||
siteManagementPageStore.loaded = true
|
||||
}, 30)
|
||||
setTimeout(() => {
|
||||
siteManagementPageStore.formChanged = false
|
||||
}, 50)
|
||||
}
|
||||
}
|
||||
|
||||
const SaveData = async () => {
|
||||
if (siteManagementPageValidationStore.FormCheck()) {
|
||||
let res: any
|
||||
|
||||
if (siteManagementPageStore.isNew) {
|
||||
res = await dataStore.dataPost('Page', {
|
||||
data: siteManagementPageStore.pageForm
|
||||
})
|
||||
} else {
|
||||
siteManagementPageStore.pageForm.appUserId = usersStore.userId
|
||||
res = await dataStore.dataPut('Page/' + siteManagementPageStore.pageForm.id, {
|
||||
data: siteManagementPageStore.pageForm
|
||||
})
|
||||
}
|
||||
|
||||
if (res !== 'errorfalse') {
|
||||
if (siteManagementPageStore.isNew)
|
||||
toastStore.AddToast('Sayfa başarıyla kaydedildi', 'success', 5000)
|
||||
else toastStore.AddToast('Başarıyla kaydedildi', 'success', 5000)
|
||||
|
||||
siteManagementPageStore.formChanged = false
|
||||
siteManagementPageStore.loaded = false
|
||||
dataStore.pageDataUpdate = true
|
||||
if (!siteManagementPageStore.isNew) GetData()
|
||||
else router.push('/site-yonetimi/sayfa-listesi')
|
||||
|
||||
siteManagementPageStore.isNew = false
|
||||
}
|
||||
} else {
|
||||
siteManagementPageValidationStore.isFormValid = true
|
||||
}
|
||||
}
|
||||
|
||||
return { GetAllPages, GetData, SaveData }
|
||||
}
|
||||
)
|
||||
30
src/module/site-yonetimi/stores/siteManagementMenuStore.ts
Normal file
30
src/module/site-yonetimi/stores/siteManagementMenuStore.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, reactive } from 'vue'
|
||||
|
||||
export const useSiteManagementMenuStore = defineStore('siteManagementMenuStore', () => {
|
||||
const menuContentList = ref<Record<string, any>[]>([])
|
||||
|
||||
const deleteMenuList = ref<Record<string, any>[]>([])
|
||||
const menuControlId = ref<number>(0)
|
||||
|
||||
const safeMenuItemData = reactive<Record<string, any>>({
|
||||
title: '',
|
||||
konumId: null,
|
||||
sira: null,
|
||||
slug: '',
|
||||
parentMenuId: null,
|
||||
pageId: null,
|
||||
isActive: true,
|
||||
targetKey: false
|
||||
})
|
||||
|
||||
const menuItemData = reactive<Record<string, any>>({})
|
||||
|
||||
return {
|
||||
deleteMenuList,
|
||||
menuContentList,
|
||||
menuControlId,
|
||||
menuItemData,
|
||||
safeMenuItemData
|
||||
}
|
||||
})
|
||||
54
src/module/site-yonetimi/stores/siteManagementPageStore.ts
Normal file
54
src/module/site-yonetimi/stores/siteManagementPageStore.ts
Normal file
@ -0,0 +1,54 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useUsersStore } from '@/stores/usersStore'
|
||||
import { useGlobalStore } from '@/stores/globalStore'
|
||||
|
||||
export const useSiteManagementPageStore = defineStore('siteManagementPageStore', () => {
|
||||
const usersStore = useUsersStore()
|
||||
const globalStore = useGlobalStore()
|
||||
|
||||
const selectedPage = ref<number | null>(null)
|
||||
const allPagesList = ref<Record<string, any>[]>([])
|
||||
const pageBaseForm = reactive<Record<string, any>>({
|
||||
slug: '',
|
||||
title: '',
|
||||
content: '',
|
||||
etiket: '',
|
||||
parentPageId: null,
|
||||
status: 1,
|
||||
appUserId: usersStore.userId
|
||||
})
|
||||
|
||||
const pageForm = reactive<Record<string, any>>({})
|
||||
const pageSafeForm = reactive<Record<string, any>>({})
|
||||
const formChanged = ref<boolean>(false)
|
||||
const loaded = ref<boolean>(false)
|
||||
const isNew = ref<boolean>(false)
|
||||
|
||||
const ResetForm = () => {
|
||||
globalStore.ResetObject(pageForm, pageBaseForm)
|
||||
Object.assign(pageForm, pageBaseForm)
|
||||
}
|
||||
const RestoreForm = () => {
|
||||
Object.assign(pageForm, pageSafeForm)
|
||||
formChanged.value = false
|
||||
}
|
||||
const CreateSlug = () => {
|
||||
pageForm.slug = globalStore.CreateSlug(pageForm.title)
|
||||
formChanged.value = true
|
||||
}
|
||||
|
||||
return {
|
||||
selectedPage,
|
||||
allPagesList,
|
||||
pageBaseForm,
|
||||
pageForm,
|
||||
pageSafeForm,
|
||||
formChanged,
|
||||
loaded,
|
||||
isNew,
|
||||
ResetForm,
|
||||
RestoreForm,
|
||||
CreateSlug
|
||||
}
|
||||
})
|
||||
@ -0,0 +1,30 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useValidationStore } from '@/stores/validationStore'
|
||||
import { useSiteManagementMenuStore } from '../stores/siteManagementMenuStore'
|
||||
|
||||
export const useSiteManagementMenuValidationStore = defineStore('siteManagementMenuValidationStore', () => {
|
||||
const siteManagementMenuStore = useSiteManagementMenuStore()
|
||||
const validationStore = useValidationStore()
|
||||
|
||||
const formChanged = ref<boolean>(false)
|
||||
const isFormValid = ref<boolean>(true)
|
||||
const invalidTexts = reactive<Record<string, any>>({})
|
||||
|
||||
const FormCheck = (): boolean => {
|
||||
Object.assign(invalidTexts, {})
|
||||
validationStore.IsFieldEmpty(siteManagementMenuStore.menuItemData,invalidTexts,'title', 'Menü için başlık belirlemelisiniz.')
|
||||
validationStore.IsFieldEmpty(siteManagementMenuStore.menuItemData,invalidTexts,'slug', 'Tıklandığı zaman açılacak linki yazınız.')
|
||||
|
||||
isFormValid.value = Object.keys(invalidTexts).length === 0
|
||||
|
||||
return isFormValid.value
|
||||
}
|
||||
|
||||
return {
|
||||
formChanged,
|
||||
isFormValid,
|
||||
invalidTexts,
|
||||
FormCheck
|
||||
}
|
||||
})
|
||||
@ -0,0 +1,30 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useValidationStore } from '@/stores/validationStore'
|
||||
import { useSiteManagementPageStore } from '../stores/siteManagementPageStore'
|
||||
|
||||
export const useSiteManagementPageValidationStore = defineStore('siteManagementPageValidationStore', () => {
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
const validationStore = useValidationStore()
|
||||
|
||||
const formChanged = ref<boolean>(false)
|
||||
const isFormValid = ref<boolean>(true)
|
||||
const invalidTexts = reactive<Record<string, any>>({})
|
||||
|
||||
const FormCheck = (): boolean => {
|
||||
Object.assign(invalidTexts, {})
|
||||
validationStore.IsFieldEmpty(siteManagementPageStore.pageForm,invalidTexts,'title', 'Menü için başlık belirlemelisiniz.')
|
||||
validationStore.IsFieldEmpty(siteManagementPageStore.pageForm,invalidTexts,'slug', 'Tıklandığı zaman açılacak linki yazınız.')
|
||||
|
||||
isFormValid.value = Object.keys(invalidTexts).length === 0
|
||||
|
||||
return isFormValid.value
|
||||
}
|
||||
|
||||
return {
|
||||
formChanged,
|
||||
isFormValid,
|
||||
invalidTexts,
|
||||
FormCheck
|
||||
}
|
||||
})
|
||||
9
src/module/site-yonetimi/views/Ayarlar.vue
Normal file
9
src/module/site-yonetimi/views/Ayarlar.vue
Normal file
@ -0,0 +1,9 @@
|
||||
<template>
|
||||
<AdminLayout>
|
||||
<Breadcrumb current-page-text="Site Ayarlar"/>
|
||||
</AdminLayout>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import AdminLayout from "@/layouts/AdminLayout.vue";
|
||||
import {Breadcrumb} from "@/components/global";
|
||||
</script>
|
||||
40
src/module/site-yonetimi/views/MenuListe.vue
Normal file
40
src/module/site-yonetimi/views/MenuListe.vue
Normal file
@ -0,0 +1,40 @@
|
||||
<template>
|
||||
<AdminLayout>
|
||||
<Breadcrumb currentPageText="Menü Listesi" />
|
||||
<section class="section-list">
|
||||
<list-table-content
|
||||
:tableHeader="tableHeader"
|
||||
:rowAction="OpenMenu"
|
||||
icon="sitemanagement"
|
||||
title="Menüler"
|
||||
listText="Menü"
|
||||
:tableData="menuList"
|
||||
apiText="Menü Listesi"
|
||||
v-model:refresh="refreshList" />
|
||||
</section>
|
||||
</AdminLayout>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive } from 'vue'
|
||||
import AdminLayout from '@/layouts/AdminLayout.vue'
|
||||
import { Breadcrumb } from '@/components/global'
|
||||
import router from '@/router'
|
||||
|
||||
const refreshList = ref<boolean>(false)
|
||||
const tableHeader = ref<Record<string, any>[]>([
|
||||
{
|
||||
name: 'title',
|
||||
title: 'Menü',
|
||||
sort: true
|
||||
}
|
||||
])
|
||||
|
||||
const menuList = ref<Record<string,any>[]>([
|
||||
{title:"Ana Menü",positionId:1},
|
||||
{title:"Footer Menü",positionId:2}
|
||||
])
|
||||
|
||||
const OpenMenu = (row: any) => {
|
||||
router.push('menu-yonetimi/' + row.positionId)
|
||||
}
|
||||
</script>
|
||||
278
src/module/site-yonetimi/views/MenuYonetimi.vue
Normal file
278
src/module/site-yonetimi/views/MenuYonetimi.vue
Normal file
@ -0,0 +1,278 @@
|
||||
<template>
|
||||
<AdminLayout>
|
||||
<Breadcrumb current-page-text="Menu Yonetimi" />
|
||||
<div class="form-content">
|
||||
<div class="form-inner-content form-inner-content-left">
|
||||
<div class="form-part">
|
||||
<div class="form-part-title">
|
||||
<h4>
|
||||
{{ Number(route.params.menuId) === 1 ? 'Ana Menü' : 'Footer Menü' }}
|
||||
</h4>
|
||||
<div class="form-part-title-buttons">
|
||||
<div class="button-c button-save" @click="SaveMenu">Kaydet</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-part-content">
|
||||
<template v-if="loaded">
|
||||
<template v-if="siteManagementMenuStore.menuContentList.length > 0">
|
||||
<div class="form-inner-comment">
|
||||
Menü öğelerini sürükle-bırak yaparak düzenleyebilirsiniz.
|
||||
</div>
|
||||
<draggable
|
||||
class="menu-list-group"
|
||||
:list="siteManagementMenuStore.menuContentList"
|
||||
:group="{ name: 'menu', put: false }"
|
||||
itemKey="id"
|
||||
@end="ChangeMenu">
|
||||
<template #item="{ element, index }">
|
||||
<div class="menu-list-item">
|
||||
<span>{{ element.title }}</span>
|
||||
<div class="menu-list-item-buttons">
|
||||
<button
|
||||
@click="EditMenu(element, index)"
|
||||
v-if="element.pageId === null">
|
||||
Düzenle
|
||||
</button>
|
||||
<button
|
||||
@click="RemoveFromMenu(element, index)"
|
||||
class="button-alert">
|
||||
Sil
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</draggable>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="form-inner-comment">
|
||||
Menüye henüz öğe eklenmemiş. Sağdaki bölümden öğe ekleyebilirsiniz.
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-inner-content form-inner-content-right">
|
||||
<div class="form-part">
|
||||
<div class="form-part-title">
|
||||
<h4>Sayfalar</h4>
|
||||
<div class="form-part-title-buttons">
|
||||
<div class="button-c button-save" @click="AddMenuItem">Menü Öğesi Ekle</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-part-content">
|
||||
<div class="menu-list-group">
|
||||
<template v-for="(page, i) in pageList">
|
||||
<div v-if="page.show" class="menu-list-item menu-list-item-page">
|
||||
<span>{{ page.title }}</span>
|
||||
<div class="menu-list-item-buttons">
|
||||
<button @click="AddToMenu(page, i)">Menüye Ekle</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<panel-wrapper
|
||||
wide
|
||||
v-if="menuItemPanel"
|
||||
v-model="menuItemPanel"
|
||||
:panel-title="isEdit ? 'Menü Öğesi Düzenle' : 'Menü Öğesi Ekle'">
|
||||
<template #panelContent>
|
||||
<panel-menu-item />
|
||||
</template>
|
||||
<template #footerButton>
|
||||
<div class="button-c button-save" @click="SaveMenuItem">
|
||||
{{ isEdit ? 'Kaydet' : 'Ekle' }}
|
||||
</div>
|
||||
</template>
|
||||
</panel-wrapper>
|
||||
</AdminLayout>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onBeforeMount } from 'vue'
|
||||
import draggable from 'vuedraggable'
|
||||
import AdminLayout from '@/layouts/AdminLayout.vue'
|
||||
import { Breadcrumb } from '@/components/global'
|
||||
import PanelWrapper from '@/components/PanelWrapper.vue'
|
||||
import PanelMenuItem from '../components/panel/PanelMenuItem.vue'
|
||||
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
import { useDataStore } from '@/stores/dataStore'
|
||||
const dataStore = useDataStore()
|
||||
import { useSiteManagementMenuStore } from '../stores/siteManagementMenuStore'
|
||||
const siteManagementMenuStore = useSiteManagementMenuStore()
|
||||
import { useSiteManagementPageStore } from '../stores/siteManagementPageStore'
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
import { useSiteManagementMenuValidationStore } from '../validation/siteManagementMenuValidationStore'
|
||||
const siteManagementMenuValidationStore = useSiteManagementMenuValidationStore()
|
||||
import { useSiteManagementMenuService } from '../service/siteManagementMenuService'
|
||||
const siteManagementMenuService = useSiteManagementMenuService()
|
||||
import { useSiteManagementPageService } from '../service/siteManagementPageService'
|
||||
const siteManagementPageService = useSiteManagementPageService()
|
||||
|
||||
const onayIslemTipleri = ref<Record<string, any>[]>([])
|
||||
const formData = reactive<Record<string, any>>({})
|
||||
const invalidTexts = reactive<Record<string, any>>({})
|
||||
const loaded = ref<boolean>(false)
|
||||
|
||||
const menuItemPanel = ref<boolean>(false)
|
||||
const isEdit = ref<boolean>(false)
|
||||
const pageList = ref<Record<string, any>[]>([])
|
||||
const editMenuIndex = ref<number | null>(null)
|
||||
|
||||
const AddMenuItem = () => {
|
||||
isEdit.value = false
|
||||
Object.assign(
|
||||
siteManagementMenuStore.menuItemData,
|
||||
siteManagementMenuStore.safeMenuItemData
|
||||
)
|
||||
menuItemPanel.value = true
|
||||
}
|
||||
|
||||
const EditMenu = (data: Record<string, any>, i: number) => {
|
||||
isEdit.value = true
|
||||
Object.assign(siteManagementMenuStore.menuItemData, data)
|
||||
siteManagementMenuStore.menuItemData.targetKey =
|
||||
siteManagementMenuStore.menuItemData.targetKey === '_blank' ? true : false
|
||||
|
||||
editMenuIndex.value = i
|
||||
menuItemPanel.value = true
|
||||
}
|
||||
|
||||
const SaveMenu = async () => {
|
||||
var dt: any
|
||||
siteManagementMenuStore.menuContentList.forEach(async (el, i) => {
|
||||
if (el.type === 'update') {
|
||||
dt = await dataStore.dataPut('Menu/' + el.id, {
|
||||
data: el
|
||||
})
|
||||
}
|
||||
if (el.type === 'new') {
|
||||
dt = await dataStore.dataPost('Menu', {
|
||||
data: el
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
siteManagementMenuStore.deleteMenuList.forEach(async (el, i) => {
|
||||
dt = await dataStore.dataDelete('Menu/' + el)
|
||||
})
|
||||
|
||||
setTimeout(async () => {
|
||||
siteManagementMenuStore.deleteMenuList = []
|
||||
await GetMenuList()
|
||||
}, 50)
|
||||
}
|
||||
|
||||
const ReorderMenu = () => {
|
||||
siteManagementMenuStore.menuContentList.forEach((el, i) => {
|
||||
el.sira = i + 1
|
||||
if (el.id !== undefined) el.type = 'update'
|
||||
})
|
||||
}
|
||||
const ChangeMenu = (data: Record<string, any>) => {
|
||||
ReorderMenu()
|
||||
}
|
||||
const AddToMenu = (data: Record<string, any>, i: number) => {
|
||||
let newData: Record<string, any> = {
|
||||
title: data.title,
|
||||
konumId: route.params.menuId,
|
||||
slug: data.slug,
|
||||
parentMenuId: null,
|
||||
pageId: data.id,
|
||||
isActive: true,
|
||||
type: 'new',
|
||||
targetKey: '',
|
||||
sira: siteManagementMenuStore.menuContentList.length + 1
|
||||
}
|
||||
siteManagementMenuStore.menuContentList.push(newData)
|
||||
data.show = false
|
||||
}
|
||||
|
||||
const CheckPageList = () => {
|
||||
pageList.value.forEach((page) => {
|
||||
var show: boolean = true
|
||||
siteManagementMenuStore.menuContentList.forEach((menu) => {
|
||||
if (page.id === menu.pageId) show = false
|
||||
})
|
||||
page.show = show
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
loaded.value = true
|
||||
}, 10)
|
||||
}
|
||||
|
||||
const RemoveFromMenu = (el: Record<string, any>, i: number) => {
|
||||
siteManagementMenuStore.menuContentList.splice(i, 1)
|
||||
|
||||
if (el.pageId !== null) {
|
||||
let page = pageList.value.filter((itm) => itm.id === el.pageId)[0]
|
||||
page.show = true
|
||||
}
|
||||
if (el.id !== undefined) {
|
||||
siteManagementMenuStore.deleteMenuList.push(el.id)
|
||||
}
|
||||
ReorderMenu()
|
||||
}
|
||||
|
||||
const SaveMenuItem = () => {
|
||||
if (siteManagementMenuValidationStore.FormCheck()) {
|
||||
if (!isEdit.value) {
|
||||
let newData: Record<string, any> = {
|
||||
title: siteManagementMenuStore.menuItemData.title,
|
||||
konumId: route.params.menuId,
|
||||
slug: siteManagementMenuStore.menuItemData.slug,
|
||||
parentMenuId: null,
|
||||
pageId: null,
|
||||
isActive: true,
|
||||
type: 'new',
|
||||
targetKey: siteManagementMenuStore.menuItemData.targetKey ? '_blank' : '',
|
||||
sira: siteManagementMenuStore.menuContentList.length + 1
|
||||
}
|
||||
siteManagementMenuStore.menuContentList.push(newData)
|
||||
} else {
|
||||
if (siteManagementMenuStore.menuItemData.id !== undefined)
|
||||
siteManagementMenuStore.menuItemData.type = 'update'
|
||||
|
||||
siteManagementMenuStore.menuItemData.targetKey = siteManagementMenuStore
|
||||
.menuItemData.targetKey
|
||||
? '_blank'
|
||||
: ''
|
||||
|
||||
Object.assign(
|
||||
siteManagementMenuStore.menuContentList[editMenuIndex.value!],
|
||||
siteManagementMenuStore.menuItemData
|
||||
)
|
||||
|
||||
isEdit.value = false
|
||||
editMenuIndex.value = null
|
||||
}
|
||||
menuItemPanel.value = false
|
||||
}else{
|
||||
siteManagementMenuValidationStore.isFormValid = true
|
||||
}
|
||||
}
|
||||
|
||||
const GetMenuList = async () => {
|
||||
await siteManagementMenuService.GetMenuContentList()
|
||||
siteManagementMenuStore.menuContentList.sort((a, b) => a.sira - b.sira)
|
||||
|
||||
pageList.value.splice(
|
||||
0,
|
||||
pageList.value.length,
|
||||
...siteManagementPageStore.allPagesList
|
||||
)
|
||||
|
||||
CheckPageList()
|
||||
}
|
||||
|
||||
onBeforeMount(async () => {
|
||||
await siteManagementPageService.GetAllPages()
|
||||
await GetMenuList()
|
||||
})
|
||||
</script>
|
||||
49
src/module/site-yonetimi/views/SayfaDetay.vue
Normal file
49
src/module/site-yonetimi/views/SayfaDetay.vue
Normal file
@ -0,0 +1,49 @@
|
||||
<template>
|
||||
<AdminLayout>
|
||||
<Breadcrumb currentPageText="Sayfa Detay" />
|
||||
<div class="form-part form-title">
|
||||
<div class="form-title-buttons">
|
||||
<button
|
||||
class="button-c button-save"
|
||||
@click="siteManagementPageService.SaveData"
|
||||
:disabled="!siteManagementPageStore.formChanged">
|
||||
Kaydet
|
||||
</button>
|
||||
<button
|
||||
class="button-c button-cancel"
|
||||
@click="siteManagementPageStore.RestoreForm"
|
||||
v-if="siteManagementPageStore.formChanged">
|
||||
Vazgeç
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-content">
|
||||
<div class="form-inner-content form-inner-content-left">
|
||||
<form-sayfa-bilgileri />
|
||||
</div>
|
||||
<div class="form-inner-content form-inner-content-right">
|
||||
<form-sayfa-ayar />
|
||||
<form-sayfa-picture />
|
||||
</div>
|
||||
</div>
|
||||
</AdminLayout>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { onBeforeMount } from 'vue'
|
||||
import AdminLayout from '@/layouts/AdminLayout.vue'
|
||||
import FormSayfaBilgileri from '../components/form/FormSayfaBilgileri.vue'
|
||||
import FormSayfaAyar from '../components/form/FormSayfaAyar.vue'
|
||||
import FormSayfaPicture from '../components/form/FormSayfaPicture.vue'
|
||||
|
||||
import { useRoute } from 'vue-router'
|
||||
const route = useRoute()
|
||||
import { useSiteManagementPageStore } from '../stores/siteManagementPageStore'
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
import { useSiteManagementPageService } from '../service/siteManagementPageService'
|
||||
const siteManagementPageService = useSiteManagementPageService()
|
||||
|
||||
onBeforeMount(() => {
|
||||
siteManagementPageStore.selectedPage = Number(route.params.pageId)
|
||||
siteManagementPageStore.isNew = false
|
||||
})
|
||||
</script>
|
||||
34
src/module/site-yonetimi/views/SayfaListesi.vue
Normal file
34
src/module/site-yonetimi/views/SayfaListesi.vue
Normal file
@ -0,0 +1,34 @@
|
||||
<template>
|
||||
<AdminLayout>
|
||||
<Breadcrumb current-page-text="Sayfa Listesi" />
|
||||
<section class="section-list">
|
||||
<list-table-content
|
||||
:tableHeader="tableHeader"
|
||||
:rowAction="pageDetail"
|
||||
icon="sitemanagement"
|
||||
title="Sayfalar"
|
||||
listText="Sayfa"
|
||||
addRoute="yeni-sayfa"
|
||||
apiList="Page"
|
||||
apiText="Sayfa Listesi" />
|
||||
</section>
|
||||
</AdminLayout>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import AdminLayout from '@/layouts/AdminLayout.vue'
|
||||
import { useGlobalStore } from '@/stores/globalStore'
|
||||
const globalStore = useGlobalStore()
|
||||
import router from '@/router'
|
||||
|
||||
const tableHeader = ref<Record<string,any>[]>([
|
||||
{
|
||||
name: 'title',
|
||||
title: 'Sayfa Başlığı',
|
||||
sort: true
|
||||
}
|
||||
])
|
||||
const pageDetail = (row: any) => {
|
||||
router.push('/sayfalar/detay/' + row.id)
|
||||
}
|
||||
</script>
|
||||
38
src/module/site-yonetimi/views/SayfaYeni.vue
Normal file
38
src/module/site-yonetimi/views/SayfaYeni.vue
Normal file
@ -0,0 +1,38 @@
|
||||
<template>
|
||||
<AdminLayout>
|
||||
<Breadcrumb current-page-text="Yeni Sayfa" />
|
||||
<div class="form-part form-title">
|
||||
<div class="form-title-buttons">
|
||||
<button class="button-c button-save" @click="siteManagementPageService.SaveData">
|
||||
Kaydet
|
||||
</button>
|
||||
<router-link class="button-c button-cancel" to="/site-yonetimi/sayfa-listesi">
|
||||
Vazgeç
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-content">
|
||||
<div class="form-inner-content form-inner-content-left">
|
||||
<form-sayfa-bilgileri />
|
||||
</div>
|
||||
<div class="form-inner-content form-inner-content-right">
|
||||
<form-sayfa-ayar />
|
||||
</div>
|
||||
</div>
|
||||
</AdminLayout>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { onBeforeMount } from 'vue'
|
||||
import AdminLayout from '@/layouts/AdminLayout.vue'
|
||||
import FormSayfaBilgileri from '../components/form/FormSayfaBilgileri.vue'
|
||||
import FormSayfaAyar from '../components/form/FormSayfaAyar.vue'
|
||||
|
||||
import { useSiteManagementPageStore } from '../stores/siteManagementPageStore'
|
||||
const siteManagementPageStore = useSiteManagementPageStore()
|
||||
import { useSiteManagementPageService } from '../service/siteManagementPageService'
|
||||
const siteManagementPageService = useSiteManagementPageService()
|
||||
|
||||
onBeforeMount(() => {
|
||||
siteManagementPageStore.isNew = true
|
||||
})
|
||||
</script>
|
||||
11
src/module/site-yonetimi/views/Slider.vue
Normal file
11
src/module/site-yonetimi/views/Slider.vue
Normal file
@ -0,0 +1,11 @@
|
||||
<script setup lang='ts'>
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
Reference in New Issue
Block a user