Browse Source

上架后申请审批

pda_nev
李俊城 1 year ago
parent
commit
bb9507061e
  1. 37
      fe/PDA/api/index.js
  2. 43
      fe/PDA/common/basic.js
  3. 38
      fe/PDA/common/pdabasic.css
  4. 41
      fe/PDA/mycomponents/comRequest/comRequestDetail.vue
  5. 54
      fe/PDA/mycomponents/comRequest/comRequestTopInfo.vue
  6. 24
      fe/PDA/mycomponents/return/comReturn.vue
  7. 25
      fe/PDA/pages.js
  8. 22
      fe/PDA/pages.json
  9. 216
      fe/PDA/pages/return/purchaseReturnRequest.vue
  10. 200
      fe/PDA/pages/return/purchaseReturnRequestApprove.vue
  11. 189
      fe/PDA/pages/return/purchaseReturnRequestApprove_detail.vue

37
fe/PDA/api/index.js

@ -831,6 +831,43 @@ export const getReturnJobList = (params) => request(
data: params data: params
}); });
//上架后退货申请提交
export const purchaseReturnRequestSubmit = (params) => request(
devUrl + "/api/pda/store/purchase-return-request", {
method: 'post',
data: params
});
//上架后退货申请列表
export const getReturnRequestList = (params) => request(
devUrl + "/api/wms/store/purchase-return-request/list", {
method: 'post',
data: params
});
//上架后退货申请列表详情
export const getReturnRequestDetail= (id) => request(
devUrl + "/api/wms/store/purchase-return-request/"+id, {
method: 'get',
data: {}
});
//上架后退货申请同意
export const purchaseReturnRequestAgree= (id) => request(
devUrl + "/api/wms/store/purchase-return-request/agree/"+id, {
method: 'post',
data: {}
});
//上架后退货申请驳回
export const purchaseReturnRequestReject= (id) => request(
devUrl + "/api/wms/store/purchase-return-request/refuse/"+id, {
method: 'post',
data: {}
});
//根据Number 获取盘点任务列表 //根据Number 获取盘点任务列表
export const getReturnJobByNumber = (number) => request( export const getReturnJobByNumber = (number) => request(
devUrl + "/api/pda/job/purchase-return/by-number/" + number, { devUrl + "/api/pda/job/purchase-return/by-number/" + number, {

43
fe/PDA/common/basic.js

@ -28,6 +28,38 @@ export function getInspectTypeStyle(val) {
else if (val == 4) return 'pick' else if (val == 4) return 'pick'
else return 'other' else return 'other'
} }
//审批状态
export function getRequestStatusDesc(val) {
if (val == 1) return '新增'
else if (val == 2) return '待审批'
else if (val == 3) return '已驳回'
else if (val == 4) return '待执行'
else if (val == 5) return '执行中'
else if (val == 6) return '已完成'
else if (val == 7) return '已取消'
else if (val == 8) return '中止'
else if (val == 9) return '部分完成'
else return '其他'
}
//审批状态样式
export function getRequestStatusStyle(val) {
if (val == 1) return 'request_add'
else if (val == 2) return 'request_approve'
else if (val == 3) return 'request_return'
else if (val == 4) return 'request_wait'
else if (val == 5) return 'request_doing'
else if (val == 6) return 'request_complete'
else if (val == 7) return 'request_cancle'
else if (val == 8) return 'request_stop'
else if (val == 9) return 'request_part'
else return 'other'
}
//open pending completed close //open pending completed close
export function getInspectTypeDesc(val) { export function getInspectTypeDesc(val) {
if (val == 0) return '未知' if (val == 0) return '未知'
@ -330,3 +362,14 @@ export function vibrate() {
} }
}) })
} }
export function navigateBack(backIndex) {
let canNavBack = getCurrentPages()
if (canNavBack && canNavBack.length - 1 > backIndex) {
uni.navigateBack({
delta: backIndex
})
} else {
history.back();
}
}

38
fe/PDA/common/pdabasic.css

