forked from morrning/hesabixCore
515 lines
22 KiB
Vue
Executable file
515 lines
22 KiB
Vue
Executable file
<template>
|
||
<v-toolbar color="toolbar" :title="$t('dialog.commodity_info')">
|
||
<template v-slot:prepend>
|
||
<v-tooltip :text="$t('dialog.back')" location="bottom">
|
||
<template v-slot:activator="{ props }">
|
||
<v-btn v-bind="props" @click="$router.back()" class="d-none d-sm-flex" variant="text"
|
||
icon="mdi-arrow-right" />
|
||
</template>
|
||
</v-tooltip>
|
||
</template>
|
||
<v-spacer></v-spacer>
|
||
<v-btn :loading="loading" @click="save()" icon="" color="green">
|
||
<v-tooltip activator="parent" :text="$t('dialog.save')" location="bottom" />
|
||
<v-icon icon="mdi-content-save"></v-icon>
|
||
</v-btn>
|
||
<template v-slot:extension>
|
||
<v-tabs color="primary" class="bg-light" grow v-model="tabs">
|
||
<v-tab value="0">
|
||
{{ $t('dialog.general') }}
|
||
</v-tab>
|
||
<v-tab value="1">
|
||
{{ $t('dialog.prices') }}
|
||
</v-tab>
|
||
<v-tab value="2">
|
||
{{ $t('dialog.existly') }}
|
||
</v-tab>
|
||
<v-tab value="3">
|
||
{{ $t('dialog.tax') }}
|
||
</v-tab>
|
||
</v-tabs>
|
||
</template>
|
||
</v-toolbar>
|
||
<v-row class="pa-1">
|
||
<v-col>
|
||
<v-tabs-window v-model="tabs">
|
||
<v-tabs-window-item value="0">
|
||
<v-card>
|
||
<v-card-text>
|
||
<div class="row py-3">
|
||
<div class="col-sm-6 col-md-6 mb-1">
|
||
<div>
|
||
<label class="me-4 text-primary">نوع کالا یا خدمات</label>
|
||
<div class="form-check form-check-inline">
|
||
<input v-model="this.data.khadamat" class="form-check-input" type="radio" value="true">
|
||
<label class="form-check-label" for="inlineCheckbox1">خدمات</label>
|
||
</div>
|
||
<div class="form-check form-check-inline">
|
||
<input v-model="this.data.khadamat" class="form-check-input" type="radio" value="false">
|
||
<label class="form-check-label" for="inlineCheckbox2">کالا و اقلام فیزیکی</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-6 col-md-6 mb-1">
|
||
<div class="space-y-2">
|
||
<div class="form-check form-switch">
|
||
<input v-model="this.data.speedAccess" class="form-check-input" type="checkbox">
|
||
<label class="form-check-label">دسترسی سریع</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-sm-12 col-md-6">
|
||
<div class="form-floating mb-4">
|
||
<input v-model="data.name" class="form-control" type="text">
|
||
<label class="form-label"><span class="text-danger">(لازم)</span> نام کالا/خدمات</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-12 col-md-6">
|
||
<div class="form-floating mb-4">
|
||
<select v-model="data.unit" class="form-select">
|
||
<option v-for="option in units" :key="option.name" :value="option.name">
|
||
{{ option.name }}
|
||
</option>
|
||
</select>
|
||
<label class="form-label">واحد شمارش</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-12 col-md-12 mb-4">
|
||
<small class="mb-2">دسته بندی</small>
|
||
<select class="form-select" aria-label="دستهبندی" v-model="this.data.cat">
|
||
<option v-for="(item, index) in listCats" :value="item.id">{{ item.name }}</option>
|
||
</select>
|
||
</div>
|
||
<div class="col-sm-12 col-md-12 mb-4">
|
||
<v-dialog>
|
||
<template v-slot:activator="{ props: activatorProps }">
|
||
<v-btn v-bind="activatorProps" prepend-icon="mdi-wizard-hat" color="surface-variant"
|
||
:text="$t('dialog.barcodes_generate')" class="mb-2"></v-btn>
|
||
</template>
|
||
|
||
<template v-slot:default="{ isActive }">
|
||
<v-card :text="$t('dialog.barcodes_generate')">
|
||
<v-card-text>
|
||
<v-number-input :min="1" :max="400" v-model="barcode.count" :label="$t('dialog.count')"
|
||
prepend-inner-icon="mdi-barcode"></v-number-input>
|
||
</v-card-text>
|
||
|
||
<v-card-actions>
|
||
<v-spacer></v-spacer>
|
||
<v-btn :text="$t('dialog.generate')" color="success" variant="flat"
|
||
@click="isActive.value = false; generateBarcode();"></v-btn>
|
||
|
||
<v-btn :text="$t('dialog.close')" color="secondary" variant="flat"
|
||
@click="isActive.value = false"></v-btn>
|
||
</v-card-actions>
|
||
</v-card>
|
||
</template>
|
||
</v-dialog>
|
||
<v-textarea class="text-left" v-model="data.barcodes" :label="$t('dialog.barcodes')"
|
||
:placeholder="$t('dialog.barcodes_info')" prepend-inner-icon="mdi-barcode"></v-textarea>
|
||
</div>
|
||
<div class="col-sm-12 col-md-12">
|
||
<div class="form-floating mb-4">
|
||
<input v-model="data.des" class="form-control" type="text">
|
||
<label class="form-label">توضیحات</label>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</v-card-text>
|
||
</v-card>
|
||
</v-tabs-window-item>
|
||
<v-tabs-window-item value="1">
|
||
<v-card>
|
||
<v-card-text>
|
||
<div class="row">
|
||
<div class="col-sm-12 col-md-6">
|
||
<div class="form-floating mb-4">
|
||
<money3 v-bind="currencyConfig" min=0 class="form-control" v-model="data.priceBuy" />
|
||
<label class="form-label">قیمت خرید</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-12 col-md-6">
|
||
<div class="form-floating mb-4">
|
||
<money3 v-bind="currencyConfig" min=0 class="form-control" v-model="data.priceSell" />
|
||
<label class="form-label">قیمت فروش</label>
|
||
</div>
|
||
</div>
|
||
<div v-if="isPluginActive('accpro')" class="col-sm-12 col-md-6" v-for="price in data.prices">
|
||
<div class="form-floating mb-4">
|
||
<money3 v-bind="currencyConfig" min=0 class="form-control" v-model="price.priceSell" />
|
||
<label class="form-label">{{ price.list.label }}</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</v-card-text>
|
||
</v-card>
|
||
</v-tabs-window-item>
|
||
<v-tabs-window-item value="2">
|
||
<v-card>
|
||
<v-card-text>
|
||
<div class="col-sm-12 col-md-12">
|
||
<b class="text-primary-dark me-3">موجودی کالا</b>
|
||
<label class="text-muted">تنظیمات بخش موجودی کالا تنها برای نوع کالا اعمال میشود و برای نوع خدمات
|
||
نادیده
|
||
گرفته میشود.</label>
|
||
<div class="space-y-2">
|
||
<div class="form-check form-switch">
|
||
<input v-model="data.commodityCountCheck" class="form-check-input" type="checkbox">
|
||
<label class="form-check-label">کنترل موجودی</label>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-sm-12 col-md-4 mt-2">
|
||
<div class="form-floating mb-4">
|
||
<input v-model="data.minOrderCount"
|
||
@blur="(event) => { if (this.data.minOrderCount === '' || this.data.minOrderCount === 0) { this.data.minOrderCount = 1 } }"
|
||
@keypress="this.$filters.onlyNumber($event)" class="form-control" type="number" min="1">
|
||
<label class="form-label">حداقل سفارش</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-12 col-md-4 mt-2">
|
||
<div class="form-floating mb-4">
|
||
<input v-model="data.orderPoint" @keypress="this.$filters.onlyNumber($event)" class="form-control"
|
||
type="number" min="1">
|
||
<label class="form-label">نقطه سفارش</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-12 col-md-4 mt-2">
|
||
<div class="form-floating mb-4">
|
||
<input v-model="data.dayLoading" @keypress="this.$filters.onlyNumber($event)" class="form-control"
|
||
type="number">
|
||
<label class="form-label">زمان انتظار(روز)</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</v-card-text>
|
||
</v-card>
|
||
</v-tabs-window-item>
|
||
<v-tabs-window-item value="3">
|
||
<v-card>
|
||
<v-card-text>
|
||
<div class="col-sm-6 col-md-6 mb-1">
|
||
<div class="space-y-2">
|
||
<div class="form-check form-switch">
|
||
<input v-model="this.data.withoutTax" class="form-check-input" type="checkbox">
|
||
<label class="form-check-label">معاف از مالیات</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-sm-12 col-md-4">
|
||
<div class="form-floating mb-4">
|
||
<input v-model="data.taxCode" class="form-control" type="text">
|
||
<label class="form-label">کد مالیاتی</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-6 col-md-4">
|
||
<div class="form-floating mb-4">
|
||
<select v-model="data.taxType" class="form-select">
|
||
<option value="" disabled selected>انتخاب کنید</option>
|
||
<option value="1">۱- دارو</option>
|
||
<option value="2">۲- دخانیات</option>
|
||
<option value="3">۳- موبایل</option>
|
||
<option value="4">۴- لوازم خانگی برقی</option>
|
||
<option value="5">۵- قطعات مصرفی و یدکی وسایل نقلیه</option>
|
||
<option value="6">۶- فراورده ها و مشتقات نفتی و گازی و پتروشیمیایی</option>
|
||
<option value="7">۷- طلا اعم از شمش ،مسکوکات و مصنوعات زینتی</option>
|
||
<option value="8">۸- منسوجات و پوشاک</option>
|
||
<option value="9">۹- اسباب بازی</option>
|
||
<option value="10">۱۰- دام زنده، گوشت سفید و قرمز</option>
|
||
<option value="11">۱۱- محصولات اساسی کشاورزی</option>
|
||
<option value="12">۱۲- سایر کالا ها</option>
|
||
</select>
|
||
<label class="form-label">نوع مالیاتی</label>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-6 col-md-4">
|
||
<div class="form-floating mb-4">
|
||
<select v-model="data.taxUnit" class="form-select">
|
||
<option value="" disabled selected>انتخاب کنید</option>
|
||
<option value="1611">لنگه</option>
|
||
<option value="1612">عدل</option>
|
||
<option value="1613">جعبه</option>
|
||
<option value="1618">توپ</option>
|
||
<option value="1619">ست</option>
|
||
<option value="1620">دست</option>
|
||
<option value="1624">کارتن</option>
|
||
<option value="1627">عدد</option>
|
||
<option value="1628">بسته</option>
|
||
<option value="1629">پاکت</option>
|
||
<option value="1631">دستگاه</option>
|
||
<option value="1640">تخته</option>
|
||
<option value="1641">رول</option>
|
||
<option value="1642">طاقه</option>
|
||
<option value="1643">جفت</option>
|
||
<option value="1645">مترمربع</option>
|
||
<option value="1649">پالت</option>
|
||
<option value="1661">دوجین</option>
|
||
<option value="1668">رینگ – حلقه</option>
|
||
<option value="1673">قراص</option>
|
||
<option value="1694">قراصه – bundle</option>
|
||
<option value="1637">لیتر</option>
|
||
<option value="1650">ساشه</option>
|
||
<option value="1683">کپسول</option>
|
||
<option value="1656">بندیل</option>
|
||
<option value="1630">رول – حلقه</option>
|
||
<option value="163">قالب</option>
|
||
<option value="1660">شانه</option>
|
||
<option value="1647">مترمکعب</option>
|
||
<option value="1689">ثوب</option>
|
||
<option value="1690">نیم دو جین</option>
|
||
<option value="1635">قرقره</option>
|
||
<option value="164">کیلوگرم</option>
|
||
<option value="1638">بطری</option>
|
||
<option value="161">برگ</option>
|
||
<option value="1625">سطل</option>
|
||
<option value="1654">ورق</option>
|
||
<option value="1646">شاخه</option>
|
||
<option value="1644">قوطی</option>
|
||
<option value="1617">جلد</option>
|
||
<option value="162">تیوب</option>
|
||
<option value="165">متر</option>
|
||
<option value="1610">کلاف</option>
|
||
<option value="1615">کیسه</option>
|
||
<option value="1680">طغرا</option>
|
||
<option value="1639">بشکه</option>
|
||
<option value="1614">گالن</option>
|
||
<option value="1687">فاقد بسته بندی</option>
|
||
<option value="1693">کارتن – master case</option>
|
||
<option value="166">صفحه</option>
|
||
<option value="1666">مخزن</option>
|
||
<option value="1626">تانکر</option>
|
||
<option value="1648">دبه</option>
|
||
<option value="1684">سبد</option>
|
||
<option value="169">تن</option>
|
||
<option value="1651">بانکه</option>
|
||
<option value="1633">سیلندر</option>
|
||
<option value="1679">فوت مربع</option>
|
||
<option value="168">حلب</option>
|
||
<option value="1665">شیت</option>
|
||
<option value="1659">چلیک</option>
|
||
<option value="1636">جام</option>
|
||
<option value="1622">گرم</option>
|
||
<option value="1616">نخ</option>
|
||
<option value="1652">شعله</option>
|
||
<option value="1678">قیراط</option>
|
||
<option value="16100">میلی لیتر</option>
|
||
<option value="16101">میلی متر</option>
|
||
<option value="16102">میلی گرم</option>
|
||
<option value="16103">ساعت</option>
|
||
<option value="16104">روز</option>
|
||
<option value="16105">تن کیلومتر</option>
|
||
<option value="1669">کیلووات ساعت</option>
|
||
<option value="1676">نفر</option>
|
||
<option value="16110">ثانیه</option>
|
||
<option value="16111">دقیقه</option>
|
||
<option value="16112">ماه</option>
|
||
<option value="16113">سال</option>
|
||
<option value="16114">قطعه</option>
|
||
<option value="16115">سانتی متر</option>
|
||
<option value="16116">سانتی متر مربع</option>
|
||
<option value="1632">فروند</option>
|
||
<option value="1653">واحد</option>
|
||
<option value="16108">لیوان</option>
|
||
<option value="16117">نوبت</option>
|
||
<option value="16118">مگا وات ساعت</option>
|
||
<option value="16119">گیگا بایت بر ثانیه</option>
|
||
<option value="1681">ویال</option>
|
||
<option value="1667">حلقه (دیسک)</option>
|
||
<option value="16120">نسخه (جلد)</option>
|
||
<option value="16121">نفر-ساعت</option>
|
||
<option value="16122">کیلومتر</option>
|
||
<option value="16125">آمپر</option>
|
||
<option value="16126">میلی آمپر</option>
|
||
<option value="16127">مثقال</option>
|
||
<option value="16128">سیر</option>
|
||
<option value="16129">دفعه (time)</option>
|
||
<option value="16130">مگایونیت</option>
|
||
<option value="16131">کادر</option>
|
||
<option value="16132">پرس</option>
|
||
<option value="16133">بلوک</option>
|
||
<option value="16134">نفر-ماه</option>
|
||
</select>
|
||
<label class="form-label">واحد مالیاتی</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</v-card-text>
|
||
</v-card>
|
||
</v-tabs-window-item>
|
||
</v-tabs-window>
|
||
</v-col>
|
||
</v-row>
|
||
</template>
|
||
|
||
<script>
|
||
import axios from "axios";
|
||
import Swal from "sweetalert2";
|
||
import Loading from 'vue-loading-overlay';
|
||
import 'vue-loading-overlay/dist/css/index.css';
|
||
import { Money3 } from "v-money3";
|
||
import Treeselect from 'vue3-treeselect'
|
||
// import the styles
|
||
import 'vue3-treeselect/dist/vue3-treeselect.css'
|
||
|
||
export default {
|
||
name: "mod",
|
||
components: {
|
||
Treeselect: Treeselect,
|
||
Loading,
|
||
Money3
|
||
},
|
||
data: () => {
|
||
return {
|
||
tabs: 0,
|
||
loading: false,
|
||
plugins: [],
|
||
units: '',
|
||
barcode: {
|
||
count: 1,
|
||
},
|
||
priceList: [],
|
||
data: {
|
||
name: '',
|
||
priceSell: 0,
|
||
priceBuy: 0,
|
||
des: '',
|
||
unit: 'عدد',
|
||
code: 0,
|
||
khadamat: false,
|
||
cat: null,
|
||
orderPoint: 0,
|
||
commodityCountCheck: false,
|
||
minOrderCount: 1,
|
||
dayLoading: 0,
|
||
speedAccess: false,
|
||
withoutTax: false,
|
||
barcodes: '',
|
||
prices: [],
|
||
taxCode: '',
|
||
taxType: '',
|
||
taxUnit: ''
|
||
},
|
||
listCats: [],
|
||
currencyConfig: {
|
||
masked: false,
|
||
prefix: '',
|
||
suffix: 'ریال',
|
||
thousands: ',',
|
||
decimal: '.',
|
||
precision: 0,
|
||
disableNegative: false,
|
||
disabled: false,
|
||
min: 0,
|
||
max: null,
|
||
allowBlank: false,
|
||
minimumNumberOfCharacters: 0,
|
||
shouldRound: true,
|
||
focusOnRight: false,
|
||
},
|
||
}
|
||
},
|
||
mounted() {
|
||
this.loadData(this.$route.params.id);
|
||
},
|
||
beforeRouteUpdate(to, from) {
|
||
this.loadData(to.params.id);
|
||
},
|
||
methods: {
|
||
generateBarcode() {
|
||
for (let index = 0; index < this.barcode.count; index++) {
|
||
let x = Math.random() * 1000000000000000000;
|
||
this.data.barcodes = this.data.barcodes + ';' + x
|
||
}
|
||
},
|
||
isPluginActive(plugName) {
|
||
return this.plugins[plugName] !== undefined;
|
||
},
|
||
loadData(id = '') {
|
||
this.loading = true;
|
||
//get active plugins
|
||
axios.post('/api/plugin/get/actives',).then((response) => {
|
||
this.plugins = response.data;
|
||
});
|
||
|
||
axios.post('/api/commodity/units').then((response) => {
|
||
this.units = response.data;
|
||
});
|
||
|
||
if (id == '') {
|
||
axios.post('/api/commodity/pricelist/list').then((response) => {
|
||
if (response.data.length == 0) {
|
||
this.data.prices = [];
|
||
}
|
||
else {
|
||
this.priceList = response.data;
|
||
this.priceList.forEach((item) => {
|
||
this.data.prices.push({
|
||
id: 0,
|
||
priceBuy: 0,
|
||
priceSell: 0,
|
||
list: item
|
||
});
|
||
});
|
||
}
|
||
|
||
});
|
||
}
|
||
|
||
axios.post('/api/commodity/cat/get/line').then((response) => {
|
||
this.listCats = response.data;
|
||
if (!this.$route.params.id) {
|
||
this.data.cat = response.data[1]
|
||
}
|
||
});
|
||
if (id != '') {
|
||
//load info
|
||
this.loading = true;
|
||
axios.post('/api/commodity/info/' + id).then((response) => {
|
||
this.data = response.data;
|
||
if (this.data.prices.length == 0) {
|
||
this.data.prices = this.priceList;
|
||
}
|
||
});
|
||
}
|
||
this.loading = false;
|
||
},
|
||
save() {
|
||
if (this.data.name.length === 0)
|
||
Swal.fire({
|
||
text: 'نام کالا یا خدمات الزامی است.',
|
||
icon: 'error',
|
||
confirmButtonText: 'قبول'
|
||
});
|
||
else {
|
||
this.loading = true;
|
||
axios.post('/api/commodity/mod/' + this.data.code, this.data).then((response) => {
|
||
this.loading = false;
|
||
if (response.data.result == 2) {
|
||
Swal.fire({
|
||
text: 'قبلا ثبت شده است.',
|
||
icon: 'error',
|
||
confirmButtonText: 'قبول'
|
||
});
|
||
} else {
|
||
Swal.fire({
|
||
text: 'مشخصات کالا و خدمات ثبت شد.',
|
||
icon: 'success',
|
||
confirmButtonText: 'قبول'
|
||
}).then(() => {
|
||
this.$router.push('/acc/commodity/list')
|
||
});
|
||
}
|
||
})
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped></style> |