Browse Source

Merge remote-tracking branch 'origin/master'

master
God 9 months ago
parent
commit
02539c2dd6
  1. 4
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesordervehicle/BusSalesOrderVehicleMapper.xml
  2. 3
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java
  3. 9
      yxt-as-ui/src/api/Common/dictcommons.js
  4. 14
      yxt-as-ui/src/api/maintenanceReceive/maintenanceReceive.js
  5. 18
      yxt-as-ui/src/api/operation/repairbill.js
  6. 96
      yxt-as-ui/src/api/storage/stocktakingLoss.js
  7. 94
      yxt-as-ui/src/api/storage/stocktakingSurplus.js
  8. 11
      yxt-as-ui/src/api/warehouse/goodsShelves.js
  9. 409
      yxt-as-ui/src/router/index.js
  10. 148
      yxt-as-ui/src/views/maintenanceReceive/index.vue
  11. 18
      yxt-as-ui/src/views/maintenanceReceive/maintenanceConfirm.vue
  12. 786
      yxt-as-ui/src/views/maintenanceReceive/maintenanceOutbound.vue
  13. 63
      yxt-as-ui/src/views/maintenanceReceive/maintenanceReturnBound.vue
  14. 23
      yxt-as-ui/src/views/operation/repairbill/repairbillAdd.vue
  15. 57
      yxt-as-ui/src/views/operation/repairbill/repairbillBYLeaveFactory.vue
  16. 1
      yxt-as-ui/src/views/operation/repairbill/repairbillInfo.vue
  17. 55
      yxt-as-ui/src/views/storage/deliveryNotice/index.vue
  18. 2
      yxt-as-ui/src/views/storage/deliveryNotice/receiptAdd.vue
  19. 4
      yxt-as-ui/src/views/storage/deliveryNotice/receiptInfo.vue
  20. 60
      yxt-as-ui/src/views/storage/receivingGoods/index.vue
  21. 14
      yxt-as-ui/src/views/storage/receivingGoods/receivingGoodsAdd.vue
  22. 5
      yxt-as-ui/src/views/storage/receivingGoods/receivingGoodsInfo.vue
  23. 158
      yxt-as-ui/src/views/storage/receivingGoods/upShelfInfo.vue
  24. 294
      yxt-as-ui/src/views/storage/stocktaking/index.vue
  25. 5
      yxt-as-ui/src/views/storage/stocktaking/stocktakingRackCodeList.vue
  26. 330
      yxt-as-ui/src/views/storage/stocktakingLoss/index.vue
  27. 370
      yxt-as-ui/src/views/storage/stocktakingLoss/stocktakingLossAdd.vue
  28. 150
      yxt-as-ui/src/views/storage/stocktakingLoss/stocktakingLossInfo.vue
  29. 327
      yxt-as-ui/src/views/storage/stocktakingSurplus/index.vue
  30. 422
      yxt-as-ui/src/views/storage/stocktakingSurplus/stocktakingSurplusAdd.vue
  31. 149
      yxt-as-ui/src/views/storage/stocktakingSurplus/stocktakingSurplusInfo.vue
  32. 18
      yxt-as-ui/src/views/storage/upShelf/index.vue
  33. 34
      yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/app/GoodsConfrimDetailsVo.java
  34. 18
      yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/app/GoodsConfrimListQuery.java
  35. 49
      yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/app/GoodsConfrimListVo.java
  36. 1
      yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairinventorybill/AsBusrepairInventoryBillInit.java
  37. 6
      yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairinventorybilldetail/AsBusrepairInventorybillDetailSDto.java
  38. 6
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.java
  39. 67
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.xml
  40. 29
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillRest.java
  41. 135
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillService.java
  42. 59
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairinventorybill/AsBusrepairInventorybillService.java
  43. 8
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairinventorybilldetail/AsBusrepairInventorybillDetailMapper.xml
  44. 36
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairinventorybilldetail/AsBusrepairInventorybillDetailService.java

4
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesordervehicle/BusSalesOrderVehicleMapper.xml

@ -3,11 +3,11 @@
<mapper namespace="com.yxt.anrui.buscenter.biz.bussalesordervehicle.BusSalesOrderVehicleMapper">
<insert id="saveList">
insert into bus_sales_order_vehicle(createBySid,sid,createTime,salesOrderSid,linkNo,linkSid,borrowerSid,
isEnable,loanContractSid)
isEnable,loanContractSid,temporaryNo)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.createBySid},#{item.sid},#{item.createTime},#{item.salesOrderSid},#{item.linkNo},#{item.linkSid},#{item.borrowerSid},
#{item.isEnable},#{item.loanContractSid})
#{item.isEnable},#{item.loanContractSid},#{item.temporaryNo})
</foreach>
</insert>
<!-- <where> ${ew.sqlSegment} </where>-->

3
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java

@ -5000,6 +5000,7 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
String otherBankNo = "";
String salesDeptNo = v.getSalesDeptNo();
String substringVin = vinNo.substring(vinNo.length() - 8);
String borrowerNo = v.getBorrowerNo();
LoanFinBank mloanFinBank = loanFinBankService.selectFinBankByName(bankName);
if (null != mloanFinBank) {
bankSid = mloanFinBank.getSid();
@ -5178,6 +5179,7 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
busVinSid = busSalesOrderVehicleEntity.getSid();
busSalesOrderVehicleEntity.setSalesOrderSid(salesOrderSid);
busSalesOrderVehicleEntity.setLinkNo(vinNo);
busSalesOrderVehicleEntity.setTemporaryNo(borrowerNo);
BaseVehicle baseVehicle = baseVehicleFeign.selOneByVinNo(vinNo).getData();
if (null != baseVehicle) {
linkSid = baseVehicle.getSid();
@ -5245,6 +5247,7 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
busVinSid = busSalesOrderVehicle.getSid();
busSalesOrderVehicle.setSalesOrderSid(salesOrderSid);
busSalesOrderVehicle.setLinkNo(vinNo);
busSalesOrderVehicle.setTemporaryNo(borrowerNo);
BaseVehicle baseVehicle = baseVehicleFeign.selOneByVinNo(vinNo).getData();
if (null != baseVehicle) {
linkSid = baseVehicle.getSid();

9
yxt-as-ui/src/api/Common/dictcommons.js

@ -43,6 +43,15 @@ export function fetchBySid(sid) {
})
}
// 根据分公司全路径Sid获取分公司下开票信息(采购系统不能为空)
export function getInvoicingList(data) {
return request({
url: '/fin/v1/fincompanyinvoicing/getInvoicingList',
method: 'GET',
params: data
})
}
// 根据分公司Sid获取分公司下所有的部门
export function getListDeptByOrgSid(data) {
return request({

14
yxt-as-ui/src/api/maintenanceReceive/maintenanceReceive.js

@ -14,6 +14,20 @@ export default {
})
},
// 打印领料单
downloadExcel: function(data) {
return request({
url: '/as/v1/AsBusrepairInventorybill/exportExcel',
method: 'post',
responseType: 'blob', // 表明返回服务器返回的数据类型
data: data,
headers: {
'Content-Type': 'application/json'
}
});
},
// 选择工单初始化数据
initBill: function(data) {
return request({

18
yxt-as-ui/src/api/operation/repairbill.js

@ -10,6 +10,24 @@ export default {
headers: { 'Content-Type': 'application/json' }
})
},
// 查询分页列表 -- 维修单出厂
listPageCC: function(params) {
return request({
url: '/as/v1/AsBusrepairBill/listPageCC',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 查询分页列表 -- 维修单出厂 -- 出厂确认
carOutFactory: function(data) {
return request({
url: '/as/v1/AsBusrepairBill/carOutFactory',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
saveOrUpdate: function(data) {
return request({
url: '/as/v1/AsBusrepairBill/saveBill',

96
yxt-as-ui/src/api/storage/stocktakingLoss.js

@ -0,0 +1,96 @@
import request from '@/utils/request'
export default {
// 查询分页列表
listPage: function(params) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventoryloss/listPage',
method: 'post',
data: params,
headers: {
'Content-Type': 'application/json'
}
})
},
deleteBySids: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventoryloss/delBySids',
method: 'DELETE',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
},
// 盘点单详情
fetchDetailsBySid: function(params) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventoryloss/fetchDetailsBySid/' + params,
method: 'get',
data: params,
headers: {
'Content-Type': 'application/json'
}
})
},
// 根据部门sid 获取所有盘点单号
getSourceBillNoBySid: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventoryloss/getSourceBillNoBySid',
method: 'post',
params: data
})
},
// 根据盘点单sid 获取商品
sourceBillBySid: function(params) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventoryloss/sourceBillBySid/' + params,
method: 'get',
data: params,
headers: {
'Content-Type': 'application/json'
}
})
},
// 保存盘盈入库
save: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventoryloss/save',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
});
},
// 提交盘盈入库
submit: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventoryloss/submit',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
});
},
}

94
yxt-as-ui/src/api/storage/stocktakingSurplus.js

@ -0,0 +1,94 @@
import request from '@/utils/request'
export default {
// 查询分页列表
listPage: function(params) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventorysurplus/listPage',
method: 'post',
data: params,
headers: {
'Content-Type': 'application/json'
}
})
},
deleteBySids: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventorysurplus/delBySids',
method: 'DELETE',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
},
// 盘点单详情
fetchDetailsBySid: function(params) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventorysurplus/fetchDetailsBySid/' + params,
method: 'get',
data: params,
headers: {
'Content-Type': 'application/json'
}
})
},
// 根据部门sid 获取所有盘点单号
getSourceBillNoBySid: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventorysurplus/getSourceBillNoBySid',
method: 'post',
params: data
})
},
// 根据盘点单sid 获取商品
sourceBillBySid: function(params) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventorysurplus/sourceBillBySid/' + params,
method: 'get',
data: params,
headers: {
'Content-Type': 'application/json'
}
})
},
// 保存盘盈入库
save: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventorysurplus/save',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
});
},
// 提交盘盈入库
submit: function(data) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/v1/wmsinventorysurplus/submit',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
});
},
}

11
yxt-as-ui/src/api/warehouse/goodsShelves.js

@ -81,4 +81,15 @@ export default {
})
},
// 查询所有库位列表
warehouserackListAll: function(params) {
return request({
baseURL: "http://127.0.0.1:4523/m1/4061550-0-default",
url: '/wms/apiadmin/base/warehouserack/listAll',
method: 'post',
data: params,
})
},
}

409
yxt-as-ui/src/router/index.js

