Compare commits
4 Commits
56e545edf5
...
3b532d153d
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3b532d153d | ||
![]() |
3a55c93d2f | ||
![]() |
6e9d9ac508 | ||
![]() |
678e404569 |
@ -52,3 +52,12 @@ export function confirmBack(id){
|
|||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 采购入库
|
||||||
|
export function inWare(data){
|
||||||
|
return request({
|
||||||
|
url: preUrl + "/inWare",
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
import {getStaffList} from "@/api/company/staff";
|
import {getStaffList} from "@/api/company/staff";
|
||||||
|
import {getUserProfile} from "@/api/system/user";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "StaffChoose",
|
name: "StaffChoose",
|
||||||
@ -19,6 +20,9 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
required: false
|
required: false
|
||||||
|
},
|
||||||
|
roleCode:{
|
||||||
|
type: String,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@ -47,14 +51,23 @@ export default {
|
|||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.listStaff()
|
this.listStaff()
|
||||||
|
this.getNow()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async listStaff() {
|
async listStaff() {
|
||||||
this.selectLoading = true
|
this.selectLoading = true
|
||||||
try {
|
try {
|
||||||
if (!this.isGet) return;
|
if (!this.isGet) return;
|
||||||
const res = await getStaffList(this.query)
|
if (this.roleCode){
|
||||||
this.staffList = res.data
|
// todo 暂时先把流程跑通了来
|
||||||
|
}else {
|
||||||
|
const res = await getStaffList(this.query)
|
||||||
|
this.staffList = res.data
|
||||||
|
if (this.query){
|
||||||
|
this.staffSelected = this.staffList.filter(item => item.tel === this.query)[0].id
|
||||||
|
this.query = null
|
||||||
|
}
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
this.selectLoading = false
|
this.selectLoading = false
|
||||||
}
|
}
|
||||||
@ -62,6 +75,11 @@ export default {
|
|||||||
changeQuery(val) {
|
changeQuery(val) {
|
||||||
this.query = val
|
this.query = val
|
||||||
this.listStaff()
|
this.listStaff()
|
||||||
|
},
|
||||||
|
async getNow(){
|
||||||
|
// 获取当前登录用户
|
||||||
|
const res = await getUserProfile()
|
||||||
|
this.changeQuery(res.data.mobile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,9 +108,9 @@
|
|||||||
<el-button size="mini" type="text" icon="el-icon-view" @click="handleShow(scope.row)"
|
<el-button size="mini" type="text" icon="el-icon-view" @click="handleShow(scope.row)"
|
||||||
>查看
|
>查看
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- <el-button size="mini" type="text" icon="el-icon-edit-outline"-->
|
<el-button @click="handleInWares(scope.row)" v-if="scope.row.soStatus === '02'" size="mini" type="text" icon="el-icon-edit-outline"
|
||||||
<!-- >修改-->
|
>入库
|
||||||
<!-- </el-button>-->
|
</el-button>
|
||||||
<el-button size="mini" type="text" icon="el-icon-close" @click="handleVoidSo(scope.row)"
|
<el-button size="mini" type="text" icon="el-icon-close" @click="handleVoidSo(scope.row)"
|
||||||
>作废
|
>作废
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -123,6 +123,33 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<SoShow :so-by-type="soByType" :is-back="isBack" ref="soShow" />
|
<SoShow :so-by-type="soByType" :is-back="isBack" ref="soShow" />
|
||||||
|
|
||||||
|
<el-dialog title="入库" :visible.sync="dialogVisible" width="80%" v-dialogDrag append-to-body>
|
||||||
|
<el-table v-loading="inLoading" :data="inItems" :stripe="true" :show-overflow-tooltip="true"
|
||||||
|
@selection-change="selectRow"
|
||||||
|
@cell-mouse-enter="handleCellEnter"
|
||||||
|
@cell-mouse-leave="handleCellLeave"
|
||||||
|
@cell-click="handleCellClick"
|
||||||
|
:key="tableKey"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55" align="center"/>
|
||||||
|
<el-table-column label="商品名称" align="center" prop="repairWares.name" />
|
||||||
|
<el-table-column label="商品编码" align="center" prop="repairWares.code" width="180" />
|
||||||
|
<el-table-column label="条形码" align="center" prop="repairWares.barCode" width="180" />
|
||||||
|
<el-table-column label="规格" align="center" prop="repairWares.model" width="180" />
|
||||||
|
<el-table-column label="采购数量" align="center" prop="goodsCount" width="150" />
|
||||||
|
<el-table-column label="入库数量" align="center" prop="inCount" width="150">
|
||||||
|
<div class="item" slot-scope="scope">
|
||||||
|
<el-input @blur="save(scope.row)" class="item__input" v-model="scope.row.inCount"/>
|
||||||
|
<span class="item__txt">{{ scope.row.inCount }}</span>
|
||||||
|
</div>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" :disabled="selectRows.length === 0" @click="doInWares">确定</el-button>
|
||||||
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -132,8 +159,10 @@ import SupplierChoose from "@/views/repair/Components/SupplierChoose.vue";
|
|||||||
import CorpChoose from "@/views/repair/Components/CorpChoose.vue";
|
import CorpChoose from "@/views/repair/Components/CorpChoose.vue";
|
||||||
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";
|
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";
|
||||||
import {DICT_TYPE} from "@/utils/dict";
|
import {DICT_TYPE} from "@/utils/dict";
|
||||||
import {getRepairSoPage, voidSo, getRepairSoById} from "@/api/repair/stockOperate/stockOperate";
|
import {getRepairSoPage, voidSo, getRepairSoById, inWare} from "@/api/repair/stockOperate/stockOperate";
|
||||||
import SoShow from "@/views/repair/stockOperate/Components/SoSow.vue";
|
import SoShow from "@/views/repair/stockOperate/Components/SoSow.vue";
|
||||||
|
import {getRepairSoiByIds} from "@/api/repair/stockOperate/stockOperateItem";
|
||||||
|
import {createUniqueCodeByHead} from "@/utils/createUniqueCode";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "SoIndex",
|
name: "SoIndex",
|
||||||
@ -203,7 +232,19 @@ export default {
|
|||||||
showSearch: true,
|
showSearch: true,
|
||||||
list: [],
|
list: [],
|
||||||
loading: false,
|
loading: false,
|
||||||
total: 0
|
total: 0,
|
||||||
|
dialogVisible: false,
|
||||||
|
inItems: [],
|
||||||
|
inLoading: false,
|
||||||
|
selectRows: [],
|
||||||
|
inWaresFormData:{
|
||||||
|
id: null,
|
||||||
|
soiList: [],
|
||||||
|
soNo: null
|
||||||
|
},
|
||||||
|
editProp: ['inCount'],
|
||||||
|
clickCellMap: {},
|
||||||
|
tableKey: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -283,11 +324,136 @@ export default {
|
|||||||
async handleShow(row){
|
async handleShow(row){
|
||||||
const res = await getRepairSoById(row.id)
|
const res = await getRepairSoById(row.id)
|
||||||
await this.$refs.soShow.open(res.data)
|
await this.$refs.soShow.open(res.data)
|
||||||
}
|
},
|
||||||
|
// 入库操作
|
||||||
|
async handleInWares(row){
|
||||||
|
this.inWaresFormData = {
|
||||||
|
id: null,
|
||||||
|
soiList: []
|
||||||
|
}
|
||||||
|
this.inWaresFormData['id'] = row.id
|
||||||
|
try {
|
||||||
|
this.dialogVisible = true
|
||||||
|
this.inLoading = true
|
||||||
|
const resRow = await getRepairSoById(row.id)
|
||||||
|
const ids = resRow.data.goodsList.map(item => item.id)
|
||||||
|
const res = await getRepairSoiByIds(ids)
|
||||||
|
this.inItems = res.data
|
||||||
|
this.inItems = this.inItems.filter(item => item.inCount !== item.goodsCount)
|
||||||
|
this.inItems = [...this.inItems.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
goodsCount: item.goodsCount - item?.inCount | 0,
|
||||||
|
inCount: item.goodsCount - item?.inCount | 0
|
||||||
|
}
|
||||||
|
})]
|
||||||
|
}finally {
|
||||||
|
this.inLoading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectRow(val){
|
||||||
|
this.selectRows = val
|
||||||
|
},
|
||||||
|
async doInWares(){
|
||||||
|
try {
|
||||||
|
this.inWaresFormData.soiList = this.selectRows
|
||||||
|
this.inWaresFormData.soNo = createUniqueCodeByHead("RC")
|
||||||
|
this.inLoading = true
|
||||||
|
await inWare(this.inWaresFormData)
|
||||||
|
this.dialogVisible = false
|
||||||
|
this.$modal.msgSuccess("入库成功")
|
||||||
|
await this.pageSo()
|
||||||
|
}catch{}
|
||||||
|
},
|
||||||
|
/** 鼠标移入cell */
|
||||||
|
handleCellEnter(row, column, cell, event) {
|
||||||
|
const property = column.property
|
||||||
|
if (row.id && this.editProp.includes(property)) {
|
||||||
|
cell.querySelector('.item__txt').classList.add('item__txt--hover')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/** 鼠标移出cell */
|
||||||
|
handleCellLeave(row, column, cell, event) {
|
||||||
|
const property = column.property
|
||||||
|
if (row.id && this.editProp.includes(property)) {
|
||||||
|
cell.querySelector('.item__txt').classList.remove('item__txt--hover')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/** 点击cell */
|
||||||
|
handleCellClick(row, column, cell, event) {
|
||||||
|
const property = column.property
|
||||||
|
if (this.editProp.includes(property)) {
|
||||||
|
if (!row.id || property !== 'goods') {
|
||||||
|
// 保存cell
|
||||||
|
this.saveCellClick(row, cell)
|
||||||
|
cell.querySelector('.item__txt').style.display = 'none'
|
||||||
|
cell.querySelector('.item__input').style.display = 'inline'
|
||||||
|
cell.querySelector('input').focus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/** 取消编辑状态 */
|
||||||
|
cancelEditable(cell) {
|
||||||
|
cell.querySelector('.item__txt').style.display = 'inline'
|
||||||
|
cell.querySelector('.item__input').style.display = 'none'
|
||||||
|
},
|
||||||
|
/** 保存进入编辑的cell */
|
||||||
|
saveCellClick(row, cell) {
|
||||||
|
const id = row.id
|
||||||
|
if (this.clickCellMap[id] !== undefined) {
|
||||||
|
if (!this.clickCellMap[id].includes(cell)) {
|
||||||
|
this.clickCellMap[id].push(cell)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.clickCellMap[id] = [cell]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/** 保存数据 */
|
||||||
|
save(row) {
|
||||||
|
const id = row.id
|
||||||
|
// 取消本行所有cell的编辑状态
|
||||||
|
this.clickCellMap[id].forEach(cell => {
|
||||||
|
this.cancelEditable(cell)
|
||||||
|
})
|
||||||
|
this.clickCellMap[id] = []
|
||||||
|
this.tableKey++
|
||||||
|
this.selectRows = []
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.item {
|
||||||
|
.item__input {
|
||||||
|
display: none;
|
||||||
|
width: 100px;
|
||||||
|
/* 调整elementUI中样式 如果不需要调整请忽略 */
|
||||||
|
.el-input__inner {
|
||||||
|
height: 24px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 调整elementUI中样式 如果不需要调整请忽略 */
|
||||||
|
.el-input__suffix {
|
||||||
|
i {
|
||||||
|
font-size: 12px !important;
|
||||||
|
line-height: 26px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item__txt {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
width: 100px;
|
||||||
|
line-height: 24px;
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item__txt--hover {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: text;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -21,15 +21,15 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="单据号" align="center" prop="no" width="200"/>
|
<el-table-column label="单据号" align="center" prop="no" width="200"/>
|
||||||
<el-table-column label="客户车牌" align="center" prop="licenseNumber" />
|
<el-table-column label="客户车牌" align="center" prop="licenseNumber"/>
|
||||||
<el-table-column label="服务顾问" align="center" prop="adviserName" />
|
<el-table-column label="服务顾问" align="center" prop="adviserName"/>
|
||||||
<el-table-column label="申请人" align="center" prop="repairName" />
|
<el-table-column label="申请人" align="center" prop="repairName"/>
|
||||||
<el-table-column label="状态" align="center" prop="status">
|
<el-table-column label="状态" align="center" prop="status">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<dict-tag :type="DICT_TYPE.TICKET_WARES_STATUS" v-model="scope.row.status" />
|
<dict-tag :type="DICT_TYPE.TICKET_WARES_STATUS" v-model="scope.row.status"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="备注" align="center" prop="remark"/>
|
||||||
<el-table-column label="操作" align="center">
|
<el-table-column label="操作" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="text" size="mini" @click="handleDispose(scope.row)" icon="el-icon-edit">
|
<el-button type="text" size="mini" @click="handleDispose(scope.row)" icon="el-icon-edit">
|
||||||
@ -55,7 +55,7 @@
|
|||||||
@selection-change="handleSelect"
|
@selection-change="handleSelect"
|
||||||
:key="tableKey"
|
:key="tableKey"
|
||||||
>
|
>
|
||||||
<el-table-column type="selection" width="80" align="center" />
|
<el-table-column type="selection" width="80" align="center"/>
|
||||||
<el-table-column label="名称" align="center" prop="waresName" :show-overflow-tooltip="true"/>
|
<el-table-column label="名称" align="center" prop="waresName" :show-overflow-tooltip="true"/>
|
||||||
<el-table-column label="规格" align="center" prop="wares.model" width="180"/>
|
<el-table-column label="规格" align="center" prop="wares.model" width="180"/>
|
||||||
<el-table-column label="领料数量" v-if="type" align="center" prop="waresCount" width="180">
|
<el-table-column label="领料数量" v-if="type" align="center" prop="waresCount" width="180">
|
||||||
@ -76,10 +76,12 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button type="primary" v-if="type" @click="handlePass" :disabled="selections.length === 0 || selections.filter(item => !item.isStock).length !== 0">
|
<el-button type="primary" v-if="type" @click="handlePass"
|
||||||
|
:disabled="selections.length === 0 || selections.filter(item => !item.isStock).length !== 0">
|
||||||
通知领料
|
通知领料
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" v-else @click="handlePass" :disabled="selections.length === 0 || selections.filter(item => !item.isStock).length !== 0">
|
<el-button type="primary" v-else @click="handlePass"
|
||||||
|
:disabled="selections.length === 0 || selections.filter(item => !item.isStock).length !== 0">
|
||||||
通知退料
|
通知退料
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button v-if="type" type="primary" @click="handleCreate" :disabled="selections.length === 0">
|
<el-button v-if="type" type="primary" @click="handleCreate" :disabled="selections.length === 0">
|
||||||
@ -90,14 +92,14 @@
|
|||||||
|
|
||||||
<el-dialog title="采购单" :visible.sync="inStockDialog" width="80%" v-dialogDrag append-to-body>
|
<el-dialog title="采购单" :visible.sync="inStockDialog" width="80%" v-dialogDrag append-to-body>
|
||||||
<el-table
|
<el-table
|
||||||
:data="partList"
|
:data="partList"
|
||||||
:stripe="true"
|
:stripe="true"
|
||||||
:show-overflow-tooltip="true"
|
:show-overflow-tooltip="true"
|
||||||
show-summary
|
show-summary
|
||||||
:summary-method="getSummaries"
|
:summary-method="getSummaries"
|
||||||
@cell-mouse-enter="handleCellEnter"
|
@cell-mouse-enter="handleCellEnter"
|
||||||
@cell-mouse-leave="handleCellLeave"
|
@cell-mouse-leave="handleCellLeave"
|
||||||
@cell-click="handleCellClick"
|
@cell-click="handleCellClick"
|
||||||
>
|
>
|
||||||
<el-table-column label="序号" align="center">
|
<el-table-column label="序号" align="center">
|
||||||
<template scope="scope">
|
<template scope="scope">
|
||||||
@ -163,7 +165,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button type="danger" @click="handleSubmit">结算</el-button>
|
<el-button type="primary" @click="handleSubmit">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
@ -182,12 +184,12 @@ import {getUserProfile} from "@/api/system/user";
|
|||||||
export default {
|
export default {
|
||||||
name: "WaresItem",
|
name: "WaresItem",
|
||||||
components: {WarehouseChoose, SoTable},
|
components: {WarehouseChoose, SoTable},
|
||||||
props:{
|
props: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
},
|
},
|
||||||
data(){
|
data() {
|
||||||
return{
|
return {
|
||||||
queryParams:{
|
queryParams: {
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
query: null,
|
query: null,
|
||||||
@ -196,13 +198,13 @@ export default {
|
|||||||
},
|
},
|
||||||
showSearch: true,
|
showSearch: true,
|
||||||
loading: false,
|
loading: false,
|
||||||
list:[],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
items:[],
|
items: [],
|
||||||
dialogLoading: false,
|
dialogLoading: false,
|
||||||
selections:[],
|
selections: [],
|
||||||
formData:{},
|
formData: {},
|
||||||
inStockDialog: false,
|
inStockDialog: false,
|
||||||
partList: [],
|
partList: [],
|
||||||
includeColumn: ['count', 'totalPrice'],
|
includeColumn: ['count', 'totalPrice'],
|
||||||
@ -217,86 +219,75 @@ export default {
|
|||||||
mounted() {
|
mounted() {
|
||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
methods:{
|
methods: {
|
||||||
// 通过 true是全部、false是选择
|
// 通过 true是全部、false是选择
|
||||||
async handlePass(){
|
async handlePass() {
|
||||||
// 生成领料单、退料单
|
// 生成领料单、退料单
|
||||||
this.formData.repairSo = {
|
this.formData.repairSo = {
|
||||||
soType: this.type ? "02" : "04",
|
soType: this.type ? "02" : "04",
|
||||||
soNo: createUniqueCodeByHead(this.type ? "LL" : "TL"),
|
soNo: createUniqueCodeByHead(this.type ? "LL" : "TL"),
|
||||||
userId: this.formData.repairId,
|
userId: this.formData.repairId,
|
||||||
userName: this.formData.repairName,
|
userName: this.formData.repairName,
|
||||||
soTime: parseTime(Date.now(), '{y}-{m}-{d}'),
|
soTime: parseTime(Date.now(), '{y}-{m}-{d}'),
|
||||||
soStatus: this.type ? "04" : "07",
|
soStatus: this.type ? "04" : "07",
|
||||||
// purchaseType: "01"
|
// purchaseType: "01"
|
||||||
|
}
|
||||||
|
this.formData.repairSois = [...this.selections.map(item => {
|
||||||
|
return {
|
||||||
|
soiType: this.type ? '02' : "04",
|
||||||
|
goodsId: item.waresId,
|
||||||
|
goodsCount: item.waresCount,
|
||||||
}
|
}
|
||||||
this.formData.repairSois = [...this.selections.map(item => {
|
})]
|
||||||
|
if (this.type) {
|
||||||
|
this.formData.items = [...this.selections.map(item => {
|
||||||
return {
|
return {
|
||||||
soiType: this.type ? '02' : "04",
|
id: item.id,
|
||||||
goodsId: item.waresId,
|
|
||||||
goodsCount: item.waresCount,
|
|
||||||
}
|
|
||||||
})]
|
|
||||||
if (this.type){
|
|
||||||
this.formData.items = [...this.selections.map(item => {
|
|
||||||
return {
|
|
||||||
id: item.id,
|
|
||||||
}
|
|
||||||
})]
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
await pass(this.formData)
|
|
||||||
this.$modal.msgSuccess("处理成功")
|
|
||||||
await this.getList()
|
|
||||||
}finally {
|
|
||||||
this.dialogVisible = false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 生成采购 true是全部、false是选择
|
|
||||||
async handleCreate(flag){
|
|
||||||
this.inStockDialog = true
|
|
||||||
if (flag){
|
|
||||||
this.partList = [...this.items.map(item => {
|
|
||||||
return {
|
|
||||||
...item.wares,
|
|
||||||
count: item.waresCount,
|
|
||||||
newPrice: item.wares.purPrice,
|
|
||||||
totalPrice: item.waresCount * item.wares.purPrice
|
|
||||||
}
|
|
||||||
})]
|
|
||||||
}else {
|
|
||||||
this.partList = [...this.selections.map(item => {
|
|
||||||
return {
|
|
||||||
...item.wares,
|
|
||||||
count: item.waresCount,
|
|
||||||
newPrice: item.wares.price,
|
|
||||||
totalPrice: item.waresCount * item.wares.price
|
|
||||||
}
|
}
|
||||||
})]
|
})]
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
await pass(this.formData)
|
||||||
|
this.$modal.msgSuccess("处理成功")
|
||||||
|
await this.getList()
|
||||||
|
} finally {
|
||||||
|
this.dialogVisible = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 生成采购 true是全部、false是选择
|
||||||
|
async handleCreate() {
|
||||||
|
this.inStockDialog = true
|
||||||
|
this.partList = [...this.selections.map(item => {
|
||||||
|
return {
|
||||||
|
...item.wares,
|
||||||
|
count: item.waresCount,
|
||||||
|
newPrice: item.wares.purPrice,
|
||||||
|
totalPrice: item.waresCount * item.wares.purPrice
|
||||||
|
}
|
||||||
|
})]
|
||||||
this.dialogVisible = false
|
this.dialogVisible = false
|
||||||
},
|
},
|
||||||
async getList(){
|
async getList() {
|
||||||
try {
|
try {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
const res = await getPage(this.queryParams)
|
const res = await getPage(this.queryParams)
|
||||||
if (res.data){
|
if (res.data) {
|
||||||
this.list = res.data.records
|
this.list = res.data.records
|
||||||
this.total = res.data.total
|
this.total = res.data.total
|
||||||
}
|
}
|
||||||
}finally {
|
} finally {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleQuery(){
|
handleQuery() {
|
||||||
this.queryParams.pageNo = 1
|
this.queryParams.pageNo = 1
|
||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
resetQuery(){
|
resetQuery() {
|
||||||
this.resetForm('queryForm')
|
this.resetForm('queryForm')
|
||||||
this.handleQuery()
|
this.handleQuery()
|
||||||
},
|
},
|
||||||
async handleDispose(row){
|
async handleDispose(row) {
|
||||||
this.formData = {}
|
this.formData = {}
|
||||||
this.formData = {
|
this.formData = {
|
||||||
...row
|
...row
|
||||||
@ -308,25 +299,25 @@ export default {
|
|||||||
const res = await listTwItem(data)
|
const res = await listTwItem(data)
|
||||||
this.items = res.data
|
this.items = res.data
|
||||||
this.items.forEach(item => {
|
this.items.forEach(item => {
|
||||||
const count = item.waresAlreadyCount ? parseInt(item.waresCount) - parseInt(item.waresAlreadyCount) : item.waresCount
|
const count = item.waresAlreadyCount ? parseInt(item.waresCount) - parseInt(item.waresAlreadyCount) : item.waresCount
|
||||||
item.waresCount = this.type ? count : item.waresAlreadyCount
|
item.waresCount = this.type ? count : item.waresAlreadyCount
|
||||||
item.isStock = this.type ? count <= item.wares.stock : true
|
item.isStock = this.type ? count <= item.wares.stock : true
|
||||||
})
|
})
|
||||||
this.items = this.items.filter(item => this.type ? item.waresStatus === '02' : item.waresAlreadyCount)
|
this.items = this.items.filter(item => this.type ? item.waresStatus === '02' : item.waresAlreadyCount)
|
||||||
if (!this.type){
|
if (!this.type) {
|
||||||
this.items = this.items.filter(item => item.waresAlreadyCount !== item.waresBackCount)
|
this.items = this.items.filter(item => item.waresAlreadyCount !== item.waresBackCount)
|
||||||
}
|
}
|
||||||
}finally {
|
} finally {
|
||||||
this.dialogLoading = false
|
this.dialogLoading = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getRowClass(row){
|
getRowClass(row) {
|
||||||
if (this.type && !row.row.isStock){
|
if (this.type && !row.row.isStock) {
|
||||||
return 'stock'
|
return 'stock'
|
||||||
}
|
}
|
||||||
return ''
|
return ''
|
||||||
},
|
},
|
||||||
handleSelect(row){
|
handleSelect(row) {
|
||||||
this.selections = row
|
this.selections = row
|
||||||
},
|
},
|
||||||
// 设置不统计的字段
|
// 设置不统计的字段
|
||||||
@ -397,8 +388,10 @@ export default {
|
|||||||
/** 保存数据 */
|
/** 保存数据 */
|
||||||
save(row) {
|
save(row) {
|
||||||
// 更新表格的数据
|
// 更新表格的数据
|
||||||
row.isStock = this.type ? row.waresCount <= row.wares.stock : row.waresCount <= row.waresAlreadyCount
|
if (row.wares) {
|
||||||
if (!this.type && !row.isStock){
|
row.isStock = this.type ? row.waresCount <= row.wares.stock : row.waresCount <= row.waresAlreadyCount
|
||||||
|
}
|
||||||
|
if (!this.type && !row.isStock) {
|
||||||
this.$modal.msgWarning("退料数量不能超过领取数量")
|
this.$modal.msgWarning("退料数量不能超过领取数量")
|
||||||
row.waresCount = row.waresAlreadyCount
|
row.waresCount = row.waresAlreadyCount
|
||||||
}
|
}
|
||||||
@ -424,18 +417,18 @@ export default {
|
|||||||
this.partList.splice(index, 1)
|
this.partList.splice(index, 1)
|
||||||
},
|
},
|
||||||
// 提交
|
// 提交
|
||||||
async handleSubmit(){
|
async handleSubmit() {
|
||||||
try {
|
try {
|
||||||
await this.createInit()
|
await this.createInit()
|
||||||
await createRepairSo(this.formData)
|
await createRepairSo(this.formData)
|
||||||
this.inStockDialog = false
|
this.inStockDialog = false
|
||||||
this.$modal.msgSuccess("新增成功")
|
this.$modal.msgSuccess("新增成功")
|
||||||
await this.getList()
|
await this.getList()
|
||||||
}catch{
|
} catch {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 提交前的构建
|
// 提交前的构建
|
||||||
async createInit(){
|
async createInit() {
|
||||||
const res = await getUserProfile()
|
const res = await getUserProfile()
|
||||||
this.formData = {}
|
this.formData = {}
|
||||||
this.formData = {
|
this.formData = {
|
||||||
@ -446,8 +439,10 @@ export default {
|
|||||||
userName: res.data.nickname,
|
userName: res.data.nickname,
|
||||||
soTime: parseTime(Date.now(), '{y}-{m}-{d}'),
|
soTime: parseTime(Date.now(), '{y}-{m}-{d}'),
|
||||||
itemCount: this.partList.length,
|
itemCount: this.partList.length,
|
||||||
totalPrice: this.partList.reduce((x, y) => {return x + y.totalPrice}, 0),
|
totalPrice: this.partList.reduce((x, y) => {
|
||||||
soStatus: "03",
|
return x + y.totalPrice
|
||||||
|
}, 0),
|
||||||
|
soStatus: "02",
|
||||||
remark: this.remark,
|
remark: this.remark,
|
||||||
}
|
}
|
||||||
this.formData.goodsList = [...this.partList.map(item => {
|
this.formData.goodsList = [...this.partList.map(item => {
|
||||||
@ -467,9 +462,10 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
::v-deep .el-table .stock td{
|
::v-deep .el-table .stock td {
|
||||||
color: #ff0000 !important; /* 红色背景 */
|
color: #ff0000 !important; /* 红色背景 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
.item__input {
|
.item__input {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -14,16 +14,17 @@
|
|||||||
end-placeholder="结束日期">
|
end-placeholder="结束日期">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="TicketType === 'tp'" label="服务顾问" prop="userId">
|
<el-form-item v-if="TicketType === 'tp'" label="服务顾问" prop="userId">
|
||||||
<StaffChoose />
|
<StaffChoose/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="TicketType === 'tu'" label="维修类别" prop="repairType">
|
<el-form-item v-if="TicketType === 'tu'" label="维修类别" prop="repairType">
|
||||||
<el-select v-model="queryParams.repairType" size="small">
|
<el-select v-model="queryParams.repairType" size="small">
|
||||||
<el-option v-for="item in this.getDictDatas(DICT_TYPE.REPAIR_TYPE)" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in this.getDictDatas(DICT_TYPE.REPAIR_TYPE)" :key="item.value" :label="item.label"
|
||||||
|
:value="item.value"/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="TicketType === 'tp'" label="类型" prop="repairType">
|
<el-form-item v-if="TicketType === 'tp'" label="类型" prop="repairType">
|
||||||
<RepairTypeChoose @selected="getRepairType" />
|
<RepairTypeChoose @selected="getRepairType"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="门店" prop="corpId">
|
<el-form-item label="门店" prop="corpId">
|
||||||
<CorpChoose v-model="queryParams.corp"/>
|
<CorpChoose v-model="queryParams.corp"/>
|
||||||
@ -41,8 +42,9 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<right-toolbar :showSearch.sync="showSearch"></right-toolbar>
|
<right-toolbar :showSearch.sync="showSearch"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
<TicketTable :ticket-type="TicketType" :list="list" @setVoid="getPage" :is-w-x-c-w="isWXCW"/>
|
<TicketTable :ticket-type="TicketType" :list="list" @setVoid="getPage" :is-w-x-c-w="isCW"/>
|
||||||
<pagination @pagination="getPage" v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
|
<pagination @pagination="getPage" v-show="total > 0" :total="total" :page.sync="queryParams.pageNo"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -63,8 +65,8 @@ export default {
|
|||||||
RepairTypeChoose,
|
RepairTypeChoose,
|
||||||
CorpChoose
|
CorpChoose
|
||||||
},
|
},
|
||||||
props:{
|
props: {
|
||||||
TicketType:{
|
TicketType: {
|
||||||
type: String,
|
type: String,
|
||||||
defaultValue: 'tp',
|
defaultValue: 'tp',
|
||||||
required: true
|
required: true
|
||||||
@ -72,7 +74,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
queryParams:{
|
queryParams: {
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
ticketsStatus: null,
|
ticketsStatus: null,
|
||||||
@ -85,25 +87,30 @@ export default {
|
|||||||
showSearch: true,
|
showSearch: true,
|
||||||
total: 0,
|
total: 0,
|
||||||
list: [],
|
list: [],
|
||||||
isWXCW: false
|
isCW: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.getPage()
|
this.getPage()
|
||||||
this.getIsWXCW()
|
this.getIsCW()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 是否是财务
|
// 是否是财务
|
||||||
async getIsWXCW(){
|
async getIsCW() {
|
||||||
const res = await checkRole("wxcw")
|
const kjRes = await checkRole("kj")
|
||||||
this.isWXCW = res.data
|
if (kjRes.data) {
|
||||||
|
this.isCW = kjRes.data
|
||||||
|
} else {
|
||||||
|
const cnRes = await checkRole("cn")
|
||||||
|
this.isCW = cnRes.data
|
||||||
|
}
|
||||||
},
|
},
|
||||||
// 类型选择
|
// 类型选择
|
||||||
getRepairType(data){
|
getRepairType(data) {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
},
|
},
|
||||||
async getPage(){
|
async getPage() {
|
||||||
switch (this.TicketType){
|
switch (this.TicketType) {
|
||||||
case "tu":
|
case "tu":
|
||||||
this.queryParams.ticketsStatus = "01"
|
this.queryParams.ticketsStatus = "01"
|
||||||
break
|
break
|
||||||
@ -121,11 +128,11 @@ export default {
|
|||||||
this.list = res.data.records
|
this.list = res.data.records
|
||||||
this.total = res.data.total
|
this.total = res.data.total
|
||||||
},
|
},
|
||||||
handleQuery(){
|
handleQuery() {
|
||||||
this.queryParams.pageNo = 1
|
this.queryParams.pageNo = 1
|
||||||
this.getPage()
|
this.getPage()
|
||||||
},
|
},
|
||||||
handleReset(){
|
handleReset() {
|
||||||
this.resetForm("queryForm")
|
this.resetForm("queryForm")
|
||||||
this.queryParams.corp = null
|
this.queryParams.corp = null
|
||||||
this.handleQuery()
|
this.handleQuery()
|
||||||
|
@ -104,7 +104,7 @@
|
|||||||
<el-button size="mini" type="text" icon="el-icon-view" @click="handleShow(scope.row)"
|
<el-button size="mini" type="text" icon="el-icon-view" @click="handleShow(scope.row)"
|
||||||
>查看
|
>查看
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button v-if="TicketType === 'tu' && isWXCW && !scope.row.payType" size="mini" type="text" icon="el-icon-finished"
|
<el-button v-if="TicketType === 'tu' && isWXCW && scope.row.isFinish === '1'" size="mini" type="text" icon="el-icon-finished"
|
||||||
@click="handlePaid(scope.row)"
|
@click="handlePaid(scope.row)"
|
||||||
>结算
|
>结算
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-dialog title="客户信息" :visible.sync="dialogVisible" width="80%" v-dialogDrag append-to-body>
|
<el-dialog title="客户信息" ref="dialogRef" :visible.sync="dialogVisible" width="80%" v-dialogDrag append-to-body v-loading="dialogLoading">
|
||||||
<el-form size="small" ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading"
|
<el-form size="small" ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading"
|
||||||
label-width="100px">
|
label-width="100px">
|
||||||
<el-collapse v-model="activeNames">
|
<el-collapse v-model="activeNames">
|
||||||
@ -68,16 +68,16 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="2">
|
<!-- <el-row :gutter="2">-->
|
||||||
<el-col :span="12">
|
<!-- <el-col :span="12">-->
|
||||||
<el-form-item label="选择会员" prop="userInfo.memberLevelId">
|
<!-- <el-form-item label="选择会员" prop="userInfo.memberLevelId">-->
|
||||||
<el-select v-model="formData.userInfo.memberLevelId" placeholder="请选择会员">
|
<!-- <el-select v-model="formData.userInfo.memberLevelId" placeholder="请选择会员">-->
|
||||||
<el-option v-for="(item,index) in levelList" :key="item.id"
|
<!-- <el-option v-for="(item,index) in levelList" :key="item.id"-->
|
||||||
:label="item.name" :value="item.id"/>
|
<!-- :label="item.name" :value="item.id"/>-->
|
||||||
</el-select>
|
<!-- </el-select>-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
</el-col>
|
<!-- </el-col>-->
|
||||||
</el-row>
|
<!-- </el-row>-->
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="联系地址" prop="userInfo.address">
|
<el-form-item label="联系地址" prop="userInfo.address">
|
||||||
@ -318,26 +318,34 @@ export default {
|
|||||||
sexDictDatas: getDictDatas(DICT_TYPE.DICT_SYS_USER_SEX),
|
sexDictDatas: getDictDatas(DICT_TYPE.DICT_SYS_USER_SEX),
|
||||||
cusBusiTypeDictDatas: getDictDatas(DICT_TYPE.DICT_CUS_BUSI_TYPE),
|
cusBusiTypeDictDatas: getDictDatas(DICT_TYPE.DICT_CUS_BUSI_TYPE),
|
||||||
buttonLoading: false,
|
buttonLoading: false,
|
||||||
|
dialogLoading: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async open(data) {
|
async open(data) {
|
||||||
this.reset()
|
|
||||||
if (data?.userInfo?.id){
|
|
||||||
this.formData.userInfo = {
|
|
||||||
...this.formData.userInfo,
|
|
||||||
...data.userInfo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (data?.carInfo?.id){
|
|
||||||
this.formData.carInfo = {
|
|
||||||
...this.formData.carInfo,
|
|
||||||
...data.carInfo,
|
|
||||||
brandAndModel: [data.carInfo?.carBrand, data.carInfo?.carModel]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await this.listLevel()
|
|
||||||
this.dialogVisible = true
|
this.dialogVisible = true
|
||||||
|
try {
|
||||||
|
this.reset()
|
||||||
|
// this.dialogLoading = this.$loading({
|
||||||
|
// target: this.$refs.dialogRef.$el
|
||||||
|
// })
|
||||||
|
if (data?.userInfo?.id){
|
||||||
|
this.formData.userInfo = {
|
||||||
|
...this.formData.userInfo,
|
||||||
|
...data.userInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data?.carInfo?.id){
|
||||||
|
this.formData.carInfo = {
|
||||||
|
...this.formData.carInfo,
|
||||||
|
...data.carInfo,
|
||||||
|
brandAndModel: [data.carInfo?.carBrand, data.carInfo?.carModel]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// await this.listLevel()
|
||||||
|
}finally {
|
||||||
|
// this.dialogLoading.close()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async compute(){
|
async compute(){
|
||||||
this.buttonLoading = true
|
this.buttonLoading = true
|
||||||
|
Loading…
Reference in New Issue
Block a user