1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-10 12:01:57 +08:00

Point of Sale Guide (#905)

* Point of Sale Guide

* Point of Sale Guide

* complete point-of-sale quick guide

* minimal change

Co-authored-by: elsiosanchez <elsiossanches@gmail.com>
This commit is contained in:
Elsio Sanchez 2021-06-04 17:18:13 -04:00 committed by GitHub
parent 71a61f1cb1
commit 831efe72e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 224 additions and 60 deletions

View File

@ -89,7 +89,7 @@
style="float: right; display: flex; line-height: 10px;" style="float: right; display: flex; line-height: 10px;"
:disabled="isDisabled" :disabled="isDisabled"
> >
<el-row> <el-row id="fieldListCollection">
<el-col v-for="(field, index) in fieldsList" :key="index" :span="8"> <el-col v-for="(field, index) in fieldsList" :key="index" :span="8">
<!-- Add selected currency symbol --> <!-- Add selected currency symbol -->
<field-definition <field-definition
@ -104,7 +104,7 @@
</el-form> </el-form>
</div> </div>
</el-card> </el-card>
<samp style="float: right;padding-right: 10px;"> <samp id="buttonCollection" style="float: right;padding-right: 10px;">
<el-button type="danger" icon="el-icon-close" @click="exit" /> <el-button type="danger" icon="el-icon-close" @click="exit" />
<el-button type="info" icon="el-icon-minus" :disabled="isDisabled" @click="undoPatment" /> <el-button type="info" icon="el-icon-minus" :disabled="isDisabled" @click="undoPatment" />
<el-button type="primary" :disabled="validPay || addPay || isDisabled" icon="el-icon-plus" @click="addCollectToList(paymentBox)" /> <el-button type="primary" :disabled="validPay || addPay || isDisabled" icon="el-icon-plus" @click="addCollectToList(paymentBox)" />
@ -115,6 +115,7 @@
<el-main style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;"> <el-main style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;">
<type-collection <type-collection
v-if="!updateOrderPaymentPos" v-if="!updateOrderPaymentPos"
id="cardCollection"
:is-add-type-pay="listPayments" :is-add-type-pay="listPayments"
:currency="pointOfSalesCurrency" :currency="pointOfSalesCurrency"
:list-types-payment="fieldsList[2]" :list-types-payment="fieldsList[2]"
@ -132,7 +133,7 @@
/> />
</el-main> </el-main>
<!-- Collection container bottom panel --> <!-- Collection container bottom panel -->
<el-footer height="auto" style="padding-left: 0px; padding-right: 0px;"> <el-footer id="infoInvoce" height="auto" style="padding-left: 0px; padding-right: 0px;">
<el-row :gutter="24" style="background-color: rgb(245, 247, 250);"> <el-row :gutter="24" style="background-color: rgb(245, 247, 250);">
<el-col :span="24"> <el-col :span="24">
<span> <span>

View File

@ -0,0 +1,86 @@
import language from '@/lang'
const steps = [
{
element: '#ProductValue',
popover: {
title: language.t('form.productInfo.codeProduct'),
description: language.t('form.guideSteps.productValue.description'),
position: 'bottom'
}
},
{
element: '#BusinessPartner',
popover: {
title: language.t('form.pos.order.BusinessPartnerCreate.businessPartner'),
position: 'bottom'
}
},
{
element: '#linesOrder',
popover: {
title: language.t('form.guideSteps.linesTable.title'),
position: 'top'
}
},
{
element: '#buttonPanelLeftPos',
popover: {
title: language.t('form.guideSteps.buttonPanelLeftPos.title'),
position: 'right'
}
},
{
element: '#toolPoint',
popover: {
title: language.t('form.guideSteps.toolsPoint.title'),
position: 'bottom'
}
},
{
element: '#point',
popover: {
title: language.t('form.pos.title'),
position: 'right'
}
},
{
element: '#buttonPanelRightPos',
popover: {
title: language.t('form.guideSteps.buttonPanelRightPos.title'),
position: 'left'
}
},
{
element: '#fieldListCollection',
popover: {
title: language.t('form.guideSteps.fieldListCollection.title'),
position: 'left'
},
panel: 'Collection'
},
{
element: '#buttonCollection',
popover: {
title: language.t('form.guideSteps.buttonCollection.title'),
position: 'left'
},
panel: 'Collection'
},
{
element: '#cardCollection',
popover: {
title: language.t('form.guideSteps.cardCollection.title'),
position: 'left'
},
panel: 'Collection'
},
{
element: '#infoInvoce',
popover: {
title: language.t('form.guideSteps.infoInvoce.title'),
position: 'top'
},
panel: 'Collection'
}
]
export default steps

View File

@ -34,6 +34,7 @@
> >
<product-info <product-info
v-if="field.columnName === 'ProductValue'" v-if="field.columnName === 'ProductValue'"
id="ProductValue"
:key="field.columnName" :key="field.columnName"
:metadata="field" :metadata="field"
/> />
@ -41,6 +42,7 @@
</el-col> </el-col>
<el-col :span="isEmptyValue(currentOrder) ? 9 : 7" :style="styleTab"> <el-col :span="isEmptyValue(currentOrder) ? 9 : 7" :style="styleTab">
<business-partner <business-partner
id="BusinessPartner"
:parent-metadata="{ :parent-metadata="{
name: panelMetadata.name, name: panelMetadata.name,
containerUuid: panelMetadata.containerUuid, containerUuid: panelMetadata.containerUuid,
@ -78,6 +80,7 @@
<el-container style="background: white; padding: 0px; height: 100% !important;"> <el-container style="background: white; padding: 0px; height: 100% !important;">
<el-main style="padding-top: 0px; padding-right: 10px; padding-bottom: 0px; padding-left: 10px;"> <el-main style="padding-top: 0px; padding-right: 10px; padding-bottom: 0px; padding-left: 10px;">
<el-table <el-table
id="linesOrder"
ref="linesTable" ref="linesTable"
v-shortkey="shortsKey" v-shortkey="shortsKey"
:data="listOrderLine" :data="listOrderLine"
@ -172,19 +175,21 @@
<el-footer :class="classOrderFooter"> <el-footer :class="classOrderFooter">
<div class="keypad"> <div class="keypad">
<el-button type="primary" icon="el-icon-top" :disabled="isDisabled" @click="arrowTop" /> <span id="toolPoint">
<el-button type="primary" icon="el-icon-bottom" :disabled="isDisabled" @click="arrowBottom" /> <el-button type="primary" icon="el-icon-top" :disabled="isDisabled" @click="arrowTop" />
<el-button v-show="isValidForDeleteLine(listOrderLine)" type="danger" icon="el-icon-delete" :disabled="isDisabled" @click="deleteOrderLine(currentOrderLine)" /> <el-button type="primary" icon="el-icon-bottom" :disabled="isDisabled" @click="arrowBottom" />
<el-button <el-button v-show="isValidForDeleteLine(listOrderLine)" type="danger" icon="el-icon-delete" :disabled="isDisabled" @click="deleteOrderLine(currentOrderLine)" />
v-show="isValidForDeleteLine(listOrderLine)" <el-button
type="success" v-show="isValidForDeleteLine(listOrderLine)"
icon="el-icon-bank-card" type="success"
@click="openCollectionPanel" icon="el-icon-bank-card"
> @click="openCollectionPanel"
{{ labelButtonCollections }} >
</el-button> {{ labelButtonCollections }}
</el-button>
</span>
<br> <br>
<p> <p id="point">
<el-dropdown <el-dropdown
v-if="!isEmptyValue(currentPointOfSales)" v-if="!isEmptyValue(currentPointOfSales)"
trigger="click" trigger="click"
@ -295,6 +300,7 @@
</div> </div>
<div v-if="!isMobile" :style="classButtomRight"> <div v-if="!isMobile" :style="classButtomRight">
<el-button <el-button
id="buttonPanelRightPos"
:circle="true" :circle="true"
type="primary" type="primary"
:icon="isShowedPOSKeyLayout ? 'el-icon-arrow-right' : 'el-icon-arrow-left'" :icon="isShowedPOSKeyLayout ? 'el-icon-arrow-right' : 'el-icon-arrow-left'"

View File

@ -29,6 +29,7 @@
</el-aside> </el-aside>
<div style="width: 36px;padding-top: 30vh; z-index: 100;"> <div style="width: 36px;padding-top: 30vh; z-index: 100;">
<el-button <el-button
id="buttonPanelLeftPos"
:circle="true" :circle="true"
type="primary" type="primary"
:icon="isShowedPOSOptions ? 'el-icon-arrow-left' : 'el-icon-arrow-right'" :icon="isShowedPOSOptions ? 'el-icon-arrow-left' : 'el-icon-arrow-right'"

View File

@ -509,6 +509,48 @@ export default {
grandTotalConverted: 'Grand Total Converted', grandTotalConverted: 'Grand Total Converted',
quantityAvailable: 'Quantity Avalible', quantityAvailable: 'Quantity Avalible',
upc: 'UPC / EAN' upc: 'UPC / EAN'
},
guideSteps: {
productValue: {
description: 'Search for the product by Product Code, Name or UPC'
},
businessPartner: {
description: 'Show Business Partner Information'
},
linesTable: {
title: 'Order Lines',
description: 'Order Product Listing'
},
buttonPanelLeftPos: {
title: 'Show Left Panel',
description: 'Display the Point of Sale Options panel'
},
point: {
description: 'Displays the current point of sale'
},
buttonPanelRightPos: {
title: 'Show Right Panel',
description: 'Displays the catalog panel'
},
fieldListCollection: {
title: 'Collection Fields',
description: 'Field Group which has. Amount, Currency, Payment Type, Bank, Reference No. and Date'
},
buttonCollection: {
title: 'Collection Tools',
description: 'Composed of a set of buttons that allows you to add, delete and process'
},
cardCollection: {
title: 'Payment Panel',
description: 'In this panel you can see a list with the cards of the added payments'
},
infoInvoce: {
title: 'Invoice Detail',
description: 'Invoice information with total amount, pending, change'
},
toolsPoint: {
title: 'Point of Sale Tools'
}
} }
} }
} }