@ -49,126 +49,185 @@ export const constantRoutes = [{
meta: {
title: '业务'
},
children: [
{
children: [{
path: '/preregistration/preregistration',
component: () => import('@/views/operation/preregistration/preregistration.vue'),
name: 'Preregistration',
meta: { title: '预约单管理', noCache: true }
meta: {
title: '预约单管理',
noCache: true
}
},
{
path: '/repairbill/repairbill',
component: () => import('@/views/operation/repairbill/repairbill.vue'),
name: 'RepairBill',
meta: { title: '维修单管理(登记)', noCache: true }
meta: {
title: '维修单管理(登记)',
noCache: true
}
},
{
path: '/repairbill/repairbillBySendWork',
component: () => import('@/views/operation/repairbill/repairbillBySendWork.vue'),
name: 'RepairBillBySendWork',
meta: { title: '维修单管理(派工)', noCache: true }
meta: {
title: '维修单管理(派工)',
noCache: true
}
},
{
path: '/repairbill/repairbillByMaintain',
component: () => import('@/views/operation/repairbill/repairbillByMaintain.vue'),
name: 'RepairBillByMaintain',
meta: { title: '维修单管理(维修)', noCache: true }
meta: {
title: '维修单管理(维修)',
noCache: true
}
},
{
path: '/repairbill/repairbillByBeCompleted',
component: () => import('@/views/operation/repairbill/repairbillByBeCompleted.vue'),
name: 'RepairBillByBeCompleted',
meta: { title: '维修单管理(竣工)', noCache: true }
meta: {
title: '维修单管理(竣工)',
noCache: true
}
},
{
path: '/repairbill/repairbillBySettleAccounts',
component: () => import('@/views/operation/repairbill/repairbillBySettleAccounts.vue'),
name: 'RepairBillBySettleAccounts',
meta: { title: '维修单管理(结算)', noCache: true }
meta: {
title: '维修单管理(结算)',
noCache: true
}
},
{
path: '/repairbill/repairbillBYLeaveFactory',
component: () => import('@/views/operation/repairbill/repairbillBYLeaveFactory.vue'),
name: 'RepairBillBYLeaveFactory',
meta: { title: '维修单管理(出厂)', noCache: true }
meta: {
title: '维修单管理(出厂)',
noCache: true
}
},
{
path: '/workorderquery/workorderquery',
component: () => import('@/views/operation/workorderquery/workorderquery.vue'),
name: 'WorkOrderQuery',
meta: { title: '维修单查询', noCache: true }
meta: {
title: '维修单查询',
noCache: true
}
},
{
path: '/workorderinvoicing/workorderinvoicing',
component: () => import('@/views/operation/workorderinvoicing/workorderinvoicing.vue'),
name: 'WorkOrderInvoicing',
meta: { title: '保外工单开票管理', noCache: true }
meta: {
title: '保外工单开票管理',
noCache: true
}
},
{
path: '/workorderreceivable/workorderreceivable',
component: () => import('@/views/operation/workorderreceivable/workorderreceivable.vue'),
name: 'WorkOrderReceivable',
meta: { title: '工单应收调差管理', noCache: true }
meta: {
title: '工单应收调差管理',
noCache: true
}
},
{
path: '/arrearsleavefactory/arrearsleavefactory',
component: () => import('@/views/operation/arrearsleavefactory/arrearsleavefactory.vue'),
name: 'ArrearsLeaveFactory',
meta: { title: '保外欠款出厂管理', noCache: true }
meta: {
title: '保外欠款出厂管理',
noCache: true
}
},
{
path: '/pendingclaim/pendingclaim',
component: () => import('@/views/operation/pendingclaim/pendingclaim.vue'),
name: 'PendingClaim',
meta: { title: '待索赔维修工单', noCache: true }
meta: {
title: '待索赔维修工单',
noCache: true
}
},
{
path: '/claimstatement/claimstatement',
component: () => import('@/views/operation/claimstatement/claimstatement.vue'),
name: 'ClaimStatement',
meta: { title: '厂家索赔单管理', noCache: true }
meta: {
title: '厂家索赔单管理',
noCache: true
}
},
{
path: '/claimbilling/claimbilling',
component: () => import('@/views/operation/claimbilling/claimbilling.vue'),
name: 'ClaimBilling',
meta: { title: '索赔单开票管理', noCache: true }
meta: {
title: '索赔单开票管理',
noCache: true
}
},
{
path: '/claimpendingverification/claimpendingverification',
component: () => import('@/views/operation/claimpendingverification/claimpendingverification.vue'),
name: 'ClaimPendingVerification',
meta: { title: '工单索赔待核对', noCache: true }
meta: {
title: '工单索赔待核对',
noCache: true
}
},
{
path: '/claimadjustment/claimadjustment',
component: () => import('@/views/operation/claimadjustment/claimadjustment.vue'),
name: 'ClaimAdjustment',
meta: { title: '工单索赔调整', noCache: true }
meta: {
title: '工单索赔调整',
noCache: true
}
},
{
path: '/workslrsettlement/workslrsettlement',
component: () => import('@/views/operation/workslrsettlement/workslrsettlement.vue'),
name: 'WorkSLRSettlement',
meta: { title: '工单反结算管理', noCache: true }
meta: {
title: '工单反结算管理',
noCache: true
}
},
{
path: '/workorderreturnvisit/workorderreturnvisit',
component: () => import('@/views/operation/workorderreturnvisit/workorderreturnvisit.vue'),
name: 'WorkOrderReturnVisit',
meta: { title: '工单回访管理', noCache: true }
meta: {
title: '工单回访管理',
noCache: true
}
},
{
path: '/salesticket/salesticket',
component: () => import('@/views/operation/salesticket/salesticket.vue'),
name: 'SalesTicket',
meta: { title: '销售单管理', noCache: true }
meta: {
title: '销售单管理',
noCache: true
}
},
{
path: '/merchandisereturn/merchandisereturn',
component: () => import('@/views/operation/merchandisereturn/merchandisereturn.vue'),
name: 'MerchandiseReturn',
meta: { title: '商品退货管理', noCache: true }
meta: {
title: '商品退货管理',
noCache: true
}
}
]
},
@ -219,30 +278,41 @@ export const constantRoutes = [{
meta: {
title: '仓库管理'
},
children: [
{
children: [{
path: '/goodsShelves/index',
component: () => import('@/views/warehouse/goodsShelves/index.vue'),
name: 'GoodsShelves',
meta: { title: '库位管理', noCache: true }
meta: {
title: '库位管理',
noCache: true
}
},
{
path: '/warehouseArea/index',
component: () => import('@/views/warehouse/warehouseArea/index.vue'),
name: 'WarehouseArea',
meta: { title: '库区管理', noCache: true }
meta: {
title: '库区管理',
noCache: true
}
},
{
path: '/warehouseAreaType/index',
component: () => import('@/views/warehouse/warehouseAreaType/index.vue'),
name: 'WarehouseAreaType',
meta: { title: '库区类型管理', noCache: true }
meta: {
title: '库区类型管理',
noCache: true
}
},
{
path: '/warehouse/index',
component: () => import('@/views/warehouse/warehouse/index.vue'),
name: 'Warehouse',
meta: { title: '仓库管理', noCache: true }
meta: {
title: '仓库管理',
noCache: true
}
}
]
},
@ -254,36 +324,50 @@ export const constantRoutes = [{
meta: {
title: '商品管理'
},
children: [
{
children: [{
path: '/brands/index',
component: () => import('@/views/goods/brands/index.vue'),
name: 'Brands',
meta: { title: '品牌管理', noCache: true }
meta: {
title: '品牌管理',
noCache: true
}
},
{
path: '/category/index',
component: () => import('@/views/goods/category/index.vue'),
name: 'Category',
meta: { title: '商品类别', noCache: true }
meta: {
title: '商品类别',
noCache: true
}
},
{
path: '/factory/index',
component: () => import('@/views/goods/factory/index.vue'),
name: 'Factory',
meta: { title: '厂家管理', noCache: true }
meta: {
title: '厂家管理',
noCache: true
}
},
{
path: '/goods/index',
component: () => import('@/views/goods/goods/index.vue'),
name: 'Goods',
meta: { title: '商品管理', noCache: true }
meta: {
title: '商品管理',
noCache: true
}
},
{
path: '/unit/index',
component: () => import('@/views/goods/unit/index.vue'),
name: 'Unit',
meta: { title: '计量单位', noCache: true }
meta: {
title: '计量单位',
noCache: true
}
}
]
},
@ -294,126 +378,203 @@ export const constantRoutes = [{
meta: {
title: '仓储'
},
children: [
{
children: [{
path: '/outStorage/index',
component: () => import('@/views/storage/outStorage/index'),
name: 'OutStorage',
meta: { title: '出库管理', noCache: true }
meta: {
title: '出库管理',
noCache: true
}
},
{
path: '/inventory/inventory',
component: () => import('@/views/storage/inventory/inventory.vue'),
name: 'Inventory',
meta: { title: '库存查询', noCache: true }
meta: {
title: '库存查询',
noCache: true
}
},
{
path: '/inventory/inventoryRefer',
component: () => import('@/views/storage/inventory/inventoryRefer.vue'),
name: 'InventoryRefer',
meta: { title: '出入库查询', noCache: true }
meta: {
title: '出入库查询',
noCache: true
}
},
{
{
path: '/adjustment/index',
component: () => import('@/views/storage/adjustment/index.vue'),
name: 'Adjustment',
meta: { title: '定/调价', noCache: true }
meta: {
title: '定/调价',
noCache: true
}
},
{
path: '/maintenanceInOrOutBound/index',
component: () => import('@/views/storage/maintenanceInOrOutBound/index.vue'),
name: 'MaintenanceInOrOutBound',
meta: { title: '维修出入库查询', noCache: true }
meta: {
title: '维修出入库查询',
noCache: true
}
},
{
path: '/stocktaking/index',
component: () => import('@/views/storage/stocktaking/index'),
name: 'Stocktaking',
meta: { title: '盘点管理', noCache: true }
meta: {
title: '盘点管理',
noCache: true
}
},
{
path: '/stocktakingSurplus/index',
component: () => import('@/views/storage/stocktakingSurplus/index'),
name: 'Stocktaking',
meta: {
title: '盘盈入库',
noCache: true
}
},
{
path: '/stocktakingLoss/index',
component: () => import('@/views/storage/stocktakingLoss/index'),
name: 'Stocktaking',
meta: {
title: '盘亏出库',
noCache: true
}
},
{
path: '/allocation/index',
component: () => import('@/views/storage/allocation/index'),
name: 'Allocation',
meta: { title: '调拨管理', noCache: true }
meta: {
title: '调拨管理',
noCache: true
}
},
{
path: '/deliveryNotice/index',
component: () => import('@/views/storage/deliveryNotice/index'),
name: 'DeliveryNotice',
meta: { title: '到货通知单', noCache: true }
meta: {
title: '到货通知单',
noCache: true
}
},
{
path: '/receivingGoods/index',
component: () => import('@/views/storage/receivingGoods/index'),
name: 'ReceivingGoods',
meta: { title: '收货单管理', noCache: true }
meta: {
title: '收货单管理',
noCache: true
}
},
{
path: '/upShelf/index',
component: () => import('@/views/storage/upShelf/index'),
name: 'UpShelf',
meta: { title: '上架单管理', noCache: true }
meta: {
title: '上架单管理',
noCache: true
}
},
{
path: '/oldPartsFactory/index',
component: () => import('@/views/storage/oldPartsFactory/index'),
name: 'OldPartsFactory',
meta: { title: '旧件返厂', noCache: true }
meta: {
title: '旧件返厂',
noCache: true
}
},
{
path: '/manufacturerconfirm/index',
component: () => import('@/views/storage/manufacturerconfirm/index'),
name: 'Manufacturerconfirm',
meta: { title: '厂家确认', noCache: true }
meta: {
title: '厂家确认',
noCache: true
}
},
{
path: '/oldPartsCope/index',
component: () => import('@/views/storage/oldPartsCope/index'),
name: 'OldPartsCope',
meta: { title: '旧件处理', noCache: true }
meta: {
title: '旧件处理',
noCache: true
}
},
{
path: '/oldPartsRecovery/index',
component: () => import('@/views/storage/oldPartsRecovery/index'),
name: 'OldPartsRecovery',
meta: { title: '旧件回收', noCache: true }
meta: {
title: '旧件回收',
noCache: true
}
},
{
path: '/oldPartsInStorage/index',
component: () => import('@/views/storage/oldPartsInStorage/index'),
name: 'OldPartsInStorage',
meta: { title: '旧件入库', noCache: true }
meta: {
title: '旧件入库',
noCache: true
}
},
{
path: '/oldPartsInvertory/index',
component: () => import('@/views/storage/oldPartsInvertory/index'),
name: 'OldPartsInvertory',
meta: { title: '旧件库存', noCache: true }
meta: {
title: '旧件库存',
noCache: true
}
},
{
path: '/oldPartsInAndOutStorage/index',
component: () => import('@/views/storage/oldPartsInAndOutStorage/index'),
name: 'OldPartsInAndOutStorage',
meta: { title: '旧件出入库查询', noCache: true }
meta: {
title: '旧件出入库查询',
noCache: true
}
},
{
path: '/storageage/storageage',
component: () => import('@/views/storage/storageage/storageage'),
name: 'StorageAge',
meta: { title: '库龄查询', noCache: true }
meta: {
title: '库龄查询',
noCache: true
}
},
{
path: '/carryover/carryoverstock',
component: () => import('@/views/storage/carryover/carryoverstock'),
name: 'CarryoverStock',
meta: { title: '结转库存查询', noCache: true }
meta: {
title: '结转库存查询',
noCache: true
}
},
{
path: '/carryover/carryforwardrecord',
component: () => import('@/views/storage/carryover/carryforwardrecord'),
name: 'CarryForwardRecord',
meta: { title: '结转记录查询', noCache: true }
meta: {
title: '结转记录查询',
noCache: true
}
}
]
},
@ -424,24 +585,32 @@ export const constantRoutes = [{
meta: {
title: '客户'
},
children: [
{
children: [{
path: '/customermanagement/customermanagement',
component: () => import('@/views/client/customermanagement/customermanagement.vue'),
name: 'CustomerManagement',
meta: { title: '客户管理', noCache: true }
meta: {
title: '客户管理',
noCache: true
}
},
{
path: '/filing/maintenanceEnterprise',
component: () => import('@/views/client/filing/maintenanceEnterprise.vue'),
name: 'MaintenanceEnterprise',
meta: { title: '欠款月结客户备案', noCache: true }
meta: {
title: '欠款月结客户备案',
noCache: true
}
},
{
path: '/customerunit/customerunit',
component: () => import('@/views/client/customerunit/customerunit.vue'),
name: 'CustomerUnit',
meta: { title: '客户单位管理', noCache: true }
meta: {
title: '客户单位管理',
noCache: true
}
}
]
},
@ -452,18 +621,23 @@ export const constantRoutes = [{
meta: {
title: '采购'
},
children: [
{
children: [{
path: '/procurement/procurement',
component: () => import('@/views/purchase/procurement/procurement.vue'),
name: 'Procurement',
meta: { title: '采购单管理', noCache: true }
meta: {
title: '采购单管理',
noCache: true
}
},
{
path: '/purchasereturn/purchasereturn',
component: () => import('@/views/purchase/purchasereturn/purchasereturn.vue'),
name: 'PurchaseReturn',
meta: { title: '采购退货', noCache: true }
meta: {
title: '采购退货',
noCache: true
}
}
]
},
@ -474,48 +648,68 @@ export const constantRoutes = [{
meta: {
title: '报表'
},
children: [
{
children: [{
path: '/salesstatement/merchandisesalesdetail',
component: () => import('@/views/statement/salesstatement/merchandisesalesdetail.vue'),
name: 'MerchandiseSalesDetail',
meta: { title: '销售明细商品', noCache: true }
meta: {
title: '销售明细商品',
noCache: true
}
},
{
path: '/salesstatement/merchandisesalessummary',
component: () => import('@/views/statement/salesstatement/merchandisesalessummary.vue'),
name: 'MerchandiseSalesSummary',
meta: { title: '销售汇总商品', noCache: true }
meta: {
title: '销售汇总商品',
noCache: true
}
},
{
path: '/salesstatement/salestrendreport',
component: () => import('@/views/statement/salesstatement/salestrendreport.vue'),
name: 'SalesTrendReport',
meta: { title: '销售价趋势报表', noCache: true }
meta: {
title: '销售价趋势报表',
noCache: true
}
},
{
path: '/warehousereport/inventorystatistics',
component: () => import('@/views/statement/warehousereport/inventorystatistics.vue'),
name: 'InventoryStatistics',
meta: { title: '库存统计', noCache: true }
meta: {
title: '库存统计',
noCache: true
}
},
{
path: '/warehousereport/receiptandreceiptrecord',
component: () => import('@/views/statement/warehousereport/receiptandreceiptrecord.vue'),
name: 'ReceiptAndReceiptRecord',
meta: { title: '收发存明细报表', noCache: true }
meta: {
title: '收发存明细报表',
noCache: true
}
},
{
path: '/purchasereport/detailedpurchasereport',
component: () => import('@/views/statement/purchasereport/detailedpurchasereport.vue'),
name: 'DetailedPurchaseReport',
meta: { title: '采购明细报表', noCache: true }
meta: {
title: '采购明细报表',
noCache: true
}
},
{
path: '/purchasereport/purchasesummaryreport',
component: () => import('@/views/statement/purchasereport/purchasesummaryreport.vue'),
name: 'PurchaseSummaryReport',
meta: { title: '采购汇总报表', noCache: true }
meta: {
title: '采购汇总报表',
noCache: true
}
}
]
},
@ -526,78 +720,113 @@ export const constantRoutes = [{
meta: {
title: '基础信息'
},
children: [
{
children: [{
path: '/maintenanceitem/maintenanceitem',
component: () => import('@/views/basicinformation/maintenanceitem/maintenanceitem.vue'),
name: 'MaintenanceItem',
meta: { title: '维修项目管理', noCache: true }
meta: {
title: '维修项目管理',
noCache: true
}
},
{
path: '/maintenanceProjectRecord/maintenanceProjectRecord',
component: () => import('@/views/basicinformation/maintenanceProjectRecord/maintenanceProjectRecord.vue'),
name: 'MaintenanceProjectRecord',
meta: { title: '维修项目备案', noCache: true }
meta: {
title: '维修项目备案',
noCache: true
}
},
{
path: '/additionitem/additionitem',
component: () => import('@/views/basicinformation/additionitem/additionitem.vue'),
name: 'AdditionItem',
meta: { title: '附加项目管理', noCache: true }
meta: {
title: '附加项目管理',
noCache: true
}
},
{
path: '/setmeal/setmeal',
component: () => import('@/views/basicinformation/setmeal/setmeal.vue'),
name: 'Setmeal',
meta: { title: '套餐管理', noCache: true }
meta: {
title: '套餐管理',
noCache: true
}
},
{
path: '/profession/profession',
component: () => import('@/views/basicinformation/profession/profession.vue'),
name: 'Profession',
meta: { title: '工种管理', noCache: true }
meta: {
title: '工种管理',
noCache: true
}
},
{
path: '/subjects/subjects',
component: () => import('@/views/basicinformation/subjects/subjects.vue'),
name: 'Subjects',
meta: { title: '科目管理', noCache: true }
meta: {
title: '科目管理',
noCache: true
}
},
{
path: '/team/team',
component: () => import('@/views/basicinformation/team/team.vue'),
name: 'Team',
meta: { title: '班组管理', noCache: true }
meta: {
title: '班组管理',
noCache: true
}
},
{
path: '/suppliertype/suppliertype',
component: () => import('@/views/basicinformation/suppliertype/suppliertype.vue'),
name: 'SupplierType',
meta: { title: '供应商类型管理', noCache: true }
meta: {
title: '供应商类型管理',
noCache: true
}
},
{
path: '/supplier/supplier',
component: () => import('@/views/basicinformation/supplier/supplier.vue'),
name: 'Supplier',
meta: { title: '供应商管理', noCache: true }
meta: {
title: '供应商管理',
noCache: true
}
},
{
path: '/claimantManufacturer/claimantManufacturer',
component: () => import('@/views/basicinformation/claimantManufacturer/claimantManufacturer.vue'),
name: 'ClaimantManufacturer',
meta: { title: '索赔厂家管理', noCache: true }
meta: {
title: '索赔厂家管理',
noCache: true
}
},
{
path: '/technicalTitle/technicalTitle',
component: () => import('@/views/basicinformation/technicalTitle/technicalTitle.vue'),
name: 'TechnicalTitle',
meta: { title: '维修技师职称管理', noCache: true }
meta: {
title: '维修技师职称管理',
noCache: true
}
},
{
path: '/technicalTitleFiling/technicalTitleFiling',
component: () => import('@/views/basicinformation/technicalTitleFiling/technicalTitleFiling.vue'),
name: 'TechnicalTitleFiling',
meta: { title: '维修技师职称备案管理', noCache: true }
meta: {
title: '维修技师职称备案管理',
noCache: true
}
}
]
},

148
yxt-as-ui/src/views/maintenanceReceive/index.vue

@ -10,13 +10,8 @@
<div v-show="isSearchShow" class="search">
<el-form :inline="true" class="tab-header">
<el-form-item label="维修状态">
<el-select
v-model="queryParams.params.repairState"
filterable
clearable
placeholder="请选择"
style="width:100%"
>
<el-select v-model="queryParams.params.repairState" filterable clearable placeholder="请选择"
style="width:100%">
<el-option v-for="item in repairTypeList" :key="item.sid" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
@ -24,46 +19,17 @@
<el-input v-model="queryParams.params.billNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="工单类型">
<el-select
v-model="queryParams.params.billType"
filterable
clearable
placeholder="请选择"
style="width:100%"
>
<el-option
v-for="item in billTypeList"
:key="item.dictKey"
:label="item.dictValue"
:value="item.dictValue"
/>
<el-select v-model="queryParams.params.billType" filterable clearable placeholder="请选择"
style="width:100%">
<el-option v-for="item in billTypeList" :key="item.dictKey" :label="item.dictValue"
:value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="科目">
<el-select
v-model="queryParams.params.subject"
filterable
clearable
placeholder="请选择"
style="width:100%"
>
<el-option
v-for="item in subjectList"
:key="item.subjectSid"
:label="item.subject"
:value="item.subject"
/>
</el-select>
</el-form-item>
<el-form-item label="完成状态">
<el-select
v-model="queryParams.params.completeState"
filterable
clearable
placeholder="请选择"
style="width:100%"
>
<el-option v-for="item in completeStateList" :key="item.sid" :label="item.name" :value="item.sid" />
<el-select v-model="queryParams.params.subject" filterable clearable placeholder="请选择"
style="width:100%">
<el-option v-for="item in subjectList" :key="item.subjectSid" :label="item.subject"
:value="item.subject" />
</el-select>
</el-form-item>
<el-form-item label="客户名称">
@ -76,23 +42,17 @@
<el-input v-model="queryParams.params.vinNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="进厂日期">
<el-date-picker
v-model="queryParams.params.createTimeStart"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
style="width: 200px;"
/>
<el-date-picker v-model="queryParams.params.createTimeStart" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;" />
<el-date-picker
v-model="queryParams.params.createTimeEnd"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
style="width: 200px;"
/>
<el-date-picker v-model="queryParams.params.createTimeEnd" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;" />
</el-form-item>
<el-form-item label="完成状态">
<el-select v-model="queryParams.params.completeState" filterable clearable placeholder="请选择"
style="width:100%">
<el-option v-for="item in completeStateList" :key="item.sid" :label="item.name" :value="item.sid" />
</el-select>
</el-form-item>
</el-form>
@ -109,17 +69,12 @@
<!-- End 项目列表头部 -->
<!-- Start 项目列表 -->
<div class="">
<el-table
v-loading="tableLoading"
:data="dataList"
border
style="width: 100%"
@selection-change="selectionLineChangeHandle"
>
<el-table v-loading="tableLoading" :data="dataList" border style="width: 100%"
@selection-change="selectionLineChangeHandle">
<el-table-column fixed width="50" type="selection" align="center" />
<el-table-column fixed width="80" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column prop="repairState" label="维修状态" align="center" />
<el-table-column label="工单编号" align="center">
<el-table-column label="工单编号" width="180" align="center">
<template slot-scope="scope">
<div style="color: #1890FF; text-decoration: underline ;" @click="showResult(scope.row)">
{{ scope.row.billNo }}
@ -133,7 +88,7 @@
<el-table-column prop="mobile" label="联系电话" align="center" />
<el-table-column prop="vehMark" label="车架号" align="center" />
<el-table-column prop="vinNo" label="车牌号" align="center" />
<el-table-column prop="entryTime" label="进厂日期" align="center" />
<el-table-column prop="entryTime" width="180" label="进厂日期" align="center" />
</el-table>
</div>
@ -141,14 +96,8 @@
<div class="pages">
<div class="tit" />
<!-- 翻页 -->
<pagination
v-show="dataList.length > 0"
:total="queryParams.total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
class="pagination"
@pagination="loadList"
/>
<pagination v-show="dataList.length > 0" :total="queryParams.total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" class="pagination" @pagination="loadList" />
</div>
</div>
</div>
@ -209,6 +158,13 @@
btnKey: 'toReturn',
btnLabel: '领料退库'
},
{
type: 'success',
size: 'small',
icon: '',
btnKey: 'doPrint',
btnLabel: '打印领料单'
},
{
type: 'primary',
size: 'small',
@ -320,6 +276,9 @@
case 'toReturn':
this.toReturn()
break
case 'doPrint':
this.doPrint()
break
case 'toConfirm':
this.toConfirm()
break
@ -359,6 +318,41 @@
})
}
},
doPrint() {
if (this.sids.length == 1) {
// const loading = this.$loading({
// lock: true,
// text: 'Loading',
// spinner: 'el-icon-loading',
// background: 'rgba(0, 0, 0, 0.7)'
// })
// req.downloadExcel(this.sids).then((resp) => {
// loading.close()
// const blob = new Blob([resp], {
// type: 'application/vnd.ms-excel'
// })
// const fileName = '' + '.docx'
// const elink = document.createElement('a')
// elink.download = fileName
// elink.style.display = 'nonde'
// elink.href = URL.createObjectURL(blob)
// document.body.appendChild(elink)
// elink.click()
// URL.revokeObjectURL(elink.href)
// document.body.removeChild(elink)
// }).catch(() => {
// loading.close()
// })
} else {
this.$message({
showClose: true,
type: 'warning',
message: '请选择一条记录进行操作'
})
}
},
toConfirm() {
// this.viewState = 4
// this.$refs['divConfirmInfo'].showAdd('4e2b2a7d-d86c-415f-aa69-65e311a73c50')

18
yxt-as-ui/src/views/maintenanceReceive/maintenanceConfirm.vue

@ -78,8 +78,8 @@
<div class="span-sty">是否外出</div>
<el-form-item>
<el-radio-group class="addinputw addinputInfo" :disabled="true" v-model="formobj.isGoOut">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
<el-radio :label="'1'"></el-radio>
<el-radio :label="'2'"></el-radio>
</el-radio-group>
</el-form-item>
@ -118,15 +118,15 @@
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center" />
<el-table-column label="服务项目" prop="serviceItem" align="center" />
<el-table-column label="工种" prop="serviceType" align="center" />
<el-table-column label="科目" prop="subject" align="center" />
<el-table-column label="维修" prop="repairerName" align="center" />
<!-- <el-table-column label="科目" prop="subject" align="center" /> -->
<el-table-column label="维修技师" prop="repairerName" align="center" />
<el-table-column label="工时提成" prop="examineHourPrice" align="center" />
<el-table-column label="工时单价" prop="hourPrice" align="center" />
<el-table-column label="工时数" prop="hours" align="center" />
<el-table-column label="工时数" prop="hours" align="center" />
<el-table-column label="销售价" prop="price" align="center" />
<el-table-column label="折扣" prop="discount" align="center" />
<el-table-column label="优惠" prop="discountAmount" align="center" />
<el-table-column label="金额" prop="amount" align="center" />
<el-table-column label="销售金额" prop="amount" align="center" />
<el-table-column label="备注" prop="remarks" align="center" />
</el-table>
@ -144,6 +144,7 @@
<!-- <el-table-column type="selection" align="center" width="50"/> -->
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center" />
<el-table-column label="项目名称" prop="serviceItem" align="center" />
<el-table-column label="商品ID" prop="goodsID" width="120" align="center" />
<el-table-column label="商品名称" prop="goodsSpuName" align="center" />
<el-table-column label="商品编码" prop="goodsSkuCode" align="center" />
<el-table-column label="规格" prop="goodsSkuOwnSpec" align="center" />
@ -170,10 +171,13 @@
</el-select>
</template>
</el-table-column> -->
<el-table-column label="销售单价" prop="price" align="center" />
<el-table-column label="单价" prop="price" align="center" />
<el-table-column label="库存数量" prop="inventoryNum" align="center" />
<el-table-column label="出库数量" prop="outboundCount" align="center" />
<el-table-column label="出库金额" prop="amount" align="center" />
<el-table-column label="备注" prop="remarks" align="center" />
<el-table-column label="领料人" prop="receivePer" width="120" align="center" />
<el-table-column label="领料时间" prop="receiveTimes" width="120" align="center" />
<!-- <el-table-column label="出库数量" align="center" width="120">
<template slot-scope="scope">
<el-input v-model="scope.row.count" clearable placeholder=""

786
yxt-as-ui/src/views/maintenanceReceive/maintenanceOutbound.vue

@ -51,13 +51,8 @@
<el-col :span="8">
<div class="span-sty"><span class="must">*</span> 领料人</div>
<el-form-item prop="warehouseManager">
<el-select
v-model="formobj.warehouseManager"
filterable
clearable
placeholder="请选择"
class="addinputw addinputInfo"
@change="receivePerSelect">
<el-select v-model="formobj.warehouseManager" filterable clearable placeholder="请选择"
class="addinputw addinputInfo" @change="receivePerSelect">
<el-option v-for="item in receivePerList" :key="item.sid" :label="item.name" :value="item.sid">
</el-option>
</el-select>
@ -121,8 +116,8 @@
<div class="span-sty">是否外出</div>
<el-form-item>
<el-radio-group v-model="formobj.isGoOut" class="addinputw addinputInfo" :disabled="true">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
<el-radio :label="'1'"></el-radio>
<el-radio :label="'2'"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -165,30 +160,49 @@
</el-table-column>
<el-table-column label="服务项目" prop="serviceItem" align="center" />
<el-table-column label="工种" prop="serviceType" align="center" />
<el-table-column label="科目" prop="subject" align="center" />
<el-table-column label="维修" prop="repairerName" align="center" />
<!-- <el-table-column label="科目" prop="subject" align="center" /> -->
<el-table-column label="维修技师" prop="repairerName" align="center" />
<el-table-column label="工时提成" prop="examineHourPrice" align="center" />
<el-table-column label="工时单价" prop="hourPrice" align="center" />
<el-table-column label="工时数" prop="hours" align="center" />
<el-table-column label="工时数" prop="hours" align="center" />
<el-table-column label="销售价" prop="price" align="center" />
<el-table-column label="折扣" prop="discount" align="center" />
<el-table-column label="优惠" prop="discountAmount" align="center" />
<el-table-column label="金额" prop="amount" align="center" />
<el-table-column label="销售金额" prop="amount" align="center" />
<el-table-column label="备注" prop="remarks" align="center" />
</el-table>
<div class="title titleOne">
<div>商品列表</div>
<div>已领料列表</div>
</div>
<el-table v-loading="listLoading" :data="formobj.receiveList" border>
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center" />
<el-table-column label="维修项目" prop="serviceItem" width="120" align="center" />
<el-table-column label="商品ID" prop="goodsID" width="120" align="center" />
<el-table-column label="商品名称" prop="goodsSpuName" width="120" align="center" />
<el-table-column label="商品编码" prop="goodsSkuCode" width="100" align="center" />
<el-table-column label="规格" prop="goodsSkuOwnSpec" width="120" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="仓库" prop="warehouseName" width="150" align="center" />
<el-table-column label="库位" prop="warehouseRackCode" align="center" />
<el-table-column label="单价" prop="price" width="120" align="center" />
<el-table-column label="库存数量" prop="inventoryNum" width="120" align="center" />
<el-table-column label="已出数量" prop="outboundCount" width="120" align="center" />
<el-table-column label="出库数量" prop="count" width="120" align="center" />
<el-table-column label="出库金额" prop="amount" width="120" align="center" />
<el-table-column label="备注" prop="remarks" width="220" align="center" />
<el-table-column label="领料人" prop="receivePer" width="120" align="center" />
<el-table-column label="领料时间" prop="receiveTimes" width="120" align="center" />
</el-table>
<div class="title titleOne">
<div>维修用料</div>
</div>
<el-row>
<el-col :span="24">
<div class="span-sty span-sty-one" style="width: 300px;!important;">前台登记时对商品要求备注</div>
<el-form-item><el-input
v-model="formobj.registerRemarks"
class="addinputInfo-one"
style="width: 70%"
clearable
placeholder="" /></el-form-item>
<el-form-item><el-input v-model="formobj.registerRemarks" class="addinputInfo-one" style="width: 70%"
clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<el-table v-loading="listLoading" :data="formobj.detailList" border>
@ -199,18 +213,17 @@
<el-button type="primary" size="mini" @click="deleteGoods(scope.row)">删除</el-button>
</template>
</el-table-column>
<el-table-column label="项目名称" prop="serviceItem" width="120" align="center" />
<el-table-column label="维修项目" prop="serviceItem" width="120" align="center" />
<el-table-column label="商品ID" prop="goodsID" width="120" align="center" />
<!-- <el-table-column label="商品名称" prop="goodsSpuName" align="center" /> -->
<el-table-column label="商品名称" align="center" min-width="180">
<template slot-scope="scope">
<el-popover placement="right" width="800" trigger="click">
<div>
<el-table
v-loading="commodityLoading"
:data="commodityData"
highlight-current-row
<el-table v-loading="commodityLoading" :data="commodityData" highlight-current-row
@current-change="commodityCurrentChange($event, scope.row)">
<el-table-column fixed prop="goodsID" label="商品ID" width="180" align="center" />
<el-table-column fixed prop="goodsSpuName" label="商品名称" width="180" align="center" />
<el-table-column fixed prop="goodsSkuCode" label="商品图号" width="100" align="center" />
<el-table-column prop="count" label="库存数量" width="100" align="center" />
@ -223,22 +236,14 @@
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />
</el-table>
<pagination
v-show="commodityData.length > 0"
:total="commodityQuery.total"
:page.sync="commodityQuery.current"
:limit.sync="commodityQuery.size"
class="total pager"
<pagination v-show="commodityData.length > 0" :total="commodityQuery.total"
:page.sync="commodityQuery.current" :limit.sync="commodityQuery.size" class="total pager"
@pagination="commodityInput(scope.row)" />
<!-- <el-pagination :page.sync="commodityQuery.current" :page-size="commodityQuery.size"
layout="total, pager" :total="commodityQuery.total" /> -->
</div>
<el-input
slot="reference"
v-model="scope.row.goodsSpuName"
clearable
placeholder="商品名称"
<el-input slot="reference" v-model="scope.row.goodsSpuName" clearable placeholder="商品名称"
@input="commodityInput(scope.row)" />
</el-popover>
</template>
@ -248,20 +253,17 @@
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="仓库" prop="warehouseName" width="150" align="center" />
<el-table-column label="库位" prop="warehouseRackCode" align="center" />
<el-table-column label="销售单价" prop="price" width="120" align="center" />
<el-table-column label="单价" prop="price" width="120" align="center" />
<el-table-column label="已出数量" prop="outboundCount" width="120" align="center" />
<el-table-column label="库存数量" prop="inventoryNum" width="120" align="center" />
<el-table-column label="出库数量" align="center" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.count"
clearable
placeholder=""
<el-input v-model="scope.row.count" clearable placeholder=""
oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"
@input="commodityComputeYHAndXSJE(scope.row,$event)" />
</template>
</el-table-column>
<el-table-column label="金额" prop="amount" align="center" />
<el-table-column label="出库金额" prop="amount" width="120" align="center" />
<el-table-column label="备注" align="center" width="220">
<template slot-scope="scope">
<el-input v-model="scope.row.remarks" clearable placeholder="" />
@ -281,385 +283,385 @@
</template>
<script>
import req from '@/api/maintenanceReceive/maintenanceReceive.js'
import chooseproducts from './relation/chooseproducts'
import {
getOrgSidByPath,
selAllByOrgSidPath
} from '@/api/Common/dictcommons'
import {
getCurrentDate
} from '@/utils/index.js'
export default {
components: {
chooseproducts
},
data() {
return {
viewState: 1,
listLoading: false,
submitdisabled: false,
formobj: {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"sourceBillSid": "",
"warehouseManagerSid": "",
"warehouseManager": "",
"useOrgSid": "",
"createOrgSid": "",
"deptSid": window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"remarks": "",
"sourceBillNo": "",
"waitorName": "",
"billDate": "",
"billType": "",
"subject": "",
"customerName": "",
"vehMark": "",
"vinNo": "",
"customerOrg": "",
"sitemVoList": [
],
"detailList": [
]
},
receivePerList: [],
// commodity
commodityLoading: false,
commodityQuery: {
current: 1,
size: 10,
total: 0,
params: {
name: '',
useOrgSid: ''
}
},
commodityData: [],
rules: {
createByName: [{
required: true,
message: '制单人不能为空',
trigger: 'blur'
}],
deptName: [{
required: true,
message: '制单部门不能为空',
trigger: 'blur'
}],
createTime: [{
required: true,
message: '制单日期不能为空',
trigger: 'blur'
}],
warehouseManager: [{
required: true,
message: '请选择领料人',
trigger: 'change'
}]
import req from '@/api/maintenanceReceive/maintenanceReceive.js'
import chooseproducts from './relation/chooseproducts'
import {
getOrgSidByPath,
selAllByOrgSidPath
} from '@/api/Common/dictcommons'
import {
getCurrentDate
} from '@/utils/index.js'
export default {
components: {
chooseproducts
},
data() {
return {
viewState: 1,
listLoading: false,
submitdisabled: false,
formobj: {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"sourceBillSid": "",
"warehouseManagerSid": "",
"warehouseManager": "",
"useOrgSid": "",
"createOrgSid": "",
"deptSid": window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"remarks": "",
"sourceBillNo": "",
"waitorName": "",
"billDate": "",
"billType": "",
"subject": "",
"customerName": "",
"vehMark": "",
"vinNo": "",
"customerOrg": "",
"sitemVoList": [
],
"detailList": [
]
},
receivePerList: [],
// commodity
commodityLoading: false,
commodityQuery: {
current: 1,
size: 10,
total: 0,
params: {
name: '',
useOrgSid: ''
}
},
commodityData: [],
rules: {
createByName: [{
required: true,
message: '制单人不能为空',
trigger: 'blur'
}],
deptName: [{
required: true,
message: '制单部门不能为空',
trigger: 'blur'
}],
createTime: [{
required: true,
message: '制单日期不能为空',
trigger: 'blur'
}],
warehouseManager: [{
required: true,
message: '请选择领料人',
trigger: 'change'
}]
}
}
},
created() {
},
methods: {
initData() {
selAllByOrgSidPath({
orgSidPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.receivePerList = res.data
console.log("aaaaaa", this.receivePerList)
}
})
}
},
created() {
showAdd(sid) {
this.initData()
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
const params = {
sid: sid
}
req.initBill(params)
.then(resp => {
if (resp.success) {
console.log('>>>>>>>>>initBill', resp)
this.formobj = resp.data
this.formobj.detailList = []
this.formobj.deptName = window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1)
this.formobj.deptSid = window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
this.formobj.createBySid = window.sessionStorage.getItem('userSid')
this.formobj.createByName = window.sessionStorage.getItem('name')
this.formobj.createTime = getCurrentDate()
getOrgSidByPath({
orgPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.formobj.createOrgSid = res.data
this.formobj.useOrgSid = res.data
// this.commodityQuery.params.useOrgSid = res.data
}
})
} else {
// resp.code
}
})
.catch(() => {})
},
backData(value) {
this.viewState = 1
//
const params = {
sid: value
}
req.initBill(params)
.then(resp => {
if (resp.success) {
console.log('>>>>>>>>>initBill', resp)
this.formobj = resp.data
this.formobj.detailList = []
this.formobj.deptName = window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1)
this.formobj.deptSid = window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
this.formobj.createBySid = window.sessionStorage.getItem('userSid')
this.formobj.createByName = window.sessionStorage.getItem('name')
this.formobj.createTime = getCurrentDate()
getOrgSidByPath({
orgPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.formobj.createOrgSid = res.data
this.formobj.useOrgSid = res.data
// this.commodityQuery.params.useOrgSid = res.data
}
})
} else {
// resp.code
methods: {
initData() {
selAllByOrgSidPath({
orgSidPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.receivePerList = res.data
console.log("aaaaaa", this.receivePerList)
}
})
.catch(() => {})
},
resetState() {
this.viewState = 1
},
seleMaintenance() {
this.viewState = 2
const aa = []
this.$refs['divSp'].showData(aa, this.formobj.createOrgSid)
},
saveOrUpdate() {
console.log('>>>>>>>>>saveOrUpdate', this.formobj)
},
if (this.formobj.detailList.length == 0) {
this.$message({
showClose: true,
type: 'warning',
message: "商品不能为空"
showAdd(sid) {
this.initData()
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
return
}
for (let i = 0; i < this.formobj.detailList.length; i++) {
const item = this.formobj.detailList[i]
if (item.goodSpuSid == '') {
this.$message({
showClose: true,
type: 'warning',
message: "请添加商品"
const params = {
sid: sid
}
req.initBill(params)
.then(resp => {
if (resp.success) {
console.log('>>>>>>>>>initBill', resp)
this.formobj = resp.data
this.formobj.detailList = []
this.formobj.deptName = window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1)
this.formobj.deptSid = window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
this.formobj.createBySid = window.sessionStorage.getItem('userSid')
this.formobj.createByName = window.sessionStorage.getItem('name')
this.formobj.createTime = getCurrentDate()
getOrgSidByPath({
orgPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.formobj.createOrgSid = res.data
this.formobj.useOrgSid = res.data
// this.commodityQuery.params.useOrgSid = res.data
}
})
} else {
// resp.code
}
})
return
.catch(() => {})
},
backData(value) {
this.viewState = 1
//
const params = {
sid: value
}
req.initBill(params)
.then(resp => {
if (resp.success) {
console.log('>>>>>>>>>initBill', resp)
this.formobj = resp.data
this.formobj.detailList = []
this.formobj.deptName = window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1)
this.formobj.deptSid = window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
this.formobj.createBySid = window.sessionStorage.getItem('userSid')
this.formobj.createByName = window.sessionStorage.getItem('name')
this.formobj.createTime = getCurrentDate()
getOrgSidByPath({
orgPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.formobj.createOrgSid = res.data
this.formobj.useOrgSid = res.data
// this.commodityQuery.params.useOrgSid = res.data
}
})
} else {
// resp.code
}
})
.catch(() => {})
},
resetState() {
this.viewState = 1
},
seleMaintenance() {
this.viewState = 2
const aa = []
this.$refs['divSp'].showData(aa, this.formobj.createOrgSid)
},
if (Number(item.count) == 0) {
saveOrUpdate() {
console.log('>>>>>>>>>saveOrUpdate', this.formobj)
if (this.formobj.detailList.length == 0) {
this.$message({
showClose: true,
type: 'warning',
message: "商品出库数量不能0"
message: "商品不能为空"
})
return
}
}
this.$refs['form_obj'].validate((valid) => {
if (valid) {
req.saveOutBill(this.formobj)
.then(resp => {
if (resp.success) {
this.$message({
showClose: true,
type: 'success',
message: resp.msg
})
this.handleReturn('true')
} else {
// resp.code
}
for (let i = 0; i < this.formobj.detailList.length; i++) {
const item = this.formobj.detailList[i]
if (item.goodSpuSid == '') {
this.$message({
showClose: true,
type: 'warning',
message: "请添加商品"
})
return
}
if (Number(item.count) == 0) {
this.$message({
showClose: true,
type: 'warning',
message: "商品出库数量不能0"
})
.catch(() => {})
return
}
}
})
},
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"sourceBillSid": "",
"warehouseManagerSid": "",
"warehouseManager": "",
"useOrgSid": "",
"createOrgSid": "",
"deptSid": window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage.getItem(
'defaultOrgPath').lastIndexOf('/') + 1),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').substring(window.sessionStorage.getItem(
'defaultOrgPathName').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"remarks": "",
"sourceBillNo": "",
"waitorName": "",
"billDate": "",
"billType": "",
"subject": "",
"customerName": "",
"vehMark": "",
"vinNo": "",
"customerOrg": "",
"sitemVoList": [
],
"detailList": [
]
}
this.submitdisabled = false
this.$emit('doback')
},
indexMethod(index) {
return index + 1
},
receivePerSelect(val) {
const choose = this.receivePerList.filter((item) => item.sid == val)
console.log('>>>>>>>>>receivePerSelect', choose)
this.formobj.warehouseManagerSid = choose[0].sid
this.formobj.warehouseManager = choose[0].name
},
commodityInput(row) {
console.log("commodityInput》》》》", row)
this.commodityQuery.params.name = row.goodsSpuName
this.commodityQuery.params.busrepairBillsid = row.sourceBillSid
this.commodityQuery.params.useOrgSid = window.sessionStorage.getItem('defaultOrgPath').substring(window
.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
this.commodityLoading = true
req.getGoodsListPage(this.commodityQuery).then((response) => {
if (response.success) {
this.commodityLoading = false
this.commodityData = response.data.records
this.commodityQuery.total = response.data.total
} else {
this.serviceLoading = false
this.commodityData = []
this.commodityQuery.total = 0
this.$refs['form_obj'].validate((valid) => {
if (valid) {
req.saveOutBill(this.formobj)
.then(resp => {
if (resp.success) {
this.$message({
showClose: true,
type: 'success',
message: resp.msg
})
this.handleReturn('true')
} else {
// resp.code
}
})
.catch(() => {})
}
})
},
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"sourceBillSid": "",
"warehouseManagerSid": "",
"warehouseManager": "",
"useOrgSid": "",
"createOrgSid": "",
"deptSid": window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage.getItem(
'defaultOrgPath').lastIndexOf('/') + 1),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').substring(window.sessionStorage.getItem(
'defaultOrgPathName').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"remarks": "",
"sourceBillNo": "",
"waitorName": "",
"billDate": "",
"billType": "",
"subject": "",
"customerName": "",
"vehMark": "",
"vinNo": "",
"customerOrg": "",
"sitemVoList": [
],
"detailList": [
]
}
this.submitdisabled = false
this.$emit('doback')
},
indexMethod(index) {
return index + 1
},
receivePerSelect(val) {
const choose = this.receivePerList.filter((item) => item.sid == val)
console.log('>>>>>>>>>receivePerSelect', choose)
this.formobj.warehouseManagerSid = choose[0].sid
this.formobj.warehouseManager = choose[0].name
},
commodityInput(row) {
console.log("commodityInput》》》》", row)
this.commodityQuery.params.name = row.goodsSpuName
this.commodityQuery.params.busrepairBillsid = row.sourceBillSid
this.commodityQuery.params.useOrgSid = window.sessionStorage.getItem('defaultOrgPath').substring(window
.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
this.commodityLoading = true
req.getGoodsListPage(this.commodityQuery).then((response) => {
if (response.success) {
this.commodityLoading = false
this.commodityData = response.data.records
this.commodityQuery.total = response.data.total
} else {
this.serviceLoading = false
this.commodityData = []
this.commodityQuery.total = 0
}
})
},
commodityCurrentChange(value, row) {
console.log("commodityCurrentChange》》》》", value)
console.log("commodityCurrentChange》》》》", row)
row.inventorySid = value.inventorySid
row.goodsID = value.goodsID
row.goodSpuSid = value.goodSpuSid
row.goodsSpuName = value.goodsSpuName
row.goodsSkuSid = value.goodsSkuSid
row.goodsSkuTitle = value.goodsSkuTitle
row.goodsSkuCode = value.goodsSkuCode
row.goodsSkuOwnSpec = value.goodsSkuOwnSpec
row.unit = value.unit
row.warehouseSid = value.warehouseSid
row.warehouseName = value.warehouseName
row.warehouseRackSid = value.warehouseRackSid
row.warehouseRackCode = value.warehouseRackCode
row.outboundCount = value.outboundCount //
row.inventoryNum = value.count //
row.count = 0 //
row.amount = 0.00
row.price = value.money
row.remarks = ''
document.body.click()
},
addGoods(row) {
const goods = {
"sourceBillNo": this.formobj.sourceBillNo,
"sourceBillSid": this.formobj.sourceBillSid,
"sitemSid": row.serviceItemSid,
'serviceItem': row.serviceItem,
"inventorySid": "",
"goodsID": "",
"goodSpuSid": "",
"goodsSpuName": "",
"goodsSkuSid": "",
"goodsSkuTitle": "",
"goodsSkuCode": "",
"goodsSkuOwnSpec": "",
"currentCount": "",
"unit": "",
"warehouseSid": "",
"warehouseName": "",
"warehouseRackSid": "",
"warehouseRackCode": "",
"count": 0,
"price": '',
'amount': 0.00,
"outboundCount": 0,
"remarks": ""
}
})
},
commodityCurrentChange(value, row) {
console.log("commodityCurrentChange》》》》", value)
console.log("commodityCurrentChange》》》》", row)
row.inventorySid = value.inventorySid
row.goodsID = value.goodsID
row.goodSpuSid = value.goodSpuSid
row.goodsSpuName = value.goodsSpuName
row.goodsSkuSid = value.goodsSkuSid
row.goodsSkuTitle = value.goodsSkuTitle
row.goodsSkuCode = value.goodsSkuCode
row.goodsSkuOwnSpec = value.goodsSkuOwnSpec
row.unit = value.unit
row.warehouseSid = value.warehouseSid
row.warehouseName = value.warehouseName
row.warehouseRackSid = value.warehouseRackSid
row.warehouseRackCode = value.warehouseRackCode
row.outboundCount = value.outboundCount //
row.inventoryNum = value.count //
row.count = 0 //
row.amount = 0.00
row.price = value.price
row.remarks = ''
document.body.click()
},
addGoods(row) {
const goods = {
"sourceBillNo": this.formobj.sourceBillNo,
"sourceBillSid": this.formobj.sourceBillSid,
"sitemSid": row.serviceItemSid,
'serviceItem': row.serviceItem,
"inventorySid": "",
"goodsID": "",
"goodSpuSid": "",
"goodsSpuName": "",
"goodsSkuSid": "",
"goodsSkuTitle": "",
"goodsSkuCode": "",
"goodsSkuOwnSpec": "",
"currentCount": "",
"unit": "",
"warehouseSid": "",
"warehouseName": "",
"warehouseRackSid": "",
"warehouseRackCode": "",
"count": 0,
"price": '',
'amount': 0.00,
"outboundCount": 0,
"remarks": ""
}
this.formobj.detailList.push(goods)
},
deleteGoods(row) {
const index = this.formobj.detailList.findIndex((item) => item.goodSpuSid == row.goodSpuSid)
console.log('>>>>>>>>>receivePerSelect', index)
this.formobj.detailList.splice(index, 1)
},
commodityComputeYHAndXSJE(row, val) {
console.log("aaa", row)
console.log("aaa", val)
this.formobj.detailList.push(goods)
},
deleteGoods(row) {
const index = this.formobj.detailList.findIndex((item) => item.goodSpuSid == row.goodSpuSid)
console.log('>>>>>>>>>receivePerSelect', index)
this.formobj.detailList.splice(index, 1)
},
commodityComputeYHAndXSJE(row, val) {
console.log("aaa", row)
console.log("aaa", val)
row.amount = (Number(row.count) * Number(row.price)).toFixed(2)
}
row.amount = (Number(row.count) * Number(row.price)).toFixed(2)
}
}
}
</script>
<style scoped>
/deep/ .el-form-item__error {

63
yxt-as-ui/src/views/maintenanceReceive/maintenanceReturnBound.vue

@ -51,14 +51,8 @@
<el-col :span="8">
<div class="span-sty"><span class="must">*</span> 退料人</div>
<el-form-item prop="warehouseManager">
<el-select
v-model="formobj.warehouseManager"
filterable
clearable
placeholder="请选择"
class="addinputw addinputInfo"
@change="receivePerSelect"
>
<el-select v-model="formobj.warehouseManager" filterable clearable placeholder="请选择"
class="addinputw addinputInfo" @change="receivePerSelect">
<el-option v-for="item in receivePerList" :key="item.sid" :label="item.name" :value="item.sid" />
</el-select>
@ -121,8 +115,8 @@
<div class="span-sty">是否外出</div>
<el-form-item>
<el-radio-group v-model="formobj.isGoOut" class="addinputw addinputInfo" :disabled="true">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
<el-radio :label="'1'"></el-radio>
<el-radio :label="'2'"></el-radio>
</el-radio-group>
</el-form-item>
@ -161,15 +155,15 @@
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center" />
<el-table-column label="服务项目" prop="serviceItem" align="center" />
<el-table-column label="工种" prop="serviceType" align="center" />
<el-table-column label="科目" prop="subject" align="center" />
<el-table-column label="维修" prop="repairerName" align="center" />
<!-- <el-table-column label="科目" prop="subject" align="center" /> -->
<el-table-column label="维修技师" prop="repairerName" align="center" />
<el-table-column label="工时提成" prop="examineHourPrice" align="center" />
<el-table-column label="工时单价" prop="hourPrice" align="center" />
<el-table-column label="工时数" prop="hours" align="center" />
<el-table-column label="工时数" prop="hours" align="center" />
<el-table-column label="销售价" prop="price" align="center" />
<el-table-column label="折扣" prop="discount" align="center" />
<el-table-column label="优惠" prop="discountAmount" align="center" />
<el-table-column label="金额" prop="amount" align="center" />
<el-table-column label="销售金额" prop="amount" align="center" />
<el-table-column label="备注" prop="remarks" align="center" />
</el-table>
@ -180,7 +174,8 @@
<el-table v-loading="listLoading" :data="formobj.detailList" border>
<!-- <el-table-column type="selection" align="center" width="50"/> -->
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center" />
<!-- <el-table-column label="项目名称" prop="serviceItem" align="center" /> -->
<el-table-column label="维修项目" prop="serviceItem" align="center" />
<el-table-column label="商品ID" prop="goodsID" width="120" align="center" />
<el-table-column label="商品名称" prop="goodsSpuName" align="center" />
<el-table-column label="商品编码" prop="goodsSkuCode" align="center" />
<el-table-column label="规格" prop="goodsSkuOwnSpec" align="center" />
@ -190,48 +185,39 @@
-->
<el-table-column label="仓库" align="center" width="180">
<template slot-scope="scope">
<el-select
v-model="scope.row.warehouseName"
placeholder="请选择"
clearable
@change="selectWarehouseName(scope.row,$event)"
>
<el-select v-model="scope.row.warehouseName" placeholder="请选择" clearable
@change="selectWarehouseName(scope.row,$event)">
<el-option v-for="(item,i) in warehouseList" :key="i" :label="item.warehouseName" :value="item.sid" />
</el-select>
</template>
</el-table-column>
<el-table-column label="库位" align="center" width="180">
<template slot-scope="scope">
<el-select
v-model="scope.row.warehouseRackCode"
:disabled="scope.row.warehouseName==''"
clearable
placeholder="请选择"
@focus="getWarehouseAreaList(scope.row.warehouseSid)"
@change="selectWarehouseAreaCode(scope.row,$event)"
>
<el-select v-model="scope.row.warehouseRackCode" :disabled="scope.row.warehouseName==''" clearable
placeholder="请选择" @focus="getWarehouseAreaList(scope.row.warehouseSid)"
@change="selectWarehouseAreaCode(scope.row,$event)">
<el-option v-for="(item,i) in warehouseRackList" :key="i" :label="item.areaCode" :value="item.sid" />
</el-select>
</template>
</el-table-column>
<el-table-column label="单价" prop="price" align="center" />
<el-table-column label="已出数量" prop="outboundCount" align="center" />
<el-table-column label="退库数量" align="center" width="120">
<template slot-scope="scope">
<el-input
v-model="scope.row.count"
clearable
placeholder=""
<el-input v-model="scope.row.count" clearable placeholder=""
oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"
/>
@input="commodityComputeYHAndXSJE(scope.row,$event)" />
</template>
</el-table-column>
<el-table-column label="销售单价" prop="price" align="center" />
<el-table-column label="退库金额" prop="returnAmount" align="center" />
<el-table-column label="备注" align="center" width="220">
<template slot-scope="scope">
<el-input v-model="scope.row.remarks" clearable placeholder="" />
</template>
</el-table-column>
<el-table-column label="领料人" prop="receivePer" width="120" align="center" />
<el-table-column label="领料时间" prop="receiveTimes" width="120" align="center" />
</el-table>
</el-form>
@ -542,8 +528,15 @@
item.count = item.outboundCount
}
},
commodityComputeYHAndXSJE(row, val) {
console.log("aaa", row)
console.log("aaa", val)
row.returnAmount = (Number(row.count) * Number(row.price)).toFixed(2)
}
}
}
</script>

23
yxt-as-ui/src/views/operation/repairbill/repairbillAdd.vue

@ -296,7 +296,11 @@
<el-row>
<el-col :span="8">
<div class="span-sty">开票单位</div>
<el-form-item><el-input class="addinputInfo addinputw" :disabled="formobj.nodeName == '维修'" v-model="formobj.invoiceVo.invoiceCompany" clearable placeholder="" /></el-form-item>
<el-form-item>
<el-select class="addinputInfo" :disabled="formobj.nodeName == '维修'" v-model="formobj.invoiceVo.invoiceCompanySid" placeholder="请选择" @change="changeCompanyInvoicing" clearable>
<el-option v-for="item in companyInvoicing_list" :key="item.companyInvoicingSid" :label="item.companyInvoicingName" :value="item.companyInvoicingSid"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<div class="span-sty">加税点的项目</div>
@ -378,6 +382,7 @@
<el-table :key="tableKey" :data="formobj.goodsDetailsVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center" />
<el-table-column prop="serviceItem" label="维修项目" width="200" align="center" />
<el-table-column prop="goodsID" label="商品ID" width="200" align="center" />
<el-table-column prop="goodsSpuName" label="商品名称" width="100" align="center" />
<el-table-column prop="goodsSkuCode" label="图号" width="100" align="center" />
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />
@ -616,7 +621,7 @@
<script>
import req from '@/api/operation/repairbill'
import additionitem from '@/api/basicinformation/additionitem'
import { selAllByOrgSidPath, selSubjectInfo, getGroupList, typeValues, getListByUseOrgSid, getServiceItemListPage } from '@/api/Common/dictcommons'
import { selAllByOrgSidPath, selSubjectInfo, getGroupList, typeValues, getListByUseOrgSid, getServiceItemListPage, getInvoicingList } from '@/api/Common/dictcommons'
import selectCustomer from '@/components/publicPage/selectCustomer'
import { getStorage } from '@/utils/auth'
@ -656,6 +661,7 @@ export default {
useInsurer_list: [], // 使
insuranceType_list: [], // 使
insuranceCompany_list: [], //
companyInvoicing_list: [], //
invoiceType_list: [], //
settle_list: [], //
otherSettle_list: [], //
@ -956,6 +962,11 @@ export default {
this.user_list = resp.data
}
})
getInvoicingList({ orgPath: window.sessionStorage.getItem('defaultOrgPath') }).then((res) => {
if (res.success) {
this.companyInvoicing_list = res.data
}
})
},
getNumber(val, limit) {
val = val.replace(/[^0-9.]/g, '') //
@ -1165,6 +1176,14 @@ export default {
this.formobj.invoiceVo.invoiceTypeKey = ''
}
},
changeCompanyInvoicing(value) {
const choose = this.companyInvoicing_list.filter((item) => item.companyInvoicingSid === value)
if (choose.length > 0 && choose !== null) {
this.formobj.invoiceVo.invoiceCompany = choose[0].companyInvoicingName
} else {
this.formobj.invoiceVo.invoiceCompany = ''
}
},
//
countChange() {
//

57
yxt-as-ui/src/views/operation/repairbill/repairbillBYLeaveFactory.vue

@ -92,17 +92,12 @@
<el-table :key="tableKey" v-loading="listLoading" :data="list" border style="width: 100%;" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" width="50"/>
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center"/>
<el-table-column label="是否可出厂" align="center" width="130">
<template slot-scope="scope">
<span>{{ scope.row.outDoorState == '1' ? '是' : scope.row.outDoorState == '0' ? '否' :'' }}</span>
</template>
</el-table-column>
<el-table-column prop="isOutFactory" label="是否可出厂" align="center" width="150" />
<el-table-column label="单据编号" align="center" width="180">
<template slot-scope="scope">
<span class="bluezi" @click="toInfo(scope.row)">{{ scope.row.billNo }}</span>
</template>
</el-table-column>
<el-table-column prop="nodeName" label="环节" align="center" width="80" />
<el-table-column prop="useOrgName" label="分公司" align="center" width="120" />
<el-table-column prop="dept" label="制单部门" align="center" width="120" />
<el-table-column prop="createByName" label="制单人" align="center" width="120" />
@ -172,6 +167,13 @@ export default {
return {
btndisabled: false,
btnList: [
{
type: 'primary',
size: 'small',
icon: '',
btnKey: 'toAffirm',
btnLabel: '出厂确认'
},
{
type: 'primary',
size: 'small',
@ -277,6 +279,9 @@ export default {
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'toAffirm':
this.toAffirm()
break
case 'toPrint':
this.toPrint()
break
@ -308,11 +313,10 @@ export default {
//
getList() {
this.listLoading = true
this.listQuery.params.nodeCode = '6'
this.listQuery.params.userSid = window.sessionStorage.getItem('userSid')
this.listQuery.params.orgPath = window.sessionStorage.getItem('defaultOrgPath')
this.listQuery.params.menuUrl = this.$route.path
req.listPage(this.listQuery).then(response => {
req.listPageCC(this.listQuery).then((response) => {
this.listLoading = false
if (response.success) {
this.list = response.data.records
@ -364,9 +368,44 @@ export default {
}
this.getList()
},
toAffirm() {
if (this.sids.length > 0) {
for (var i = 0; i < this.multipleSelection.length; i++) {
if (this.multipleSelection[i].isOutFactory === '否') {
this.$message({ showClose: true, type: 'error', message: '请选择是否可出厂为是的记录进行操作' })
return
}
}
} else {
this.$message({ showClose: true, type: 'error', message: '请至少选择一条记录进行操作' })
}
const tip = '请确认是否出厂所选 ' + this.sids.length + ' 条记录?'
this.$confirm(tip, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
req.carOutFactory(this.sids).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '操作成功' })
this.getList()
}
loading.close()
}).catch(e => {
loading.close()
})
}).catch(() => {
})
},
toPrint() {
if (this.sids.length === 1) {
if (this.multipleSelection[0].outDoorState === '1') {
if (this.multipleSelection[0].isOutFactory === '是') {
req.printCard({ sid: this.sids[0] }).then((res) => {
if (res.success) {
var xhr = new XMLHttpRequest()

1
yxt-as-ui/src/views/operation/repairbill/repairbillInfo.vue

@ -221,6 +221,7 @@
<el-table :key="tableKey" :data="formobj.goodsDetailsVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center" />
<el-table-column prop="serviceItem" label="维修项目" width="200" align="center" />
<el-table-column prop="goodsID" label="商品ID" width="200" align="center" />
<el-table-column prop="goodsSpuName" label="商品名称" width="100" align="center" />
<el-table-column prop="goodsSkuCode" label="图号" width="100" align="center" />
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />

55
yxt-as-ui/src/views/storage/deliveryNotice/index.vue

@ -20,12 +20,13 @@
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
</el-form-item>
<el-form-item label="采购单号">
<el-form-item label="来源单号">
<el-input v-model="queryParams.params.sourceBillNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="业务类型">
<el-select v-model="queryParams.params.busTypeKey" placeholder="请选择">
<el-option v-for="(item,i) in busTypeList" :key="item.sid" :label="item.name" :value="item.name">
<el-select v-model="queryParams.params.busTypeKey" placeholder="请选择" style="width: 200px;">
<el-option v-for="(item,i) in busTypeList" :key="item.dictKey" :label="item.dictValue"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
@ -42,17 +43,17 @@
</el-date-picker>
</el-form-item>
<el-form-item label="单据状态">
<el-select v-model="queryParams.params.billState" placeholder="请选择">
<el-select v-model="queryParams.params.billState" placeholder="请选择" style="width: 200px;">
<el-option v-for="(item,i) in billStateList" :key="item.sid" :label="item.name" :value="item.name">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="审核状态">
<el-select v-model="queryParams.params.reviewStatus" placeholder="请选择">
<!-- <el-form-item label="审核状态">
<el-select v-model="queryParams.params.reviewStatus" placeholder="请选择" style="width: 200px;">
<el-option v-for="(item,i) in reviewStatusList" :key="item.sid" :label="item.name" :value="item.name">
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" size="small" icon="el-icon-search" @click="dosearch">查询</el-button>
@ -79,10 +80,10 @@
<el-table-column prop="billNo" label="单据编号" align="center" width="220" />
<el-table-column prop="createTime" label="单据日期" align="center" width="150" />
<el-table-column prop="createByName" label="制单人" align="center" width="150" />
<!-- <el-table-column prop="sourceBillNo" label="采购单号" align="center" width="180" /> -->
<el-table-column label="采购单号" align="center" width="180">
<el-table-column label="来源单号" align="center" width="180">
<template slot-scope="scope">
<div style="color: #1890FF; text-decoration: underline ;" @click="showSourceBillDetail(scope.row)">
<div style="color: #1890FF; text-decoration: underline ;cursor:pointer;"
@click="showSourceBillDetail(scope.row)">
{{ scope.row.sourceBillNo }}
</div>
</template>
@ -166,6 +167,10 @@
import divAdd from './receiptAdd.vue'
import divInfo from './receiptInfo.vue'
import sourceBillInfo from './procurementInfo.vue'
import {
typeValues,
} from '@/api/Common/dictcommons'
export default {
components: {
ButtonBar,
@ -278,9 +283,19 @@
this.$refs['btnbar'].setButtonList(this.btnList)
},
created() {
this.init()
this.loadList()
},
methods: {
init() {
typeValues({
type: 'wms_busType'
}).then((res) => {
if (res.success) {
this.busTypeList = res.data
}
})
},
showSourceBillDetail(row) {
console.log("showSourceBillDetail》》》》", row)
@ -467,6 +482,26 @@
return
}
if (this.selectionList[0].busTypeValue == '采购入库' &&
this.selectionList[0].manufactorBillNo != '') {
this.$message({
type: 'warning',
message: "厂家订单号不能为空",
showClose: true
})
return
}
if (this.selectionList[0].billState == '已收货(部分终止)') {
this.$message({
type: 'warning',
message: "此记录已终止,不可重复操作。",
showClose: true
})
return
}
this.viewState = 2
this.$refs['divadd'].showEdit(this.selectionList[0])

2
yxt-as-ui/src/views/storage/deliveryNotice/receiptAdd.vue

@ -38,7 +38,7 @@
<el-row>
<el-col :span="8">
<div class="span-sty">采购单号</div>
<div class="span-sty">来源单号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">

4
yxt-as-ui/src/views/storage/deliveryNotice/receiptInfo.vue

@ -3,7 +3,7 @@
<div class="tab-header webtop">
<!-- 标题 -->
<div>预期到货通知单</div>
<div>预期到货通知单详情</div>
<!-- start 添加修改按钮 -->
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
@ -37,7 +37,7 @@
<el-row>
<el-col :span="8">
<div class="span-sty">采购单号</div>
<div class="span-sty">来源单号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">

60
yxt-as-ui/src/views/storage/receivingGoods/index.vue

@ -24,7 +24,7 @@
<el-input v-model="queryParams.params.sourceBillNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="业务类型">
<el-select v-model="queryParams.params.busTypeKey" placeholder="请选择">
<el-select v-model="queryParams.params.busTypeKey" placeholder="请选择" style="width: 200px;">
<el-option v-for="(item,i) in busTypeList" :key="item.dictKey" :label="item.dictValue"
:value="item.dictKey">
</el-option>
@ -43,11 +43,17 @@
</el-date-picker>
</el-form-item>
<el-form-item label="单据状态">
<el-select v-model="queryParams.params.billState" placeholder="请选择">
<el-select v-model="queryParams.params.billState" placeholder="请选择" style="width: 200px;">
<el-option v-for="(item,i) in billStateList" :key="i" :label="item.name" :value="item.sid">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="分配状态">
<el-select v-model="queryParams.params.distributeType" placeholder="请选择" style="width: 200px;">
<el-option v-for="(item,i) in distributeTypeList" :key="i" :label="item.name" :value="item.sid">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" size="small" icon="el-icon-search" @click="dosearch">查询</el-button>
@ -84,7 +90,8 @@
<el-table-column prop="billState" label="单据状态" width="100" align="center" />
<el-table-column label="上架单" align="center" width="100">
<template slot-scope="scope">
<div style="color: #1890FF; text-decoration: underline ;" @click="showUpShelfList(scope.row)">
<div style="color: #1890FF; text-decoration: underline ;cursor:pointer;"
@click="showUpShelfList(scope.row)">
{{ scope.row.upShlefNum }}
</div>
</template>
@ -107,11 +114,20 @@
<divInfo v-show="viewState == 4" ref="divinfo" @doback="resetState" @reloadlist="loadList" />
<divAddupShelfRecord v-show="viewState == 5" ref="divAddupShelfRecord" @doback="resetState"
@reloadlist="loadList" />
<upShelfInfo v-show="viewState == 6" ref="upShelfInfo" @doback2="resetState2" @reloadlist="loadList" />
<el-dialog title="上架单列表" :visible.sync="dialogVisible" :before-close="handleClose">
<el-table :data="upShelfList" border style="width: 100%;margin-top: -30px;">
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod2" align="center" />
<el-table-column prop="billNo" label="单据编号" align="center" />
<el-table-column label="单据编号" align="center">
<template slot-scope="scope">
<div style="color: #1890FF; text-decoration: underline ;cursor:pointer;"
@click="showUpShelfBill(scope.row)">
{{ scope.row.billNo }}
</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="单据日期" align="center" />
<el-table-column prop="createByName" label="制单人" align="center" />
<el-table-column prop="sourceBillNo" label="来源单号" align="center" />
@ -130,8 +146,9 @@
import divAdd from './receivingGoodsAdd.vue'
import divInfo from './receivingGoodsInfo.vue'
import divAddupShelfRecord from './upShelfAddRecord.vue'
import upShelfInfo from './upShelfInfo.vue'
import {
getTypeValueList
typeValues
} from '@/api/Common/dictcommons'
export default {
components: {
@ -140,7 +157,8 @@
pageye,
divAdd,
divInfo,
divAddupShelfRecord
divAddupShelfRecord,
upShelfInfo
},
data() {
return {
@ -213,6 +231,20 @@
sid: "1"
},
],
distributeTypeList: [{
name: "未分配",
sid: "0"
},
{
name: "部分分配",
sid: "2"
},
{
name: "已分配",
sid: "1"
},
],
upShelfList: [
// {
@ -232,9 +264,8 @@
created() {
this.loadList()
getTypeValueList({
type: 'wms_busType',
groupNum: 'wms_rk'
typeValues({
type: 'wms_busType'
}).then((res) => {
if (res.success) {
this.busTypeList = res.data
@ -253,6 +284,16 @@
}).catch(() => {})
},
showUpShelfBill(row) {
this.dialogVisible = false
this.viewState = 6
this.$refs['upShelfInfo'].showEdit(row.billSid)
},
resetState2() {
this.viewState = 1
this.dialogVisible = true
},
handleClose() {
this.dialogVisible = false
@ -500,6 +541,7 @@
resetState() {
this.viewState = 1
},
enableChange(sid, state) {
console.log('sid', sid)
console.log('state', state)

14
yxt-as-ui/src/views/storage/receivingGoods/receivingGoodsAdd.vue

@ -288,7 +288,7 @@
import {
choiceSupplierInfo,
getOrgSidByPath,
getTypeValueList
typeValues
} from '@/api/Common/dictcommons'
export default {
components: {
@ -703,9 +703,8 @@
this.$refs['form_obj'].clearValidate()
})
getTypeValueList({
type: 'wms_busType',
groupNum: 'wms_rk'
typeValues({
type: 'wms_busType'
}).then((res) => {
if (res.success) {
this.busTypeList = res.data
@ -726,9 +725,8 @@
this.$refs['form_obj'].clearValidate()
})
getTypeValueList({
type: 'wms_busType',
groupNum: 'wms_rk'
typeValues({
type: 'wms_busType'
}).then((res) => {
if (res.success) {
this.busTypeList = res.data
@ -746,6 +744,8 @@
if (resp.success) {
this.formobj = resp.data
this.formobj.isUpShelf = this.formobj.isUpShelf == null ? 0 : this.formobj.isUpShelf
this.formobj.deptName = window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1)
this.formobj.deptSid = window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage

5
yxt-as-ui/src/views/storage/receivingGoods/receivingGoodsInfo.vue

@ -3,7 +3,7 @@
<div v-show="viewState == 1">
<div class="tab-header webtop">
<!-- 标题 -->
<div>收货单</div>
<div>收货单详情</div>
<!-- start 添加修改按钮 -->
<div>
<el-button type="primary" size="small" v-show="formobj.billState=='已完成'" :disabled="submitdisabled"
@ -39,7 +39,7 @@
<el-row>
<el-col :span="8">
<div class="span-sty">来源单号</div>
<div class="span-sty">预期到货通知单号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
@ -112,6 +112,7 @@
<el-table-column label="税率" prop="taxAmount" align="center" width="100" />
<!-- <el-table-column label="含税单价" prop="taxPrice" align="center" width="100" /> -->
<el-table-column label="入库金额" prop="amount" align="center" width="100" />
<el-table-column label="已分配数量" prop="allotmentNum" align="center" width="130" />
</el-table>

158
yxt-as-ui/src/views/storage/receivingGoods/upShelfInfo.vue

@ -0,0 +1,158 @@
<template>
<div>
<div class="tab-header webtop">
<!-- 标题 -->
<div>上架单详情</div>
<!-- start 添加修改按钮 -->
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
<!-- end 添加修改按钮 -->
<!-- end 详情按钮 -->
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" class="formaddcopy02">
<div class="title">
<div>基础信息</div>
</div>
<el-row class="first_row">
<el-col :span="8">
<div class="span-sty">制单人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">制单部门</div>
<el-form-item><span class="addinputInfo">{{ formobj.deptName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">单据日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.createTime }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">来源单号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">单据状态</div>
<el-form-item><span class="addinputInfo">{{ formobj.billState }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">上架人</div>
<el-form-item><span class="addinputInfo">{{ formobj.upShelfName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">备注</div>
<el-form-item><span class="addinputInfo">{{ formobj.remarks }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">
<div>商品列表</div>
</div>
<el-table v-loading="listLoading" :data="formobj.list" border>
<el-table-column fixed label="序号" type="index" :index="indexMethod" align="center" width="80" />
<el-table-column fixed label="商品名称" prop="goodsSpuName" align="center" width="200" />
<el-table-column label="商品编码" prop="goodsSkuCode" align="center" />
<el-table-column label="规格" prop="goodsSkuOwnSpec" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<!-- <el-table-column label="批次号" prop="batchNumber" align="center" />
<el-table-column label="仓库" prop="warehouseName" align="center" />
<el-table-column label="库位" prop="warehouseRackCode" align="center" /> -->
<el-table-column label="需上架数量" prop="count" align="center" />
<el-table-column label="已上架数量" prop="actualCount" align="center" />
<el-table-column label="未上架数量" prop="noShelfCount" align="center" />
<el-table-column label="载具编号" prop="packageNo" align="center" />
</el-table>
</el-form>
</div>
</div>
</template>
<script>
import req from '@/api/storage/upShelf.js'
export default {
components: {},
data() {
return {
listLoading: false,
submitdisabled: false,
formobj: {},
}
},
methods: {
indexMethod(index) {
return index + 1
},
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.$emit('doback2')
},
showAdd() {
},
showEdit(sid) {
req.init(sid)
.then(resp => {
if (resp.success) {
this.formobj = resp.data
}
})
.catch(e => {
this.formobj = {}
})
}
}
}
</script>
<style scoped>
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
.formaddcopy02 .el-row .el-col /deep/ .el-form-item .addinputw {
margin-left: 120px !important;
width: calc(100% - 115px);
}
.first_row {
border-top: 1px solid #E0E3EB;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

294
yxt-as-ui/src/views/storage/stocktaking/index.vue

@ -22,8 +22,8 @@
<el-date-picker v-model="queryParams.params.createEndTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;" />
</el-form-item>
<el-form-item label="盘状态">
<el-select v-model="queryParams.params.checkState" placeholder="请选择">
<el-form-item label="盘状态">
<el-select v-model="queryParams.params.checkState" placeholder="请选择" style="width: 200px;">
<el-option v-for="item in checkStateList" :key="item.sid" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
@ -66,7 +66,7 @@
<el-table-column prop="createTime" label="生成日期" width="120" align="center" />
<el-table-column prop="createByName" label="盘点人" width="120" align="center" />
<el-table-column prop="superviseName" label="监盘人" width="120" align="center" />
<el-table-column prop="checkState" label="盘状态" width="120" align="center" />
<el-table-column prop="checkState" label="盘状态" width="120" align="center" />
<el-table-column label="应盘" align="center">
<el-table-column prop="bookCount" label="数量" align="center" width="100" />
<el-table-column prop="bookAmount" label="金额" align="center" width="100" />
@ -116,14 +116,29 @@
<el-dialog title="新建盘点单" :visible.sync="dialogVisible" :before-close="handleClose">
<el-form ref="form_obj" class="formaddcopy02" :rules="rules" style="margin-top: -40px;" :model="formobj">
<el-row class="first_row">
<el-col :span="6">
<el-col :span="12">
<div class="span-sty">盘点人</div>
<el-form-item> <span class="addinputInfo addinputw">{{formobj.createByName}}</span></el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="12">
<div class="span-sty">生成日期</div>
<el-form-item> <span class="addinputInfo addinputw">{{formobj.createDate}}</span></el-form-item>
</el-col>
</el-row>
<el-row class="first_row">
<el-col :span="12">
<div class="span-sty"><span class="must">*</span> 盘点类型</div>
<el-form-item prop="stocktakType">
<el-select v-model="formobj.stocktakType" placeholder="请选择" class="addinputInfo addinputw"
@change="selectStocktakTyp">
<el-option v-for="item in stocktakTypeList" :key="item.sid" :label="item.name" :value="item.sid" />
</el-select>
<!-- <el-select v-model="formobj.financeSid" placeholder="请选择" class="addinputInfo addinputw" filterable
multiple @change="selectFinance">
<el-option v-for="item in financeList" :key="item" :label="item.name" :value="item.sid"></el-option>
</el-select> -->
</el-form-item>
</el-col>
<el-col :span="12">
<div class="span-sty"><span class="must">*</span> 监盘人</div>
<el-form-item prop="superviseName">
@ -146,6 +161,23 @@
</el-form-item>
</el-col>
</el-row>
<div class="title titleOne" v-show="showList=='1'">
<div>盘点库位</div>
<el-button type="primary" size="mini" class="btntopblueline" @click="seleRack()">选择库位</el-button>
</div>
<el-table v-loading="tableLoading" :data="formobj.dataList" border style="width: 100%" v-show="showList=='1'">
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column fixed label="操作" align="center" width="100">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="toDeleted(scope.row)">删除</el-button>
</template>
</el-table-column>
<el-table-column prop="warehouseName" label="仓库" align="center" />
<el-table-column prop="locationName" label="库区" align="center" />
<el-table-column prop="rackName" label="库位" align="center" />
</el-table>
</el-form>
<div style="display: flex;flex-direction: row;width: 100%;justify-content: center;align-items: center;">
@ -155,6 +187,57 @@
</el-dialog>
<el-dialog title="选择盘点库位" :visible.sync="dialogVisible2" :before-close="handleClose2">
<el-form ref="form_obj2" class="formaddcopy02" :rules="rules" style="margin-top: -40px;" :model="formobj">
<el-form :inline="true" class="tab-header">
<el-form-item label="仓库">
<el-select v-model="dialogParams.params.warehouseName" placeholder="请选择仓库" @change="selectWarehouseChange"
style="width: 200px;">
<el-option v-for="item in warehouseList" :key="item.sid" :label="item.warehouseName" :value="item.sid" />
</el-select>
</el-form-item>
<el-form-item label="库区">
<el-select v-model="dialogParams.params.warehouseAreaName" placeholder="请选择库区"
@change="selectWarehouseAreaChange" style="width: 200px;">
<el-option v-for="item in warehouseAreaList" :key="item.sid" :label="item.areaName" :value="item.sid" />
</el-select>
</el-form-item>
<el-form-item label="库位">
<el-select v-model="dialogParams.params.warehouseRackName" placeholder="请选择库位" style="width: 200px;"
@change="selectWarehouseRackChange">
<el-option v-for="item in warehouseRackList" :key="item.sid" :label="item.rackName" :value="item.sid">
</el-option>
</el-select>
</el-form-item>
<div class="btn" style="text-align: center; margin-top: 10px;margin-bottom: 10px;">
<el-button type="primary" size="small" icon="el-icon-search" @click="dialogDosearch">查询</el-button>
<el-button type="primary" size="small" icon="el-icon-refresh" @click="dialogResetQuery">重置</el-button>
</div>
</el-form>
<div class="title titleOne" style="margin-top: 0px;">
<div>库位列表</div>
</div>
<el-table v-loading="tableLoading" :data="allWarehouseRackList" border style="width: 100%;"
@selection-change="selectionWarehouseRack">
<el-table-column fixed width="50" type="selection" align="center" />
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column prop="warehouseName" label="仓库" align="center" />
<el-table-column prop="locationName" label="库区" align="center" />
<el-table-column prop="rackName" label="库位" align="center" />
</el-table>
<pagination v-show="allWarehouseRackList.length > 0" :total="dialogParams.total"
:page.sync="dialogParams.current" :limit.sync="dialogParams.size" class="pagination" @pagination="seleRack" />
</el-form>
<div style="display: flex;flex-direction: row;width: 100%;justify-content: center;align-items: center;">
<el-button type="primary" style="margin-top: 20px;" @click="addRck"> </el-button>
<el-button type="primary" style="margin-top: 20px;" @click="handleClose2"> </el-button>
</div>
</el-dialog>
</div>
</template>
@ -168,6 +251,9 @@
import stocktakingRackCodeList from './stocktakingRackCodeList.vue'
import stocktakingEditReport from './stocktakingEditReport.vue'
import stocktakingReportDetail from './stocktakingReportDetail.vue'
import req2 from '@/api/warehouse/warehouse.js'
import req3 from '@/api/warehouse/warehouseArea.js'
import req4 from '@/api/warehouse/goodsShelves.js'
import {
getCurrentDate
} from '@/utils/index.js'
@ -188,7 +274,9 @@
},
data() {
return {
showList: '2',
dialogVisible: false,
dialogVisible2: false,
btndisabled: false,
viewState: 1, // 1 2 3 4
isSearchShow: false,
@ -249,6 +337,16 @@
name: '已完成'
}
],
stocktakTypeList: [{
sid: '1',
name: '月度抽盘'
},
{
sid: '2',
name: '季度全盘'
},
],
formobj: {
createByName: window.sessionStorage.getItem('name'),
createBySid: window.sessionStorage.getItem('userSid'),
@ -257,18 +355,44 @@
deptName: window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
createDate: getCurrentDate(),
stocktakTypName: '',
stocktakTypSid: '',
superviseName: '',
superviseSid: '',
remarks: ""
remarks: "",
dataList: []
},
financeList: [],
rules: {
stocktakTypName: [{
required: true,
message: '请选择盘点类型',
trigger: 'change'
}],
superviseName: [{
required: true,
message: '监盘人不能为空',
message: '请选择监盘人',
trigger: 'change'
}],
}
},
dialogParams: {
current: 1,
size: 10,
total: 0,
params: {
"warehouseSid": "",
"warehouseName": "",
"warehouseAreaSid": "",
"warehouseAreaName": "",
"warehouseRackSid": "",
"warehouseRackName": "",
}
},
warehouseList: [],
warehouseAreaList: [],
warehouseRackList: [],
allWarehouseRackList: [],
selectionWarehouseRackList: []
}
},
mounted() {
@ -288,8 +412,146 @@
}
})
var parpams = {
orgPath: window.sessionStorage.getItem('defaultOrgPath'),
}
req2.getAllWarehouse(parpams).then(resp => {
this.warehouseList = resp.data
})
},
methods: {
getWarehouseArea(sid) {
this.dialogParams.params.warehouseAreaSid = ''
this.dialogParams.params.warehouseAreaName = ''
var params = {
ckSid: sid
}
req3.getAllWarehouseareaBysid(params).then(resp => {
console.log('>>>>>>>>>getAllWarehousearea', resp)
this.warehouseAreaList = resp.data
}).catch(() => {})
},
getAllTypeByAreaSid(sid) {
this.dialogParams.params.warehouseRackSid = ''
this.dialogParams.params.warehouseRackName = ''
var params = {
areaSid: sid
}
req4.getAllTypeByAreaSid(params).then(resp => {
console.log('>>>>>>>>>getAllTypeByAreaSid', resp)
this.warehouseRackList = resp.data
}).catch(() => {})
},
selectWarehouseChange(val) {
const choose = this.warehouseList.filter((item) => item.sid == val)
console.log('>>>>>>>>>selectWarehouseChange', choose)
this.dialogParams.params.warehouseSid = choose[0].sid
this.dialogParams.params.warehouseName = choose[0].warehouseName
this.getWarehouseArea(choose[0].sid)
},
selectWarehouseAreaChange(val) {
const choose = this.warehouseAreaList.filter((item) => item.sid == val)
console.log('>>>>>>>>>selectWarehouseAreaChange', choose)
this.dialogParams.params.warehouseAreaSid = choose[0].sid
this.dialogParams.params.warehouseAreaName = choose[0].areaName
this.getAllTypeByAreaSid(choose[0].sid)
},
selectWarehouseRackChange(val) {
const choose = this.warehouseRackList.filter((item) => item.sid == val)
console.log('>>>>>>>>>selectWarehouseRackChange', choose)
this.dialogParams.params.warehouseRackSid = choose[0].sid
this.dialogParams.params.warehouseRackName = choose[0].rackName
},
dialogDosearch() {
this.dialogParams.current = 1
this.seleRack()
},
dialogResetQuery() {
this.dialogParams = {
current: 1,
size: 10,
total: 0,
params: {
"warehouseSid": "",
"warehouseName": "",
"warehouseAreaSid": "",
"warehouseAreaName": "",
"warehouseRackSid": "",
"warehouseRackName": "",
}
}
this.seleRack()
},
seleRack() {
var params = {
orgPath: window.sessionStorage.getItem('defaultOrgPath'),
}
req4.warehouserackListAll(params).then(resp => {
console.log('>>>>>>>>>warehouserackListAll', resp)
if (resp.success) {
const data = resp.data
this.dialogParams.total = data.total
this.allWarehouseRackList = data.records
this.dialogVisible2 = true
} else {
// resp.code
this.allWarehouseRackList = []
this.dialogParams.total = 0
}
}).catch(() => {})
},
selectionWarehouseRack(val) {
console.log('>>>>>>>>>selectionWarehouseRack', val)
this.selectionWarehouseRackList = val
},
addRck() {
for (var i = 0; i < this.selectionWarehouseRackList.length; i++) {
var item = this.selectionWarehouseRackList[i]
this.formobj.dataList.push(item)
}
console.log('>>>>>>>>>addRck', this.formobj.dataList)
this.dialogVisible2 = false
},
handleClose2() {
this.dialogVisible2 = false
},
toDeleted(row) {
console.log('>>>>>>>>>toDeleted', row)
const index = this.formobj.dataList.findIndex((item) => item == row)
this.formobj.dataList.splice(index, 1)
},
selectStocktakTyp(val) {
this.showList = val
console.log('>>>>>>>>>selectStocktakTyp', val)
const choose = this.stocktakTypeList.filter((item) => val.includes(item.sid))
console.log('>>>>>>>>>selectStocktakTyp', choose)
this.formobj.stocktakTypName = choose[0].name
this.formobj.stocktakTypSid = choose[0].sid
},
selectFinance(val) {
console.log('>>>>>>>>>selectFinance', val)
@ -330,18 +592,10 @@
})
this.dialogVisible = false
this.formobj = {
createByName: window.sessionStorage.getItem('name'),
createBySid: window.sessionStorage.getItem('userSid'),
deptSid: window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1),
deptName: window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
createDate: getCurrentDate(),
superviseName: '',
superviseSid: '',
remarks: ""
}
this.formobj.superviseName = ''
this.formobj.superviseSid = ''
this.formobj.remarks = ""
this.loadList()
}
}).catch(() => {})

5
yxt-as-ui/src/views/storage/stocktaking/stocktakingRackCodeList.vue

@ -24,7 +24,8 @@
</el-select>
</el-form-item>
<el-form-item label="库位">
<el-select v-model="queryParams.params.warehouseRackName" placeholder="请选择库位">
<el-select v-model="queryParams.params.warehouseRackName" placeholder="请选择库位"
@change="selectWarehouseRackChange">
<el-option v-for="item in warehouseRackList" :key="item.sid" :label="item.rackName"
:value="item.sid">
</el-option>
@ -137,6 +138,7 @@
"warehouseAreaSid": "",
"warehouseAreaName": "",
"warehouseRackSid": "",
"warehouseRackName": "",
}
},
billSid: "",
@ -286,6 +288,7 @@
"warehouseAreaSid": "",
"warehouseAreaName": "",
"warehouseRackSid": "",
"warehouseRackName": "",
}
}
this.loadList()

330
yxt-as-ui/src/views/storage/stocktakingLoss/index.vue

@ -0,0 +1,330 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<button-bar ref="btnbar" view-title="盘亏出库申请管理" :btndisabled="btndisabled" @btnhandle="btnHandle" />
<div class="main-content">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">
{{ searchxianshitit }}
</el-button>
<div v-show="isSearchShow" class="search">
<el-form :inline="true" class="tab-header">
<el-form-item label="申请部门">
<el-input v-model="queryParams.params.deptNmae" placeholder="" clearable />
</el-form-item>
<el-form-item label="申请人">
<el-input v-model="queryParams.params.createByName" placeholder="" clearable />
</el-form-item>
<el-form-item label="单据编号">
<el-input v-model="queryParams.params.billNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="单据日期">
<el-date-picker v-model="queryParams.params.createStartTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
<el-date-picker v-model="queryParams.params.createEndTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
</el-form-item>
<el-form-item label="办结日期">
<el-date-picker v-model="queryParams.params.finishStartTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
<el-date-picker v-model="queryParams.params.finishEndTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
</el-form-item>
<el-form-item label="盘点单号">
<el-input v-model="queryParams.params.sourceBillNo" placeholder="" clearable />
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" size="small" icon="el-icon-search" @click="dosearch">查询</el-button>
<el-button type="primary" size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</div>
</div>
</div>
<!-- Start 项目列表头部 -->
<div class="listtop">
<div class="tit">盘亏出申请列表</div>
</div>
<!-- End 项目列表头部 -->
<!-- Start 项目列表 -->
<div class="">
<el-table v-loading="tableLoading" :data="dataList" border style="width: 100%"
@selection-change="selectionLineChangeHandle">
<el-table-column fixed width="50" type="selection" align="center" />
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column fixed label="操作" align="center" width="150">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="toEdit(scope.row)">办理</el-button>
<el-button type="primary" size="mini" @click="toRelevancy(scope.row)">查看</el-button>
</template>
</el-table-column>
<el-table-column prop="nodeState" label="流程状态" align="center" />
<el-table-column prop="billNo" label="单据编号" align="center" />
<el-table-column prop="deptName" label="申请部门" align="center" />
<el-table-column prop="createByName" label="申请人" align="center" />
<el-table-column prop="createTime" label="申请日期" align="center" />
<el-table-column prop="finishTime" label="办结日期" align="center" />
<el-table-column prop="sourceBillNo" label="盘点单号" align="center" />
<el-table-column prop="businessType" label="业务类型" align="center" />
</el-table>
</div>
<!-- End 项目列表 -->
<div class="pages">
<div class="tit" />
<!-- 翻页 -->
<pagination v-show="dataList.length > 0" :total="queryParams.total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" class="pagination" @pagination="loadList" />
</div>
</div>
</div>
<!-- End 查询和其列表部分 -->
<!-- 新增修改部分组件 -->
<divAdd v-show="viewState == 2 || viewState == 3" ref="divadd" @doback="resetState" @reloadlist="loadList" />
<divInfo v-show="viewState == 4" ref="divinfo" @doback="resetState" @reloadlist="loadList" />
</div>
</template>
<script>
import req from '@/api/storage/stocktakingLoss.js'
import ButtonBar from '@/components/ButtonBar'
import Pagination from '@/components/pagination'
import pageye from '@/components/pagination/pageye'
import divAdd from './stocktakingLossAdd.vue'
import divInfo from './stocktakingLossInfo.vue'
export default {
components: {
ButtonBar,
Pagination,
pageye,
divAdd,
divInfo
},
data() {
return {
btndisabled: false,
viewState: 1, // 1 2 3 4
isSearchShow: false,
searchxianshitit: '显示查询条件',
tableLoading: false,
dataList: [],
btnList: [{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
}, {
type: 'danger',
size: 'small',
icon: 'del',
btnKey: 'doDel',
btnLabel: '删除'
},
{
type: 'info',
size: 'small',
icon: 'cross',
btnKey: 'doClose',
btnLabel: '关闭'
}
],
queryParams: {
current: 1,
size: 10,
total: 0,
params: {
"deptNmae": "",
"createByName": "",
"billNo": "",
"createStartTime": "",
"createEndTime": "",
"finishStartTime": "",
"finishEndTime": "",
"sourceBillNo": "",
"userSid": "",
"orgPath": "",
"menuUrl": ""
}
},
sids: [],
selectionList: [],
}
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
created() {
this.loadList()
},
methods: {
toPrintLabel() {
if (this.selectionList.length != 1) {
this.$message({
type: 'warning',
message: "请选择一条数据。",
showClose: true
})
return
}
},
selectionLineChangeHandle(val) {
console.log("val", val);
this.selectionList = val
const aa = []
val.forEach(element => {
aa.push(element.sid)
})
this.sids = aa
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
btnHandle(btnKey) {
switch (btnKey) {
case 'toPrintLabel':
this.toPrintLabel()
break
case 'doDel':
this.doDel()
break
case 'toAdd':
this.toAdd()
break
case 'doClose':
this.doClose()
break
default:
break
}
},
doDel() {
if (this.sids.length > 0) {
const tip = '请确认是否删除所选 ' + this.sids.length + ' 条记录?'
this.$confirm(tip, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
req.deleteBySids(this.sids).then((resp) => {
loading.close()
if (resp.success) {
this.$message({
type: 'success',
message: resp.msg,
showClose: true
})
this.loadList()
} else {
// resp.code
}
}).catch(e => {
loading.close()
})
}).catch(() => {})
} else {
this.$message({
showClose: true,
message: '请至少选择一条记录进行删除操作'
})
}
},
loadList() {
this.tableLoading = true
this.queryParams.params.userSid = window.sessionStorage.getItem('userSid')
this.queryParams.params.orgPath = window.sessionStorage.getItem('defaultOrgPath')
this.queryParams.params.menuUrl = this.$route.path
req.listPage(this.queryParams).then((resp) => {
this.tableLoading = false
if (resp.success) {
const data = resp.data
this.queryParams.total = data.total
this.dataList = data.records
} else {
// resp.code
this.dataList = []
this.queryParams.total = 0
}
}).catch(() => {
this.tableLoading = false
})
},
//
indexMethod(index) {
var pagestart = (this.queryParams.current - 1) * this.queryParams.size
var pageindex = index + 1 + pagestart
return pageindex
},
dosearch() {
this.queryParams.current = 1
this.loadList()
},
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
total: 0,
params: {
name: '',
billNo: "",
sourceBillNo: "",
createTimestart: '',
createTimeEnd: '',
billstate: '',
menuUrl: '',
orgPath: '',
usersid: ""
}
}
this.loadList()
},
toAdd() {
this.viewState = 2
this.$refs['divadd'].showAdd()
},
toEdit(row) {
this.viewState = 2
this.$refs['divadd'].showEdit(row)
},
doClose() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.go(-1)
},
toRelevancy(row) {
this.viewState = 4
this.$refs['divinfo'].showAdd(row)
},
resetState() {
this.viewState = 1
},
}
}
</script>
<style scoped>
</style>

370
yxt-as-ui/src/views/storage/stocktakingLoss/stocktakingLossAdd.vue

@ -0,0 +1,370 @@
<template>
<div>
<div class="tab-header webtop">
<!-- 标题 -->
<div>{{title}}盘亏出库申请单</div>
<!-- start 添加修改按钮 -->
<div>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate">保存</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit">提交</el-button>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
<!-- end 添加修改按钮 -->
<!-- end 详情按钮 -->
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<el-row class="first_row">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.deptName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty"><span class="must">*</span> 申请日期</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createTime }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty"><span class="must">*</span> 盘点单号</div>
<el-form-item prop="sourceBillNo">
<el-select v-model="formobj.sourceBillNo" filterable clearable placeholder="请选择"
class="addinputw addinputInfo" @change="selectSourceBillNo">
<el-option v-for="item in sourceBillNoList" :key="item.billSid" :label="item.billNo"
:value="item.billSid">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">业务类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.businessVaule }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">备注</div>
<el-form-item><el-input v-model="formobj.remarks" placeholder="" class="addinputw addinputInfo"
clearable /></el-form-item>
</el-col>
</el-row>
<div class="title">
<div>商品列表</div>
</div>
<el-table v-loading="listLoading" :data="formobj.goodsList" border>
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column fixed label="操作" wid align="center" width="120">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="doDelGoods(scope.row)">删除</el-button>
</template>
</el-table-column>
<el-table-column label="商品ID" prop="goodsID" align="center" />
<el-table-column label="商品名称" prop="goodsName" align="center" />
<el-table-column label="商品编码" prop="goodsCode" align="center" />
<el-table-column label="规格" prop="goodsSpec" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="仓库" prop="warehouseName" align="center" />
<el-table-column label="库位" prop="warehouseRackName" align="center" />
<el-table-column label="入库单价" prop="inStoragePrice" align="center" />
<el-table-column label="盘亏数量" prop="pkNum" align="center" />
<el-table-column label="出库数量" align="center">
<template slot-scope="scope">
<el-input ref="focusAssumptionInput" v-model="scope.row.outStorageNum"
@input="commodityComputeYHAndXSJE3(scope.row)" clearable placeholder=""
oninput="value=value.replace(/^(0+)|[^\d]+/g,'')" />
</template>
</el-table-column>
<el-table-column label="金额" prop="money" align="center" />
</el-table>
</el-form>
</div>
</div>
</template>
<script>
import req from '@/api/storage/stocktakingLoss.js'
import {
getCurrentDate
} from '@/utils/index.js'
import {
getOrgSidByPath,
} from '@/api/Common/dictcommons'
export default {
components: {},
data() {
return {
title: "【新增】",
listLoading: false,
submitdisabled: false,
formobj: {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
"deptSid": window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"sourceBillNo": "",
"sourceBillSid": "",
"businessKey": "14",
"businessVaule": "盘亏出库",
"remarks": "",
"goodsList": []
},
hideUploadBtn: false,
sourceBillNoList: [],
rules: {
sourceBillNo: [{
required: true,
message: '请选择盘点单号',
trigger: 'change'
}],
}
}
},
created() {
},
methods: {
init() {
getOrgSidByPath({
orgPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.formobj.createOrgSid = res.data
this.formobj.useOrgSid = res.data
}
})
req.getSourceBillNoBySid({
deptSid: window.sessionStorage.getItem('defaultOrgPath').sub(window.sessionStorage.getItem(
'defaultOrgPath').lastIndexOf('/') + 1)
}).then((resp) => {
if (resp.success) {
this.sourceBillNoList = resp.data
}
})
},
indexMethod(index) {
return index + 1
},
saveOrUpdate() {
console.log('>>>>>>>>>saveOrUpdate', this.formobj)
// this.$refs['form_obj'].validate((valid) => {
// if (valid) {
this.submitdisabled = true
req.save(this.formobj).then((res) => {
if (res.success) {
this.$message({
showClose: true,
type: 'success',
message: '保存成功'
})
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
// }
// })
},
submit() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
if (this.formobj.goodsList.length == 0) {
this.$message({
showClose: true,
type: 'error',
message: '请添加商品'
})
return
}
for (var i = 0; i < this.formobj.goodsList.length; i++) {
var item = this.formobj.goodsList[i]
if (Number(item.outStorageNum) == 0) {
this.$message({
showClose: true,
type: 'error',
message: '商品出库数量不能为空'
})
return
}
}
this.submitdisabled = true
req.submit(this.formobj).then((res) => {
if (res.success) {
this.$message({
showClose: true,
type: 'success',
message: '保存成功'
})
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').sub(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
"deptSid": window.sessionStorage.getItem('defaultOrgPath').sub(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"sourceBillNo": "",
"sourceBillSid": "",
"businessKey": "14",
"businessVaule": "盘亏出库",
"remarks": "",
"goodsList": []
}
this.submitdisabled = false
this.$emit('doback')
},
showAdd() {
this.title = "【新增】"
this.init()
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
},
showEdit(row) {
this.init()
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
this.title = "【修改】"
req.fetchDetailsBySid(row.sid)
.then(resp => {
if (resp.success) {
this.formobj = resp.data
this.formobj.deptName = window.sessionStorage.getItem('defaultOrgPathName').sub(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1)
this.formobj.deptSid = window.sessionStorage.getItem('defaultOrgPath').sub(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
}
})
.catch(e => {
this.formobj = {}
})
},
selectSourceBillNo(val) {
console.log("selectSourceBillNo", val);
const choose = this.sourceBillNoList.filter((item) => item.billSid == val)
console.log('>>>>>>>>>selectSourceBillNo', choose)
this.formobj.sourceBillNo = choose[0].billNo
this.formobj.sourceBillSid = choose[0].billSid
this.getSourceBillGoods(this.formobj.sourceBillSid)
},
getSourceBillGoods(sid) {
req.sourceBillBySid(sid).then((resp) => {
if (resp.success) {
this.formobj.goodsList = resp.data
}
})
},
doDelGoods(row) {
console.log("doDelGoods", row);
const index = this.formobj.goodsList.findIndex((item) => item == row)
this.formobj.goodsList.splice(index, 1)
},
commodityComputeYHAndXSJE3(row) {
console.log("commodityComputeYHAndXSJE3", row);
if (Number(row.outStorageNum) > Number(row.pkNum)) {
row.outStorageNum = Number(row.pkNum)
}
row.money = (Number(row.inStoragePrice) * Number(row.outStorageNum)).toFixed(2)
}
}
}
</script>
<style scoped>
/deep/ .el-form-item__error {
margin-left: 120px !important;
}
.must {
color: #f00;
}
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
.formaddcopy02 .el-row .el-col /deep/ .el-form-item .addinputw {
margin-left: 120px !important;
width: calc(100% - 115px);
}
.first_row {
border-top: 1px solid #E0E3EB;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

150
yxt-as-ui/src/views/storage/stocktakingLoss/stocktakingLossInfo.vue

@ -0,0 +1,150 @@
<template>
<div>
<div class="tab-header webtop">
<!-- 标题 -->
<div>盘亏出库申请单详情</div>
<!-- start 添加修改按钮 -->
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
<!-- end 添加修改按钮 -->
<!-- end 详情按钮 -->
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" class="formaddcopy02">
<el-row class="first_row">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.deptName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createTime }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">盘点单号</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">业务类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.businessVaule }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">备注</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.remarks }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">
<div>商品列表</div>
</div>
<el-table v-loading="listLoading" :data="formobj.goodsList" border>
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column label="商品名称" prop="goodsName" align="center" />
<el-table-column label="商品编码" prop="goodsCode" align="center" />
<el-table-column label="规格" prop="goodsSpec" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="仓库" prop="warehouseName" align="center" />
<el-table-column label="库位" prop="warehouseRackName" align="center" />
<el-table-column label="入库单价" prop="inStoragePrice" align="center" />
<el-table-column label="盘亏数量" prop="pkNum" align="center" />
<el-table-column label="出库数量" prop="outStorageNum" align="center" />
<el-table-column label="金额" prop="money" align="center" />
</el-table>
</el-form>
</div>
</div>
</template>
<script>
import req from '@/api/storage/stocktakingLoss.js'
export default {
components: {},
data() {
return {
listLoading: false,
formobj: {},
}
},
created() {},
methods: {
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
}
this.$emit('doback')
},
showAdd(row) {
req.fetchDetailsBySid(row.sid)
.then(resp => {
if (resp.success) {
this.formobj = resp.data
}
})
.catch(e => {
this.formobj = {}
})
},
//
indexMethod(index) {
return index + 1
},
}
}
</script>
<style scoped>
/deep/ .el-form-item__error {
margin-left: 120px !important;
}
.must {
color: #f00;
}
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
.formaddcopy02 .el-row .el-col /deep/ .el-form-item .addinputw {
margin-left: 120px !important;
width: calc(100% - 115px);
}
.first_row {
border-top: 1px solid #E0E3EB;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

327
yxt-as-ui/src/views/storage/stocktakingSurplus/index.vue

@ -0,0 +1,327 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<button-bar ref="btnbar" view-title="盘盈入库申请管理" :btndisabled="btndisabled" @btnhandle="btnHandle" />
<div class="main-content">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">
{{ searchxianshitit }}
</el-button>
<div v-show="isSearchShow" class="search">
<el-form :inline="true" class="tab-header">
<el-form-item label="申请部门">
<el-input v-model="queryParams.params.deptNmae" placeholder="" clearable />
</el-form-item>
<el-form-item label="申请人">
<el-input v-model="queryParams.params.createByName" placeholder="" clearable />
</el-form-item>
<el-form-item label="单据编号">
<el-input v-model="queryParams.params.billNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="单据日期">
<el-date-picker v-model="queryParams.params.createStartTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
<el-date-picker v-model="queryParams.params.createEndTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
</el-form-item>
<el-form-item label="办结日期">
<el-date-picker v-model="queryParams.params.finishStartTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
<el-date-picker v-model="queryParams.params.finishEndTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 200px;">
</el-date-picker>
</el-form-item>
<el-form-item label="盘点单号">
<el-input v-model="queryParams.params.sourceBillNo" placeholder="" clearable />
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" size="small" icon="el-icon-search" @click="dosearch">查询</el-button>
<el-button type="primary" size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</div>
</div>
</div>
<!-- Start 项目列表头部 -->
<div class="listtop">
<div class="tit">盘盈入库申请列表</div>
</div>
<!-- End 项目列表头部 -->
<!-- Start 项目列表 -->
<div class="">
<el-table v-loading="tableLoading" :data="dataList" border style="width: 100%"
@selection-change="selectionLineChangeHandle">
<el-table-column fixed width="50" type="selection" align="center" />
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column fixed label="操作" align="center" width="150">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="toEdit(scope.row)">办理</el-button>
<el-button type="primary" size="mini" @click="toRelevancy(scope.row)">查看</el-button>
</template>
</el-table-column>
<el-table-column prop="nodeState" label="流程状态" align="center" />
<el-table-column prop="billNo" label="单据编号" align="center" />
<el-table-column prop="deptName" label="申请部门" align="center" />
<el-table-column prop="createByName" label="申请人" align="center" />
<el-table-column prop="createTime" label="申请日期" align="center" />
<el-table-column prop="finishTime" label="办结日期" align="center" />
<el-table-column prop="sourceBillNo" label="盘点单号" align="center" />
<el-table-column prop="businessType" label="业务类型" align="center" />
</el-table>
</div>
<!-- End 项目列表 -->
<div class="pages">
<div class="tit" />
<!-- 翻页 -->
<pagination v-show="dataList.length > 0" :total="queryParams.total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" class="pagination" @pagination="loadList" />
</div>
</div>
</div>
<!-- End 查询和其列表部分 -->
<!-- 新增修改部分组件 -->
<divAdd v-show="viewState == 2 || viewState == 3" ref="divadd" @doback="resetState" @reloadlist="loadList" />
<divInfo v-show="viewState == 4" ref="divinfo" @doback="resetState" @reloadlist="loadList" />
</div>
</template>
<script>
import req from '@/api/storage/stocktakingSurplus.js'
import ButtonBar from '@/components/ButtonBar'
import Pagination from '@/components/pagination'
import pageye from '@/components/pagination/pageye'
import divAdd from './stocktakingSurplusAdd.vue'
import divInfo from './stocktakingSurplusInfo.vue'
export default {
components: {
ButtonBar,
Pagination,
pageye,
divAdd,
divInfo
},
data() {
return {
btndisabled: false,
viewState: 1, // 1 2 3 4
isSearchShow: false,
searchxianshitit: '显示查询条件',
tableLoading: false,
dataList: [],
btnList: [{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
}, {
type: 'danger',
size: 'small',
icon: 'del',
btnKey: 'doDel',
btnLabel: '删除'
},
{
type: 'info',
size: 'small',
icon: 'cross',
btnKey: 'doClose',
btnLabel: '关闭'
}
],
queryParams: {
current: 1,
size: 10,
total: 0,
params: {
"deptNmae": "",
"createByName": "",
"billNo": "",
"createStartTime": "",
"createEndTime": "",
"finishStartTime": "",
"finishEndTime": "",
"sourceBillNo": "",
"userSid": "",
"orgPath": "",
"menuUrl": ""
}
},
sids: [],
selectionList: [],
}
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
created() {
this.loadList()
},
methods: {
toPrintLabel() {
if (this.selectionList.length != 1) {
this.$message({
type: 'warning',
message: "请选择一条数据。",
showClose: true
})
return
}
},
selectionLineChangeHandle(val) {
console.log("val", val);
this.selectionList = val
const aa = []
val.forEach(element => {
aa.push(element.sid)
})
this.sids = aa
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
btnHandle(btnKey) {
switch (btnKey) {
case 'doDel':
this.doDel()
break
case 'toAdd':
this.toAdd()
break
case 'doClose':
this.doClose()
break
default:
break
}
},
doDel() {
if (this.sids.length > 0) {
const tip = '请确认是否删除所选 ' + this.sids.length + ' 条记录?'
this.$confirm(tip, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
req.deleteBySids(this.sids).then((resp) => {
loading.close()
if (resp.success) {
this.$message({
type: 'success',
message: resp.msg,
showClose: true
})
this.loadList()
} else {
// resp.code
}
}).catch(e => {
loading.close()
})
}).catch(() => {})
} else {
this.$message({
showClose: true,
message: '请至少选择一条记录进行删除操作'
})
}
},
loadList() {
this.tableLoading = true
this.queryParams.params.userSid = window.sessionStorage.getItem('userSid')
this.queryParams.params.orgPath = window.sessionStorage.getItem('defaultOrgPath')
this.queryParams.params.menuUrl = this.$route.path
req.listPage(this.queryParams).then((resp) => {
this.tableLoading = false
if (resp.success) {
const data = resp.data
this.queryParams.total = data.total
this.dataList = data.records
} else {
// resp.code
this.dataList = []
this.queryParams.total = 0
}
}).catch(() => {
this.tableLoading = false
})
},
//
indexMethod(index) {
var pagestart = (this.queryParams.current - 1) * this.queryParams.size
var pageindex = index + 1 + pagestart
return pageindex
},
dosearch() {
this.queryParams.current = 1
this.loadList()
},
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
total: 0,
params: {
"deptNmae": "",
"createByName": "",
"billNo": "",
"createStartTime": "",
"createEndTime": "",
"finishStartTime": "",
"finishEndTime": "",
"sourceBillNo": "",
"userSid": "",
"orgPath": "",
"menuUrl": ""
}
}
this.loadList()
},
toAdd() {
this.viewState = 2
this.$refs['divadd'].showAdd()
},
toEdit(row) {
this.viewState = 2
this.$refs['divadd'].showEdit(row.sid)
},
doClose() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.go(-1)
},
toRelevancy(row) {
this.viewState = 4
this.$refs['divinfo'].showAdd(row)
},
resetState() {
this.viewState = 1
},
}
}
</script>
<style scoped>
</style>

422
yxt-as-ui/src/views/storage/stocktakingSurplus/stocktakingSurplusAdd.vue

@ -0,0 +1,422 @@
<template>
<div>
<div class="tab-header webtop">
<!-- 标题 -->
<div>{{title}}盘盈入库申请单</div>
<!-- start 添加修改按钮 -->
<div>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate">保存</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit">提交</el-button>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
<!-- end 添加修改按钮 -->
<!-- end 详情按钮 -->
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<el-row class="first_row">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.deptName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty"><span class="must">*</span> 申请日期</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createTime }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty"><span class="must">*</span> 盘点单号</div>
<el-form-item prop="sourceBillNo">
<el-select v-model="formobj.sourceBillNo" filterable clearable placeholder="请选择"
class="addinputw addinputInfo" @change="selectSourceBillNo">
<el-option v-for="item in sourceBillNoList" :key="item.billSid" :label="item.billNo"
:value="item.billSid">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">业务类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.businessVaule }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">备注</div>
<el-form-item><el-input v-model="formobj.remarks" placeholder="" class="addinputw addinputInfo"
clearable /></el-form-item>
</el-col>
</el-row>
<div class="title">
<div>商品列表</div>
</div>
<el-table v-loading="listLoading" :data="formobj.goodsList" border>
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column fixed label="操作" wid align="center" width="120">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="doDelGoods(scope.row)">删除</el-button>
</template>
</el-table-column>
<el-table-column label="商品名称" prop="goodsName" align="center" />
<el-table-column label="商品编码" prop="goodsCode" align="center" />
<el-table-column label="规格" prop="goodsSpec" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="盘盈数量" prop="pyNum" align="center" />
<el-table-column label="供应商" align="center">
<template slot-scope="scope">
<el-select v-model="scope.row.supplierName" clearable placeholder="请选择"
@change="selectSupplierName(scope.row,$event)">
<el-option v-for="(item,i) in supplierList" :key="i" :label="item.supplierName" :value="item.sid">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="入库单价" align="center">
<template slot-scope="scope">
<el-input ref="focusAssumptionInput" @input="commodityComputeYHAndXSJE3(scope.row)"
v-model="scope.row.inStoragePrice" clearable placeholder=""
oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')" />
</template>
</el-table-column>
<el-table-column label="入库数量" align="center">
<template slot-scope="scope">
<el-input ref="focusAssumptionInput" v-model="scope.row.inStorageNum"
@input="commodityComputeYHAndXSJE3(scope.row)" clearable placeholder=""
oninput="value=value.replace(/^(0+)|[^\d]+/g,'')" />
</template>
</el-table-column>
<el-table-column label="金额" prop="money" align="center" />
</el-table>
</el-form>
</div>
</div>
</template>
<script>
import req from '@/api/storage/stocktakingSurplus.js'
import {
getCurrentDate
} from '@/utils/index.js'
import {
getOrgSidByPath,
choiceSupplierInfo
} from '@/api/Common/dictcommons'
export default {
components: {},
data() {
return {
title: "【新增】",
listLoading: false,
submitdisabled: false,
formobj: {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
"deptSid": window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"sourceBillNo": "",
"sourceBillSid": "",
"businessKey": "04",
"businessVaule": "盘盈入库",
"remarks": "",
"goodsList": []
},
hideUploadBtn: false,
supplierList: [],
sourceBillNoList: [],
rules: {
sourceBillNo: [{
required: true,
message: '请选择盘点单号',
trigger: 'change'
}],
}
}
},
created() {
},
methods: {
init() {
getOrgSidByPath({
orgPath: window.sessionStorage.getItem('defaultOrgPath')
}).then((res) => {
if (res.success) {
this.formobj.createOrgSid = res.data
this.formobj.useOrgSid = res.data
}
})
choiceSupplierInfo({
deptSid: window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage.getItem(
'defaultOrgPath').lastIndexOf('/') + 1)
}).then((resp) => {
if (resp.success) {
this.supplierList = resp.data
}
})
req.getSourceBillNoBySid({
deptSid: window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage.getItem(
'defaultOrgPath').lastIndexOf('/') + 1)
}).then((resp) => {
if (resp.success) {
this.sourceBillNoList = resp.data
}
})
},
indexMethod(index) {
return index + 1
},
saveOrUpdate() {
console.log('>>>>>>>>>saveOrUpdate', this.formobj)
// this.$refs['form_obj'].validate((valid) => {
// if (valid) {
this.submitdisabled = true
req.save(this.formobj).then((res) => {
if (res.success) {
this.$message({
showClose: true,
type: 'success',
message: '保存成功'
})
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
// }
// })
},
submit() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
if (this.formobj.goodsList.length == 0) {
this.$message({
showClose: true,
type: 'error',
message: '请添加商品'
})
return
}
for (var i = 0; i < this.formobj.goodsList.length; i++) {
var item = this.formobj.goodsList[i]
if (item.supplierName == '' || item.supplierSid == '') {
this.$message({
showClose: true,
type: 'error',
message: '供应商不能为空'
})
return
}
if (Number(item.inStoragePrice) == 0) {
this.$message({
showClose: true,
type: 'error',
message: '商品入库单价不能为空'
})
return
}
if (Number(item.inStorageNum) == 0) {
this.$message({
showClose: true,
type: 'error',
message: '商品入库数量不能为空'
})
return
}
}
this.submitdisabled = true
req.submit(this.formobj).then((res) => {
if (res.success) {
this.$message({
showClose: true,
type: 'success',
message: '保存成功'
})
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
"sid": "",
"createBySid": window.sessionStorage.getItem('userSid'),
"createByName": window.sessionStorage.getItem('name'),
"deptName": window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1),
"deptSid": window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1),
"createTime": getCurrentDate(),
"sourceBillNo": "",
"sourceBillSid": "",
"businessKey": "04",
"businessVaule": "盘盈入库",
"remarks": "",
"goodsList": []
}
this.submitdisabled = false
this.$emit('doback')
},
showAdd() {
this.title = "【新增】"
this.init()
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
},
showEdit(row) {
this.init()
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
this.title = "【修改】"
req.fetchDetailsBySid(row.sid)
.then(resp => {
if (resp.success) {
this.formobj = resp.data
this.formobj.deptName = window.sessionStorage.getItem('defaultOrgPathName').substring(window
.sessionStorage.getItem('defaultOrgPathName').lastIndexOf('/') + 1)
this.formobj.deptSid = window.sessionStorage.getItem('defaultOrgPath').substring(window.sessionStorage
.getItem('defaultOrgPath').lastIndexOf('/') + 1)
}
})
.catch(e => {
this.formobj = {}
})
},
selectSourceBillNo(val) {
console.log("selectSourceBillNo", val);
const choose = this.sourceBillNoList.filter((item) => item.billSid == val)
console.log('>>>>>>>>>selectSourceBillNo', choose)
this.formobj.sourceBillNo = choose[0].billNo
this.formobj.sourceBillSid = choose[0].billSid
this.getSourceBillGoods(this.formobj.sourceBillSid)
},
getSourceBillGoods(sid) {
req.sourceBillBySid(sid).then((resp) => {
if (resp.success) {
this.formobj.goodsList = resp.data
}
})
},
doDelGoods(row) {
console.log("doDelGoods", row);
const index = this.formobj.goodsList.findIndex((item) => item == row)
this.formobj.goodsList.splice(index, 1)
},
selectSupplierName(row, val) {
console.log("selectSupplierName", row);
console.log("selectSupplierName", val);
const choose = this.supplierList.filter((item) => item.sid == val)
console.log('>>>>>>>>>selectWarehouseAreaCode', choose)
row.supplierName = choose[0].supplierName
row.supplierSid = choose[0].sid
},
commodityComputeYHAndXSJE3(row) {
console.log("commodityComputeYHAndXSJE3", row);
if (Number(row.inStorageNum) > Number(row.pyNum)) {
row.inStorageNum = Number(row.pyNum)
}
row.money = (Number(row.inStoragePrice) * Number(row.inStorageNum)).toFixed(2)
}
}
}
</script>
<style scoped>
/deep/ .el-form-item__error {
margin-left: 120px !important;
}
.must {
color: #f00;
}
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
.formaddcopy02 .el-row .el-col /deep/ .el-form-item .addinputw {
margin-left: 120px !important;
width: calc(100% - 115px);
}
.first_row {
border-top: 1px solid #E0E3EB;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

149
yxt-as-ui/src/views/storage/stocktakingSurplus/stocktakingSurplusInfo.vue

@ -0,0 +1,149 @@
<template>
<div>
<div class="tab-header webtop">
<!-- 标题 -->
<div>盘盈入库申请单详情</div>
<!-- start 添加修改按钮 -->
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
<!-- end 添加修改按钮 -->
<!-- end 详情按钮 -->
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" class="formaddcopy02">
<el-row class="first_row">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.deptName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.createTime }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">盘点单号</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">业务类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.businessVaule }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">备注</div>
<el-form-item><span class="addinputw addinputInfo">{{ formobj.remarks }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">
<div>商品列表</div>
</div>
<el-table v-loading="listLoading" :data="formobj.goodsList" border>
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column label="商品名称" prop="goodsName" align="center" />
<el-table-column label="商品编码" prop="goodsCode" align="center" />
<el-table-column label="规格" prop="goodsSpec" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="盘盈数量" prop="pyNum" align="center" />
<el-table-column label="供应商" prop="supplierName" align="center" />
<el-table-column label="入库单价" prop="inStoragePrice" align="center" />
<el-table-column label="入库数量" prop="inStorageNum" align="center" />
<el-table-column label="金额" prop="money" align="center" />
</el-table>
</el-form>
</div>
</div>
</template>
<script>
import req from '@/api/storage/stocktakingSurplus.js'
export default {
components: {},
data() {
return {
listLoading: false,
formobj: {},
}
},
created() {},
methods: {
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
}
this.$emit('doback')
},
showAdd(row) {
req.fetchDetailsBySid(row.sid)
.then(resp => {
if (resp.success) {
this.formobj = resp.data
}
})
.catch(e => {
this.formobj = {}
})
},
//
indexMethod(index) {
return index + 1
},
}
}
</script>
<style scoped>
/deep/ .el-form-item__error {
margin-left: 120px !important;
}
.must {
color: #f00;
}
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
.formaddcopy02 .el-row .el-col /deep/ .el-form-item .addinputw {
margin-left: 120px !important;
width: calc(100% - 115px);
}
.first_row {
border-top: 1px solid #E0E3EB;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

18
yxt-as-ui/src/views/storage/upShelf/index.vue

@ -294,15 +294,15 @@
size: 10,
total: 0,
params: {
name: '',
billNo: "",
sourceBillNo: "",
createTimestart: '',
createTimeEnd: '',
billstate: '',
menuUrl: '',
orgPath: '',
usersid: ""
name: '',
billNo: "",
sourceBillNo: "",
createTimestart: '',
createTimeEnd: '',
billstate: '',
menuUrl: '',
orgPath: '',
usersid: ""
}
}
this.loadList()

34
yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/app/GoodsConfrimDetailsVo.java

@ -0,0 +1,34 @@
package com.yxt.anrui.as.api.asbusrepairbill.app;
import lombok.Data;
/**
* @author Fan
* @description
* @date 2024/8/5 11:36
*/
@Data
public class GoodsConfrimDetailsVo {
/**
* 数量
*/
private String count;
/**
* 商品名称
*/
private String goodsName;
/**
* 图号
*/
private String goodsSkuCode;
/**
* 是否已确认
*/
private Boolean state;
/**
* 确认人
*/
private String user;
}

18
yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/app/GoodsConfrimListQuery.java

@ -0,0 +1,18 @@
package com.yxt.anrui.as.api.asbusrepairbill.app;
import com.yxt.common.core.query.Query;
import lombok.Data;
/**
* @author Fan
* @description
* @date 2024/8/5 9:36
*/
@Data
public class GoodsConfrimListQuery implements Query {
private String name;
private String orgPath;
private String userSid;
}

49
yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairbill/app/GoodsConfrimListVo.java

@ -0,0 +1,49 @@
package com.yxt.anrui.as.api.asbusrepairbill.app;
import lombok.Data;
/**
* @author Fan
* @description
* @date 2024/8/5 9:35
*/
@Data
public class GoodsConfrimListVo {
/**
* 工单编号
*/
private String billId;
/**
* 工单类型
*/
private String billType;
/**
* 配件接收情况5/10
*/
private String confrimInfo;
/**
* 客户名称
*/
private String customerName;
/**
* 进厂时间
*/
private String entryTime;
/**
* 维修工单sid
*/
private String sid;
/**
* 科目
*/
private String subject;
/**
* 车牌号
*/
private String vehMark;
/**
* 是否可以勾选
*/
private Boolean isCanSubmit;
}

1
yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairinventorybill/AsBusrepairInventoryBillInit.java

@ -64,5 +64,6 @@ public class AsBusrepairInventoryBillInit {
private String registerRemarks;
private String isGoOut;
private List<AsBusrepairInventorybillDetailSDto> detailList = new ArrayList<>();
private List<AsBusrepairInventorybillDetailSDto> receiveList = new ArrayList<>();
}

6
yxt-as/src/main/java/com/yxt/anrui/as/api/asbusrepairinventorybilldetail/AsBusrepairInventorybillDetailSDto.java

@ -72,5 +72,11 @@ public class AsBusrepairInventorybillDetailSDto {
private String operName;
private String remarks;
private String inventoryNum; //库存数量
private String returnAmount; //退库金额 = amount
private String receivePer; //领料人
private String receiveTimes; //领料时间
private String sid;
}

6
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.java

@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.as.api.asbusrepairbill.*;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsConfrimDetailsVo;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsConfrimListVo;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveListVo;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveVo;
import com.yxt.anrui.as.api.asbusrepairinventorybilldetail.SitemsVo;
@ -54,4 +56,8 @@ public interface AsBusrepairBillMapper extends BaseMapper<AsBusrepairBill> {
IPage<GoodsReceiveVo> notConfirmList(IPage<AsBusrepairBill> page, @Param(Constants.WRAPPER) QueryWrapper<AsBusrepairBill> qw);
List<GoodsReceiveListVo> selGoodsReceiveByBillSid(@Param("sid") String sid);
IPage<GoodsConfrimListVo> notConfirmList2(IPage<AsBusrepairBill> page,@Param(Constants.WRAPPER) QueryWrapper<AsBusrepairBill> qw);
List<GoodsConfrimDetailsVo> goodsConfrimInfoList(@Param("sid") String sid);
}

67
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillMapper.xml

@ -205,4 +205,71 @@
LEFT JOIN as_busrepair_inventorybill as i ON d.billSid = i.sid
WHERE d.state = 1 and i.sourceBillSid = #{sid}
</select>
<select id="notConfirmList2" resultType="com.yxt.anrui.as.api.asbusrepairbill.app.GoodsConfrimListVo">
SELECT
j.*,
IF(j.totalCount = j.count, true, false) as isCanSubmit,
concat(j.count,'/',j.totalCount) confrimInfo
FROM
(
SELECT
a.*,
(
SELECT
COUNT(*)
FROM
as_busrepair_inventorybill_detail AS d
LEFT JOIN as_busrepair_inventorybill AS i ON d.billSid = i.sid
WHERE
i.sourceBillSid = a.sid
) totalCount,
(
SELECT
COUNT(*)
FROM
as_busrepair_inventorybill_detail AS d
LEFT JOIN as_busrepair_inventorybill AS i ON d.billSid = i.sid
WHERE
i.sourceBillSid = a.sid
AND d.state = 2
) AS count
FROM
(
SELECT
b.sid,
b.billNo billId,
b.billType,
b.customerName,
b.entryTime,
b.`subject`,
v.vehMark
FROM
as_busrepair_bill AS b
LEFT JOIN as_busrepair_inventorybill AS i ON i.sourceBillSid = b.sid
LEFT JOIN as_busrepair_inventorybill_detail AS d ON d.billSid = i.sid
LEFT JOIN as_busrepair_bill_vech AS v ON v.billSid = b.sid
<where>
${ew.sqlSegment}
</where>
GROUP BY
b.sid
) a
) AS j
WHERE
totalCount != 0
</select>
<select id="goodsConfrimInfoList"
resultType="com.yxt.anrui.as.api.asbusrepairbill.app.GoodsConfrimDetailsVo">
SELECT
d.goodsSpuName goodsName,
d.count,
d.goodsSkuCode,
d.operName `user`,
IF
( d.state = 2, TRUE, FALSE ) AS state
FROM
as_busrepair_inventorybill_detail AS d
LEFT JOIN as_busrepair_inventorybill AS i ON d.billSid = i.sid
where i.sourceBillSid = #{sid}
</select>
</mapper>

29
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillRest.java

@ -1,9 +1,7 @@
package com.yxt.anrui.as.biz.asbusrepairbill;
import com.yxt.anrui.as.api.asbusrepairbill.*;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveQuery;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveSubmit;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveVo;
import com.yxt.anrui.as.api.asbusrepairbill.app.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -11,6 +9,8 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @description: 维修工单
* @author: dimengzhe
@ -199,4 +199,27 @@ public class AsBusrepairBillRest {
public ResultBean<AsBusrepairBillDetailsVo> fetchDetailsBySid2(@PathVariable("sid") String sid) {
return asBusrepairBillService.fetchDetailsBySid(sid);
}
//----------------------------app维修完毕-----------------------------
@PostMapping("/notConfirmList2")
@ApiOperation("获取维修完毕待确认列表")
ResultBean<PagerVo<GoodsConfrimListVo>> notConfirmList2(@RequestBody PagerQuery<GoodsConfrimListQuery> pagerQuery) {
ResultBean<PagerVo<GoodsConfrimListVo>> rb = ResultBean.fireFail();
PagerVo<GoodsConfrimListVo> pv = asBusrepairBillService.notConfirmList2(pagerQuery);
return rb.success().setData(pv);
}
@PostMapping("/submitList2")
@ApiOperation("维修确认提交")
ResultBean submitList2(@RequestBody GoodsReceiveSubmit query) {
ResultBean rb = ResultBean.fireFail();
asBusrepairBillService.submitList2(query);
return rb.success();
}
@ApiOperation("工单商品列表")
@GetMapping("/goodsConfrimInfoList")
public ResultBean<List<GoodsConfrimDetailsVo>> goodsConfrimInfoList(@RequestParam("sid") String sid) {
return asBusrepairBillService.goodsConfrimInfoList(sid);
}
}

135
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillService.java

@ -7,10 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.as.api.asappendix.AsAppendix;
import com.yxt.anrui.as.api.asbusrepairbill.*;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveListVo;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveQuery;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveSubmit;
import com.yxt.anrui.as.api.asbusrepairbill.app.GoodsReceiveVo;
import com.yxt.anrui.as.api.asbusrepairbill.app.*;
import com.yxt.anrui.as.api.asbusrepairbillaitem.AsBusrepairBillAitem;
import com.yxt.anrui.as.api.asbusrepairbillinsurance.AsBusrepairBillInsurance;
import com.yxt.anrui.as.api.asbusrepairbillinsurancerecord.AsBusrepairBillInsuranceRecord;
@ -648,6 +645,11 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
GoodsDetailsVo goodsDetailsVo = new GoodsDetailsVo();
BeanUtil.copyProperties(goodsDetail, goodsDetailsVo);
BigDecimal constPrice = BigDecimal.ZERO; //销售价常量
BigDecimal count = BigDecimal.ZERO; //数量
if (null != goodsDetail.getCurrentCount()) {
count = goodsDetail.getCurrentCount();
}
goodsDetailsVo.setCount(String.valueOf(goodsDetail.getCurrentCount().intValue()));
boolean isTaxRate = false; //进货价是否含税
if (null != goodsDetail.getReceivedTime()) {
goodsDetailsVo.setReceivedTime(sdf.format(goodsDetail.getReceivedTime()));
@ -1316,35 +1318,58 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
settleDto.setSourceBillSid(dto.getSid());
settleDto.setSourceBillNo(asBusrepairBill.getBillNo());
fmsReceivesettleFeign.save(settleDto);
FinUncollectedReceivablesDetailedDto finUncollectedReceivablesDetailedDto = new FinUncollectedReceivablesDetailedDto();
finUncollectedReceivablesDetailedDto.setCreateByName(asBusrepairBill.getCreateByName());
finUncollectedReceivablesDetailedDto.setCreateBySid(asBusrepairBill.getCreateBySid());
finUncollectedReceivablesDetailedDto.setCustomerSid(asBusrepairBill.getCustomerSid());
finUncollectedReceivablesDetailedDto.setCustomerName(asBusrepairBill.getCustomerName());
AsBusrepairBillVech billVech = asBusrepairBillVechService.fetchByBillSid(asBusrepairBill.getSid());
if (null != billVech) {
if (StringUtils.isNotBlank(billVech.getVinNo())) {
finUncollectedReceivablesDetailedDto.setVIN(billVech.getVinNo());
if (null != asBusrepairBill.getHourAmount()) {
if (asBusrepairBill.getHourAmount().compareTo(BigDecimal.ZERO) > 0) {
FinUncollectedReceivablesDetailedDto finUncollectedReceivablesDetailedDto = new FinUncollectedReceivablesDetailedDto();
finUncollectedReceivablesDetailedDto.setCreateByName(asBusrepairBill.getCreateByName());
finUncollectedReceivablesDetailedDto.setCreateBySid(asBusrepairBill.getCreateBySid());
finUncollectedReceivablesDetailedDto.setCustomerSid(asBusrepairBill.getCustomerSid());
finUncollectedReceivablesDetailedDto.setCustomerName(asBusrepairBill.getCustomerName());
finUncollectedReceivablesDetailedDto.setContractSid(asBusrepairBill.getSid());
AsBusrepairBillVech billVech = asBusrepairBillVechService.fetchByBillSid(asBusrepairBill.getSid());
if (null != billVech) {
if (StringUtils.isNotBlank(billVech.getVinNo())) {
finUncollectedReceivablesDetailedDto.setVIN(billVech.getVinNo());
finUncollectedReceivablesDetailedDto.setBusVinSid(billVech.getSid());
}
}
finUncollectedReceivablesDetailedDto.setCustomerPhone(asBusrepairBill.getMobile());
finUncollectedReceivablesDetailedDto.setUseOrgSid(asBusrepairBill.getUseOrgSid());
finUncollectedReceivablesDetailedDto.setOrgSidPath(asBusrepairBill.getOrgSidPath());
finUncollectedReceivablesDetailedDto.setReceivablesName("工时费");
finUncollectedReceivablesDetailedDto.setCurrentReceivableMoney((asBusrepairBill.getHourAmount()).toString());
finUncollectedReceivablesDetailedDto.setReveivableMoney((asBusrepairBill.getHourAmount()).toString());
finUncollectedReceivablesDetailedDto.setUseOrgName(asBusrepairBill.getUseOrgName());
finUncollectedReceivablesDetailedDto.setKxState("01");
finUncollectedReceivablesDetailedFeign.saveOrUpdate(finUncollectedReceivablesDetailedDto);
}
}
finUncollectedReceivablesDetailedDto.setCustomerPhone(asBusrepairBill.getMobile());
finUncollectedReceivablesDetailedDto.setUseOrgSid(asBusrepairBill.getUseOrgSid());
finUncollectedReceivablesDetailedDto.setOrgSidPath(asBusrepairBill.getOrgSidPath());
finUncollectedReceivablesDetailedDto.setReceivablesName("工时费、材料费");
BigDecimal settleAmount = new BigDecimal("0");
BigDecimal otherSettleAmount = new BigDecimal("0");
if (StringUtils.isNotBlank(settleVo.getSettleAmount())) {
settleAmount = new BigDecimal(settleVo.getSettleAmount());
}
if (StringUtils.isNotBlank(settleVo.getOtherSettleAmount())) {
otherSettleAmount = new BigDecimal(settleVo.getOtherSettleAmount());
if (null != asBusrepairBill.getGoodsAmount()) {
if (asBusrepairBill.getGoodsAmount().compareTo(BigDecimal.ZERO) > 0) {
FinUncollectedReceivablesDetailedDto finUncollectedReceivablesDetailedDto = new FinUncollectedReceivablesDetailedDto();
finUncollectedReceivablesDetailedDto.setCreateByName(asBusrepairBill.getCreateByName());
finUncollectedReceivablesDetailedDto.setCreateBySid(asBusrepairBill.getCreateBySid());
finUncollectedReceivablesDetailedDto.setCustomerSid(asBusrepairBill.getCustomerSid());
finUncollectedReceivablesDetailedDto.setCustomerName(asBusrepairBill.getCustomerName());
finUncollectedReceivablesDetailedDto.setContractSid(asBusrepairBill.getSid());
AsBusrepairBillVech billVech = asBusrepairBillVechService.fetchByBillSid(asBusrepairBill.getSid());
if (null != billVech) {
if (StringUtils.isNotBlank(billVech.getVinNo())) {
finUncollectedReceivablesDetailedDto.setVIN(billVech.getVinNo());
finUncollectedReceivablesDetailedDto.setBusVinSid(billVech.getSid());
}
}
finUncollectedReceivablesDetailedDto.setCustomerPhone(asBusrepairBill.getMobile());
finUncollectedReceivablesDetailedDto.setUseOrgSid(asBusrepairBill.getUseOrgSid());
finUncollectedReceivablesDetailedDto.setOrgSidPath(asBusrepairBill.getOrgSidPath());
finUncollectedReceivablesDetailedDto.setReceivablesName("材料费");
finUncollectedReceivablesDetailedDto.setCurrentReceivableMoney((asBusrepairBill.getGoodsAmount()).toString());
finUncollectedReceivablesDetailedDto.setReveivableMoney((asBusrepairBill.getGoodsAmount()).toString());
finUncollectedReceivablesDetailedDto.setUseOrgName(asBusrepairBill.getUseOrgName());
finUncollectedReceivablesDetailedDto.setKxState("01");
finUncollectedReceivablesDetailedFeign.saveOrUpdate(finUncollectedReceivablesDetailedDto);
}
}
finUncollectedReceivablesDetailedDto.setCurrentReceivableMoney((settleAmount.add(otherSettleAmount)).toString());
finUncollectedReceivablesDetailedDto.setReveivableMoney((settleAmount.add(otherSettleAmount)).toString());
finUncollectedReceivablesDetailedDto.setUseOrgName(asBusrepairBill.getUseOrgName());
finUncollectedReceivablesDetailedDto.setKxState("01");
finUncollectedReceivablesDetailedFeign.saveOrUpdate(finUncollectedReceivablesDetailedDto);
}
asBusrepairBill.setNodeCode(6);
asBusrepairBill.setNodeName("已结算");
@ -1966,4 +1991,54 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
}
}
}
public PagerVo<GoodsConfrimListVo> notConfirmList2(PagerQuery<GoodsConfrimListQuery> pagerQuery) {
GoodsConfrimListQuery query = pagerQuery.getParams();
QueryWrapper<AsBusrepairBill> qw = new QueryWrapper<>();
if (query != null) {
if (StringUtils.isNotBlank(query.getName())) {
qw.and(wrapper -> wrapper.like("b.billNo", query.getName())
.or().like("b.customerName", query.getName())
.or().like("v.vehMark", query.getName())
);
}
String orgPath = query.getOrgPath();
List<String> split = Arrays.asList(orgPath.split("/"));
String useOrgSid = "";
if (split.size() > 1) {
//获取本级sid获取本级部门信息
SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData();
useOrgSid = sysOrganization1.getSid();
} else {
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData();
useOrgSid = sysOrganization.getSid();
}
qw.eq("b.deptSid", useOrgSid);
qw.eq("b.repairState", 1);
}
IPage<AsBusrepairBill> page = PagerUtil.queryToPage(pagerQuery);
IPage<GoodsConfrimListVo> pagging = baseMapper.notConfirmList2(page, qw);
PagerVo<GoodsConfrimListVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
public void submitList2(GoodsReceiveSubmit query) {
List<String> list = query.getList();
if (!list.isEmpty()) {
for (String s : list) {
AsBusrepairBill detail = fetchBySid(s);
if (null != detail) {
detail.setRepairState(2);
baseMapper.updateById(detail);
}
}
}
}
public ResultBean<List<GoodsConfrimDetailsVo>> goodsConfrimInfoList(String sid) {
ResultBean rb = ResultBean.fireFail();
List<GoodsConfrimDetailsVo> list = baseMapper.goodsConfrimInfoList(sid);
return rb.success().setData(list);
}
}

59
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairinventorybill/AsBusrepairInventorybillService.java

@ -44,6 +44,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -259,25 +260,53 @@ public class AsBusrepairInventorybillService extends MybatisBaseService<AsBusrep
public String saveBill(AsBusrepairInventorybillDto dto, String busTypeKey) {
AsBusrepairInventorybill entity = new AsBusrepairInventorybill();
BeanUtil.copyProperties(dto, entity, "id", "sid");
int isEnable = 0;
if (busTypeKey.equals("0")) {
entity.setBusTypeKey("0");
entity.setBusTypeValue("维修出库");
String billNo = getApplyCode(dto.getCreateOrgSid(), "WXCKD");
entity.setBillNo(billNo);
isEnable = 1;
} else if (busTypeKey.equals("1")) {
entity.setBusTypeKey("1");
entity.setBusTypeValue("维修退库");
String billNo = getApplyCode(dto.getCreateOrgSid(), "WXTKD");
entity.setBillNo(billNo);
isEnable = 2;
}
baseMapper.insert(entity);
List<AsBusrepairInventorybillDetailSDto> detailList = dto.getDetailList();
if (!detailList.isEmpty()) {
for (AsBusrepairInventorybillDetailSDto sDto : detailList) {
AsBusrepairInventorybillDetail detail = new AsBusrepairInventorybillDetail();
BeanUtil.copyProperties(sDto, detail);
if (StringUtils.isNotBlank(sDto.getOutboundCount())) {
detail.setCurrentCount(new BigDecimal(sDto.getOutboundCount()));
BeanUtil.copyProperties(sDto, detail,"id","sid");
// if (StringUtils.isNotBlank(sDto.getOutboundCount())) {
// detail.setCurrentCount(new BigDecimal(sDto.getOutboundCount()));
// }
if (isEnable == 1) {
if (StringUtils.isNotBlank(sDto.getCount())) {
detail.setCurrentCount(new BigDecimal(sDto.getCount()));
}
} else if (isEnable == 2) {
String sid = sDto.getSid();
AsBusrepairInventorybillDetail detailUpdate = asBusrepairInventorybillDetailService.fetchBySid(sid);
BigDecimal count = BigDecimal.ZERO;
BigDecimal currentCount = BigDecimal.ZERO;
if (null != detailUpdate) {
if (null != detailUpdate.getCurrentCount()) {
currentCount = detailUpdate.getCurrentCount();
}
if (StringUtils.isNotBlank(sDto.getCount())) {
count = new BigDecimal(sDto.getCount());
}
BigDecimal subtract = currentCount.subtract(count);
detailUpdate.setCurrentCount(subtract);
asBusrepairInventorybillDetailService.updateById(detailUpdate);
detail.setCurrentCount(subtract);
if (StringUtils.isNotBlank(sDto.getReturnAmount())) {
detail.setAmount(new BigDecimal(sDto.getReturnAmount()));
}
}
}
detail.setBillSid(entity.getSid());
String inventorySid = sDto.getInventorySid();
@ -302,6 +331,7 @@ public class AsBusrepairInventorybillService extends MybatisBaseService<AsBusrep
if (StringUtils.isNotBlank(sDto.getPrice())) {
detail.setGoodsDetailsPrice(new BigDecimal(sDto.getPrice()));
}
detail.setIsEnable(isEnable);
asBusrepairInventorybillDetailService.insert(detail);
WmsUpdateCountQuery countQuery = new WmsUpdateCountQuery();
countQuery.setSid(sDto.getInventorySid());
@ -399,6 +429,7 @@ public class AsBusrepairInventorybillService extends MybatisBaseService<AsBusrep
ResultBean rb = ResultBean.fireFail();
AsBusrepairInventoryBillInit vo = new AsBusrepairInventoryBillInit();
AsBusrepairBillDetailsVo data = asBusrepairBillService.fetchDetailsBySid(sid).getData();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (null != data) {
vo.setSourceBillSid(sid);
if (StringUtils.isNotBlank(data.getBillNo())) {
@ -454,19 +485,35 @@ public class AsBusrepairInventorybillService extends MybatisBaseService<AsBusrep
vo.setSitemVoList(sitemsVos);
}
List<AsBusrepairInventorybillDetailSDto> list = new ArrayList<>();
//List<AsBusrepairInventorybillDetail> goodsDetails = asBusrepairInventorybillDetailService.getGoodsDetailsByBillSid(sid);
List<AsBusrepairInventorybillDetailSDto> list2 = new ArrayList<>();
List<AsBusrepairInventorybillDetail> goodsDetails = asBusrepairInventorybillDetailService.getGoodsDetailsByBillSidForBack(sid);
if (!goodsDetails.isEmpty()) {
for (AsBusrepairInventorybillDetail goodsDetail : goodsDetails) {
AsBusrepairInventorybillDetailSDto goodsDetailsVo = new AsBusrepairInventorybillDetailSDto();
AsBusrepairInventorybillDetailSDto goodsDetailsVo2 = new AsBusrepairInventorybillDetailSDto();
BeanUtil.copyProperties(goodsDetail, goodsDetailsVo);
if (null != goodsDetail.getCount()) {
goodsDetailsVo.setOutboundCount(goodsDetail.getCount().toString());
BeanUtil.copyProperties(goodsDetail, goodsDetailsVo2);
if (StringUtils.isNotBlank(goodsDetail.getOperName())) {
goodsDetailsVo.setReceivePer(goodsDetail.getOperName());
goodsDetailsVo2.setReceivePer(goodsDetail.getOperName());
}
if (null != goodsDetail.getReceivedTime()) {
goodsDetailsVo.setReceiveTimes(sdf.format(goodsDetail.getReceivedTime()));
goodsDetailsVo2.setReceiveTimes(sdf.format(goodsDetail.getReceivedTime()));
}
if (null != goodsDetail.getCurrentCount()) {
goodsDetailsVo.setOutboundCount(goodsDetail.getCurrentCount().toString());
goodsDetailsVo2.setOutboundCount(goodsDetail.getCurrentCount().toString());
}
goodsDetailsVo.setCount("0");
// if (null != goodsDetail.getAmount()) {
// goodsDetailsVo.setReturnAmount(goodsDetail.getAmount().toString());
// }
list.add(goodsDetailsVo);
list2.add(goodsDetailsVo2);
}
vo.setDetailList(list);
vo.setReceiveList(list2);
}
}
return rb.success().setData(vo);

8
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairinventorybilldetail/AsBusrepairInventorybillDetailMapper.xml

@ -27,7 +27,8 @@
FROM as_busrepair_inventorybill_detail AS d
LEFT JOIN as_busrepair_inventorybill AS b ON b.sid = d.billSid
WHERE b.sourceBillSid = #{sid}
GROUP BY d.goodsID
and d.isEnable = 1
-- GROUP BY d.goodsID
</select>
<select id="getGoodsDetailsByBillSidForBack"
resultType="com.yxt.anrui.as.api.asbusrepairinventorybilldetail.AsBusrepairInventorybillDetail">
@ -38,7 +39,8 @@
LEFT JOIN as_busrepair_inventorybill AS b ON b.sid = d.billSid
WHERE
b.sourceBillSid = #{sid}
GROUP BY
d.goodsID,d.sitemSid
and d.isEnable = 1
-- GROUP BY
-- d.goodsID,d.sitemSid
</select>
</mapper>

36
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairinventorybilldetail/AsBusrepairInventorybillDetailService.java

@ -43,29 +43,29 @@ public class AsBusrepairInventorybillDetailService extends MybatisBaseService<As
public List<AsBusrepairInventorybillDetail> getGoodsDetailsByBillSid(String sid) {
List<AsBusrepairInventorybillDetail> list = baseMapper.getGoodsDetailsByBillSid(sid);
if (!list.isEmpty()) {
for (AsBusrepairInventorybillDetail record : list) {
//维修出入库查询已出库数量
String chuKuCount = asBusrepairInventorybillService.selOutBoundCount(sid, "0", record.getGoodsID()).getData();
String ruKuCount = asBusrepairInventorybillService.selOutBoundCount(sid, "1", record.getGoodsID()).getData();
BigDecimal count = new BigDecimal(chuKuCount).subtract(new BigDecimal(ruKuCount));
record.setCount(count);
}
}
// if (!list.isEmpty()) {
// for (AsBusrepairInventorybillDetail record : list) {
// //维修出入库查询已出库数量
// String chuKuCount = asBusrepairInventorybillService.selOutBoundCount(sid, "0", record.getGoodsID()).getData();
// String ruKuCount = asBusrepairInventorybillService.selOutBoundCount(sid, "1", record.getGoodsID()).getData();
// BigDecimal count = new BigDecimal(chuKuCount).subtract(new BigDecimal(ruKuCount));
// record.setCount(count);
// }
// }
return list;
}
public List<AsBusrepairInventorybillDetail> getGoodsDetailsByBillSidForBack(String sid) {
List<AsBusrepairInventorybillDetail> list = baseMapper.getGoodsDetailsByBillSidForBack(sid);
if (!list.isEmpty()) {
for (AsBusrepairInventorybillDetail record : list) {
//维修出入库查询已出库数量
String chuKuCount = asBusrepairInventorybillService.selOutBoundCountBySitemSid(sid, "0", record.getGoodsID(),record.getSitemSid()).getData();
String ruKuCount = asBusrepairInventorybillService.selOutBoundCountBySitemSid(sid, "1", record.getGoodsID(),record.getSitemSid()).getData();
BigDecimal count = new BigDecimal(chuKuCount).subtract(new BigDecimal(ruKuCount));
record.setCount(count);
}
}
// if (!list.isEmpty()) {
// for (AsBusrepairInventorybillDetail record : list) {
// //维修出入库查询已出库数量
// String chuKuCount = asBusrepairInventorybillService.selOutBoundCountBySitemSid(sid, "0", record.getGoodsID(),record.getSitemSid()).getData();
// String ruKuCount = asBusrepairInventorybillService.selOutBoundCountBySitemSid(sid, "1", record.getGoodsID(),record.getSitemSid()).getData();
// BigDecimal count = new BigDecimal(chuKuCount).subtract(new BigDecimal(ruKuCount));
// record.setCount(count);
// }
// }
return list;
}
}

Loading…
Cancel
Save