diff --git a/app/model/productDescription.go b/app/model/productDescription.go index 4781be5..985b819 100644 --- a/app/model/productDescription.go +++ b/app/model/productDescription.go @@ -18,9 +18,10 @@ type ProductDescription struct { AvailableLater string `gorm:"column:available_later;type:varchar(255)" json:"available_later" form:"available_later"` DeliveryInStock string `gorm:"column:delivery_in_stock;type:varchar(255)" json:"delivery_in_stock" form:"delivery_in_stock"` DeliveryOutStock string `gorm:"column:delivery_out_stock;type:varchar(255)" json:"delivery_out_stock" form:"delivery_out_stock"` - Usage string `gorm:"column:usage;type:text" json:"usage" form:"usage"` + Usage string `gorm:"column:_usage_;type:text" json:"usage" form:"usage"` - ExistsInDatabase bool `gorm:"-" json:"exists_in_database"` + ImageLink string `gorm:"column:image_link" json:"image_link"` + ExistsInDatabase bool `gorm:"-" json:"exists_in_database"` } type ProductRow struct { diff --git a/app/repos/productDescriptionRepo/productDescriptionRepo.go b/app/repos/productDescriptionRepo/productDescriptionRepo.go index 4e42175..391ecb0 100644 --- a/app/repos/productDescriptionRepo/productDescriptionRepo.go +++ b/app/repos/productDescriptionRepo/productDescriptionRepo.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" + "git.ma-al.com/goc_daniel/b2b/app/config" "git.ma-al.com/goc_daniel/b2b/app/db" "git.ma-al.com/goc_daniel/b2b/app/model" "git.ma-al.com/goc_daniel/b2b/app/model/dbmodel" @@ -36,6 +37,27 @@ func (r *ProductDescriptionRepo) GetProductDescription(productID uint, productid IDShop: int32(constdata.SHOP_ID), IDLang: int32(productid_lang), }). + Select(` + `+dbmodel.PsProductLangCols.IDProduct.TabCol()+` AS id_product, + `+dbmodel.PsProductLangCols.IDShop.TabCol()+` AS id_shop, + `+dbmodel.PsProductLangCols.IDLang.TabCol()+` AS id_lang, + `+dbmodel.PsProductLangCols.Description.TabCol()+` AS description, + `+dbmodel.PsProductLangCols.DescriptionShort.TabCol()+` AS description_short, + `+dbmodel.PsProductLangCols.LinkRewrite.TabCol()+` AS link_rewrite, + `+dbmodel.PsProductLangCols.MetaDescription.TabCol()+` AS meta_description, + `+dbmodel.PsProductLangCols.MetaKeywords.TabCol()+` AS meta_keywords, + `+dbmodel.PsProductLangCols.MetaTitle.TabCol()+` AS meta_title, + `+dbmodel.PsProductLangCols.Name.TabCol()+` AS name, + `+dbmodel.PsProductLangCols.AvailableNow.TabCol()+` AS available_now, + `+dbmodel.PsProductLangCols.AvailableLater.TabCol()+` AS available_later, + `+dbmodel.PsProductLangCols.DeliveryInStock.TabCol()+` AS delivery_in_stock, + `+dbmodel.PsProductLangCols.DeliveryOutStock.TabCol()+` AS delivery_out_stock, + `+dbmodel.PsProductLangCols.Usage.TabCol()+` AS _usage_, + CONCAT(?, '/', `+dbmodel.PsImageShopCols.IDImage.TabCol()+`, '-large_default/', `+dbmodel.PsProductLangCols.LinkRewrite.TabCol()+`, '.webp') AS image_link + `, config.Get().Image.ImagePrefix). + Joins("JOIN " + dbmodel.TableNamePsImageShop + + " ON " + dbmodel.PsImageShopCols.IDProduct.TabCol() + "=" + dbmodel.PsProductLangCols.IDProduct.TabCol() + + " AND " + dbmodel.PsImageShopCols.Cover.TabCol() + " = 1"). First(&ProductDescription).Error if errors.Is(err, gorm.ErrRecordNotFound) { diff --git a/bo/components.d.ts b/bo/components.d.ts index f0f9cc4..c9bf5aa 100644 --- a/bo/components.d.ts +++ b/bo/components.d.ts @@ -34,6 +34,7 @@ declare module 'vue' { ProductCustomization: typeof import('./src/components/customer/components/ProductCustomization.vue')['default'] ProductDetailView: typeof import('./src/components/admin/ProductDetailView.vue')['default'] 'ProductDetailView copy': typeof import('./src/components/admin/ProductDetailView copy.vue')['default'] + ProductEditor: typeof import('./src/components/inner/ProductEditor.vue')['default'] ProductVariants: typeof import('./src/components/customer/components/ProductVariants.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] @@ -62,5 +63,6 @@ declare module 'vue' { USidebar: typeof import('./node_modules/@nuxt/ui/dist/runtime/components/Sidebar.vue')['default'] UTable: typeof import('./node_modules/@nuxt/ui/dist/runtime/components/Table.vue')['default'] UTabs: typeof import('./node_modules/@nuxt/ui/dist/runtime/components/Tabs.vue')['default'] + UTextarea: typeof import('./node_modules/@nuxt/ui/dist/runtime/components/Textarea.vue')['default'] } } diff --git a/bo/src/app.config.ts b/bo/src/app.config.ts index 20808f4..44b4214 100644 --- a/bo/src/app.config.ts +++ b/bo/src/app.config.ts @@ -56,6 +56,11 @@ export const uiOptions: NuxtUIOptions = { content: 'border! border-(--border-light)! dark:border-(--border-dark)! outline-0! ring-0! bg-(--second-light) dark:bg-(--main-dark)', } + }, + textarea: { + slots: { + base: 'ring-0! outline-0! rounded-md border border-(--border-light)! dark:border-(--border-dark)! text-base!' + } } } } \ No newline at end of file diff --git a/bo/src/components/admin/ProductDetailView.vue b/bo/src/components/admin/ProductDetailView.vue index 43d187a..55a9fa1 100644 --- a/bo/src/components/admin/ProductDetailView.vue +++ b/bo/src/components/admin/ProductDetailView.vue @@ -6,9 +6,8 @@ Back to products

-
-
+
+
@@ -18,7 +17,7 @@ Selected language - {{langs.find(l => l.id === toLangId)?.name || 'Select language'}} + {{ selectedLangName }}
@@ -34,7 +33,8 @@
-
+

Change Text

@@ -45,13 +45,16 @@
- Cancel and back to Polish + Cancel - - Save translations + + Save
@@ -65,45 +68,41 @@
-
-
- Product Image -
-
-
+
+ +
+

- {{ productStore.productDescription.name || 'Product Name' }} + {{ productStore.productDescription.name }}

Title:

- - - - - +
+ +
+

Link rewrite:

+ +

Short description:

- - - - - +
@@ -132,64 +131,13 @@ root: 'items-start!' }">
@@ -198,147 +146,31 @@ \ No newline at end of file diff --git a/bo/src/layouts/default.vue b/bo/src/layouts/default.vue index 425d895..30958f8 100644 --- a/bo/src/layouts/default.vue +++ b/bo/src/layouts/default.vue @@ -52,7 +52,7 @@
-
+
diff --git a/bo/src/stores/admin/product.ts b/bo/src/stores/admin/product.ts index b4a4400..ee8408e 100644 --- a/bo/src/stores/admin/product.ts +++ b/bo/src/stores/admin/product.ts @@ -28,6 +28,7 @@ export const useProductStore = defineStore('product', () => { const loading = ref(false) const error = ref(null) const productDescription = ref() + const copyProductDescription = ref() async function getProductDescription(langId: number | null, productID: number) { loading.value = true @@ -36,8 +37,8 @@ export const useProductStore = defineStore('product', () => { const response = await useFetchJson( `/api/v1/restricted/product-translation/get-product-description?productID=${productID}&productLangID=${langId ? langId : settingStore.shopDefaultLanguage}` ) - productDescription.value = response.items - + productDescription.value = structuredClone(response.items) + copyProductDescription.value = structuredClone(response.items) } catch (e: unknown) { error.value = e instanceof Error ? e.message : 'Failed to load product description' } finally { @@ -45,7 +46,6 @@ export const useProductStore = defineStore('product', () => { } } - const translat = ref() const settingStore = useSettingsStore() async function translateProductDescription(productID: number, toLangId: number, model: string = 'Google') { loading.value = true @@ -87,6 +87,8 @@ export const useProductStore = defineStore('product', () => { }) } ) + + await getProductDescription(langId, productID) return data } catch (e) { console.error(e) @@ -97,7 +99,7 @@ export const useProductStore = defineStore('product', () => { productDescription, loading, error, - translat, + copyProductDescription, translateProductDescription, getProductDescription, saveProductDescription diff --git a/bo/src/types/product.d.ts b/bo/src/types/product.d.ts index 3753f73..99cba7b 100644 --- a/bo/src/types/product.d.ts +++ b/bo/src/types/product.d.ts @@ -7,6 +7,8 @@ export interface ProductDescription { available_now: string delivery_in_stock?: string usage: string + image_link: string + link_rewrite: string } export interface Product {