View File

@ -484,6 +484,48 @@ export default {
grandTotalConverted: 'Gran Total Convertido', grandTotalConverted: 'Gran Total Convertido',
quantityAvailable: 'Cantidad Disponible', quantityAvailable: 'Cantidad Disponible',
upc: 'Código de Barras' upc: 'Código de Barras'
},
guideSteps: {
productValue: {
description: 'Busca el producto segun su Codigo, Nombre o UPC'
},
businessPartner: {
description: 'Mostrar Informacion del Socio de Negocios'
},
linesTable: {
title: 'Lineas de la Orden',
description: 'Listado de los Producto de la orden'
},
buttonPanelLeftPos: {
title: 'Mostrar Panel Izquierdo',
description: 'Despliega el panel de Opciones del Punto de Venta'
},
point: {
description: 'Muestra el punto de venta actual'
},
buttonPanelRightPos: {
title: 'Mostrar Panel Derecho',
description: 'Despliega el panel de catalogo'
},
fieldListCollection: {
title: 'Campos de la Cobranza',
description: 'Grupo de Campo el cual posee. Monto, Moneda, Tipo de pago, Banco, Nro Referencia y Fecha'
},
buttonCollection: {
title: 'Herramientas de la Cobranza',
description: 'Compuesta por un conjunto de botonera que posee agregar, eliminar y porcesar'
},
cardCollection: {
title: 'Panel de Pago',
description: 'En este panel aparece un listado con las tarjeta de los pagos agregados'
},
infoInvoce: {
title: 'Detalle de la Factura',
description: 'Informacion de la Factura con el monto total, pendiente, cambio'
},
toolsPoint: {
title: 'Herramientas del Punto de Venta'
}
} }
} }
} }