@ -695,3 +695,41 @@ export function getItemTypeStyle(val) {
/deep/ .uni-input-input { /deep/ .uni-input-input {
font-size: 18px; font-size: 18px;
} }
.request_add{
background-color: #45B5F3;
color: #FFFFFF;
}
.request_approve{
background-color: #E49826;
color: #FFFFFF;
}
.request_return{
background-color: #C90000;
color: #FFFFFF;
}
.request_wait{
background-color: #F4CD00;
color: #FFFFFF;
}
.request_doing{
background-color: #5A7CF3;
color: #FFFFFF;
}
.request_complete{
background-color: #31BB99;
color: #FFFFFF;
}
.request_cancle{
background-color: #DADADA;
color: #FFFFFF;
}
.request_stop{
background-color: #870505;
color: #FFFFFF;
}
.request_part{
background-color: #21DF4B;
color: #FFFFFF;
}

41
fe/PDA/mycomponents/comRequest/comRequestDetail.vue

@ -0,0 +1,41 @@
<!-- 收货任务详情 -->
<template>
<view class="device-detail" style="padding-bottom: 0 !important;">
<comRequestTopInfo :requestContent="dataContent"></comRequestTopInfo>
<view class="" style="font-size: 32rpx;">
订单号 : {{dataContent.asnNumber}}
</view>
<view class="" style="font-size: 32rpx;">
供应商代码 : {{dataContent.supplierCode}}
</view>
</view>
</template>
<script>
import comRequestTopInfo from '@/mycomponents/comRequest/comRequestTopInfo.vue'
export default {
components: {
comRequestTopInfo
},
props: {
dataContent: {
type: Object,
default: {}
}
},
data() {
return {
};
},
mounted() {
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

54
fe/PDA/mycomponents/comRequest/comRequestTopInfo.vue

@ -0,0 +1,54 @@
<!-- 收货任务详情 -->
<template>
<view class="task_num">
<view class="ljh_box nopad">
<view class="tit_ljh">
<text class="state-style" :class="requestContent.requestStatus | requestStatusStyle">
{{requestContent.requestStatus | requestStatusColor}}
</text>
<text class="text_bold" style="padding:4rpx 2rpx;">{{requestContent.number}}</text>
</view>
</view>
</view>
</template>
<script>
import {
getRequestStatusDesc,
getRequestStatusStyle
} from '@/common/basic.js';
export default {
name: 'comJobScanDetail',
components: {
},
props: {
requestContent: {
type: Object,
default: {}
}
},
data() {
return {
};
},
filters: {
requestStatusStyle: function(val) {
return getRequestStatusStyle(val);
},
requestStatusColor: function(val) {
return getRequestStatusDesc(val);
},
},
mounted() {
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

24
fe/PDA/mycomponents/return/comReturn.vue

@ -1,7 +1,10 @@
<!--收货任务卡片--> <!--收货任务卡片-->
<template> <template>
<view class="device-detail"> <view class="device-detail">
<view class="card_task nopad"> <view v-if="isRequest" class="card_task nopad">
<comRequestTopInfo :requestContent="returnItem"></comRequestTopInfo>
</view>
<view v-else class="card_task nopad">
<com-job-top-info :jobContent="returnItem"></com-job-top-info> <com-job-top-info :jobContent="returnItem"></com-job-top-info>
</view> </view>
@ -24,6 +27,9 @@
<text <text
class="text_darkblue">{{returnItem.creationTime===null?'无':returnItem.creationTime| formatDate}}</text> class="text_darkblue">{{returnItem.creationTime===null?'无':returnItem.creationTime| formatDate}}</text>
</view> </view>
<view class="">
{{returnItem.worker}}
</view>
</view> </view>
</view> </view>
@ -36,17 +42,29 @@
dateFormat dateFormat
} from '@/common/basic.js'; } from '@/common/basic.js';
import comJobTopInfo from '@/mycomponents/comjob/comJobTopInfo.vue' import comJobTopInfo from '@/mycomponents/comjob/comJobTopInfo.vue'
import comRequestTopInfo from '@/mycomponents/comRequest/comRequestTopInfo.vue'
export default { export default {
name: "comReturn", name: "comReturn",
components: { components: {
comJobTopInfo comJobTopInfo,
comRequestTopInfo
}, },
data() { data() {
return { return {
}; };
}, },
props: ['returnItem'], props: {
returnItem: {
type: Object,
value: null
},
isRequest:{
type:Boolean,
value:false
}
},
filters: { filters: {
statusStyle: function(val) { statusStyle: function(val) {
return getJobStatuStyle(val); return getJobStatuStyle(val);

25
fe/PDA/pages.js

@ -127,6 +127,7 @@ module.exports = () => ({
"enablePullDownRefresh": true "enablePullDownRefresh": true
} }
}, },
{ {
"path": "pages/return/purchaseReturn_detail", "path": "pages/return/purchaseReturn_detail",
"style": { "style": {
@ -134,6 +135,30 @@ module.exports = () => ({
"enablePullDownRefresh": true "enablePullDownRefresh": true
} }
}, },
{
"path": "pages/return/purchaseReturnRequest",
"style": {
"navigationBarTitleText": "上架后退货申请",
"enablePullDownRefresh": true
}
},
{
"path": "pages/return/purchaseReturnRequestApprove",
"style": {
"navigationBarTitleText": "上架后退货申请审批",
"enablePullDownRefresh": true
}
},
{
"path": "pages/return/purchaseReturnRequestApprove_detail",
"style": {
"navigationBarTitleText": "上架后退货申请审批详情",
"enablePullDownRefresh": true
}
},
{ {
"path": "pages/inventory/scrap", "path": "pages/inventory/scrap",
"style": { "style": {

22
fe/PDA/pages.json

@ -143,6 +143,28 @@
"enablePullDownRefresh": true "enablePullDownRefresh": true
} }
}, },
{
"path": "pages/return/purchaseReturnRequest",
"style": {
"navigationBarTitleText": "上架后退货申请",
"enablePullDownRefresh": true
}
},
{
"path": "pages/return/purchaseReturnRequestApprove",
"style": {
"navigationBarTitleText": "上架后退货申请审批",
"enablePullDownRefresh": true
}
},
{
"path": "pages/return/purchaseReturnRequestApprove_detail",
"style": {
"navigationBarTitleText": "上架后退货申请审批详情",
"enablePullDownRefresh": true
}
},
{ {
"path": "pages/inventory/scrap", "path": "pages/inventory/scrap",
"style": { "style": {

216
fe/PDA/pages/return/purchaseReturnRequest.vue

@ -0,0 +1,216 @@
<template>
<page-meta root-font-size="18px"></page-meta>
<view class="">
<win-blank-view @goScan='openScanPopup' v-if="itemList.length==0"></win-blank-view>
<uni-swipe-action>
</uni-swipe-action>
<scroll-view scroll-y="true" class="scroll-Y">
<view class="detail-list margin_top" v-for="(item, index) in itemList" :key="index">
<uni-swipe-action>
<uni-swipe-action-item :right-options="options2" @click="removeClick($event,index)">
<com-balance-item :dataContent='item'></com-balance-item>
</uni-swipe-action-item>
</uni-swipe-action>
</view>
</scroll-view>
<div class="new_bot_box" v-show="itemList.length>0">
<view class="new_btn_bot">
<button class="new_save_btn" @click="submit()">提交</button>
</view>
</div>
<win-scan-button @goScan='openScanPopup' v-if="itemList.length>0"></win-scan-button>
<win-scan-by-pack ref="scanPopup" @getScanResult='getScanResult'></win-scan-by-pack>
<com-balance ref="balanceItems" @selectedItem='selectedBalanceItem'></com-balance>
<com-message ref="comMessage" @afterCloseScanMessage='closeScanMessage'></com-message>
</view>
</template>
<script>
import {
getBalancesByFilter,
} from '@/api/index.js';
import winBlankView from '@/mycomponents/wincom/winBlankView.vue'
import winScanButton from '@/mycomponents/wincom/winScanButton.vue'
import winScanByPack from '@/mycomponents/wincom/winScanByPack.vue'
import comMessage from '@/mycomponents/common/comMessage.vue'
import comBalanceItem from '@/mycomponents/comItem/comBalanceItem.vue'
import comBalance from '@/mycomponents/common/comBalance.vue'
export default {
name: 'return',
components: {
comMessage,
winBlankView,
winScanButton,
winScanByPack,
comBalanceItem,
comBalance
},
data() {
return {
options1: [{
text: '取消置顶'
}],
options2: [{
text: '移除',
style: {
backgroundColor: '#ff0000'
}
}],
itemList: [],
currentLabel: null,
};
},
onReady() {
this.openScanPopup();
},
methods: {
//
getScanResult(result) {
let code = result.data.code;
if (code == '') return;
this.currentLabel = result.data;
let items = this.itemList.filter(r => {
return r.packingCode === code
})
if (items.length > 0) {
this.showMessage('箱码【' + code + '】已经存在,请扫描其他箱码.');
} else {
this.getBalances()
}
},
getBalances() {
let that = this;
let code = this.currentLabel.packingCode;
uni.showLoading({
title: "加载中....",
mask: true
});
let params = {
pageSize: 1000,
pageIndex: 1,
packingCode: code,
locationTypes: [2] //
};
getBalancesByFilter(params).then(res => {
if (res.totalCount == 0) {
this.showScanMessage('箱码【' + code + '】在【原料库】未查询到库存信息');
} else if (res.totalCount == 1) {
let balanceItem = res.items[0];
let item = this.createItem(balanceItem);
that.itemList.unshift(item)
that.scanPopupGetFocus();
} else {
this.$refs.balanceItems.openPopup(res.items);
}
uni.hideLoading();
}).catch(ex => {
uni.hideLoading();
that.showMessage(ex.message);
});
},
createItem(item) {
item.remark = item.remrak;
item.itemCode = item.itemCode
item.itemName = item.itemName;
item.itemDesc1 = item.itemDesc1;
item.itemDesc2 = item.itemDesc2;
item.uom = item.uom;
item.qty = item.qty;
// item.stdPackUom =
// item.stdPackQty =
item.fromPackingCode = item.packingCode;
item.toPackingCode = item.packingCode;
item.fromContainerCode = item.containerCode;
item.toContainerCode = item.containerCode;
item.fromLot = item.lot;
item.toLot = item.lot;
item.supplierBatch = item.supplierBatch;
item.arriveDate = item.arriveDate;
item.produceDate = item.produceDate;
item.expireDate = item.expireDate;
item.fromLocationCode = item.locationCode;
item.fromLocationGroup = item.locationGroup;
item.fromLocationArea = item.locationArea;
item.fromLocationErpCode = item.locationErpCode;
item.fromWarehouseCode = localStorage.warehouseCode;
item.toLocationCode = item.locationCode;
item.toLocationGroup = item.locationGroup;
item.toLocationArea = item.locationArea;
item.toLocationErpCode = item.locationErpCode;
item.toWarehouseCode = localStorage.warehouseCode;
item.fromStatus = item.status;
item.toStatus = item.status;
item.reasonCode = this.scrapReason;
return item;
},
selectedBalanceItem(balanceItem) {
let item = this.createItem(balanceItem);
this.itemList.unshift(item)
},
scanPopupGetFocus() {
this.$refs.scanPopup.getfocus();
},
openScanPopup() {
this.$refs.scanPopup.openScanPopup()
},
closeScanMessage() {
this.scanPopupGetFocus();
},
showMessage(message) {
this.$refs.comMessage.showMessage(message);
},
removeClick(e, index) {
if (e.content.text === '移除') {
uni.showModal({
title: '提示',
content: '是否移除选择的行?',
success: res => {
if (res.confirm) {
this.itemList.splice(index, 1);
}
}
});
}
},
submit(){
if(this.itemList.length==0){
this.showMessage("请先扫描箱码")
return;
}
}
}
}
</script>
<style scoped lang="scss">
movable-view {
display: flex;
align-items: center;
justify-content: center;
height: 150rpx;
width: 150rpx;
}
movable-area {
height: 500rpx;
width: 100%;
overflow: hidden;
}
.movable-max {
width: 500rpx;
height: 500rpx;
}
</style>

200
fe/PDA/pages/return/purchaseReturnRequestApprove.vue

@ -0,0 +1,200 @@
<template>
<page-meta root-font-size="18px"></page-meta>
<view class="">
<win-empty-view v-if="returnList.length==0"></win-empty-view>
<view v-for="(item, index) in returnList" :key="index" @click="openDetail(item)">
<com-return :returnItem="item" :isRequest="true"></com-return>
</view>
<uni-load-more :status="loadingType" v-if="returnList.length>0" />
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import {
getReturnRequestList,
} from '@/api/index.js';
import {
getJobStatuStyle,
getJobStatuDesc,
goHome
} from '@/common/basic.js';
import winEmptyView from '@/mycomponents/wincom/winEmptyView.vue'
import comReturn from '@/mycomponents/return/comReturn.vue'
import winScanButton from '@/mycomponents/wincom/winScanButton.vue'
import winScanByCode from '@/mycomponents/wincom/winScanByCode.vue'
import winMulitScan from '@/mycomponents/wincom/winMulitScan.vue'
import comMessage from '@/mycomponents/common/comMessage.vue'
export default {
name: 'return',
components: {
winEmptyView,
comReturn,
winScanButton,
winScanByCode,
winMulitScan,
comMessage,
},
data() {
return {
returnList: [],
reload: false,
status: '',
contentText: {
contentdown: '上拉加载更多',
contentrefresh: '加载中',
contentnomore: '没有更多'
},
titleArray: ['任务编号'],
loadingType: "nomore",
pageSize: this.modelConfig,
maxResultCount: 10,
skipCount: 0,
pageIndex: 0,
totalCount: 0,
filter: []
};
},
onShow() {
this.getList('refresh');
},
onReachBottom() {
//
if (this.loadingType == 'loading' || this.loadingType == 'nomore') {
return;
}
this.getList("more");
},
onPullDownRefresh() {
this.getList('refresh');
},
//退
onBackPress(options) {
if (options.from === 'navigateBack') {
return false;
}
goHome();
return true;
},
//
onNavigationBarButtonTap(e) {
if (e.index === 0) {
goHome();
}else if(e.index === 1){
window.location.reload();
}
},
filters: {
statusStyle: function(val) {
return getJobStatuStyle(val);
},
statusColor: function(val) {
return getJobStatuDesc(val);
},
},
methods: {
openScanPopup() {
this.$refs.scanPopup.openScanPopup();
},
closeScanPopup() {
this.$refs.popup.close()
},
getList(type) {
let that = this;
uni.showLoading({
title: "加载中....",
mask: true
});
this.loadingType = "loading";
if (type === "refresh") {
this.skipCount = 0;
this.pageIndex = 0;
this.returnList = [];
}
let params = {
maxResultCount: this.maxResultCount,
skipCount: this.skipCount,
sorting: "",
condition: {
filters: this.filter
// [
// {
// logic: "And",
// column: "CreationTime",
// action: "==",
// value: "1"
// }
// ]
},
};
getReturnRequestList(params)
.then(res => {
uni.hideLoading();
if (type === "refresh") {
uni.stopPullDownRefresh();
}
var list = res.items;
var totalCount = res.totalCount
this.loadingType = "loadmore";
if (this.returnList.length < totalCount) {
this.returnList = type === "refresh" ? list : this.returnList.concat(list);
this.pageIndex++;
this.skipCount = this.pageIndex * this.pageSize;
} else {
this.loadingType = "nomore";
}
})
.catch(err => {
this.loadingType = "";
this.showMessage(err.message);
uni.hideLoading();
if (type === "refresh") {
uni.stopPullDownRefresh();
}
});
},
openDetail(item) {
uni.navigateTo({
url: './purchaseReturnRequestApprove_detail?id=' + item.id
});
},
showMessage(message) {
this.$refs.comMessage.showMessage(message);
},
},
}
</script>
<style scoped lang="scss">
movable-view {
display: flex;
align-items: center;
justify-content: center;
height: 150rpx;
width: 150rpx;
}
movable-area {
height: 500rpx;
width: 100%;
overflow: hidden;
}
.movable-max {
width: 500rpx;
height: 500rpx;
}
</style>

189
fe/PDA/pages/return/purchaseReturnRequestApprove_detail.vue

@ -0,0 +1,189 @@
<!-- 收货任务详情 -->
<template>
<page-meta root-font-size="18px"></page-meta>
<view class="">
<view class="top_card">
<comRequestDetail :dataContent="dataContent">
</comRequestDetail>
</view>
<scroll-view scroll-y="true" class="scroll-Y" style="padding-bottom: 180rpx;">
<view class="" style="background-color: #fff;">
<uni-table border stripe emptyText="" v-for="(item, index) in dataList" style="width: 100%;">
<uni-tr style="width: 100%;" v-for="(item1, index1) in item" :key="index1">
<uni-td>{{item1.title}}</uni-td>
<uni-td>{{item1.content}}</uni-td>
</uni-tr>
<view style=" height: 30rpx; width: 100%;">
</view>
</uni-table>
</view>
</scroll-view>
<view class="uni-flex uni-row new_btn_bot">
<button class="new_clear_btn btn_double" @click="approve()">审批</button>
<button class="new_save_btn btn_double" @click="reject()">驳回</button>
</view>
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import {
getReturnRequestDetail,
purchaseReturnRequestAgree,
purchaseReturnRequestReject
} from '@/api/index.js';
import {
navigateBack
} from '@/common/basic.js';
import comRequestDetail from '@/mycomponents/comRequest/comRequestDetail.vue'
import comMessage from '@/mycomponents/common/comMessage.vue'
export default {
components: {
comRequestDetail,
comMessage
},
data() {
return {
dataContent: {},
dataList: [],
id: ""
};
},
mounted: function() {
},
onLoad(option) {
if (option.id != undefined) {
this.id = option.id
this.getDetail(option.id);
}
},
//
onNavigationBarButtonTap(e) {
if (e.index === 0) {
goHome();
} else if (e.index === 1) {
window.location.reload();
}
},
mounted() {
uni.setNavigationBarColor({
frontColor: '#ffffff',
backgroundColor: "#5A7CF3 !important"
})
},
methods: {
getDetail(id) {
getReturnRequestDetail(id)
.then(res => {
this.dataContent = res;
this.initData(res.details)
})
.catch(err => {
this.showMessage(err.message);
});
},
approve() {
uni.showModal({
title: '提示',
content: '确认审批?',
success: res => {
if (res.confirm) {
purchaseReturnRequestAgree(this.id).then(res => {
if (res) {
this.showMessage("审批成功");
navigateBack(1)
}else {
this.showMessage("审批失败");
}
}).catch(error => {
this.showMessage("审批失败" + error.message);
})
}
}
});
},
reject() {
uni.showModal({
title: '提示',
content: '确认驳回?',
success: res => {
if (res.confirm) {
purchaseReturnRequestReject(this.id).then(res => {
if (res) {
this.showMessage("驳回成功");
navigateBack(1)
}else {
this.showMessage("驳回失败");
}
}).catch(error => {
this.showMessage("驳回失败" + error.message);
})
}
}
});
},
initData(data) {
this.dataList = []
data.forEach(res => {
var list = [{
title: '物品代码',
content: res.itemCode
}, {
title: '物品名称',
content: res.itemName,
},
{
title: '物品描述',
content: res.itemDesc1,
},
{
title: '箱码',
content: res.packingCode,
},
{
title: '批次',
content: res.lot,
},
{
title: '退货库位',
content: res.locationCode,
},
{
title: '数量',
content: res.qty,
},
{
title: '单位',
content: res.uom,
},
{
title: '订单号',
content: res.poNumber,
},
];
this.dataList.push(list)
})
},
showMessage(message) {
this.$refs.comMessage.showMessage(message);
},
}
}
</script>
<style scoped lang="scss">
</style>
Loading…
Cancel
Save