add banners
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<BaseButton size="small" type="primary" @click="addRow">
|
||||
<span> افزودن بنر</span>
|
||||
<BaseIcon icon="vuesax-linear:add" size="17" />
|
||||
</BaseButton>
|
||||
<div class="flex mt-4 flex-col gap-2">
|
||||
<div class="grid grid-cols-3 gap-4">
|
||||
<Card v-for="(item, index) in benefitsList">
|
||||
<div class="grid grid-cols-1 gap-4 mt-3">
|
||||
<div class="text">(16 در 9)</div>
|
||||
<div class="text-center">
|
||||
<UploadPic
|
||||
:compressed="true"
|
||||
@upload="handleUpload($event, index, 'icon')"
|
||||
@remove="handelRemoveFile(index, 'icon')"
|
||||
:imageUrl="item.icon"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex items-center gap-2 my-2">
|
||||
<span>نمایش:</span>
|
||||
<a-switch v-model:checked="item.show" />
|
||||
</div>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-left mt-5 md:mt-0">
|
||||
<BaseButton type="primary" @click="handleSubmit">
|
||||
<span>ذخیره تغییرات</span>
|
||||
</BaseButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { Card, message } from "ant-design-vue"
|
||||
import type { IBenefits } from "@/model/banner"
|
||||
import UploadPic from "@/components/UploadPic.vue"
|
||||
import { updateBannerConst, getHeaderBannerConst } from "@/api/consts"
|
||||
|
||||
const benefitsList = ref<IBenefits[]>([])
|
||||
let id: number | null = null
|
||||
|
||||
function addRow() {
|
||||
benefitsList.value.push({ icon: null, show: true, caption: null, link: null })
|
||||
}
|
||||
|
||||
function removeRow(index: number) {
|
||||
benefitsList.value.splice(index, 1)
|
||||
}
|
||||
|
||||
async function handleUpload(file: any, index: number, size: string) {
|
||||
benefitsList.value[index][size] = file.src
|
||||
}
|
||||
|
||||
function handelRemoveFile(index: number, size: string) {
|
||||
benefitsList.value.splice(benefitsList?.value[index], 1)
|
||||
}
|
||||
|
||||
async function handleSubmit() {
|
||||
try {
|
||||
await updateBannerConst({
|
||||
id: 14,
|
||||
value: JSON.stringify(benefitsList.value),
|
||||
key: "header_banner"
|
||||
})
|
||||
message.success("اطلاعات با موفقیت ذخیره شد")
|
||||
} catch (error) {
|
||||
message.error("خطا در ذخیره اطلاعات")
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
const res = await getHeaderBannerConst()
|
||||
if (res && res.length > 0) {
|
||||
id = res[0].id || res[0].const_id || null
|
||||
if (res[0].value) {
|
||||
benefitsList.value = JSON.parse(res[0].value)
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('خطا در دریافت بنرها:', error)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -108,7 +108,16 @@
|
||||
<a-form-item label="عنوان" name="title" :rules="inputRules()">
|
||||
<BasicInput v-model:value="form.title" />
|
||||
</a-form-item>
|
||||
<a-form-item label="دسته بندی" name="group_type" :rules="inputRules()">
|
||||
|
||||
<a-form-item v-if="getConfigApp('name') === 'garoosi'" label="دسته بندی" name="group_type" :rules="inputRules()">
|
||||
<BasicSelect
|
||||
v-model:value="form.group_type"
|
||||
:items="GaroosiCategoryItems"
|
||||
valueName="value"
|
||||
keyName="value"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item v-else label="دسته بندی" name="group_type" :rules="inputRules()">
|
||||
<BasicSelect
|
||||
v-model:value="form.group_type"
|
||||
:items="categoryItems"
|
||||
@@ -116,6 +125,7 @@
|
||||
keyName="value"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="جنس فلز" name="metal_id" :rules="inputRules()">
|
||||
<BasicSelect
|
||||
v-model:value="form.metal_id"
|
||||
@@ -753,6 +763,29 @@ const unitItems: Array<Item> = [
|
||||
}
|
||||
];
|
||||
|
||||
const GaroosiCategoryItems: Array<Item> = [
|
||||
{
|
||||
value: "طلا"
|
||||
},
|
||||
{
|
||||
value: "مکعب"
|
||||
},
|
||||
{
|
||||
value: "گوی"
|
||||
},
|
||||
{
|
||||
value: "سکه"
|
||||
},
|
||||
{
|
||||
value: "سکه پارسیان"
|
||||
},
|
||||
{
|
||||
value: "مس"
|
||||
},
|
||||
{
|
||||
value: "نقره"
|
||||
}
|
||||
];
|
||||
const categoryItems: Array<Item> = [
|
||||
{
|
||||
value: "آبشده"
|
||||
@@ -829,6 +862,7 @@ const minusPrice = () => {
|
||||
|
||||
import customParseFormat from "dayjs/plugin/customParseFormat";
|
||||
import locale from "ant-design-vue/es/date-picker/locale/fa_IR";
|
||||
import { getConfigApp } from '@/utils/config'
|
||||
|
||||
dayjs.extend(customParseFormat);
|
||||
const customLocale = ref({
|
||||
|
||||
Reference in New Issue
Block a user