View File

@ -14,53 +14,13 @@
<search id="header-search" class="right-menu-item" style="padding-top: 10px;" /> <search id="header-search" class="right-menu-item" style="padding-top: 10px;" />
<badge style="padding-top: 6px;" /> <badge style="padding-top: 6px;" />
</div> </div>
<!--
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
<error-log class="errLog-container right-menu-item hover-effect" />
<screenfull id="screenfull" class="right-menu-item hover-effect" />
<el-tooltip content="Global Size" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip>
</template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<img :src="avatar+'?imageView2/1/w/80/h/80'" class="user-avatar">
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
<router-link to="/profile/index">
<el-dropdown-item>
{{ $t('navbar.profile') }}
</el-dropdown-item>
</router-link>
<router-link to="/">
<el-dropdown-item>
{{ $t('navbar.dashboard') }}
</el-dropdown-item>
</router-link>
<a target="_blank" href="https://github.com/PanJiaChen/vue-element-admin/">
<el-dropdown-item>
{{ $t('navbar.github') }}
</el-dropdown-item>
</a>
<a target="_blank" href="https://panjiachen.github.io/vue-element-admin-site/#/">
<el-dropdown-item>Docs</el-dropdown-item>
</a>
<el-dropdown-item divided @click.native="logout">
<span style="display:block;">{{ $t('navbar.logOut') }}</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
-->
<div class="right-menu"> <div class="right-menu">
<template v-if="device!=='mobile'"> <template v-if="device!=='mobile'">
<el-tooltip v-if="showGuide" content="Guia" placement="top-start">
<el-button icon="el-icon-info" type="text" style="color: black;font-size: larger" @click.prevent.stop="guide" />
</el-tooltip>
<search id="header-search" class="right-menu-item" /> <search id="header-search" class="right-menu-item" />
<badge /> <badge id="badge-navar" />
<error-log class="errLog-container right-menu-item hover-effect" /> <error-log class="errLog-container right-menu-item hover-effect" />
<screenfull id="screenfull" class="right-menu-item hover-effect" /> <screenfull id="screenfull" class="right-menu-item hover-effect" />
@ -106,6 +66,9 @@ import LangSelect from '@/components/LangSelect'
import Search from '@/components/HeaderSearch' import Search from '@/components/HeaderSearch'
import Badge from '@/components/ADempiere/Badge' import Badge from '@/components/ADempiere/Badge'
import { getImagePath } from '@/utils/ADempiere/resource.js' import { getImagePath } from '@/utils/ADempiere/resource.js'
import Driver from 'driver.js' // import driver.js
import 'driver.js/dist/driver.min.css' // import driver.js css
import steps from '@/components/ADempiere/Form/VPOS/Guide/steps'
export default { export default {
components: { components: {
@ -122,13 +85,27 @@ export default {
data() { data() {
return { return {
user: {}, user: {},
isMenuMobile: false isMenuMobile: false,
driver: null
} }
}, },
computed: { computed: {
isMobile() { isMobile() {
return this.$store.state.app.device === 'mobile' return this.$store.state.app.device === 'mobile'
}, },
isShowedPOSKeyLaout() {
return this.$store.getters.getShowPOSKeyLayout
},
showCollection() {
return this.$store.getters.getShowCollectionPos
},
showGuide() {
const typeViews = this.$route.meta.type
if (!this.isEmptyValue(typeViews) && typeViews === 'form') {
return true
}
return false
},
...mapGetters([ ...mapGetters([
'sidebar', 'sidebar',
'avatar', 'avatar',
@ -148,7 +125,16 @@ export default {
return uri return uri
} }
}, },
mounted() {
this.driver = new Driver()
},
methods: { methods: {
guide(value) {
const stepsPos = steps.filter(steps => this.isEmptyValue(steps.panel))
value = this.showCollection && this.isShowedPOSKeyLaout ? steps : stepsPos
this.driver.defineSteps(value)
this.driver.start()
},
handleOpen(key, keyPath) { handleOpen(key, keyPath) {
console.log(key, keyPath) console.log(key, keyPath)
}, },