somewhere

This commit is contained in:
Swift
2023-08-17 13:05:51 +03:30
parent 30c7eb0e7b
commit 53843207cc
429 changed files with 117489 additions and 1 deletions
+300
View File
@@ -0,0 +1,300 @@
<template>
<el-dialog :title="title" :visible.sync="showModal">
<div>
<form v-loading="fetchingSerials" class="form form_3 stuffModal" @submit.prevent="addStuff">
<div class="formRow">
<el-select
v-if="!currentItem.name"
ref="productSelector"
v-model="currentItem.item"
filterable
:placeholder="productsPlaceholder"
>
<el-option v-for="item in products" :key="item.ItemID" :label="item.ItemName" :value="item.ItemID">
</el-option>
</el-select>
<p v-else>
<b>نام کالا: </b>
<span>{{ currentItem.name }}</span>
<span style="margin: 0 5px"> - </span>
<i style="color: blue; font-weight: bold; cursor: pointer" @click="changeProduct">تغییر کالا</i>
</p>
</div>
<div
v-if="currentItem.item && !serials.length && !fetchingSerials"
class="formRow"
:class="validation.quantity ? 'err' : null"
>
<p style="user-select: none">
<b style="margin-left: 10px">تعداد: </b>
<i
style="color: #bf6060; cursor: pointer"
class="fas fa-minus-circle"
@click="changeQuantity('decrease')"
></i>
<!-- <span style="font-weight: bold;margin: 0 5px">{{ currentItem.quantity }}</span> -->
<input
ref="quantityInput"
v-model="currentItem.quantity"
type="text"
style="
width: 50px;
display: inline-block;
border-radius: 50px;
padding: 5px;
direction: ltr;
text-align: center;
"
@input="normalizeQuantityInput"
/>
<i
style="color: #658865; cursor: pointer"
class="fas fa-plus-circle"
@click="changeQuantity('increase')"
></i>
</p>
</div>
<div v-if="serials.length" class="formRow" :class="serialInput.length && !isValid ? 'err' : null">
<el-input
v-if="!currentItem.SerialNo1"
ref="serialInput"
v-model="serialInput"
:disabled="isValid"
placeholder="شماره سریال را به صورت کامل وارد کنید"
@input="checkSerial"
>
<template v-if="serialInput.length">
<i v-if="isValid" slot="prefix" style="color: green" class="el-input__icon fas fa-check-circle"></i>
<i v-else slot="prefix" style="color: red" class="el-input__icon fas fa-exclamation-circle"></i>
</template>
</el-input>
<p v-else>
<b>شماره سریال: </b>
<span>{{ currentItem.SerialNo1 }}</span>
<span style="margin: 0 5px"> - </span>
<i v-if="isValid" style="color: blue; font-weight: bold; cursor: pointer" @click="changeSerial">
تغییر شماره سریال
</i>
</p>
</div>
<div v-if="addBtnVisible" class="formRow">
<button id="addBtn" ref="addBtn" type="submit" class="btn btn-primary">افزودن</button>
</div>
</form>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'AddStuffModal',
props: {
show: {
type: Boolean,
default: false
},
db_name: {
type: String,
required: true
}
},
data() {
return {
serials: [],
fetchingSerials: false,
currentItem: {
name: null,
item: null,
quantity: 1,
SerialNo1: '',
GStartDate: '',
GEndDate: ''
},
isValid: false,
serialInput: '',
validation: {}
}
},
computed: {
showModal: {
get() {
return this.show
},
set(value) {
this.$emit('closeModal')
}
},
title() {
if (this.db_name === 'panatech') return 'افزودن کالاهای صوتی تصویری به فرم'
if (this.db_name === 'verity') return 'افزودن کالاهای لوازم جانبی به فرم'
else return ''
},
products() {
if (this.db_name === 'verity') return this.$store.state.front.verityProducts
else if (this.db_name === 'panatech') return this.$store.state.front.panatechProducts
else return []
},
productsPlaceholder() {
return this.products ? 'نام کالا را جستجو کنید' : 'درحال بارگیری اطلاعات...'
},
selectedItem() {
return this.currentItem.item
},
selectedSerial() {
return this.currentItem.SerialNo1
},
addBtnVisible() {
if (this.serials.length) {
return this.currentItem.item && this.currentItem.SerialNo1
} else {
return this.currentItem.item && !this.fetchingSerials
}
}
},
watch: {
addBtnVisible(newVal, oldVal) {
if (newVal) {
if (this.serials.length) setTimeout(() => this.$refs.addBtn?.focus(), 300)
else setTimeout(() => this.$refs.quantityInput?.focus(), 300)
}
},
async selectedSerial(newVal, oldVal) {
if (newVal) {
const serialObject = await this.serials.filter(item => item.SerialNo1 === newVal)[0]
this.currentItem.GStartDate = serialObject.GStartDate
this.currentItem.GEndDate = serialObject.GEndDate
} else {
this.currentItem.GStartDate = ''
this.currentItem.GEndDate = ''
}
},
async selectedItem(newVal, oldVal) {
if (newVal) {
try {
this.fetchingSerials = true
this.currentItem.SerialNo1 = ''
this.serials = []
this.currentItem.name = null
const item = await this.products.filter(item => item.ItemID === newVal)[0]
this.currentItem.name = item.ItemName
const serialsData = {
url: `/api/GetSerials?ItemCode=${item.ItemCode}&QtyStatus=1`,
db: this.db_name
}
const serials = await this.$axios.post('/api/cross/getRouteManager', serialsData, {
progress: false
})
this.serials = serials.data.data
this.fetchingSerials = false
setTimeout(() => this.$refs.serialInput?.focus(), 300)
} catch (e) {
this.currentItem = {
item: '',
quantity: 1,
SerialNo1: '',
GStartDate: '',
GEndDate: ''
}
console.log(e)
return this.$message({
type: 'error',
message: 'مشکلی در دریافت اطلاعات پیش آمده، لطفا نام کالا را دوباره انتخاب کنید.'
})
}
} else {
this.serials = []
}
},
serials(newVal, oldVal) {
this.currentItem.quantity = 1
},
showModal(newVal, oldVal) {
if (newVal) {
this.$nextTick(() => {
this.$refs?.productSelector?.focus()
})
}
}
},
methods: {
changeProduct() {
this.currentItem.item = this.currentItem.name = null
this.isValid = false
this.serialInput = ''
},
changeSerial() {
this.currentItem.SerialNo1 = ''
this.isValid = false
this.serialInput = ''
setTimeout(() => this.$refs.serialInput?.focus(), 300)
},
checkSerial(serial) {
const SerialNo1 = this.serials.find(item => item.SerialNo1.toLowerCase() === serial.toLowerCase())
if (SerialNo1) {
this.isValid = true
this.currentItem.SerialNo1 = SerialNo1.SerialNo1
} else this.isValid = false
},
changeQuantity(mode) {
if (mode === 'increase') this.currentItem.quantity++
else if (mode === 'decrease' && this.currentItem.quantity > 1) this.currentItem.quantity--
},
addStuff() {
if (this.serials.length && !this.currentItem.SerialNo1) {
return this.$message({
type: 'warning',
message: 'شماره سریال معتبر وارد کنید'
})
}
this.fetchingSerials = true
const currentItem = this.currentItem
const selectedItem = this.products.filter(item => item.ItemID === currentItem.item)[0]
const item = {
ItemID: selectedItem.ItemID,
ItemCode: selectedItem.ItemCode,
MjQty: Number(currentItem.quantity),
SerialNo1: currentItem.SerialNo1,
GStartDate: currentItem.GStartDate,
GEndDate: currentItem.GEndDate
}
this.$axios
.put(`/api/user/transactionDraftItemAdd/${this.$route.params.draftID}`, item, { progress: false })
.then(res => {
this.fetchingSerials = false
this.$message({
type: 'success',
message: res.data.message
})
this.showModal = false
this.$nuxt.refresh()
})
.catch(err => {
this.fetchingSerials = false
if (err.response.status === 406) {
return this.$message({
type: 'warning',
message: err.response.data.message
})
} else {
return this.$message({
type: 'error',
message: 'مشکلی در ثبت اطلاعات پیش آمده، لطفا دوباره امتحان کنید'
})
}
})
},
normalizeQuantityInput() {
this.currentItem.quantity = this.currentItem.quantity.toString().replace(/[^0-9]/g, '')
if (this.currentItem.quantity === '' || this.currentItem.quantity === null || this.currentItem.quantity < 1) {
this.currentItem.quantity = 1
}
}
}
}
</script>