This commit is contained in:
mkm 2025-02-26 10:40:58 +08:00
parent 57f41b1b99
commit 7d0642f970
245 changed files with 0 additions and 36305 deletions

View File

@ -1,28 +0,0 @@
import request from '@/utils/request'
export function apiAccountsReceivableLists(params: any) {
return request.get({ url: '/accounts_receivable/accountsreceivable/lists', params })
}
export function apiAccountsReceivableAdd(params: any) {
return request.post({ url: '/accounts_receivable/accountsreceivable/add', params })
}
export function apiAccountsReceivableEdit(params: any) {
return request.post({ url: '/accounts_receivable/accountsreceivable/edit', params })
}
export function apiAccountsReceivableDelete(params: any) {
return request.post({ url: '/accounts_receivable/accountsreceivable/delete', params })
}
export function apiAccountsReceivableDetail(params: any) {
return request.get({ url: '/accounts_receivable/accountsreceivable/detail', params })
}
export function apiAccountsReceivableRecord(params: any) {
return request.get({ url: '/accounts_receivable/accountsreceivable/record', params })
}
export function apiAccountsReceivableStatistics(params: any) {
return request.get({ url: '/accounts_receivable/accountsreceivable/statistics', params })
}

View File

@ -1,31 +0,0 @@
import request from '@/utils/request'
// 活动专区列表
export function apiActivityZoneLists(params: any) {
return request.get({ url: '/activityzone/lists', params })
}
// 添加活动专区
export function apiActivityZoneAdd(params: any) {
return request.post({ url: '/activityzone/add', params })
}
// 编辑活动专区
export function apiActivityZoneEdit(params: any) {
return request.post({ url: '/activityzone/edit', params })
}
// 删除活动专区
export function apiActivityZoneDelete(params: any) {
return request.post({ url: '/activityzone/delete', params })
}
// 活动专区详情
export function apiActivityZoneDetail(params: any) {
return request.get({ url: '/activityzone/detail', params })
}
// 活动专区详情
export function apiActivityZoneExport(params: any) {
return request.get({ url: '/activityzone/export', params })
}

View File

@ -1,31 +0,0 @@
import request from '@/utils/request'
// 活动专区列表
export function apiActivityZoneFormLists(params: any) {
return request.get({ url: '/activityzoneform/lists', params })
}
// 添加活动专区
export function apiActivityZoneFormAdd(params: any) {
return request.post({ url: '/activityzoneform/add', params })
}
// 编辑活动专区
export function apiActivityZoneFormEdit(params: any) {
return request.post({ url: '/activityzoneform/edit', params })
}
// 删除活动专区
export function apiActivityZoneFormDelete(params: any) {
return request.post({ url: '/activityzoneform/delete', params })
}
// 活动专区详情
export function apiActivityZoneFormDetail(params: any) {
return request.get({ url: '/activityzoneform/detail', params })
}
// 活动专区详情
export function apiActivityZoneFormExport(params: any) {
return request.get({ url: '/activityzoneform/export', params })
}

View File

@ -1,131 +0,0 @@
import request from '@/utils/request'
// 预订单表列表
export function apiBeforehandOrderLists(params: any) {
return request.get({ url: '/beforehand_order/beforehandorder/lists', params })
}
export function apiBeforehandOrderStatisticsCount(params: any) {
return request.get({ url: '/beforehand_order/beforehandorder/statistics_count', params })
}
// 添加预订单表
export function apiBeforehandOrderAdd(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/add', params })
}
// 编辑预订单表
export function apiBeforehandOrderEdit(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/edit', params })
}
// 一键出库
export function apiBeforehandOrderCreateOutboundOrder(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/createOutboundOrder', params })
}
// 一键复制预订单
export function apiBeforehandOrderCopy(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/copy', params })
}
// 一键复制预订单
export function apiBeforehandOrderTransfer(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/transfer', params })
}
// 删除预订单表
export function apiBeforehandOrderDelete(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/delete', params })
}
//结算预订单
export function apiBeforehandOrderSettle(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/settle', params })
}
//确认预订单
export function apiBeforehandOrderConfirm(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/confirm', params })
}
// 预订单表详情
export function apiBeforehandOrderDetail(params: any) {
return request.get({ url: '/beforehand_order/beforehandorder/detail', params })
}
// 入库列表
export function apiBeforehandOrderWarehousingLists(params: any) {
return request.get({ url: '/beforehand_order/beforehandorder/warehousing_lists', params })
}
// 出库列表
export function apiBeforehandOrderOutboundLists(params: any) {
return request.get({ url: '/beforehand_order/beforehandorder/outbound_lists', params })
}
// 订单转预订单
export function apiPurchaseOrderTransferAdvanceOrder(params: any) {
return request.post({
url: '/beforehand_order/beforehandorder/orderTransferAdvanceOrder',
params
})
}
// 打印出库标签
export function apiPurchaseOrderExport(params: any) {
return request.post({
url: '/beforehand_order/beforehandorder/export',
params
})
}
/**
*
*/
export function apiPurchaseOrderGenerateOrder(params: any) {
return request.post({
url: '/beforehand_order/beforehandorder/generateOrder',
params
})
}
//导出清单
export function apiPurchaseOrderExportOrderList(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/export_order_list', params })
}
//导出分单
export function apiPurchaseOrderOrderAllocation(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/order_allocation', params })
}
//采购信息
export function apiPurchaseOrderOrderInfo(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/order_info', params })
}
//导出出库
export function apiPurchaseOrderOrderOutbound(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/order_outbound', params })
}
//导出出库
export function apiPurchaseOrderOrderOutbound3(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/order_outbound3', params })
}
//导出退库
export function apiPurchaseOrderStockReturn(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/stock_return', params })
}
//导出退供应商
export function apiPurchaseOrderReturnSupplier(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/return_supplier', params })
}
// 预订单日志列表
export function apiBeforehandOrderLogLists(params: any) {
return request.get({ url: '/beforehand_order/beforehandorder/logList', params })
}
//保存预订单日志
export function apiBeforehandOrderLogSave(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/saveLog', params })
}
//确认预订单日志
export function apiBeforehandOrderLogConfirm(params: any) {
return request.post({ url: '/beforehand_order/beforehandorder/confirmLog', params })
}

View File

@ -1,75 +0,0 @@
import request from '@/utils/request'
// 预订单购物详情表列表
export function apiBeforehandOrderCartInfoLists(params: any) {
return request.get({ url: '/beforehand_order_cart_info/beforehandordercartinfo/lists', params })
}
// 添加预订单购物详情表
export function apiBeforehandOrderCartInfoAdd(params: any) {
return request.post({ url: '/beforehand_order_cart_info/beforehandordercartinfo/add', params })
}
// 编辑预订单购物详情表
export function apiBeforehandOrderCartInfoEdit(params: any) {
return request.post({ url: '/beforehand_order_cart_info/beforehandordercartinfo/edit', params })
}
export function apiBeforehandOrderCartInfoAppendAdd(params: any) {
return request.post({
url: '/beforehand_order_cart_info/beforehandordercartinfo/append_add',
params
})
}
// 删除预订单购物详情表
export function apiBeforehandOrderCartInfoDelete(params: any) {
return request.post({
url: '/beforehand_order_cart_info/beforehandordercartinfo/delete',
params
})
}
// 编辑预订单购物详情无需采购
export function apiBeforehandOrderCartInfoProcurementStatus(params: any) {
return request.post({
url: '/beforehand_order_cart_info/beforehandordercartinfo/procurement_status',
params
})
}
// 一键入库
export function apiBeforehandOrderCartInfoOneClickStorage(params: any) {
return request.post({
url: '/beforehand_order_cart_info/beforehandordercartinfo/one_click_storage',
params
})
}
// 预订单购物详情表详情
export function apiBeforehandOrderCartInfoDetail(params: any) {
return request.get({
url: '/beforehand_order_cart_info/beforehandordercartinfo/detail',
params
})
}
// 预订单购物详情表详情
export function apiBeforehandOrderCartInfoFix(params: any) {
return request.get({
url: '/beforehand_order_cart_info/beforehandordercartinfo/fix',
params
})
}
// 同步商品价格
export function apiBeforehandOrderCartInfoSyncPrice(params: any) {
return request.get({ url: '/beforehand_order_cart_info/beforehandordercartinfo/syncPrice', params })
}
// 设置门店出货
export function apiBeforehandOrderCartInfoSetStoreSale(params: any) {
return request.post({ url: '/beforehand_order_cart_info/beforehandordercartinfo/setStoreSale', params })
}
// 单个商品入库
export function apiBeforehandOrderCartInfoPutInStorage(params: any) {
return request.post({ url: '/beforehand_order_cart_info/beforehandordercartinfo/putInStorage', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 数据变更记录列表
export function apiChangeLogLists(params: any) {
return request.get({ url: '/changelog/lists', params })
}
// 添加数据变更记录
export function apiChangeLogAdd(params: any) {
return request.post({ url: '/changelog/add', params })
}
// 编辑数据变更记录
export function apiChangeLogEdit(params: any) {
return request.post({ url: '/changelog/edit', params })
}
// 删除数据变更记录
export function apiChangeLogDelete(params: any) {
return request.post({ url: '/changelog/delete', params })
}
// 数据变更记录详情
export function apiChangeLogDetail(params: any) {
return request.get({ url: '/changelog/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 配送员表列表
export function apiDeliveryServiceLists(params: any) {
return request.get({ url: '/delivery_service/deliveryservice/lists', params })
}
// 添加配送员表
export function apiDeliveryServiceAdd(params: any) {
return request.post({ url: '/delivery_service/deliveryservice/add', params })
}
// 编辑配送员表
export function apiDeliveryServiceEdit(params: any) {
return request.post({ url: '/delivery_service/deliveryservice/edit', params })
}
// 删除配送员表
export function apiDeliveryServiceDelete(params: any) {
return request.post({ url: '/delivery_service/deliveryservice/delete', params })
}
// 配送员表详情
export function apiDeliveryServiceDetail(params: any) {
return request.get({ url: '/delivery_service/deliveryservice/detail', params })
}

View File

@ -1,15 +0,0 @@
import request from '@/utils/request'
// 财务转账表列表
export function apiFinancialTransfersLists(params: any) {
return request.get({ url: '/financial_transfers/financialtransfers/lists', params })
}
// 发送
export function apiFinancialTransfersSend(params: any) {
return request.post({ url: '/financial_transfers/FinancialTransfers/send_transfers', params })
}
export function apiFinancialTransfersConfirm(params: any) {
return request.post({ url: '/financial_transfers/FinancialTransfers/success_send', params })
}

View File

@ -1,30 +0,0 @@
import request from '@/utils/request'
// 门店盘存列表
export function apiInventoryStoreLists(params: any) {
return request.get({ url: '/inventory_store/inventorystore/lists', params })
}
// 添加门店盘存
export function apiInventoryStoreAdd(params: any) {
return request.post({ url: '/inventory_store/inventorystore/add', params })
}
// 编辑门店盘存
export function apiInventoryStoreEdit(params: any) {
return request.post({ url: '/inventory_store/inventorystore/edit', params })
}
// 删除门店盘存
export function apiInventoryStoreDelete(params: any) {
return request.post({ url: '/inventory_store/inventorystore/delete', params })
}
// 门店盘存详情
export function apiInventoryStoreDetail(params: any) {
return request.get({ url: '/inventory_store/inventorystore/detail', params })
}
export function apiInventoryStoreEnterNums(params: any) {
return request.post({ url: '/inventory_store/inventorystore/enter_nums', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 商品调拨列表
export function apiInventoryTransferLists(params: any) {
return request.get({ url: '/inventory_transfer/inventorytransfer/lists', params })
}
// 添加商品调拨
export function apiInventoryTransferAdd(params: any) {
return request.post({ url: '/inventory_transfer/inventorytransfer/add', params })
}
// 编辑商品调拨
export function apiInventoryTransferEdit(params: any) {
return request.post({ url: '/inventory_transfer/inventorytransfer/edit', params })
}
// 删除商品调拨
export function apiInventoryTransferDelete(params: any) {
return request.post({ url: '/inventory_transfer/inventorytransfer/delete', params })
}
// 商品调拨详情
export function apiInventoryTransferDetail(params: any) {
return request.get({ url: '/inventory_transfer/inventorytransfer/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 商品调拨订单列表
export function apiInventoryTransferOrderLists(params: any) {
return request.get({ url: '/inventory_transfer_order/inventorytransferorder/lists', params })
}
// 添加商品调拨订单
export function apiInventoryTransferOrderAdd(params: any) {
return request.post({ url: '/inventory_transfer_order/inventorytransferorder/add', params })
}
// 编辑商品调拨订单
export function apiInventoryTransferOrderEdit(params: any) {
return request.post({ url: '/inventory_transfer_order/inventorytransferorder/edit', params })
}
// 删除商品调拨订单
export function apiInventoryTransferOrderDelete(params: any) {
return request.post({ url: '/inventory_transfer_order/inventorytransferorder/delete', params })
}
// 商品调拨订单详情
export function apiInventoryTransferOrderDetail(params: any) {
return request.get({ url: '/inventory_transfer_order/inventorytransferorder/detail', params })
}

View File

@ -1,29 +0,0 @@
import request from '@/utils/request'
// 仓库盘存列表
export function apiInventoryWarehouseLists(params: any) {
return request.get({ url: '/inventory_warehouse/inventorywarehouse/lists', params })
}
// 添加仓库盘存
export function apiInventoryWarehouseAdd(params: any) {
return request.post({ url: '/inventory_warehouse/inventorywarehouse/add', params })
}
// 编辑仓库盘存
export function apiInventoryWarehouseEdit(params: any) {
return request.post({ url: '/inventory_warehouse/inventorywarehouse/edit', params })
}
// 删除仓库盘存
export function apiInventoryWarehouseDelete(params: any) {
return request.post({ url: '/inventory_warehouse/inventorywarehouse/delete', params })
}
// 仓库盘存详情
export function apiInventoryWarehouseDetail(params: any) {
return request.get({ url: '/inventory_warehouse/inventorywarehouse/detail', params })
}
export function apiInventoryWarehouseEnterNums(params: any) {
return request.post({ url: '/inventory_warehouse/inventorywarehouse/enter_nums', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 标签列表
export function apiLabelLists(params: any) {
return request.get({ url: '/setting/label/lists', params })
}
// 添加标签
export function apiLabelAdd(params: any) {
return request.post({ url: '/setting/label/add', params })
}
// 编辑标签
export function apiLabelEdit(params: any) {
return request.post({ url: '/setting/label/edit', params })
}
// 删除标签
export function apiLabelDelete(params: any) {
return request.post({ url: '/setting/label/delete', params })
}
// 标签详情
export function apiLabelDetail(params: any) {
return request.get({ url: '/setting/label/detail', params })
}

View File

@ -1,22 +0,0 @@
import request from '@/utils/request'
// 省
export function apiProvince() {
return request.get({ url: '/config/province' })
}
// 市
export function apiCity(params: any) {
return request.get({ url: '/config/city', params })
}
// 区
export function apiArea(params: any) {
return request.get({ url: '/config/area', params })
}
// 街道
export function apiStreet(params: any) {
return request.get({ url: '/config/street', params })
}

View File

@ -1,37 +0,0 @@
import request from '@/utils/request'
// 采购订单列表
export function apiPurchaseOrderLists(params: any) {
return request.get({ url: '/purchase_order/purchaseorder/lists', params })
}
// 采购订单详情列表
export function apiPurchaseOrderInfoLists(params: any) {
return request.get({ url: '/purchase_order/purchaseorder/info_lists', params })
}
// 采购订单详情列表
export function apiPurchaseStoreOrderLists(params: any) {
return request.get({ url: '/purchase_order/purchaseorder/order_lists', params })
}
// 添加采购订单
export function apiPurchaseOrderAdd(params: any) {
return request.post({ url: '/purchase_order/purchaseorder/add', params })
}
// 添加采购订单平台
export function apiPurchaseOrderPlatform(params: any) {
return request.post({ url: '/purchase_order/purchaseorder/platform', params })
}
// 编辑采购订单
export function apiPurchaseOrderEdit(params: any) {
return request.post({ url: '/purchase_order/purchaseorder/edit', params })
}
// 删除采购订单
export function apiPurchaseOrderDelete(params: any) {
return request.post({ url: '/purchase_order/purchaseorder/delete', params })
}
// 采购订单详情
export function apiPurchaseOrderDetail(params: any) {
return request.get({ url: '/purchase_order/purchaseorder/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 采购订单详情表列表
export function apiPurchaseOrderInfoLists(params: any) {
return request.get({ url: '/purchase_order_info/purchaseorderinfo/lists', params })
}
// 添加采购订单详情表
export function apiPurchaseOrderInfoAdd(params: any) {
return request.post({ url: '/purchase_order_info/purchaseorderinfo/add', params })
}
// 编辑采购订单详情表
export function apiPurchaseOrderInfoEdit(params: any) {
return request.post({ url: '/purchase_order_info/purchaseorderinfo/edit', params })
}
// 删除采购订单详情表
export function apiPurchaseOrderInfoDelete(params: any) {
return request.post({ url: '/purchase_order_info/purchaseorderinfo/delete', params })
}
// 采购订单详情表详情
export function apiPurchaseOrderInfoDetail(params: any) {
return request.get({ url: '/purchase_order_info/purchaseorderinfo/detail', params })
}

View File

@ -1,65 +0,0 @@
import request from '@/utils/request'
// 采购供应链商品列表
export function apiPurchaseProductOfferLists(params: any) {
return request.get({ url: '/purchase_product_offer/purchaseproductoffer/lists', params })
}
// 添加采购供应链商品
export function apiPurchaseProductOfferAdd(params: any) {
return request.post({ url: '/purchase_product_offer/purchaseproductoffer/add', params })
}
// 编辑采购供应链商品
export function apiPurchaseProductOfferEdit(params: any) {
return request.post({ url: '/purchase_product_offer/purchaseproductoffer/edit', params })
}
// 删除采购供应链商品
export function apiPurchaseProductOfferDelete(params: any) {
return request.post({ url: '/purchase_product_offer/purchaseproductoffer/delete', params })
}
/**
*
* @param params
* @returns
*/
export function apiPurchaseProductOfferAddPurchasesOneClick(params: any) {
return request.post({
url: '/purchase_product_offer/purchaseproductoffer/add_purchases_one_click',
params
})
}
// 设置采购信息
export function apiPurchaseProductOfferSetProcureInfo(params: any) {
return request.post({
url: '/purchase_product_offer/purchaseproductoffer/setProcureInfo',
params
})
}
// 设置批量采购信息
export function apiPurchaseProductOfferSetBatchProcureInfo(params: any) {
return request.post({
url: '/purchase_product_offer/purchaseproductoffer/setBatchProcureInfo',
params
})
}
// 仓库验收信息设置
export function apiPurchaseProductOffersetStoreroomInfo(params: any) {
return request.post({
url: '/purchase_product_offer/purchaseproductoffer/setStoreroomInfo',
params
})
}
// 仓库验收信息设置
export function apiPurchaseProductOffersetStoreroomInfoTwo(params: any) {
return request.post({
url: '/purchase_product_offer/purchaseproductoffer/setStoreroomInfoTwo',
params
})
}
// 采购供应链商品详情
export function apiPurchaseProductOfferDetail(params: any) {
return request.get({ url: '/purchase_product_offer/purchaseproductoffer/detail', params })
}

View File

@ -1,37 +0,0 @@
import request from '@/utils/request'
// 门店商品辅助表列表
export function apiStoreBranchProductLists(params: any) {
return request.get({ url: '/store_branch_product/storebranchproduct/lists', params })
}
// 添加门店商品辅助表
export function apiStoreBranchProductAdd(params: any) {
return request.post({ url: '/store_branch_product/storebranchproduct/add', params })
}
// 编辑门店商品辅助表
export function apiStoreBranchProductEdit(params: any) {
return request.post({ url: '/store_branch_product/storebranchproduct/edit', params })
}
// 编辑门店商品
export function apiStoreBranchProductUpdate(params: any) {
return request.post({ url: '/store_branch_product/storebranchproduct/update', params })
}
// 删除门店商品辅助表
export function apiStoreBranchProductDelete(params: any) {
return request.post({ url: '/store_branch_product/storebranchproduct/delete', params })
}
export function apiStoreBranchProductEditStock(params: any) {
return request.post({
url: '/store_branch_product/storebranchproduct/edit_stock',
params
})
}
// 门店商品辅助表详情
export function apiStoreBranchProductDetail(params: any) {
return request.get({ url: '/store_branch_product/storebranchproduct/detail', params })
}

View File

@ -1,48 +0,0 @@
import request from '@/utils/request'
// 门店商品属性值辅助表列表
export function apiStoreBranchProductAttrValueLists(params: any) {
return request.get({
url: '/store_branch_product_attr_value/storebranchproductattrvalue/lists',
params
})
}
// 添加门店商品属性值辅助表
export function apiStoreBranchProductAttrValueAdd(params: any) {
return request.post({
url: '/store_branch_product_attr_value/storebranchproductattrvalue/add',
params
})
}
// 编辑门店商品属性值辅助表
export function apiStoreBranchProductAttrValueEdit(params: any) {
return request.post({
url: '/store_branch_product_attr_value/storebranchproductattrvalue/edit',
params
})
}
//更新状态
export function apiStoreBranchProductAttrValueStatus(params: any) {
return request.post({
url: '/store_branch_product_attr_value/storebranchproductattrvalue/status',
params
})
}
// 删除门店商品属性值辅助表
export function apiStoreBranchProductAttrValueDelete(params: any) {
return request.post({
url: '/store_branch_product_attr_value/storebranchproductattrvalue/delete',
params
})
}
// 门店商品属性值辅助表详情
export function apiStoreBranchProductAttrValueDetail(params: any) {
return request.get({
url: '/store_branch_product_attr_value/storebranchproductattrvalue/detail',
params
})
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 门店现金流水列表
export function apiStoreCashFinanceFlowLists(params: any) {
return request.get({ url: '/store_cash_finance_flow/storecashfinanceflow/lists', params })
}
// 添加门店现金流水
export function apiStoreCashFinanceFlowAdd(params: any) {
return request.post({ url: '/store_cash_finance_flow/storecashfinanceflow/add', params })
}
// 编辑门店现金流水
export function apiStoreCashFinanceFlowEdit(params: any) {
return request.post({ url: '/store_cash_finance_flow/storecashfinanceflow/edit', params })
}
// 删除门店现金流水
export function apiStoreCashFinanceFlowDelete(params: any) {
return request.post({ url: '/store_cash_finance_flow/storecashfinanceflow/delete', params })
}
// 门店现金流水详情
export function apiStoreCashFinanceFlowDetail(params: any) {
return request.get({ url: '/store_cash_finance_flow/storecashfinanceflow/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 商品分类表列表
export function apiStoreCategoryLists(params: any) {
return request.get({ url: '/store_category/storecategory/lists', params })
}
// 添加商品分类表
export function apiStoreCategoryAdd(params: any) {
return request.post({ url: '/store_category/storecategory/add', params })
}
// 编辑商品分类表
export function apiStoreCategoryEdit(params: any) {
return request.post({ url: '/store_category/storecategory/edit', params })
}
// 删除商品分类表
export function apiStoreCategoryDelete(params: any) {
return request.post({ url: '/store_category/storecategory/delete', params })
}
// 商品分类表详情
export function apiStoreCategoryDetail(params: any) {
return request.get({ url: '/store_category/storecategory/detail', params })
}

View File

@ -1,31 +0,0 @@
import request from '@/utils/request'
// 门店提现表列表
export function apiStoreExtractLists(params: any) {
return request.get({ url: '/store_extract/storeextract/lists', params })
}
// 添加门店提现表
export function apiStoreExtractAdd(params: any) {
return request.post({ url: '/store_extract/storeextract/add', params })
}
// 确认提现
export function apiStoreExtractEnter(params: any) {
return request.post({ url: '/store_extract/storeextract/enter', params })
}
// 编辑门店提现表
export function apiStoreExtractEdit(params: any) {
return request.post({ url: '/store_extract/storeextract/edit', params })
}
// 删除门店提现表
export function apiStoreExtractDelete(params: any) {
return request.post({ url: '/store_extract/storeextract/delete', params })
}
// 门店提现表详情
export function apiStoreExtractDetail(params: any) {
return request.get({ url: '/store_extract/storeextract/detail', params })
}

View File

@ -1,16 +0,0 @@
import request from '@/utils/request'
// 门店财务-日账单
export function apiDayBillLists(params: any) {
return request.get({ url: '/store_finance_flow/StoreFinanceFlow/day_bill_lists', params })
}
// 门店财务-周账单
export function apiWeekBillLists(params: any) {
return request.get({ url: '/store_finance_flow/StoreFinanceFlow/week_bill_lists', params })
}
// 门店财务-月账单
export function apiMonthBillLists(params: any) {
return request.get({ url: '/store_finance_flow/StoreFinanceFlow/month_bill_lists', params })
}

View File

@ -1,30 +0,0 @@
import request from '@/utils/request'
// 门店资金流水表列表
export function apiStoreFinanceFlowLists(params: any) {
return request.get({ url: '/store_finance_flow/storefinanceflow/lists', params })
}
// 添加门店资金流水表
export function apiStoreFinanceFlowAdd(params: any) {
return request.post({ url: '/store_finance_flow/storefinanceflow/add', params })
}
// 编辑门店资金流水表
export function apiStoreFinanceFlowEdit(params: any) {
return request.post({ url: '/store_finance_flow/storefinanceflow/edit', params })
}
// 删除门店资金流水表
export function apiStoreFinanceFlowDelete(params: any) {
return request.post({ url: '/store_finance_flow/storefinanceflow/delete', params })
}
// 门店资金流水表详情
export function apiStoreFinanceFlowDetail(params: any) {
return request.get({ url: '/store_finance_flow/storefinanceflow/detail', params })
}
// 导出
export function apiStoreFinanceFlowExport(params: any) {
return request.post({ url: '/store_finance_flow/storefinanceflow/export', params })
}

View File

@ -1,94 +0,0 @@
import request from '@/utils/request'
// 订单表列表
export function apiStoreOrderLists(params: any) {
return request.get({ url: '/store_order/storeorder/lists', params })
}
// 添加订单表
export function apiStoreOrderAdd(params: any) {
return request.post({ url: '/store_order/storeorder/add', params })
}
// 编辑订单表
export function apiStoreOrderEdit(params: any) {
return request.post({ url: '/store_order/storeorder/edit', params })
}
// 删除订单表
export function apiStoreOrderDelete(params: any) {
return request.post({ url: '/store_order/storeorder/delete', params })
}
// 订单表详情
export function apiStoreOrderDetail(params: any) {
return request.get({ url: '/store_order/storeorder/detail', params })
}
// 订单商品详情
export function apiStoreOrderCartInfo(params: any) {
return request.get({ url: '/store_order_cart_info/StoreOrderCartInfo/lists', params })
}
// 订单商品详情
export function apiStoreOrderCartInfoTwo(params: any) {
return request.get({ url: '/store_order_cart_info/StoreOrderCartInfo/listsTwo', params })
}
export function apiStoreOrderTitle() {
return request.get({ url: '/store_order/storeOrder/title' })
}
// 退款订单列表
export function apiStoreRefundOrderLists(params: any) {
return request.get({ url: '/store_order/StoreOrder/refund_order', params })
}
// 退款订单详情
export function apiStoreRefundOrderDetail(params: any) {
return request.get({ url: '/store_order/storeRefundOrder/detail', params })
}
// 订单退款
export function apiStoreOrderRefund(params: any) {
return request.post({ url: '/store_order/storeOrder/refund', params })
}
// 订单核销
export function apiStoreOrderWriteoffOrder(params: any) {
return request.post({ url: '/store_order/storeOrder/writeoff_order', params })
}
// 设置配送员
export function apiStoreOrderSetDelivery(params: any) {
return request.post({ url: '/store_order/storeorder/set_delivery', params })
}
// 导出配送表格
export function apiStoreOrderExport(params: any) {
return request.post({ url: '/store_order/storeorder/export', params })
}
// 导出标签
export function apiStoreOrderExportTags(params: any) {
return request.post({ url: '/store_order/storeorder/export_tags', params })
}
// 导出配送表格2
export function apiStoreOrderInfoExport(params: any) {
return request.post({ url: '/store_order_cart_info/storeordercartinfo/export', params })
}
// 生成出库表单
export function createOutboundOrder(params: any) {
return request.post({ url: '/store_order/storeorder/createOutboundOrder', params })
}
// 编辑订单商品
export function apiStoreOrderCartInfoEdit(params: any) {
return request.post({ url: '/store_order_cart_info/StoreOrderCartInfo/edit', params })
}
// 添加订单商品
export function apiStoreOrderCartInfoAdd(params: any) {
return request.post({ url: '/store_order_cart_info/StoreOrderCartInfo/add', params })
}
// 删除订单商品
export function apiStoreOrderCartInfoDel(params: any) {
return request.post({ url: '/store_order_cart_info/StoreOrderCartInfo/del', params })
}
export function apiStoreOrderSetSystemStore(params: any) {
return request.post({ url: '/store_order/storeorder/setSystemStore', params })
}

View File

@ -1,39 +0,0 @@
import request from '@/utils/request'
// 商品表列表
export function apiStoreProductLists(params: any) {
return request.get({ url: '/store_product/storeproduct/lists', params })
}
// 添加商品表
export function apiStoreProductAdd(params: any) {
return request.post({ url: '/store_product/storeproduct/add', params })
}
// 编辑商品表
export function apiStoreProductEdit(params: any) {
return request.post({ url: '/store_product/storeproduct/edit', params })
}
// 商品状态
export function apiStoreProductStatus(params: any) {
return request.post({ url: '/store_product/storeproduct/status', params })
}
// 删除商品表
export function apiStoreProductDelete(params: any) {
return request.post({ url: '/store_product/storeproduct/delete', params })
}
// 商品表详情
export function apiStoreProductDetail(params: any) {
return request.get({ url: '/store_product/storeproduct/detail', params })
}
// 复制商品到门店
export function apiStoreProductImport(params: any) {
return request.post({ url: '/store_product/storeproduct/import', params })
}
// 复制商品到门店
export function apiStoreProductCopy(params: any) {
return request.post({ url: '/store_product/storeproduct/copy', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 商品属性值表列表
export function apiStoreProductAttrValueLists(params: any) {
return request.get({ url: '/store_product_attr_value/storeproductattrvalue/lists', params })
}
// 添加商品属性值表
export function apiStoreProductAttrValueAdd(params: any) {
return request.post({ url: '/store_product_attr_value/storeproductattrvalue/add', params })
}
// 编辑商品属性值表
export function apiStoreProductAttrValueEdit(params: any) {
return request.post({ url: '/store_product_attr_value/storeproductattrvalue/edit', params })
}
// 删除商品属性值表
export function apiStoreProductAttrValueDelete(params: any) {
return request.post({ url: '/store_product_attr_value/storeproductattrvalue/delete', params })
}
// 商品属性值表详情
export function apiStoreProductAttrValueDetail(params: any) {
return request.get({ url: '/store_product_attr_value/storeproductattrvalue/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 分组报价列表
export function apiStoreProductGroupPriceLists(params: any) {
return request.get({ url: '/store_product_group_price/storeproductgroupprice/lists', params })
}
// 添加分组报价
export function apiStoreProductGroupPriceAdd(params: any) {
return request.post({ url: '/store_product_group_price/storeproductgroupprice/add', params })
}
// 编辑分组报价
export function apiStoreProductGroupPriceEdit(params: any) {
return request.post({ url: '/store_product_group_price/storeproductgroupprice/edit', params })
}
// 删除分组报价
export function apiStoreProductGroupPriceDelete(params: any) {
return request.post({ url: '/store_product_group_price/storeproductgroupprice/delete', params })
}
// 分组报价详情
export function apiStoreProductGroupPriceDetail(params: any) {
return request.get({ url: '/store_product_group_price/storeproductgroupprice/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 商品缺库存表列表
export function apiStoreProductLowStockLists(params: any) {
return request.get({ url: '/store_product_low_stock/storeproductlowstock/lists', params })
}
// 添加商品缺库存表
export function apiStoreProductLowStockAdd(params: any) {
return request.post({ url: '/store_product_low_stock/storeproductlowstock/add', params })
}
// 编辑商品缺库存表
export function apiStoreProductLowStockEdit(params: any) {
return request.post({ url: '/store_product_low_stock/storeproductlowstock/edit', params })
}
// 删除商品缺库存表
export function apiStoreProductLowStockDelete(params: any) {
return request.post({ url: '/store_product_low_stock/storeproductlowstock/delete', params })
}
// 商品缺库存表详情
export function apiStoreProductLowStockDetail(params: any) {
return request.get({ url: '/store_product_low_stock/storeproductlowstock/detail', params })
}

View File

@ -1,34 +0,0 @@
import request from '@/utils/request'
// 商品价格更改列表
export function apiStoreProductPriceLists(params: any) {
return request.get({ url: '/store_product_price/storeproductprice/lists', params })
}
// 添加商品价格更改
export function apiStoreProductPriceAdd(params: any) {
return request.post({ url: '/store_product_price/storeproductprice/add', params })
}
// 编辑商品价格更改
export function apiStoreProductPriceEdit(params: any) {
return request.post({ url: '/store_product_price/storeproductprice/edit', params })
}
// 删除商品价格更改
export function apiStoreProductPriceDelete(params: any) {
return request.post({ url: '/store_product_price/storeproductprice/delete', params })
}
// 确认改价
export function apiStoreProductPriceEnterPrice(params: any) {
return request.post({ url: '/store_product_price/storeproductprice/enterPrice', params })
}
// 商品价格更改详情
export function apiStoreProductPriceDetail(params: any) {
return request.get({ url: '/store_product_price/storeproductprice/detail', params })
}
export function apiStoreProductPriceExport(params: any) {
return request.post({ url: '/store_product_price/storeproductprice/export', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 分组报价列表
export function apiStoreProductPriceListLists(params: any) {
return request.get({ url: '/store_product_price_list/storeproductpricelist/lists', params })
}
// 添加分组报价
export function apiStoreProductPriceListAdd(params: any) {
return request.post({ url: '/store_product_price_list/storeproductpricelist/add', params })
}
// 编辑分组报价
export function apiStoreProductPriceListEdit(params: any) {
return request.post({ url: '/store_product_price_list/storeproductpricelist/edit', params })
}
// 删除分组报价
export function apiStoreProductPriceListDelete(params: any) {
return request.post({ url: '/store_product_price_list/storeproductpricelist/delete', params })
}
// 分组报价详情
export function apiStoreProductPriceListDetail(params: any) {
return request.get({ url: '/store_product_price_list/storeproductpricelist/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 计量单位列表
export function apiStoreProductUnitLists(params: any) {
return request.get({ url: '/store_product_unit/storeproductunit/lists', params })
}
// 添加计量单位
export function apiStoreProductUnitAdd(params: any) {
return request.post({ url: '/store_product_unit/storeproductunit/add', params })
}
// 编辑计量单位
export function apiStoreProductUnitEdit(params: any) {
return request.post({ url: '/store_product_unit/storeproductunit/edit', params })
}
// 删除计量单位
export function apiStoreProductUnitDelete(params: any) {
return request.post({ url: '/store_product_unit/storeproductunit/delete', params })
}
// 计量单位详情
export function apiStoreProductUnitDetail(params: any) {
return request.get({ url: '/store_product_unit/storeproductunit/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 供应商户表列表
export function apiSupplierLists(params: any) {
return request.get({ url: '/supplier/supplier/lists', params })
}
// 添加供应商户表
export function apiSupplierAdd(params: any) {
return request.post({ url: '/supplier/supplier/add', params })
}
// 编辑供应商户表
export function apiSupplierEdit(params: any) {
return request.post({ url: '/supplier/supplier/edit', params })
}
// 删除供应商户表
export function apiSupplierDelete(params: any) {
return request.post({ url: '/supplier/supplier/delete', params })
}
// 供应商户表详情
export function apiSupplierDetail(params: any) {
return request.get({ url: '/supplier/supplier/detail', params })
}

View File

@ -1,66 +0,0 @@
import request from '@/utils/request'
// 门店列表列表
export function apiSystemStoreLists(params: any) {
return request.get({ url: '/system_store/systemstore/lists', params })
}
// 添加门店列表
export function apiSystemStoreAdd(params: any) {
return request.post({ url: '/system_store/systemstore/add', params })
}
// 编辑门店列表
export function apiSystemStoreEdit(params: any) {
return request.post({ url: '/system_store/systemstore/edit', params })
}
// 删除门店列表
export function apiSystemStoreDelete(params: any) {
return request.post({ url: '/system_store/systemstore/delete', params })
}
// 门店列表详情
export function apiSystemStoreDetail(params: any) {
return request.get({ url: '/system_store/systemstore/detail', params })
}
// 根据商品来源获取门店
export function apiSourceProductStoreLists(params: any) {
return request.get({ url: '/system_store/systemstore/source_product_store_lists', params })
}
// 根据商品编辑门店库存
export function apiStoreBranchProductEdit(params: any) {
return request.post({ url: '/store_branch_product/StoreBranchProduct/edit', params })
}
// 根据商品编辑门店库存
export function apiStoreBranchProductEditPrice(params: any) {
return request.post({ url: '/store_branch_product/StoreBranchProduct/edit_price', params })
}
// 运营概况-头部统计
export function apiSystemStoreStatisticsHeader(params: any) {
return request.get({ url: '/system_store/SystemStoreStatistics/header', params })
}
// 运营概况-营业趋势
export function apiSystemStoreStatisticsOperate(params: any) {
return request.get({ url: '/system_store/SystemStoreStatistics/operate', params })
}
// 运营概况-交易/类型数据
export function apiSystemStoreStatisticsOrderChart(params: any) {
return request.get({ url: '/system_store/SystemStoreStatistics/orderChart', params })
}
// 运营概况-门店业绩
export function apiSystemStoreStatisticsStore(params: any) {
return request.get({ url: '/system_store/SystemStoreStatistics/store', params })
}
// 门店交易统计
export function apiWorkbenchStoreIndex(params: any) {
return request.get({ url: '/workbench/store_index', params })
}

View File

@ -1,35 +0,0 @@
import request from '@/utils/request'
// 门店入库操作列表
export function apiSystemStoreStorageLists(params: any) {
return request.get({ url: '/system_store_storage/systemstorestorage/lists', params })
}
// 添加门店入库操作
export function apiSystemStoreStorageAdd(params: any) {
return request.post({ url: '/system_store_storage/systemstorestorage/add', params })
}
// 编辑门店入库操作
export function apiSystemStoreStorageEdit(params: any) {
return request.post({ url: '/system_store_storage/systemstorestorage/edit', params })
}
// 删除门店入库操作
export function apiSystemStoreStorageDelete(params: any) {
return request.post({ url: '/system_store_storage/systemstorestorage/delete', params })
}
// 门店入库操作详情
export function apiSystemStoreStorageDetail(params: any) {
return request.get({ url: '/system_store_storage/systemstorestorage/detail', params })
}
// 门店一键确认入库
export function apiSystemStoreStorageBatchConfirm(params: any) {
return request.post({ url: '/system_store_storage/systemstorestorage/batchConfirm', params })
}
export function apiSystemStoreStorageRollback(params: any) {
return request.post({ url: '/system_store_storage/systemstorestorage/rollback', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 用户账单表列表
export function apiUserBillLists(params: any) {
return request.get({ url: '/user_bill/userbill/lists', params })
}
// 添加用户账单表
export function apiUserBillAdd(params: any) {
return request.post({ url: '/user_bill/userbill/add', params })
}
// 编辑用户账单表
export function apiUserBillEdit(params: any) {
return request.post({ url: '/user_bill/userbill/edit', params })
}
// 删除用户账单表
export function apiUserBillDelete(params: any) {
return request.post({ url: '/user_bill/userbill/delete', params })
}
// 用户账单表详情
export function apiUserBillDetail(params: any) {
return request.get({ url: '/user_bill/userbill/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 用户标签表列表
export function apiUserLabelLists(params: any) {
return request.get({ url: '/user_label/userlabel/lists', params })
}
// 添加用户标签表
export function apiUserLabelAdd(params: any) {
return request.post({ url: '/user_label/userlabel/add', params })
}
// 编辑用户标签表
export function apiUserLabelEdit(params: any) {
return request.post({ url: '/user_label/userlabel/edit', params })
}
// 删除用户标签表
export function apiUserLabelDelete(params: any) {
return request.post({ url: '/user_label/userlabel/delete', params })
}
// 用户标签表详情
export function apiUserLabelDetail(params: any) {
return request.get({ url: '/user_label/userlabel/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 用户商品储存列表
export function apiUserProductStorageLists(params: any) {
return request.get({ url: '/user_product_storage/userproductstorage/lists', params })
}
// 添加用户商品储存
export function apiUserProductStorageAdd(params: any) {
return request.post({ url: '/user_product_storage/userproductstorage/add', params })
}
// 编辑用户商品储存
export function apiUserProductStorageEdit(params: any) {
return request.post({ url: '/user_product_storage/userproductstorage/edit', params })
}
// 删除用户商品储存
export function apiUserProductStorageDelete(params: any) {
return request.post({ url: '/user_product_storage/userproductstorage/delete', params })
}
// 用户商品储存详情
export function apiUserProductStorageDetail(params: any) {
return request.get({ url: '/user_product_storage/userproductstorage/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 用户商品储存操作日志列表
export function apiUserProductStorageLogLists(params: any) {
return request.get({ url: '/user_product_storage_log/userproductstoragelog/lists', params })
}
// 添加用户商品储存操作日志
export function apiUserProductStorageLogAdd(params: any) {
return request.post({ url: '/user_product_storage_log/userproductstoragelog/add', params })
}
// 编辑用户商品储存操作日志
export function apiUserProductStorageLogEdit(params: any) {
return request.post({ url: '/user_product_storage_log/userproductstoragelog/edit', params })
}
// 删除用户商品储存操作日志
export function apiUserProductStorageLogDelete(params: any) {
return request.post({ url: '/user_product_storage_log/userproductstoragelog/delete', params })
}
// 用户商品储存操作日志详情
export function apiUserProductStorageLogDetail(params: any) {
return request.get({ url: '/user_product_storage_log/userproductstoragelog/detail', params })
}

View File

@ -1,31 +0,0 @@
import request from '@/utils/request'
// 用户充值表列表
export function apiUserRechargeLists(params: any) {
return request.get({ url: '/user_recharge/userrecharge/lists', params })
}
// 添加用户充值表
export function apiUserRechargeAdd(params: any) {
return request.post({ url: '/user_recharge/userrecharge/add', params })
}
// 编辑用户充值表
export function apiUserRechargeEdit(params: any) {
return request.post({ url: '/user_recharge/userrecharge/edit', params })
}
// 删除用户充值表
export function apiUserRechargeDelete(params: any) {
return request.post({ url: '/user_recharge/userrecharge/delete', params })
}
// 用户充值表详情
export function apiUserRechargeDetail(params: any) {
return request.get({ url: '/user_recharge/userrecharge/detail', params })
}
// 充值订单退款
export function apiUserRechargeRefund(params: any) {
return request.post({ url: '/user_recharge/userrecharge/refund', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 会员类型列表
export function apiUserShipLists(params: any) {
return request.get({ url: '/user_ship/usership/lists', params })
}
// 添加会员类型
export function apiUserShipAdd(params: any) {
return request.post({ url: '/user_ship/usership/add', params })
}
// 编辑会员类型
export function apiUserShipEdit(params: any) {
return request.post({ url: '/user_ship/usership/edit', params })
}
// 删除会员类型
export function apiUserShipDelete(params: any) {
return request.post({ url: '/user_ship/usership/delete', params })
}
// 会员类型详情
export function apiUserShipDetail(params: any) {
return request.get({ url: '/user_ship/usership/detail', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 仓库信息列表
export function apiWarehouseLists(params: any) {
return request.get({ url: '/warehouse/warehouse/lists', params })
}
// 添加仓库信息
export function apiWarehouseAdd(params: any) {
return request.post({ url: '/warehouse/warehouse/add', params })
}
// 编辑仓库信息
export function apiWarehouseEdit(params: any) {
return request.post({ url: '/warehouse/warehouse/edit', params })
}
// 删除仓库信息
export function apiWarehouseDelete(params: any) {
return request.post({ url: '/warehouse/warehouse/delete', params })
}
// 仓库信息详情
export function apiWarehouseDetail(params: any) {
return request.get({ url: '/warehouse/warehouse/detail', params })
}

View File

@ -1,46 +0,0 @@
import request from '@/utils/request'
// 商品仓储订单列表
export function apiWarehouseOrderLists(params: any) {
return request.get({ url: '/warehouse_order/warehouseorder/lists', params })
}
// 添加商品仓储订单
export function apiWarehouseOrderAdd(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/add', params })
}
// 添加出库单
export function apiWarehouseOrderOutbound(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/outbound', params })
}
// 编辑商品仓储订单
export function apiWarehouseOrderEdit(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/edit', params })
}
// 删除商品仓储订单
export function apiWarehouseOrderDelete(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/delete', params })
}
// 商品仓储订单详情
export function apiWarehouseOrderDetail(params: any) {
return request.get({ url: '/warehouse_order/warehouseorder/detail', params })
}
// 导出商品仓储入库订单
export function apiWarehouseOrderRentryExport(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/rentry_export', params })
}
// 导出商品仓储出库订单
export function apiWarehouseOrderExport(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/export', params })
}
// 编辑商品仓储订单
export function apiWarehouseOrderUpdateEdit(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/update_edit', params })
}
// 导出商品标签
export function apiWarehouseOrderExportTags(params: any) {
return request.post({ url: '/warehouse_order/warehouseorder/export_tags', params })
}

View File

@ -1,43 +0,0 @@
import request from '@/utils/request'
// 商品仓储信息列表
export function apiWarehouseProductLists(params: any) {
return request.get({ url: '/warehouse_product/warehouseproduct/lists', params })
}
// 添加商品仓储信息
export function apiWarehouseProductAdd(params: any) {
return request.post({ url: '/warehouse_product/warehouseproduct/add', params })
}
// 编辑商品仓储信息
export function apiWarehouseProductEdit(params: any) {
return request.post({ url: '/warehouse_product/warehouseproduct/edit', params })
}
// 删除商品仓储信息
export function apiWarehouseProductDelete(params: any) {
return request.post({ url: '/warehouse_product/warehouseproduct/delete', params })
}
// 商品仓储信息详情
export function apiWarehouseProductDetail(params: any) {
return request.get({ url: '/warehouse_product/warehouseproduct/detail', params })
}
// 商品仓储信息确认
export function apiWarehouseProductEnter(params: any) {
return request.post({ url: '/warehouse_product/warehouseproduct/enter', params })
}
//商品结算
export function apiWarehouseProductSettlement(params: any) {
return request.post({ url: '/warehouse_product/warehouseproduct/settlement', params })
}
/**
*
* @param params
* @returns
*/
export function apiWarehouseProductSetNums(params: any) {
return request.post({ url: '/warehouse_product/warehouseproduct/set_nums', params })
}

View File

@ -1,26 +0,0 @@
import request from '@/utils/request'
// 仓库商品退货处理列表
export function apiWarehouseProductReturnLists(params: any) {
return request.get({ url: '/warehouse_product_return/warehouseproductreturn/lists', params })
}
// 添加仓库商品退货处理
export function apiWarehouseProductReturnAdd(params: any) {
return request.post({ url: '/warehouse_product_return/warehouseproductreturn/add', params })
}
// 编辑仓库商品退货处理
export function apiWarehouseProductReturnEdit(params: any) {
return request.post({ url: '/warehouse_product_return/warehouseproductreturn/edit', params })
}
// 删除仓库商品退货处理
export function apiWarehouseProductReturnDelete(params: any) {
return request.post({ url: '/warehouse_product_return/warehouseproductreturn/delete', params })
}
// 仓库商品退货处理详情
export function apiWarehouseProductReturnDetail(params: any) {
return request.get({ url: '/warehouse_product_return/warehouseproductreturn/detail', params })
}

View File

@ -1,41 +0,0 @@
import request from '@/utils/request'
// 仓库商品存储列表
export function apiWarehouseProductStoregeLists(params: any) {
return request.get({ url: '/warehouse_product_storege/warehouseproductstorege/lists', params })
}
// 添加仓库商品存储
export function apiWarehouseProductStoregeAdd(params: any) {
return request.post({ url: '/warehouse_product_storege/warehouseproductstorege/add', params })
}
// 编辑仓库商品存储
export function apiWarehouseProductStoregeEdit(params: any) {
return request.post({ url: '/warehouse_product_storege/warehouseproductstorege/edit', params })
}
// 删除仓库商品存储
export function apiWarehouseProductStoregeDelete(params: any) {
return request.post({
url: '/warehouse_product_storege/warehouseproductstorege/delete',
params
})
}
// 仓库商品存储详情
export function apiWarehouseProductStoregeDetail(params: any) {
return request.get({ url: '/warehouse_product_storege/warehouseproductstorege/detail', params })
}
/**
*
* @param params
* @returns
*/
export function apiWarehouseProductStoregeVerify(params: any) {
return request.post({
url: '/warehouse_product_storege/warehouseproductstorege/verify',
params
})
}

View File

@ -1,6 +0,0 @@
import request from '@/utils/request'
// 微信支付查询
export function apiWechatQuery(params: any) {
return request.get({ url: '/index/wechatQuery', params })
}

View File

@ -19,60 +19,3 @@ export function apiGetProductRanking(params: any) {
export function apiGetUserBasic(params: any) {
return request.get({ url: '/workbench/get_user_basic', params })
}
// 用户趋势
export function apiGetUserTrend(params: any) {
return request.get({ url: '/workbench/get_user_trend', params })
}
// 交易趋势
export function apiGetBottomTrade(params: any) {
return request.get({ url: '/workbench/bottom_trade', params })
}
// 当日订单金额
export function apiGetTopTrade(params: any) {
return request.get({ url: '/workbench/top_trade', params })
}
// 实时订单商品合计统计
export function product_order(params: any) {
return request.get({ url: '/workbench/product_order', params })
}
// 实时订单商品合计统计
export function product_month_order(params: any) {
return request.get({ url: '/workbench/product_month_order', params })
}
// 实时订单商品合计统计
export function store_order_cart_info_curve(params: any) {
return request.get({ url: '/store_order_cart_info/StoreOrderCartInfo/curve', params })
}
// 仓库头部统计
export function total_warehouse(params: any) {
return request.get({ url: '/workbench/total_warehouse', params })
}
// 仓库列表统计
export function warehouse_list(params: any) {
return request.get({ url: '/workbench/warehouse_list', params })
}
// 门店和仓库列表统计
export function total_warehouse_list(params: any) {
return request.get({ url: '/workbench/total_warehouse_list', params })
}
// 已结算 未结算列表统计
export function total_warehouse_product_list(params: any) {
return request.get({ url: '/workbench/total_warehouse_product_list', params })
}
// 负库存列表统计
export function negative_inventory(params: any) {
return request.get({ url: '/workbench/negative_inventory', params })
}
// 负库存列表统计
export function update_negative_zero(params: any) {
return request.get({ url: '/workbench/update_negative_zero', params })
}
// 负库存列表统计
export function stock_product_price(params: any) {
return request.get({ url: '/workbench/stock_product_price', params })
}

View File

@ -1,80 +0,0 @@
<template>
<div>
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="商品名称" prop="store_name">
<el-input class="w-[200px]" v-model="queryParams.store_name" @keydown.enter="productList" clearable
placeholder="请输入商品名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
<div class="mt-4" v-loading="pager.loading">
<el-table :data="pager.lists" @selection-change="handleSelectionChange" :height="300">
<el-table-column type="selection" width="55" />
<el-table-column label="商品ID" prop="id" show-overflow-tooltip />
<el-table-column label="商品图片" prop="image" min-width="80">
<template #default="{ row }">
<el-image style="width: 50px; height: 50px" :src="row.image" :preview-teleported="true" />
</template>
</el-table-column>
<el-table-column label="商品名称" prop="store_name" min-width="200" show-overflow-tooltip />
<el-table-column label="分类" prop="cate_name" min-width="120" show-overflow-tooltip />
<el-table-column label="单位" prop="unit_name" min-width="80" show-overflow-tooltip />
<el-table-column label="商品价格" prop="price" min-width="100" show-overflow-tooltip />
<el-table-column label="仓库库存" prop="stock" min-width="100" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
<el-button class="w-full mt-4" type="primary" @click="bindStore">添加商品</el-button>
</div>
</template>
<script lang="ts" setup name="systemStoreLists">
import { usePaging } from '@/hooks/usePaging'
import { apiStoreProductLists } from '@/api/store_product'
import { ElMessage } from 'element-plus'
import { defineProps } from 'vue';
const props = defineProps({
activityZoneFormId: Number
});
//
const queryParams = reactive({
store_name: '',
is_warehouse: 1,
activity_zone_form_id: props.activityZoneFormId
})
//
const selectData = ref<any[]>([])
const datas = ref()
//
const handleSelectionChange = (val : any[]) => {
selectData.value = val.map(({ id }) => id)
}
const productList = (e) => {
getLists()
e.preventDefault();
}
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiStoreProductLists,
params: queryParams
})
getLists()
const emits = defineEmits(['onBindStore'])
//
const bindStore = () => {
const list = pager.lists.filter((item) => selectData.value.includes(item.id))
if (!list.length) return ElMessage.error('请先选择商品')
emits('onBindStore', list, queryParams.activity_zone_form_id)
}
</script>

View File

@ -1,111 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="商品名称" prop="store_name">
<el-input class="w-[280px]" v-model="queryParams.store_name" clearable placeholder="请输入商品名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['activity_zone/add']" type="primary" @click="showProductModal()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="ID" prop="id" show-overflow-tooltip />
<el-table-column label="商品ID" prop="product_id" show-overflow-tooltip />
<el-table-column label="商品" prop="store_name" show-overflow-tooltip />
<el-table-column label="单位" prop="unit_name" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['activity_zone/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<el-dialog v-model="showProduct" title="选择商品" width="70%">
<productPop :activityZoneFormId="queryParams.form_id" @onBindStore="onBindProduct"></productPop>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="activityZoneLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiActivityZoneLists, apiActivityZoneDelete, apiActivityZoneAdd } from '@/api/activity_zone'
import feedback from '@/utils/feedback'
import productPop from './component/productPop.vue'
const showProduct = ref(false) //
const route = useRoute()
//
const queryParams = reactive({
form_id: route.query.id,
store_name: '',
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val : any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const onBindProduct = async(e: any[], formId: any) => {
let data = {
form_id: formId,
product_ids: []
}
e.forEach((item: any) => {
if (!data.product_ids.find((t: any) => t.id == item.id)) {
data.product_ids.push(item.id)
}
})
await apiActivityZoneAdd(data)
showProduct.value = false
getLists()
}
const showProductModal = () => {
showProduct.value = true
}
//
const { dictData } = useDictData('activity_zone')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiActivityZoneLists,
params: queryParams
})
//
const handleDelete = async (id : number | any[]) => {
await feedback.confirm('确定要删除?')
await apiActivityZoneDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,164 +0,0 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择类型">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.activity_zone" :key="index" :label="item.remark"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="表单标题" prop="title">
<el-input v-model="formData.title" clearable placeholder="请输入表单标题" />
</el-form-item>
<el-form-item label="商品分类" prop="cate_ids">
<el-cascader class="w-[500px]" v-model="formData.cate_ids" filterable clearable
:before-filter="beforeFilter" :props="props" placeholder="请选择商品分类" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input :rows="3" type="textarea" v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="categoryEdit">
import type { FormInstance } from 'element-plus'
import { apiStoreCategoryLists } from '@/api/store_category'
import { apiActivityZoneFormAdd, apiActivityZoneFormEdit } from '@/api/activity_zone_form'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑表单' : '新增表单'
})
//
const formData = reactive({
type: '',
title: '',
cate_ids: [],
remark: '',
})
let resolves
let nodes
const flag = ref(false)
let name
const beforeFilter = (value) => {
name = value
flag.value = true
props.lazyLoad(nodes, resolves)
return false
}
const props = {
value: 'id',
label: 'name',
lazy: true,
multiple: true,
lazyLoad(node, resolve) {
if (!resolves) resolves = resolve
if (!nodes) nodes = node
const pid = node.value || 0
let data = {}
if (flag.value) {
data = { name: name }
if (!name) {
data = {
pid: pid,
page_size: 10000
}
}
} else {
data = {
pid: pid,
page_size: 10000
}
}
apiStoreCategoryLists({
...data
}).then((res) => {
resolve(
res.lists.map((item : any) => {
item.leaf = item.is_children == 0
flag.value = false
return item
})
)
})
}
}
//
const formRules = reactive<any>({
type: [
{
required: true,
message: '请输入表单类型',
trigger: ['blur']
}
],
title: [
{
required: true,
message: '请输入表单名称',
trigger: ['blur']
}
],
cate_ids: [
{
required: true,
message: '请输入商品分类',
trigger: ['blur']
}
]
})
//
const setFormData = async (data : Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit' ? await apiActivityZoneFormEdit(data) : await apiActivityZoneFormAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData
})
</script>

View File

@ -1,142 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item class="w-[180px]" label="类型" prop="type">
<el-select v-model="queryParams.type" clearable placeholder="请选择类型">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.activity_zone" :key="index" :label="item.remark"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="表单名称" prop="title">
<el-input class="w-[280px]" v-model="queryParams.title" clearable placeholder="请输入表单名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['activity_zone/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column label="ID" prop="id" show-overflow-tooltip />
<el-table-column label="类型" prop="type">
<template #default="{ row }">
<div v-for="(item, index) in dictData.activity_zone">
<div v-if="item.value == row.type">{{item.remark}}</div>
</div>
</template>
</el-table-column>
<el-table-column label="标题" prop="title" show-overflow-tooltip />
<el-table-column label="商品分类" prop="cate_names" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="180" fixed="right">
<template #default="{ row }">
<router-link :to="{
path: 'activity_zone_details',
query: {
id: row.id
}
}">
商品列表
</router-link>
<el-button v-perms="['activity_zone/export']" type="primary" link
@click="handleExport(row)">
导出
</el-button>
<el-button v-perms="['activity_zone/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="activityZoneLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiActivityZoneFormLists, apiActivityZoneFormDelete, apiActivityZoneFormAdd, apiActivityZoneFormExport } from '@/api/activity_zone_form'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import productPop from './component/productPop.vue'
import EditPopup from './edit.vue'
const showProduct = ref(false) //
const showRemark = ref(false)
const showEdit = ref(false)
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const queryParams = reactive({
type: '',
title: '',
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val : any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('activity_zone')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiActivityZoneFormLists,
params: queryParams
})
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
const handleEdit = async (data : any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id : number | any[]) => {
await feedback.confirm('确定要删除?')
await apiActivityZoneFormDelete({ id })
getLists()
}
const handleExport = (row : any) => {
showRemark.value = false
apiActivityZoneFormExport({
id: row.id
}).then((res) => {
window.open(res.url, '_blank')
ElMessage.success('导出成功')
})
}
getLists()
</script>

View File

@ -1,110 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
<el-form-item label="模型" prop="model">
<el-input v-model="formData.model" clearable placeholder="请输入模型" :readonly="true"/>
</el-form-item>
<el-form-item label="关联id" prop="link_id">
<el-input v-model="formData.link_id" clearable placeholder="请输入关联id" :readonly="true"/>
</el-form-item>
<el-form-item label="数量" prop="nums">
<el-input v-model="formData.nums" clearable placeholder="请输入数量" :readonly="true"/>
</el-form-item>
<el-form-item label="类型" prop="pm">
<el-select class="flex-1" v-model="formData.pm" clearable placeholder="请选择类型" :disabled="true">
<el-option
v-for="(item, index) in dictData.business_status"
:key="index"
:label="item.name"
:value="parseInt(item.value)"
/>
</el-select>
</el-form-item>
<el-form-item label="请求" prop="url">
<el-input v-model="formData.url" clearable placeholder="请输入请求" :readonly="true"/>
</el-form-item>
<el-form-item label="备注" prop="mark">
<el-input v-model="formData.mark" clearable placeholder="请输入备注" :readonly="true"/>
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="changeLogDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiChangeLogAdd, apiChangeLogEdit, apiChangeLogDetail } from '@/api/change_log'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
model: '',
link_id: '',
nums: '',
pm: '',
url: '',
mark: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiChangeLogDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,132 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="模型" prop="model">
<el-input v-model="formData.model" clearable placeholder="请输入模型" :readonly="false"/>
</el-form-item>
<el-form-item label="关联id" prop="link_id">
<el-input v-model="formData.link_id" clearable placeholder="请输入关联id" :readonly="false"/>
</el-form-item>
<el-form-item label="数量" prop="nums">
<el-input v-model="formData.nums" clearable placeholder="请输入数量" :readonly="false"/>
</el-form-item>
<el-form-item label="类型" prop="pm">
<el-select class="flex-1" v-model="formData.pm" clearable placeholder="请选择类型" :disabled="false">
<el-option
v-for="(item, index) in dictData.business_status"
:key="index"
:label="item.name"
:value="parseInt(item.value)"
/>
</el-select>
</el-form-item>
<el-form-item label="请求" prop="url">
<el-input v-model="formData.url" clearable placeholder="请输入请求" :readonly="false"/>
</el-form-item>
<el-form-item label="备注" prop="mark">
<el-input v-model="formData.mark" clearable placeholder="请输入备注" :readonly="false"/>
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="changeLogEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiChangeLogAdd, apiChangeLogEdit, apiChangeLogDetail } from '@/api/change_log'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑数据变更记录' : '新增数据变更记录'
})
//
const formData = reactive({
id: '',
model: '',
link_id: '',
nums: '',
pm: '',
url: '',
mark: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiChangeLogDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiChangeLogEdit(data)
: await apiChangeLogAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,149 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="模型" prop="model">
<el-input
class="w-[280px]"
v-model="queryParams.model"
clearable
placeholder="请输入模型"
/>
</el-form-item>
<el-form-item label="关联id" prop="link_id">
<el-input
class="w-[280px]"
v-model="queryParams.link_id"
clearable
placeholder="请输入关联id"
/>
</el-form-item>
<el-form-item class="w-[180px]" label="类型" prop="pm">
<el-select v-model="queryParams.pm" clearable placeholder="请选择类型">
<el-option label="全部" value=""></el-option>
<el-option label="其他" value="0"></el-option>
<el-option label="增加" value="1"></el-option>
<el-option label="减少" value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="请求" prop="url">
<el-input
class="w-[280px]"
v-model="queryParams.url"
clearable
placeholder="请输入请求"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column label="ID" prop="id" show-overflow-tooltip width="100" />
<el-table-column
label="人员"
prop="admin_name"
show-overflow-tooltip
width="100"
/>
<el-table-column label="模型" prop="model" show-overflow-tooltip width="240" />
<el-table-column
label="关联id"
prop="link_id"
show-overflow-tooltip
width="100"
/>
<el-table-column label="数量" prop="nums" show-overflow-tooltip width="80" />
<el-table-column label="类型" prop="pm" width="80">
<template #default="{ row }">
<span v-if="row.pm === 1">增加</span>
<span v-if="row.pm === -1">减少</span>
<span v-if="row.pm === 0">其他</span>
</template>
</el-table-column>
<el-table-column label="请求" prop="url" show-overflow-tooltip width="300" />
<el-table-column label="备注" prop="mark" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
</div>
</template>
<script lang="ts" setup name="changeLogLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiChangeLogLists, apiChangeLogDelete } from '@/api/change_log'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
model: '',
link_id: '',
nums: '',
pm: '',
url: '',
mark: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('business_status')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiChangeLogLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiChangeLogDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,103 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
<el-form-item label="配送员uid" prop="uid">
<el-input v-model="formData.uid" clearable placeholder="请输入配送员uid" :readonly="true"/>
</el-form-item>
<el-form-item label="配送员名称" prop="nickname">
<el-input v-model="formData.nickname" clearable placeholder="请输入配送员名称" :readonly="true"/>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="formData.phone" clearable placeholder="请输入手机号码" :readonly="true"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status" placeholder="请选择状态" :disabled="true">
<el-radio
v-for="(item, index) in dictData.show_status"
:key="index"
:label="parseInt(item.value)"
>
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="deliveryServiceDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiDeliveryServiceAdd, apiDeliveryServiceEdit, apiDeliveryServiceDetail } from '@/api/delivery_service'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
uid: '',
nickname: '',
phone: '',
status: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiDeliveryServiceDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,139 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="配送员uid" prop="uid">
<el-input v-model="formData.uid" clearable placeholder="请输入配送员uid" :readonly="false"/>
</el-form-item>
<el-form-item label="配送员名称" prop="nickname">
<el-input v-model="formData.nickname" clearable placeholder="请输入配送员名称" :readonly="false"/>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="formData.phone" clearable placeholder="请输入手机号码" :readonly="false"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status" placeholder="请选择状态" :disabled="false">
<el-radio
v-for="(item, index) in dictData.show_status"
:key="index"
:label="parseInt(item.value)"
>
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="deliveryServiceEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiDeliveryServiceAdd, apiDeliveryServiceEdit, apiDeliveryServiceDetail } from '@/api/delivery_service'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑配送员表' : '新增配送员表'
})
//
const formData = reactive({
id: '',
uid: '',
nickname: '',
phone: '',
status: '',
})
//
const formRules = reactive<any>({
uid: [{
required: true,
message: '请输入配送员uid',
trigger: ['blur']
}],
nickname: [{
required: true,
message: '请输入配送员名称',
trigger: ['blur']
}],
phone: [{
required: true,
message: '请输入手机号码',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiDeliveryServiceDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiDeliveryServiceEdit(data)
: await apiDeliveryServiceAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,154 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="配送员uid" prop="uid">
<el-input class="w-[280px]" v-model="queryParams.uid" clearable placeholder="请输入配送员uid" />
</el-form-item>
<el-form-item label="配送员名称" prop="nickname">
<el-input class="w-[280px]" v-model="queryParams.nickname" clearable placeholder="请输入配送员名称" />
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input class="w-[280px]" v-model="queryParams.phone" clearable placeholder="请输入手机号码" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status" clearable placeholder="请选择状态">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.show_status"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['delivery_service.delivery_service/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['delivery_service.delivery_service/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="id" prop="id" show-overflow-tooltip />
<el-table-column label="配送员uid" prop="uid" show-overflow-tooltip />
<el-table-column label="配送员名称" prop="nickname" show-overflow-tooltip />
<el-table-column label="手机号码" prop="phone" show-overflow-tooltip />
<el-table-column label="状态" prop="status">
<template #default="{ row }">
<dict-value :options="dictData.show_status" :value="row.status" />
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['delivery_service.delivery_service/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['delivery_service.delivery_service/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="deliveryServiceLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiDeliveryServiceLists, apiDeliveryServiceDelete } from '@/api/delivery_service'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
uid: '',
nickname: '',
phone: '',
status: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('show_status')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiDeliveryServiceLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiDeliveryServiceDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,95 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" label-width="80px">
<el-row>
<el-col :span="6">
<el-form-item label="随便搜">
<el-select class="flex-1" v-model="queryParams.status" clearable placeholder="请选择商品状态">
<el-option label="销售中" :value="0" />
<el-option label="仓库中" :value="0" />
<el-option label="已售罄" :value="0" />
<el-option label="库存预警" :value="0" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="随便搜" prop="nature">
<el-input v-model="queryParams.status" clearable placeholder="请输入商品名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column label="入账门店" prop="progress" show-overflow-tooltip />
<el-table-column label="入账时间" prop="progress" show-overflow-tooltip />
<el-table-column label="应入帐金额" prop="progress" show-overflow-tooltip />
<el-table-column label="已入账金额" prop="progress" show-overflow-tooltip />
<el-table-column label="未入账金额" prop="progress" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button type="primary" link @click="handleEdit(row)">
起码子
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<!-- <detailPopup ref="editRef" /> -->
</div>
</template>
<script lang="ts" setup name="manageProjectLists">
import { ref, reactive } from "vue"
import { usePaging } from '@/hooks/usePaging'
// import { apiGoodsListLists, apiStatus, apiGoodsTypeLists } from '@/api/goodsList'
// import detailPopup from './detail.vue'
// const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
// const showDetail = ref(false)
//
const queryParams = reactive({
status: ""
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { pager, getLists, resetParams, resetPage } = usePaging({
// fetchFun: apiGoodsListLists,
params: queryParams
})
//
const handleEdit = async (data: any) => {
// editRef.value?.open()
}
// getLists()
</script>

View File

@ -1,232 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="门店" prop="store_id">
<!-- <el-input class="w-[280px]" v-model="queryParams.store_name" clearable placeholder="请输入门店id" /> -->
<el-select
v-model="queryParams.store_id"
filterable
remote
reserve-keyword
placeholder="输入门店名称搜索"
remote-show-suffix
:remote-method="remoteMethod"
:loading="storeloading"
style="width: 240px"
@change="resetPage"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="用户" prop="uid">
<!-- <el-input class="w-[280px]" v-model="queryParams.uid" clearable placeholder="请输入用户id" /> -->
<el-select
v-model="queryParams.user_id"
filterable
remote
reserve-keyword
placeholder="输入用户名称搜索"
remote-show-suffix
:remote-method="remoteMethodUser"
:loading="userloading"
style="width: 240px"
@change="resetPage"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="`${item.nickname} (ID:${item.id})`"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="时间" prop="create_time">
<el-date-picker
v-model="startEndTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
unlink-panels
:shortcuts="shortcuts"
@change="resetPage"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<!-- <el-button v-perms="['store_finance_flow.store_finance_flow/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['store_finance_flow.store_finance_flow/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button> -->
<div>
<el-table
:data="pager.lists"
@selection-change="handleSelectionChange"
row-key="id"
:tree-props="{ children: 'list' }"
>
<el-table-column label="ID" prop="id" min-width="100" show-overflow-tooltip />
<el-table-column
label="交易单号"
prop="order_sn"
min-width="120"
show-overflow-tooltip
/>
<el-table-column
label="交易时间"
prop="create_time"
min-width="120"
show-overflow-tooltip
/>
<el-table-column
label="金额"
prop="number"
min-width="100"
show-overflow-tooltip
>
<template #default="{ row }">
<span v-if="row.number > 0" class="text-success">{{ row.number }}</span>
<span v-else class="text-danger">{{ row.number }}</span>
</template>
</el-table-column>
<el-table-column label="门店名称" prop="store_name" show-overflow-tooltip />
<el-table-column
label="用户"
prop="nickname"
min-width="80"
show-overflow-tooltip
/>
<el-table-column
label="收益/扣除"
prop="financial_type_name"
show-overflow-tooltip
/>
<el-table-column label="支付方式" prop="pay_type_name" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
<details-popup ref="detailsRef" :dict-data="dictData" />
</div>
</template>
<script lang="ts" setup name="storeFinanceFlowLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiStoreFinanceFlowLists, apiStoreFinanceFlowDelete } from '@/api/store_finance_flow'
import { apiSystemStoreLists } from '@/api/system_store'
import { apiUserLists } from '@/api/user'
import shortcuts from '@/utils/shortcuts'
import moment from 'moment'
//
const showEdit = ref(false)
//
const queryParams = reactive({
store_name: '',
store_id: '',
user_id: '',
create_time: '',
financial_type: 3,
financial_pm: 1,
start_time: '',
end_time: ''
})
const startEndTime = ref([])
watch(
() => startEndTime.value,
(n, o) => {
queryParams.start_time = moment(n[0]).format('YYYY-MM-DD') + ' 00:00:00'
queryParams.end_time = moment(n[1]).format('YYYY-MM-DD') + ' 23:59:59'
},
{ deep: true }
)
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiStoreFinanceFlowLists,
params: queryParams
})
getLists()
const storeloading = ref(false)
const storeList = ref([])
const remoteMethod = (e = '') => {
storeloading.value = true
apiSystemStoreLists({
name: e,
page_size: 50
})
.then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
const userloading = ref(false)
const userList = ref([])
const remoteMethodUser = (e = '') => {
userloading.value = true
apiUserLists({
nickname: e,
page_size: 50
})
.then((res) => {
userList.value = res.lists
setTimeout(() => {
userloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
userloading.value = false
}, 300)
})
}
</script>

View File

@ -1,91 +0,0 @@
<template>
<el-drawer v-model="showDialog" title="还款明细" :size="1200">
<el-table :data="pager.lists">
<el-table-column label="ID" prop="id" show-overflow-tooltip />
<el-table-column label="门店" prop="store_name" show-overflow-tooltip />
<el-table-column label="用户昵称" prop="nickname" show-overflow-tooltip />
<el-table-column label="应收金额" prop="total_debt" show-overflow-tooltip />
<el-table-column label="实收金额" prop="pay_debt" show-overflow-tooltip />
<el-table-column label="剩余欠款" prop="surplus_debt" show-overflow-tooltip />
<el-table-column label="收款人" prop="recipient" show-overflow-tooltip />
<el-table-column label="支付方式" prop="pay_type_name" show-overflow-tooltip />
<el-table-column label="收款证明" prop="file" min-width="80">
<template #default="{ row }">
<el-image
style="width: 50px; height: 50px"
:src="row.file"
:preview-teleported="true"
/>
</template>
</el-table-column>
<el-table-column label="备注" prop="mark" show-overflow-tooltip />
<el-table-column label="还款时间" prop="create_time" show-overflow-tooltip />
</el-table>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-drawer>
</template>
<script lang="ts" setup name="storeOrderDETAILS">
import { ElMessage, type FormInstance } from 'element-plus'
import { timeFormat } from '@/utils/util'
import { usePaging } from '@/hooks/usePaging'
import { apiAccountsReceivableRecord } from '@/api/accounts_receivable'
import moment from 'moment'
import type { PropType } from 'vue'
import feedback from '@/utils/feedback'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const showDialog = ref(false)
const mode = ref('add')
//
const formData = ref({
accounts_receivable_id: ''
})
//
const setFormData = async (data: Record<any, any>) => {
formData.value = { ...data }
queryParams.accounts_receivable_id = data.id
getLists()
}
const getDetail = async (row: Record<string, any>) => {
formData.value.accounts_receivable_id = row.order_id
// const data = await apiStoreOrderDetail({
// id: row.id
// })
// setFormData(data)
}
const queryParams = reactive({
accounts_receivable_id: ''
})
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiAccountsReceivableRecord,
params: queryParams
})
const open = () => {
showDialog.value = true
}
const close = () => {
showDialog.value = false
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,130 +0,0 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" title="账单还款" :async="true" width="650px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="用户:" prop="nickname">
{{formData.nickname}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="门店:" prop="store_name">
{{formData.store_name}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="应收金额:" prop="surplus_debt">
{{formData.surplus_debt}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收款人:" prop="recipient">
<el-input v-model="formData.recipient" type="input" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="收款方式:" prop="pay_type">
<el-select v-model="formData.pay_type" placeholder="请选择付款方式">
<el-option label="现金" :value="1" />
<el-option label="微信支付" :value="2" />
<el-option label="支付宝支付" :value="3" />
<el-option label="对公账号" :value="4" />
<el-option label="其他" :value="5" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实收金额:" prop="pay_debt">
<el-input v-model="formData.pay_debt" type="input" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="图片凭证:" prop="file">
<material-picker v-model="formData.file" :limit="1" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注:" prop="mark">
<el-input v-model="formData.mark" type="input" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeFinanceFlowEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiAccountsReceivableEdit } from '@/api/accounts_receivable'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
accounts_receivable_id: 0,
nickname: '',
store_name: '',
surplus_debt: '',
pay_type: '',
file: '',
recipient: '',
pay_debt: '',
mark: '',
})
//
const setFormData = async (data : Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
formData.accounts_receivable_id = data.id
formData.pay_debt = data.surplus_debt
}
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
await apiAccountsReceivableEdit(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData
})
</script>

View File

@ -1,208 +0,0 @@
<template>
<div>
<el-card shadow="never" class="!border-none mb-4">
<div class="mb-6 flex justify-between items-center">
<span class="text-2xl">商品概况</span>
</div>
<div class="flex flex-wrap">
<div class="w-1/5 flex mb-6" v-for="(item, index) in statisticsData.list" :key="index">
<div>
<div class="text-info">{{ item.store_name }}</div>
<div class="">欠款:{{ item.surplus_debt }}</div>
</div>
</div>
</div>
<el-pagination background layout="prev, pager, next" :total="statisticsData.count" @change="changePage" v-if="statisticsData.count > 10"
style="margin-right: 56px; margin-bottom: 11px; float: right" />
</el-card>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="门店" prop="store_id">
<!-- <el-input class="w-[280px]" v-model="queryParams.store_name" clearable placeholder="请输入门店id" /> -->
<el-select v-model="queryParams.store_id" filterable remote reserve-keyword placeholder="输入门店名称搜索"
remote-show-suffix :remote-method="remoteMethod" :loading="storeloading" style="width: 240px"
@change="resetPage">
<el-option v-for="item in storeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="用户" prop="uid">
<!-- <el-input class="w-[280px]" v-model="queryParams.uid" clearable placeholder="请输入用户id" /> -->
<el-select v-model="queryParams.user_id" filterable remote reserve-keyword placeholder="输入用户名称搜索"
remote-show-suffix :remote-method="remoteMethodUser" :loading="userloading" style="width: 240px"
@change="resetPage">
<el-option v-for="item in userList" :key="item.id" :label="`${item.nickname} (ID:${item.id})`"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="订单号" prop="order_sn">
<el-input class="w-[280px]" v-model="queryParams.order_sn" clearable placeholder="请输入订单号" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div>
<el-table :data="pager.lists" @selection-change="handleSelectionChange" row-key="id"
:tree-props="{ children: 'list' }">
<el-table-column label="ID" prop="id" show-overflow-tooltip />
<el-table-column label="门店" prop="store_name" show-overflow-tooltip />
<el-table-column label="订单号" prop="order_sn" min-width="120" show-overflow-tooltip />
<el-table-column label="用户昵称" prop="nickname" show-overflow-tooltip />
<el-table-column label="手机号" prop="phone" show-overflow-tooltip />
<el-table-column label="账期期限" prop="deadline" show-overflow-tooltip />
<el-table-column label="总欠款" prop="total_debt" show-overflow-tooltip />
<el-table-column label="剩余欠款" prop="surplus_debt" show-overflow-tooltip />
<el-table-column label="欠款天数" prop="debt_day" show-overflow-tooltip />
<el-table-column label="操作" fixed="right" width="180">
<template #default="{ row }">
<el-button v-if="row.surplus_debt > 0" link type="danger" @click="handleEdit(row)">
还款
</el-button>
<el-button link type="primary" @click="handleDetail(row)">
还款记录
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<details-popup ref="detailsRef" :dict-data="dictData" />
</div>
</template>
<script lang="ts" setup name="storeFinanceFlowLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiAccountsReceivableLists, apiAccountsReceivableEdit, apiAccountsReceivableDetail, apiAccountsReceivableStatistics } from '@/api/accounts_receivable'
import { apiSystemStoreLists } from '@/api/system_store'
import { apiUserLists } from '@/api/user'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailsPopup from './details.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailsRef = shallowRef<InstanceType<typeof DetailsPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
store_name: '',
store_id: '',
user_id: '',
create_time: '',
financial_type: 1,
financial_pm: 1,
order_sn: ''
})
const topQueryParams = reactive({
page_no: '',
page_size: '',
})
const changePage = (e) => {
topQueryParams.page_no = e
getStatistics()
}
const statisticsData = ref({})
const getStatistics = () => {
apiAccountsReceivableStatistics(topQueryParams).then(res => {
statisticsData.value = res
})
}
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val : any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiAccountsReceivableLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
const handleEdit = async (data : any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
const handleDetail = async (data : any) => {
detailsRef.value?.open()
detailsRef.value?.setFormData(data)
}
const handleRepayment = async (data : any) => {
detailsRef.value?.open()
detailsRef.value?.setFormData(data)
}
getStatistics()
getLists()
const storeloading = ref(false)
const storeList = ref([])
const remoteMethod = (e = '') => {
storeloading.value = true
apiSystemStoreLists({
name: e,
page_size: 50
})
.then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
const userloading = ref(false)
const userList = ref([])
const remoteMethodUser = (e = '') => {
userloading.value = true
apiUserLists({
nickname: e,
page_size: 50
})
.then((res) => {
userList.value = res.lists
setTimeout(() => {
userloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
userloading.value = false
}, 300)
})
}
</script>

View File

@ -1,95 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
<el-form-item label="门店" prop="store_name">
<el-input v-model="formData.store_name" readonly />
</el-form-item>
<el-form-item label="应收金额" prop="receivable">
<el-input v-model="formData.receivable" readonly />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" readonly />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-switch v-model="formData.status" active-text="已转账" inactive-text="未转账" :active-value="1" :inactive-value="0" size="large" inline-prompt></el-switch>
</el-form-item>
<el-form-item label="凭证" prop="file">
<material-picker v-model="formData.file" :limit="1" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeCashFinanceFlowDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiStoreCashFinanceFlowAdd, apiStoreCashFinanceFlowEdit, apiStoreCashFinanceFlowDetail } from '@/api/store_cash_finance_flow'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiStoreCashFinanceFlowDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,130 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="门店" prop="store_name">
<el-input v-model="formData.store_name" readonly />
</el-form-item>
<el-form-item label="应收金额" prop="receivable">
<el-input v-model="formData.receivable" readonly />
</el-form-item>
<el-form-item label="实收金额" prop="receipts">
<el-input v-model="formData.receipts" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" readonly />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-switch
v-model="formData.status"
active-text="已转账"
inactive-text="未转账"
:active-value="1"
:inactive-value="0"
size="large"
inline-prompt
></el-switch>
</el-form-item>
<el-form-item label="凭证" prop="file">
<material-picker v-model="formData.file" :limit="1" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeCashFinanceFlowEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import {
apiStoreCashFinanceFlowAdd,
apiStoreCashFinanceFlowEdit,
apiStoreCashFinanceFlowDetail
} from '@/api/store_cash_finance_flow'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑门店现金流水' : '新增门店现金流水'
})
//
const formData = reactive({
id: '',
store_id: '',
cash_price: '',
receivable: '',
receipts: '',
admin_id: '',
file: '',
remark: '',
status: '',
store_name: ''
})
//
const formRules = reactive<any>({})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiStoreCashFinanceFlowDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await apiStoreCashFinanceFlowEdit(data)
: await apiStoreCashFinanceFlowAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,253 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="门店" prop="store_id">
<!-- <el-input class="w-[280px]" v-model="queryParams.store_name" clearable placeholder="请输入门店id" /> -->
<el-select
v-model="queryParams.store_id"
filterable
remote
reserve-keyword
placeholder="输入门店名称搜索"
remote-show-suffix
:remote-method="remoteMethod"
:loading="storeloading"
style="width: 240px"
@change="resetPage"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="金额" prop="cash_price">
<el-input v-model="queryParams.cash_price" />
</el-form-item>
<el-form-item label="时间范围" prop="create_time">
<el-date-picker
v-model="startEndTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
unlink-panels
:shortcuts="shortcuts"
@change="changeStartEndTime"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择状态"
size="large"
style="width: 240px"
>
<el-option label="待处理" value="0" />
<el-option label="已完成" value="1" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<export-data
class="ml-2.5"
:fetch-fun="apiStoreCashFinanceFlowLists"
:params="queryParams"
:page-size="pager.size"
/>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div>
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column label="ID" prop="id" show-overflow-tooltip />
<el-table-column label="门店" prop="store_name" show-overflow-tooltip />
<el-table-column label="时间" prop="create_time" show-overflow-tooltip />
<el-table-column label="交易金额" prop="cash_price" show-overflow-tooltip />
<el-table-column label="应收金额" prop="receivable" show-overflow-tooltip />
<el-table-column label="实收金额" prop="receipts" show-overflow-tooltip />
<el-table-column label="操作人员" prop="admin_id" show-overflow-tooltip />
<el-table-column label="图片" prop="file">
<template #default="{ row }">
<el-image
v-if="row.file && row.file != 0"
style="width: 50px; height: 50px"
:src="row.file"
:preview-teleported="true"
/>
<span v-else>待上传</span>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" />
<el-table-column label="状态" prop="status">
<template #default="{ row }">
<el-tag v-if="row.status == 0" type="danger">待处理</el-tag>
<el-tag v-else type="success">已确认</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['store_cash_finance_flow.store_cash_finance_flow/edit']"
type="primary"
link
@click="handleEdit(row)"
v-if="row.status == 0"
>
编辑
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
</div>
</template>
<script lang="ts" setup name="storeCashFinanceFlowLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import {
apiStoreCashFinanceFlowLists,
apiStoreCashFinanceFlowDelete
} from '@/api/store_cash_finance_flow'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { apiSystemStoreLists } from '@/api/system_store'
import moment from 'moment'
const shortcuts = [
{
text: '近一周',
value: () => {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 7)
return [start, end]
}
},
{
text: '近一月',
value: () => {
const end = new Date()
const start = new Date()
start.setMonth(start.getMonth() - 1)
return [start, end]
}
},
{
text: '近三月',
value: () => {
const end = new Date()
const start = new Date()
start.setMonth(start.getMonth() - 3)
return [start, end]
}
}
]
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const startEndTime = ref([new Date(), new Date()])
//
const queryParams = reactive({
store_id: '',
status: '',
cash_price: '',
start_time: moment(startEndTime.value[0]).format('YYYY-MM-DD') + ' 00:00:00',
end_time: moment(startEndTime.value[1]).format('YYYY-MM-DD') + ' 23:59:59'
})
const changeStartEndTime = () => {
if (startEndTime.value == null || startEndTime.value == '') {
queryParams.start_time = ''
queryParams.end_time = ''
} else {
queryParams.start_time = moment(startEndTime.value[0]).format('YYYY-MM-DD') + ' 00:00:00'
queryParams.end_time = moment(startEndTime.value[1]).format('YYYY-MM-DD') + ' 23:59:59'
}
getLists()
}
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiStoreCashFinanceFlowLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiStoreCashFinanceFlowDelete({ id })
getLists()
}
onMounted(() => {
getLists()
})
const storeloading = ref(false)
const storeList = ref([])
const remoteMethod = (e = '') => {
storeloading.value = true
apiSystemStoreLists({
name: e,
page_size: 50
})
.then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
</script>

View File

@ -1,81 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeExtractDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiStoreExtractAdd, apiStoreExtractEdit, apiStoreExtractDetail } from '@/api/store_extract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiStoreExtractDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,103 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeExtractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiStoreExtractAdd, apiStoreExtractEdit, apiStoreExtractDetail } from '@/api/store_extract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑门店提现表' : '新增门店提现表'
})
//
const formData = reactive({
id: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiStoreExtractDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiStoreExtractEdit(data)
: await apiStoreExtractAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,171 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="门店" prop="store_id">
<el-input
class="w-[280px]"
v-model="queryParams.store_id"
clearable
placeholder="请输入门店"
/>
</el-form-item>
<el-form-item label="收款方式" prop="extract_type">
<el-input
class="w-[280px]"
v-model="queryParams.extract_type"
clearable
placeholder="请输入收款方式"
/>
</el-form-item>
<el-form-item label="审核状态" prop="status">
<el-input
class="w-[280px]"
v-model="queryParams.status"
clearable
placeholder="请输入审核状态"
/>
</el-form-item>
<el-form-item label="转账状态" prop="pay_status">
<el-input
class="w-[280px]"
v-model="queryParams.pay_status"
clearable
placeholder="请输入转账状态"
/>
</el-form-item>
<!-- <el-form-item label="创建时间" prop="create_time">
<el-input class="w-[280px]" v-model="queryParams.create_time" clearable placeholder="请输入创建时间" />
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<export-data
class="ml-2.5"
:fetch-fun="apiStoreExtractLists"
:params="queryParams"
:page-size="pager.size"
/>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="id" prop="id" show-overflow-tooltip />
<el-table-column label="名称" prop="nickname" show-overflow-tooltip />
<!-- <el-table-column label="收款方式" prop="extract_type" show-overflow-tooltip /> -->
<el-table-column label="提现金额" prop="extract_price" show-overflow-tooltip />
<el-table-column label="openid" prop="openid" show-overflow-tooltip />
<el-table-column label="备注" prop="mark" show-overflow-tooltip />
<el-table-column label="审核状态" prop="status_name" show-overflow-tooltip />
<el-table-column
label="转账状态"
prop="pay_status_name"
show-overflow-tooltip
/>
<el-table-column label="管理员" prop="admin_id" show-overflow-tooltip />
<el-table-column label="创建时间" prop="create_time" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-if="row.pay_status == 0"
v-perms="['store_extract.store_extract/enter']"
type="primary"
link
@click="handleEnter(row.id)"
>
确认
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
</div>
</template>
<script lang="ts" setup name="storeExtractLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import {
apiStoreExtractLists,
apiStoreExtractDelete,
apiStoreExtractEnter
} from '@/api/store_extract'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
store_id: '',
extract_type: '',
status: '',
pay_status: '',
create_time: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiStoreExtractLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleEnter = (id: any) => {
apiStoreExtractEnter({ id: id }).then(() => {
getLists()
})
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiStoreExtractDelete({ id })
getLists()
}
onMounted(() => {
getLists()
})
</script>

View File

@ -1,146 +0,0 @@
<template>
<div>
<div>
<el-table :data="pager.lists" v-loading="pager.loading">
<el-table-column label="标题" prop="name" show-overflow-tooltip />
<el-table-column label="日期" prop="date" show-overflow-tooltip />
<el-table-column label="收入金额" prop="income" show-overflow-tooltip />
<el-table-column label="支出金额" prop="expenditure" show-overflow-tooltip />
<el-table-column label="门店应入账金额" prop="enter" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['store_cash_finance_flow.store_cash_finance_flow/edit']" type="primary"
link @click="openDetail(row)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
<el-dialog v-model="showDetail" title="订单详情" width="70%">
<runWaterPop ref="runRef"></runWaterPop>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="billTable">
import { usePaging } from '@/hooks/usePaging'
import { apiDayBillLists, apiWeekBillLists, apiMonthBillLists } from '@/api/store_finance_bill'
import moment from 'moment';
let apiFun = apiDayBillLists;
const props = defineProps({
queryParams: {
type: Object,
default: () => ({})
},
type: {
type: String,
default: 'day'
}
})
if (props.type == 'day') apiFun = apiDayBillLists;
if (props.type == 'week') apiFun = apiWeekBillLists;
if (props.type == 'month') apiFun = apiMonthBillLists;
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiFun,
params: props.queryParams
})
defineExpose({
getLists
})
const extractWeekNumber = (str:any)=> {
// 使"xxxx-xx"xx
const weekRegex = /第\d{4}-([0-9]{1,2})周/;
const match = str.match(weekRegex);
if (match) {
//
return parseInt(match[1], 10);
} else {
// null
return null;
}
}
const extractYear = (str: any) => {
// 使"xxxx-xx"xxxx
const yearRegex = /第(\d{4})-\d{1,2}周/;
const match = str.match(yearRegex);
if (match) {
//
return parseInt(match[1], 10);
} else {
// null
return moment(new Date()).format('YYYY');
}
}
const convertToYYYYMMDD = (dateString:any) => {
//
const year = dateString.split('年')[0];
const month = dateString.split('年')[1].split('月')[0];
// DateJavaScript01
const date = new Date(year, month - 1, 1);
// yyyy-mm-dd
const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
return formattedDate;
}
const runRef = ref(null);
const showDetail = ref(null);
const openDetail = async (row: any) => {
showDetail.value = true;
await nextTick();
if(props.type == 'day'){
runRef.value?.init({
start_time: moment(row.date).format('YYYY-MM-DD') + ' 00:00:00',
end_time: moment(row.date).format('YYYY-MM-DD') + ' 23:59:59',
});
}else if(props.type == 'week'){
let t = extractWeekNumber(row.date);
if(t){
let year:any = extractYear(row.date);
// 111202411
let now = new Date(year, 0, 1 - (new Date(year, 0, 1).getDay() || 7) + 1); //
now.setDate(now.getDate() + (t - 1) * 7); // 123(23-1)*7
let end = new Date(now);
end.setDate(end.getDate() + 6)
runRef.value?.init({
start_time: moment(now).format('YYYY-MM-DD') + ' 00:00:00',
end_time: moment(end).format('YYYY-MM-DD') + ' 23:59:59',
});
}else runRef.value?.init({});
} else {
let sdate = convertToYYYYMMDD(row.date); //
let edate = new Date(sdate);
edate.setMonth(edate.getMonth()+1); //+1
edate.setDate(edate.getDate()-1); //-1
runRef.value?.init({
start_time: moment(sdate).format('YYYY-MM-DD') + ' 00:00:00',
end_time: moment(edate).format('YYYY-MM-DD') + ' 23:59:59',
});
}
}
onMounted(() => {
getLists()
})
</script>
<style lang="scss" scoped></style>

View File

@ -1,81 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeCashFinanceFlowDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiStoreCashFinanceFlowAdd, apiStoreCashFinanceFlowEdit, apiStoreCashFinanceFlowDetail } from '@/api/store_cash_finance_flow'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiStoreCashFinanceFlowDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,103 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeCashFinanceFlowEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiStoreCashFinanceFlowAdd, apiStoreCashFinanceFlowEdit, apiStoreCashFinanceFlowDetail } from '@/api/store_cash_finance_flow'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑门店现金流水' : '新增门店现金流水'
})
//
const formData = reactive({
id: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiStoreCashFinanceFlowDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiStoreCashFinanceFlowEdit(data)
: await apiStoreCashFinanceFlowAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,112 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="门店" prop="store_id">
<!-- <el-input class="w-[280px]" v-model="queryParams.store_name" clearable placeholder="请输入门店id" /> -->
<el-select v-model="queryParams.store_id" filterable remote reserve-keyword placeholder="输入门店名称搜索"
remote-show-suffix :remote-method="remoteMethod" :loading="storeloading" style="width: 240px" @change="handleClick({ paneName: activeName })">
<el-option v-for="item in storeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="时间" prop="create_time">
<el-date-picker v-model="startEndTime" type="daterange" range-separator="至" start-placeholder="开始日期"
end-placeholder="结束日期" unlink-panels :shortcuts="shortcuts" @change="handleClick({ paneName: activeName })" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleClick({ paneName: activeName })">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" shadow="never">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="日订单" name="first">
<billTable ref="billTableRef1" :queryParams="queryParams" type="day"></billTable>
</el-tab-pane>
<el-tab-pane label="周订单" name="second">
<billTable ref="billTableRef2" :queryParams="queryParams" type="week"></billTable>
</el-tab-pane>
<el-tab-pane label="月订单" name="three">
<billTable ref="billTableRef3" :queryParams="queryParams" type="month"></billTable>
</el-tab-pane>
</el-tabs>
</el-card>
</div>
</template>
<script lang="ts" setup name="storeCashFinanceFlowLists">
import { watch } from 'vue';
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { apiSystemStoreLists } from '@/api/system_store'
import billTable from "./components/billTable.vue";
import shortcuts from "@/utils/shortcuts";
import moment from 'moment';
const startEndTime = ref([]);
//
const queryParams = reactive({
store_id: '',
start_time: '',
end_time: ''
})
watch(() => startEndTime.value, (n, o) => {
queryParams.start_time = moment(n[0]).format('YYYY-MM-DD') + ' 00:00:00';
queryParams.end_time = moment(n[1]).format('YYYY-MM-DD') + ' 23:59:59';
}, { deep: true })
const storeloading = ref(false);
const storeList = ref([]);
const remoteMethod = (e: string = '') => {
storeloading.value = true;
apiSystemStoreLists({
name: e,
page_size: 50
}).then(res => {
storeList.value = res.lists;
setTimeout(() => {
storeloading.value = false;
}, 300)
}).catch(err => {
setTimeout(() => {
storeloading.value = false;
}, 300)
})
}
const billTableRef1 = ref(null);
const billTableRef2 = ref(null);
const billTableRef3 = ref(null);
const activeName = ref('first');
const handleClick = (tab: any) => {
if (tab.paneName == "first") {
billTableRef1.value.getLists();
} else if (tab.paneName == "second") {
billTableRef2.value.getLists();
} else if (tab.paneName == "three") {
billTableRef3.value.getLists();
}
};
const resetParams = () => {
queryParams.store_id = '';
queryParams.create_time = '';
handleClick({
paneName: activeName.value
})
}
nextTick(() => {
handleClick({
paneName: activeName.value
})
})
</script>

View File

@ -1,88 +0,0 @@
<template>
<el-drawer v-model="showDialog" title="资金走向" :size="1000">
<el-table :data="pager.lists" @selection-change="handleSelectionChange" >
<el-table-column label="ID" prop="id" min-width="100" show-overflow-tooltip />
<el-table-column label="交易单号" prop="order_sn" min-width="120" show-overflow-tooltip />
<el-table-column label="交易时间" prop="create_time" min-width="120" show-overflow-tooltip />
<el-table-column label="金额" prop="number" min-width="100" show-overflow-tooltip>
<template #default="{ row }">
<span v-if="row.number > 0" class="text-success">{{ row.number }}</span>
<span v-else class="text-danger">{{ row.number }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="门店名称" prop="store_name" show-overflow-tooltip /> -->
<!-- <el-table-column label="用户" prop="nickname" min-width="80" show-overflow-tooltip /> -->
<el-table-column label="收益/扣除" prop="financial_type_name" show-overflow-tooltip />
<!-- <el-table-column label="支付方式" prop="pay_type_name" show-overflow-tooltip /> -->
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-drawer>
</template>
<script lang="ts" setup name="storeOrderDETAILS">
import { ElMessage, type FormInstance } from 'element-plus'
import { timeFormat } from '@/utils/util'
import { usePaging } from '@/hooks/usePaging'
import { apiStoreFinanceFlowLists } from '@/api/store_finance_flow'
import moment from 'moment'
import type { PropType } from 'vue'
import feedback from '@/utils/feedback'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const showDialog = ref(false)
const mode = ref('add')
//
const formData = ref({
order_id: ''
})
//
const setFormData = async (data: Record<any, any>) => {
formData.value = { ...data };
queryParams.order_id = data.order_id;
getLists();
}
const getDetail = async (row: Record<string, any>) => {
formData.value.order_id = row.order_id;
// const data = await apiStoreOrderDetail({
// id: row.id
// })
// setFormData(data)
}
const queryParams = reactive({
order_id: ''
})
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiStoreFinanceFlowLists,
params: queryParams
})
const open = ()=>{
showDialog.value = true
}
const close = () => {
showDialog.value = false
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,103 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="storeFinanceFlowEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiStoreFinanceFlowAdd, apiStoreFinanceFlowEdit, apiStoreFinanceFlowDetail } from '@/api/store_finance_flow'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑门店资金流水表' : '新增门店资金流水表'
})
//
const formData = reactive({
id: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiStoreFinanceFlowDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiStoreFinanceFlowEdit(data)
: await apiStoreFinanceFlowAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,246 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="门店" prop="store_id">
<!-- <el-input class="w-[280px]" v-model="queryParams.store_name" clearable placeholder="请输入门店id" /> -->
<el-select v-model="queryParams.store_id" filterable remote reserve-keyword placeholder="输入门店名称搜索"
remote-show-suffix :remote-method="remoteMethod" :loading="storeloading" style="width: 240px"
@change="resetPage">
<el-option v-for="item in storeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="用户" prop="uid">
<!-- <el-input class="w-[280px]" v-model="queryParams.uid" clearable placeholder="请输入用户id" /> -->
<el-select v-model="queryParams.user_id" filterable remote reserve-keyword placeholder="输入用户名称搜索"
remote-show-suffix :remote-method="remoteMethodUser" :loading="userloading" style="width: 240px"
@change="resetPage">
<el-option v-for="item in userList" :key="item.id" :label="`${item.nickname} (ID:${item.id})`"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="订单号" prop="order_sn">
<el-input class="w-[280px]" v-model="queryParams.order_sn" clearable placeholder="请输入订单号" />
</el-form-item>
<el-form-item label="日期" prop="timeScope">
<el-date-picker v-model="queryParams.timeScope" type="daterange" range-separator=""
start-placeholder="开始日期" end-placeholder="结束日期" unlink-panels :shortcuts="shortcuts"
@change="changeStartEndTime" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
<el-form-item>
<el-button @click="xlsx(3)">导出手续费</el-button>
<el-button @click="xlsx(11)">导出其他收益</el-button>
<el-button @click="xlsx(16)">导出损耗</el-button>
<el-button @click="xlsx(12)">导出佣金</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div>
<el-table :data="pager.lists" @selection-change="handleSelectionChange" row-key="id"
:tree-props="{ children: 'list' }">
<el-table-column label="ID" prop="id" min-width="100" show-overflow-tooltip />
<el-table-column label="交易单号" prop="order_sn" min-width="120" show-overflow-tooltip />
<el-table-column label="交易时间" prop="create_time" min-width="120" show-overflow-tooltip />
<el-table-column label="金额" prop="number" min-width="100" show-overflow-tooltip>
<template #default="{ row }">
<span v-if="row.number > 0" class="text-success">{{ row.number }}</span>
<span v-else class="text-danger">{{ row.number }}</span>
</template>
</el-table-column>
<el-table-column label="门店名称" prop="store_name" show-overflow-tooltip />
<el-table-column label="用户" prop="nickname" min-width="80" show-overflow-tooltip />
<el-table-column label="收益/扣除" prop="financial_type_name" show-overflow-tooltip />
<el-table-column label="支付方式" prop="pay_type_name" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" fixed="right" width="100">
<template #default="{ row }">
<el-button link type="primary" @click="handleDetail(row)">
资金走向
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<details-popup ref="detailsRef" :dict-data="dictData" />
</div>
</template>
<script lang="ts" setup name="storeFinanceFlowLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiStoreFinanceFlowLists, apiStoreFinanceFlowDelete, apiStoreFinanceFlowExport } from '@/api/store_finance_flow'
import { apiSystemStoreLists } from '@/api/system_store'
import { apiUserLists } from '@/api/user'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailsPopup from './details.vue'
import moment from 'moment'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailsRef = shallowRef<InstanceType<typeof DetailsPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
store_name: '',
store_id: '',
user_id: '',
create_time: '',
financial_type: 1,
financial_pm: 1,
order_sn: '',
timeScope: [],
start_time: '',
end_time: '',
})
const shortcuts = [
{
text: '近一周',
value: () => {
const end = new Date()
const start = new Date()
start.setDate(start.getDate() - 7)
return [start, end]
}
},
{
text: '近一月',
value: () => {
const end = new Date()
const start = new Date()
start.setMonth(start.getMonth() - 1)
return [start, end]
}
},
{
text: '近三月',
value: () => {
const end = new Date()
const start = new Date()
start.setMonth(start.getMonth() - 3)
return [start, end]
}
}
]
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val : any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiStoreFinanceFlowLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data : any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
const handleDetail = async (data : any) => {
detailsRef.value?.open()
detailsRef.value?.setFormData(data)
}
//
const handleDelete = async (id : number | any[]) => {
await feedback.confirm('确定要删除?')
await apiStoreFinanceFlowDelete({ id })
getLists()
}
const changeStartEndTime = () => {
if (queryParams.timeScope[0] && queryParams.timeScope[1]) {
queryParams.start_time = moment(queryParams.timeScope[0]).format('YYYY-MM-DD') + ' 00:00:00'
queryParams.end_time = moment(queryParams.timeScope[1]).format('YYYY-MM-DD') + ' 23:59:59'
} else {
queryParams.start_time = ''
queryParams.end_time = ''
}
getLists()
}
const xlsx = (type) => {
apiStoreFinanceFlowExport({
type: type,
...queryParams
}).then((res) => {
window.open(res.url, '_blank')
ElMessage.success('导出成功')
})
}
getLists()
const storeloading = ref(false)
const storeList = ref([])
const remoteMethod = (e = '') => {
storeloading.value = true
apiSystemStoreLists({
name: e,
page_size: 50
})
.then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
const userloading = ref(false)
const userList = ref([])
const remoteMethodUser = (e = '') => {
userloading.value = true
apiUserLists({
nickname: e,
page_size: 50
})
.then((res) => {
userList.value = res.lists
setTimeout(() => {
userloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
userloading.value = false
}, 300)
})
}
</script>

View File

@ -1,81 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="userBillDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiUserBillAdd, apiUserBillEdit, apiUserBillDetail } from '@/api/user_bill'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiUserBillDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,103 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="userBillEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiUserBillAdd, apiUserBillEdit, apiUserBillDetail } from '@/api/user_bill'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑用户账单表' : '新增用户账单表'
})
//
const formData = reactive({
id: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiUserBillDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiUserBillEdit(data)
: await apiUserBillAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,136 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="用户uid" prop="uid">
<el-input class="w-[280px]" v-model="queryParams.uid" clearable placeholder="请输入用户uid" />
</el-form-item>
<!-- <el-form-item label="明细类型" prop="type">
<el-input class="w-[280px]" v-model="queryParams.type" clearable placeholder="请输入明细类型" />
</el-form-item> -->
<!-- <el-form-item label="创建时间" prop="create_time">
<el-input class="w-[280px]" v-model="queryParams.create_time" clearable placeholder="请输入创建时间" />
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<!-- <el-button v-perms="['user_bill.user_bill/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['user_bill.user_bill/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button> -->
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="明细类型" prop="type" show-overflow-tooltip />
<el-table-column label="明细数字" prop="number" show-overflow-tooltip />
<el-table-column label="备注" prop="mark" show-overflow-tooltip />
<el-table-column label="创建时间" prop="create_time" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['user_bill.user_bill/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['user_bill.user_bill/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="userBillLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiUserBillLists, apiUserBillDelete } from '@/api/user_bill'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
uid: '',
type: '',
create_time: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiUserBillLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiUserBillDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,81 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="userRechargeDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiUserRechargeAdd, apiUserRechargeEdit, apiUserRechargeDetail } from '@/api/user_recharge'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiUserRechargeDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,103 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="userRechargeEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiUserRechargeAdd, apiUserRechargeEdit, apiUserRechargeDetail } from '@/api/user_recharge'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑用户充值表' : '新增用户充值表'
})
//
const formData = reactive({
id: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiUserRechargeDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiUserRechargeEdit(data)
: await apiUserRechargeAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,187 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="是否支付" prop="paid">
<!-- <el-input class="w-[280px]" v-model="queryParams.paid" clearable placeholder="请输入是否充值" /> -->
<el-select
v-model="queryParams.paid"
class="w-[280px]"
clearable
placeholder="请选择是否支付"
@change="resetPage"
>
<el-option label="已支付" value="1"></el-option>
<el-option label="未支付" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item label="" prop="create_time">
<el-date-picker
v-model="startEndTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
unlink-panels
@change="changeStartEndTime"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<export-data
class="ml-2.5"
:fetch-fun="apiUserRechargeLists"
:params="queryParams"
:page-size="pager.size"
/>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div>
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column label="ID" prop="id" show-overflow-tooltip />
<el-table-column label="用户昵称" prop="nickname" show-overflow-tooltip />
<el-table-column
label="订单号"
prop="order_id"
min-width="200"
show-overflow-tooltip
/>
<el-table-column label="消费金额" prop="price" show-overflow-tooltip />
<el-table-column label="消费类型" prop="recharge_type" show-overflow-tooltip />
<el-table-column label="是否支付" prop="paid" show-overflow-tooltip>
<template #default="{ row }">
<el-tag type="info" v-if="row.status == -1">{{ row.paid_name }}</el-tag>
<el-tag :type="row.paid ? 'success' : 'danger'" v-else>
{{ row.paid_name }}
</el-tag>
</template>
</el-table-column>
<el-table-column
label="支付时间"
prop="pay_time"
min-width="180"
show-overflow-tooltip
/>
<el-table-column label="操作" fixed="right">
<template #default="{ row }">
<el-button
type="warning"
link
@click="refund(row)"
v-if="row.paid == 1 && row.status != -1"
v-perms="['user_recharge.user_recharge/refund']"
>退款</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
</div>
</template>
<script lang="ts" setup name="userRechargeLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import {
apiUserRechargeLists,
apiUserRechargeDelete,
apiUserRechargeRefund
} from '@/api/user_recharge'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import moment from 'moment'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const startEndTime = ref([new Date(), new Date()])
//
const queryParams = reactive({
paid: '',
pay_time: '',
start_time: '',
end_time: ''
})
const changeStartEndTime = () => {
if (startEndTime.value[0] && startEndTime.value[1]) {
queryParams.start_time = moment(startEndTime.value[0]).format('YYYY-MM-DD')
queryParams.end_time = moment(startEndTime.value[1]).format('YYYY-MM-DD')
} else {
queryParams.start_time = ''
queryParams.end_time = ''
}
getLists()
}
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiUserRechargeLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiUserRechargeDelete({ id })
getLists()
}
const refund = async (row: any) => {
await feedback.confirm('确定要退款吗?')
apiUserRechargeRefund({
id: row.id
})
.then((res) => {
ElMessage.success('操作成功,退款有一定延迟,请稍后查看')
getLists()
})
.catch((err) => {
ElMessage.error('退款失败')
getLists()
})
}
getLists()
</script>

View File

@ -1,164 +0,0 @@
<template>
<div>
<!-- <el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="金额" prop="money">
<el-input class="w-[280px]" v-model="queryParams.money" clearable placeholder="请输入金额" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card> -->
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div>
<el-table :data="pager.lists" @selection-change="handleSelectionChange" :row-class-name="tableRowClassName">
<el-table-column label="ID" prop="id" min-width="55"/>
<el-table-column label="店铺ID" prop="store_id" show-overflow-tooltip />
<el-table-column label="时间" prop="create_time" show-overflow-tooltip />
<el-table-column label="收款方" prop="store_name" show-overflow-tooltip />
<el-table-column label="结算金额" prop="money" show-overflow-tooltip />
<el-table-column label="结算方式" prop="extract_type" show-overflow-tooltip />
<el-table-column label="确认时间" prop="initiation_time" show-overflow-tooltip>
<template #default="{ row }">
{{ timeFormat(row.initiation_time, 'yyyy-mm-dd') }}
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<div class="flex" v-if="row.receivable">
<el-button link type="primary" @click="handleDelete(row.id)" v-if="row.status == 0">
发送
</el-button>
<el-button link type="primary" @click="handleClick(row)" v-if="row.status == 2">
确认
</el-button>
</div>
<div v-else></div>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<el-dialog v-model="showDialog" title="确认结算" width="680px">
<el-descriptions :column="1" border>
<el-descriptions-item label="姓名"> {{ rowDate.store_realName }} </el-descriptions-item>
<el-descriptions-item label="银行卡号"> {{ rowDate.store_bank_code }} </el-descriptions-item>
<el-descriptions-item label="银行名称"> {{ rowDate.store_bank }} </el-descriptions-item>
<el-descriptions-item label="开户地址"> {{ rowDate.store_bank_address }} </el-descriptions-item>
<el-descriptions-item label="操作">
<el-radio-group v-model="form.status">
<el-radio label="1">通过</el-radio>
<el-radio label="0">不通过</el-radio>
</el-radio-group>
</el-descriptions-item>
<el-descriptions-item label="附件">
<material-picker v-model="form.transfer_picture" />
</el-descriptions-item>
<el-descriptions-item label="备注">
<el-input class="w-[280px]" v-model="form.fail_msg" clearable placeholder="请输入备注" type="textarea" />
</el-descriptions-item>
</el-descriptions>
<el-form class="mt-4">
<el-form-item>
<el-button type="primary" @click="handleConfirm">确定</el-button>
<el-button @click="showDialog = false">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="financialTransfersLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialTransfersLists, apiFinancialTransfersSend, apiFinancialTransfersConfirm } from '@/api/financial_transfers'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
//
const queryParams = reactive({
store_id: '',
admin_id: '',
uid: '',
status: '',
initiation_time: '',
confirmation_time: '',
mark: '',
money: '',
remark_time: ''
})
const tableRowClassName = ({
row,
rowIndex,
}) => {
console.log(row.receivable);
if (!row.receivable) {
return 'warning-row'
}
return ''
}
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiFinancialTransfersLists,
params: queryParams
})
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要发送吗?')
await apiFinancialTransfersSend({ id })
getLists()
}
const showDialog = ref(false)
const rowDate = ref('')
const handleClick = (row: any) => {
rowDate.value = row
showDialog.value = true
}
const form = reactive({
id: "",
transfer_picture: "",
status: "",
fail_msg: ""
})
//
const handleConfirm = async (id: number | any[]) => {
form.id = rowDate.value.id
await apiFinancialTransfersConfirm({ ...form })
getLists()
showDialog.value = false
}
getLists()
</script>
<style>
.el-table .warning-row {
--el-table-tr-bg-color: var(--el-color-danger-light-9);
}
</style>

View File

@ -1,81 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="inventoryStoreDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiInventoryStoreAdd, apiInventoryStoreEdit, apiInventoryStoreDetail } from '@/api/inventory_store'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiInventoryStoreDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,141 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="数量" prop="nums" v-if="mode == 'edit'">
<el-input v-model="formData.nums" clearable placeholder="请输入实际数量" />
</el-form-item>
<el-form-item label="门店名称" prop="store_id" v-else>
<div class="flex items-center mr-4">
<el-select
v-model="formData.store_id"
filterable
remote
reserve-keyword
placeholder="输入门店名称搜索"
remote-show-suffix
:remote-method="remoteMethod"
:loading="storeloading"
style="width: 240px"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</div>
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="inventoryStoreEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import {
apiInventoryStoreAdd,
apiInventoryStoreEdit,
apiInventoryStoreDetail
} from '@/api/inventory_store'
import { apiSystemStoreLists } from '@/api/system_store'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑门店盘存' : '新增门店盘存'
})
//
const formData = reactive({
id: '',
store_id: '',
nums: 0
})
const storeloading = ref(false)
const storeList = ref([])
const remoteMethod = (e = '') => {
storeloading.value = true
apiSystemStoreLists({
name: e,
page_size: 50
})
.then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
//
const formRules = reactive<any>({})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiInventoryStoreDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit' ? await apiInventoryStoreEdit(data) : await apiInventoryStoreAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,271 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="门店名称" prop="store_id">
<div class="flex items-center mr-4">
<el-select
v-model="queryParams.store_id"
filterable
remote
reserve-keyword
placeholder="输入门店名称搜索"
remote-show-suffix
:remote-method="remoteMethod"
:loading="storeloading"
style="width: 240px"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</div>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-input
class="w-[280px]"
v-model="queryParams.status"
clearable
placeholder="请输入状态"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button
v-perms="['inventory_store.inventory_store/add']"
type="primary"
@click="handleAdd"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
生成今日盘库
</el-button>
<el-button
v-perms="['inventory_store.inventory_store/enter']"
type="primary"
@click="inventoryShow = true"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
库存核准
</el-button>
<!-- <el-button
v-perms="['inventory_store.inventory_store/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button> -->
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="商品" prop="product_id" show-overflow-tooltip>
<template #default="{ row }">
{{ row.product_name }}
</template>
</el-table-column>
<el-table-column label="后台人员" prop="admin_id" show-overflow-tooltip>
<template #default="{ row }">
{{ row.admin_name }}
</template>
</el-table-column>
<el-table-column label="门店人员" prop="staff_id" show-overflow-tooltip>
<template #default="{ row }">
{{ row.staff_name }}
</template>
</el-table-column>
<el-table-column label="门店" prop="store_id" show-overflow-tooltip>
<template #default="{ row }">
{{ row.store_name }}
</template>
</el-table-column>
<el-table-column label="盘库数量" prop="nums" show-overflow-tooltip />
<el-table-column label="确认数量" prop="enter_nums" show-overflow-tooltip />
<el-table-column label="时间" prop="create_time" show-overflow-tooltip />
<el-table-column label="状态" prop="status" show-overflow-tooltip>
<template #default="{ row }">
{{ row.status_name }}
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['inventory_store.inventory_store/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<!-- <el-button
v-perms="['inventory_store.inventory_store/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button> -->
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
<el-dialog v-model="inventoryShow" title="盘库核准" width="600">
<el-form :model="EnterNumsForm" label-width="90px">
<el-form-item label="门店名称" prop="store_id">
<div class="flex items-center mr-4">
<el-select
v-model="EnterNumsForm.store_id"
filterable
remote
reserve-keyword
placeholder="输入门店名称搜索"
remote-show-suffix
:remote-method="remoteMethod"
:loading="storeloading"
style="width: 240px"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</div>
</el-form-item>
<el-form-item label="日期" prop="create_time">
<el-date-picker
v-model="EnterNumsForm.create_time"
type="date"
placeholder="选择日期"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="inventoryShow = false">取消</el-button>
<el-button type="primary" @click="handleEnterNums"> 确认 </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="inventoryStoreLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import {
apiInventoryStoreLists,
apiInventoryStoreDelete,
apiInventoryStoreEnterNums
} from '@/api/inventory_store'
import { apiSystemStoreLists } from '@/api/system_store'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import moment from 'moment'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const inventoryShow = ref(false)
//
const queryParams = reactive({
store_id: '',
nums: '',
enter_nums: '',
status: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiInventoryStoreLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
const EnterNumsForm = reactive({
store_id: '',
create_time: ''
})
const handleEnterNums = () => {
EnterNumsForm.create_time = moment(EnterNumsForm.create_time).format('YYYY-MM-DD')
apiInventoryStoreEnterNums({ ...EnterNumsForm }).then(() => {
getLists()
})
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
const storeloading = ref(false)
const storeList = ref([])
const remoteMethod = (e = '') => {
storeloading.value = true
apiSystemStoreLists({
name: e,
page_size: 50
})
.then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiInventoryStoreDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,107 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
<el-form-item label="商品" prop="product_id">
<el-input v-model="formData.product_id" clearable placeholder="请输入商品" :readonly="true"/>
</el-form-item>
<el-form-item label="数量" prop="nums">
<el-input v-model="formData.nums" clearable placeholder="请输入数量" :readonly="true"/>
</el-form-item>
<el-form-item label="更新前" prop="before_nums">
<el-input v-model="formData.before_nums" clearable placeholder="请输入更新前" :readonly="true"/>
</el-form-item>
<el-form-item label="更新后" prop="after_nums">
<el-input v-model="formData.after_nums" clearable placeholder="请输入更新后" :readonly="true"/>
</el-form-item>
<el-form-item label="1商户2仓库" prop="type">
<el-input v-model="formData.type" clearable placeholder="请输入1商户2仓库" :readonly="true"/>
</el-form-item>
<el-form-item label="转出id" prop="one_id">
<el-input v-model="formData.one_id" clearable placeholder="请输入转出id" :readonly="true"/>
</el-form-item>
<el-form-item label="转入id" prop="two_id">
<el-input v-model="formData.two_id" clearable placeholder="请输入转入id" :readonly="true"/>
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="inventoryTransferDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiInventoryTransferAdd, apiInventoryTransferEdit, apiInventoryTransferDetail } from '@/api/inventory_transfer'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
product_id: '',
nums: '',
before_nums: '',
after_nums: '',
type: '',
one_id: '',
two_id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiInventoryTransferDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,277 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="转出类型">
<el-radio-group v-model="formData.one_type">
<el-radio label="1">门店</el-radio>
<el-radio label="2">仓库</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="转出门店" prop="one_id" v-if="formData.one_type == 1">
<el-input
v-model="formData.one_name"
clearable
placeholder="请选择转出方"
:readonly="false"
@click="showStore = true"
/>
</el-form-item>
<el-form-item label="转出仓库" prop="one_id" v-if="formData.one_type == 2">
<el-input
v-model="formData.one_name"
clearable
placeholder="请选择转出方"
:readonly="false"
@click="showWarehouse = true"
/>
</el-form-item>
<el-form-item label="转入类型">
<el-radio-group v-model="formData.two_type">
<el-radio label="1">门店</el-radio>
<el-radio label="2">仓库</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="转入门店" prop="two_id" v-if="formData.two_type == 1">
<el-input
v-model="formData.two_name"
clearable
placeholder="请选择转入方"
:readonly="false"
@click="showStoreTwo = true"
/>
</el-form-item>
<el-form-item label="转入仓库" prop="two_id" v-if="formData.two_type == 2">
<el-input
v-model="formData.two_name"
clearable
placeholder="请选择转入方"
:readonly="false"
@click="showWarehouseTwo = true"
/>
</el-form-item>
<el-form-item label="商品" prop="product_id" v-if="formData.one_id">
<el-input
v-model="formData.product_name"
clearable
placeholder="请选择商品"
:readonly="false"
@click="showProduct = true"
/>
</el-form-item>
<el-form-item label="数量" prop="nums" v-if="formData.one_id">
<el-input
v-model="formData.nums"
clearable
placeholder="请输入数量"
:readonly="false"
/>
</el-form-item>
</el-form>
</popup>
<el-dialog v-model="showStore" title="选择门店" width="70%">
<store-pop @onBindStore="onBindStore"></store-pop>
</el-dialog>
<el-dialog v-model="showStoreTwo" title="选择门店" width="70%">
<store-pop @onBindStore="onBindStoreTwo"></store-pop>
</el-dialog>
<el-dialog v-model="showProduct" title="选择商品" width="70%">
<product-pop
@onBindStore="onBindProduct"
:is_branch="1"
:store_id="store_id"
:warehouse_id="warehouse_id"
:is_warehouse="is_warehouse"
></product-pop>
</el-dialog>
<el-dialog v-model="showWarehouse" title="选择仓库1" width="70%">
<warehouse-pop @onBindWarehouse="onBindWarehouse"></warehouse-pop>
</el-dialog>
<el-dialog v-model="showWarehouseTwo" title="选择仓库2" width="70%">
<warehouse-pop @onBindWarehouse="onBindWarehouseTwo"></warehouse-pop>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="inventoryTransferEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import {
apiInventoryTransferAdd,
apiInventoryTransferEdit,
apiInventoryTransferDetail
} from '@/api/inventory_transfer'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showProduct = ref(false) //
const showStore = ref(false) //
const showStoreTwo = ref(false) //
const showWarehouse = ref(false) //
const showWarehouseTwo = ref(false) //
const store_id = ref(0) // id
const warehouse_id = ref(0) //id
const is_warehouse = ref(0) //
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑商品调拨' : '新增商品调拨'
})
//
const formData = reactive({
id: '',
product_id: '',
product_name: '',
nums: '',
before_nums: '',
after_nums: '',
one_type: '1',
two_type: '1',
one_id: '',
one_name: '',
two_id: '',
two_name: '',
warehouse_name: '',
warehouse_name_two: ''
})
//
const formRules = reactive<any>({
product_id: [
{
required: true,
message: '请输入商品',
trigger: ['blur']
}
],
nums: [
{
required: true,
message: '请输入数量',
trigger: ['blur']
}
],
type: [
{
required: true,
message: '请输入1商户2仓库',
trigger: ['blur']
}
],
one_id: [
{
required: true,
message: '请输入转出id',
trigger: ['blur']
}
],
two_id: [
{
required: true,
message: '请输入转入id',
trigger: ['blur']
}
]
})
const onBindProduct = (e: any[]) => {
formData.product_name = e[0].store_name
formData.product_id = e[0].product_id
showProduct.value = false
}
//
const onBindStore = (e: any[]) => {
formData.one_id = e[0].id
formData.one_name = e[0].name
showStore.value = false
store_id.value = e[0].id
}
const onBindStoreTwo = (e: any[]) => {
formData.two_id = e[0].id
formData.two_name = e[0].name
showStoreTwo.value = false
}
//
const onBindWarehouse = (e: any[]) => {
formData.one_name = e.name
formData.one_id = e.id
warehouse_id.value = e.id
is_warehouse.value = 1
showWarehouse.value = false
}
//
const onBindWarehouseTwo = (e: any[]) => {
formData.two_name = e.name
formData.two_id = e.id
showWarehouseTwo.value = false
}
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const handleType = (e) => {
formData.one_id = 0
formData.two_id = 0
formData.one_name = ''
formData.two_name = ''
store_id.value = 0
is_warehouse.value = 0
warehouse_id.value = 0
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiInventoryTransferDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await apiInventoryTransferEdit(data)
: await apiInventoryTransferAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,129 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="商品" prop="store_name">
<el-input
class="w-[280px]"
v-model="queryParams.store_name"
clearable
placeholder="请输入商品"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['inventory_transfer/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column label="id" prop="id" show-overflow-tooltip />
<el-table-column label="商品" prop="store_name" show-overflow-tooltip />
<el-table-column label="数量" prop="nums" show-overflow-tooltip />
<el-table-column label="转出方" prop="one_name" show-overflow-tooltip />
<el-table-column
label="转出前数量"
prop="one_before_nums"
show-overflow-tooltip
/>
<el-table-column
label="转出后数量"
prop="one_after_nums"
show-overflow-tooltip
/>
<el-table-column label="转入方" prop="two_name" show-overflow-tooltip />
<el-table-column
label="转入前数量"
prop="two_before_nums"
show-overflow-tooltip
/>
<el-table-column
label="转入后数量"
prop="two_after_nums"
show-overflow-tooltip
/>
<el-table-column label="类型" prop="type_name" show-overflow-tooltip />
<el-table-column label="创建时间" prop="create_time" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
</div>
</template>
<script lang="ts" setup name="inventoryTransferLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiInventoryTransferLists, apiInventoryTransferDelete } from '@/api/inventory_transfer'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
// import EditPopup from './edit.vue'
import EditPopup from './warehousing.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
store_name: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiInventoryTransferLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiInventoryTransferDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,245 +0,0 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="900px" @confirm="handleSubmit"
@close="handleClose">
<div>
<el-form ref="formRef" :model="formData" label-width="90px">
<el-form-item label="转出类型">
<el-radio-group v-model="formData.one_type">
<el-radio label="1">门店</el-radio>
<el-radio label="2">仓库</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="转出门店" prop="one_id" v-if="formData.one_type == 1">
<el-select v-model="formData.one_id" filterable remote reserve-keyword placeholder="请选择转出方"
remote-show-suffix :remote-method="remoteMethodStore" :loading="storeloading"
@change="changeStore" style="width: 300px">
<el-option v-for="item in storeList" :key="item.id"
:label="`${item.name}|${item.phone} (ID:${item.id})`" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="转出仓库" prop="one_id" v-if="formData.one_type == 2">
<el-select v-model="formData.one_id" filterable remote reserve-keyword placeholder="请选择转出方"
remote-show-suffix :remote-method="remoteMethodWarehouse" :loading="warehouseloading"
@change="changeWarehouse" style="width: 300px">
<el-option v-for="item in warehouseList" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="转入类型">
<el-radio-group v-model="formData.two_type">
<el-radio label="1">门店</el-radio>
<el-radio label="2">仓库</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="转入门店" prop="two_id" v-if="formData.two_type == 1">
<el-select v-model="formData.two_id" filterable remote reserve-keyword placeholder="请选择转入方"
remote-show-suffix :remote-method="remoteMethodStore" :loading="storeloading"
style="width: 300px">
<el-option v-for="item in storeList" :key="item.id"
:label="`${item.name}|${item.phone} (ID:${item.id})`" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="转入仓库" prop="two_id" v-if="formData.two_type == 2">
<el-select v-model="formData.two_id" filterable remote reserve-keyword placeholder="请选择转出方"
remote-show-suffix :remote-method="remoteMethodWarehouse" :loading="warehouseloading"
style="width: 300px">
<el-option v-for="item in warehouseList" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="商品" prop="store_id">
<div class="flex-1 w-full">
<div class="mb-2">
<el-button type="primary" @click="showProduct = true">添加商品</el-button>
</div>
<el-table :data="productList">
<el-table-column label="商品ID" prop="id" show-overflow-tooltip />
<el-table-column label="商品图片" prop="image" min-width="80">
<template #default="{ row }">
<el-image style="width: 50px; height: 50px" :src="row.image"
:preview-teleported="true" />
</template>
</el-table-column>
<el-table-column label="商品名称" prop="store_name" min-width="200" show-overflow-tooltip />
<el-table-column label="单位" prop="unit_name" min-width="80" show-overflow-tooltip />
<el-table-column label="数量" min-width="150">
<template #default="{ row }">
<el-input v-model="row.nums" />
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button type="danger" link @click="handleDeleteProdut(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-form>
</div>
<el-dialog v-model="showProduct" title="选择商品" width="70%">
<product-pop @onBindStore="onBindProduct" :is_branch="1" :store_id="store_id"
:warehouse_id="warehouse_id" :is_warehouse="is_warehouse" :key="productModalKey"></product-pop>
</el-dialog>
</popup>
</div>
</template>
<script lang="ts" setup name="storeProductEdit">
import { ElMessage, type FormInstance } from 'element-plus'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { onMounted } from 'vue'
import { apiWarehouseLists } from '@/api/warehouse'
import {
apiInventoryTransferAdd,
apiInventoryTransferEdit,
apiInventoryTransferDetail
} from '@/api/inventory_transfer'
import { apiSystemStoreLists } from '@/api/system_store'
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const store_id = ref(0) // id
const warehouse_id = ref(0) //id
const is_warehouse = ref(0) //
//
const formData = reactive({
id: '',
product_id: '',
product_name: '',
nums: '',
before_nums: '',
after_nums: '',
one_type: '1',
two_type: '1',
one_id: '',
one_name: '',
two_id: '',
two_name: '',
warehouse_name: '',
warehouse_name_two: ''
})
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑商品调拨' : '新增商品调拨'
})
const showProduct = ref(false) //
//
const productList = ref([])
//
const handleDeleteProdut = (id : number) => {
productList.value = productList.value.filter((item : any) => item.id !== id)
}
//
const onBindProduct = (e : any[]) => {
console.log(e);
e.forEach((item : any) => {
if (!productList.value.find((t : any) => t.id == item.id)) {
productList.value.push(item)
}
})
showProduct.value = false
}
const changeStore = (e : any) => {
store_id.value = e
resetUserId()
}
const changeWarehouse = (e : any) => {
warehouse_id.value = e
is_warehouse.value = 1
resetUserId()
}
const storeloading = ref(false)
const storeList = ref([])
const remoteMethodStore = (e = '') => {
storeloading.value = true
apiSystemStoreLists({ name: e }).then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
const warehouseloading = ref(false)
const warehouseList = ref([])
const remoteMethodWarehouse = (e = '') => {
warehouseloading.value = true
apiWarehouseLists({ name: e }).then((res) => {
warehouseList.value = res.lists
setTimeout(() => {
warehouseloading.value = false
}, 300)
})
}
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
const handleClose = () => {
emit('close')
}
//
const handleSubmit = async () => {
const product_arr = productList.value.map((item : any) => {
return {
product_id: item.product_id,
nums: item.nums,
purchase: item.purchases || 0,
total_price: item.total_price || 0,
manufacture: item.manufacture,
expiration_date: item.expiration_date
}
})
const data = { product_arr, ...formData }
await formRef.value?.validate()
mode.value == 'edit'
? await apiInventoryTransferEdit(data)
: await apiInventoryTransferAdd(data)
popupRef.value?.close()
emit('success')
}
//
const setFormData = async (data : Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row : Record<string, any>) => {
const data = await apiInventoryTransferDetail({
id: row.id
})
setFormData(data)
}
const productModalKey = ref(0)
const resetUserId = () => {
productModalKey.value++
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,59 +0,0 @@
<template>
<div>
<div>
<el-table :data="pager.lists" v-loading="pager.loading">
<el-table-column
label="商品信息"
prop="store_name"
show-overflow-tooltip
width="400"
>
<template #default="{ row }">
<div class="flex items-center">
<el-image
:src="row.image"
class="w-16 h-16 mr-2"
:preview-teleported="true"
></el-image>
<div>{{ row.store_name }}</div>
</div>
</template>
</el-table-column>
<el-table-column label="规格" prop="sku_name" show-overflow-tooltip />
<el-table-column label="数量" prop="cart_num" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end" v-if="pager.lists.length < pager.count">
<pagination v-model="pager" @change="getLists" />
</div>
</div>
</template>
<script lang="ts" setup name="orderInfo">
import type { PropType } from 'vue'
import { apiInventoryTransferOrderLists } from '@/api/inventory_transfer_order'
import { usePaging } from '@/hooks/usePaging'
const queryParams = reactive({
oid: ''
})
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiInventoryTransferOrderLists,
params: queryParams
})
const getList = (e: any) => {
queryParams.oid = e.oid
getLists()
}
defineExpose({
getList,
getLists
})
const route = useRoute()
onMounted(() => {
queryParams.oid = route.query.id
getLists()
})
</script>

View File

@ -1,67 +0,0 @@
<template>
<el-drawer v-model="showDialog" title="订单详情" :size="1000">
<div class="flex items-center justify-between">
<div>订单编号{{ formData.order_id }}</div>
<div>创建时间</div>
<div>{{ formData.create_time }}</div>
</div>
<div class="flex items-center justify-between">
<div>转出方{{ formData.one_name }}</div>
<div>方式:{{ formData.type_name }}</div>
<div>转入方{{ formData.two_name }}</div>
</div>
<!-- <el-tabs v-model="activeName" class="demo-tabs" type="border-card" @tab-click="handleClick">
<el-tab-pane label="订单信息" name="first">
<orderInfo :datas="formData" ref="productRef"></orderInfo>
</el-tab-pane>
</el-tabs> -->
<el-table :data="formData.product_list">
<el-table-column label="商品" prop="store_name" show-overflow-tooltip />
<el-table-column label="数量" prop="nums" show-overflow-tooltip />
</el-table>
</el-drawer>
</template>
<script lang="ts" setup name="storeOrderDETAILS">
import Popup from '@/components/popup/index.vue'
import { apiInventoryTransferOrderDetail } from '@/api/inventory_transfer_order'
import type { PropType } from 'vue'
import orderInfo from './components/orderInfo.vue'
const emit = defineEmits(['success', 'close'])
const showDialog = ref(false)
const productRef = ref(false)
const activeName = ref('first')
//
const formData = ref({
id: ''
})
//
const setFormData = async (data: Record<any, any>) => {
formData.value = { ...data }
}
const handleClick = (tab: any) => {
productRef.value?.getList({ oid: formData.value.id })
}
const getDetail = async (row: Record<string, any>) => {
formData.value.id = row.id
const data = await apiInventoryTransferOrderDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
showDialog.value = true
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,335 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="900px"
@confirm="handleSubmit"
@close="handleClose"
>
<div>
<el-form ref="formRef" :model="formData" label-width="90px">
<el-form-item label="转出类型">
<el-radio-group v-model="formData.one_type">
<el-radio label="1">门店</el-radio>
<el-radio label="2">仓库</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="转出门店" prop="one_id" v-if="formData.one_type == 1">
<el-select
v-model="formData.one_id"
filterable
remote
reserve-keyword
placeholder="请选择转出方"
remote-show-suffix
:remote-method="remoteMethodStore"
:loading="storeloading"
@change="changeStore"
style="width: 300px"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="`${item.name}|${item.phone} (ID:${item.id})`"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="转出仓库" prop="one_id" v-if="formData.one_type == 2">
<el-select
v-model="formData.one_id"
filterable
remote
reserve-keyword
placeholder="请选择转出方"
remote-show-suffix
:remote-method="remoteMethodWarehouse"
:loading="warehouseloading"
@change="changeWarehouse"
style="width: 300px"
>
<el-option
v-for="item in warehouseList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="转入类型">
<el-radio-group v-model="formData.two_type">
<el-radio label="1">门店</el-radio>
<el-radio label="2">仓库</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="转入门店" prop="two_id" v-if="formData.two_type == 1">
<el-select
v-model="formData.two_id"
filterable
remote
reserve-keyword
placeholder="请选择转入方"
remote-show-suffix
:remote-method="remoteMethodStore"
:loading="storeloading"
style="width: 300px"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="`${item.name}|${item.phone} (ID:${item.id})`"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="转入仓库" prop="two_id" v-if="formData.two_type == 2">
<el-select
v-model="formData.two_id"
filterable
remote
reserve-keyword
placeholder="请选择转出方"
remote-show-suffix
:remote-method="remoteMethodWarehouse"
:loading="warehouseloading"
style="width: 300px"
>
<el-option
v-for="item in warehouseList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="mark">
<el-input v-model="formData.mark" type="input" style="width: 480px" />
</el-form-item>
<el-form-item label="转入类型">
<el-radio-group v-model="formData.types">
<el-radio label="0">减库存</el-radio>
<el-radio label="1">不减库存</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="商品" prop="store_id">
<div class="flex-1 w-full">
<div class="mb-2">
<el-button type="primary" @click="showProduct = true"
>添加商品</el-button
>
</div>
<el-table :data="productList">
<el-table-column label="商品ID" prop="id" show-overflow-tooltip />
<el-table-column label="商品图片" prop="image" min-width="80">
<template #default="{ row }">
<el-image
style="width: 50px; height: 50px"
:src="row.image"
:preview-teleported="true"
/>
</template>
</el-table-column>
<el-table-column
label="商品名称"
prop="store_name"
min-width="200"
show-overflow-tooltip
/>
<el-table-column
label="单位"
prop="unit_name"
min-width="80"
show-overflow-tooltip
/>
<el-table-column label="数量" min-width="150">
<template #default="{ row }">
<el-input v-model="row.nums" />
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
type="danger"
link
@click="handleDeleteProdut(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-form>
</div>
<el-dialog v-model="showProduct" title="选择商品" width="70%">
<product-pop
@onBindStore="onBindProduct"
:is_branch="1"
:store_id="store_id"
:warehouse_id="warehouse_id"
:is_warehouse="is_warehouse"
:key="productModalKey"
></product-pop>
</el-dialog>
</popup>
</div>
</template>
<script lang="ts" setup name="storeProductEdit">
import { ElMessage, type FormInstance } from 'element-plus'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { onMounted } from 'vue'
import { apiWarehouseLists } from '@/api/warehouse'
import {
apiInventoryTransferOrderAdd,
apiInventoryTransferOrderEdit,
apiInventoryTransferOrderDetail
} from '@/api/inventory_transfer_order'
import { apiSystemStoreLists } from '@/api/system_store'
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const store_id = ref(0) // id
const warehouse_id = ref(0) //id
const is_warehouse = ref(0) //
//
const formData = reactive({
id: '',
product_id: '',
product_name: '',
nums: '',
before_nums: '',
after_nums: '',
one_type: '1',
two_type: '1',
types: '0',
one_id: '',
one_name: '',
two_id: '',
two_name: '',
warehouse_name: '',
warehouse_name_two: '',
mark: ''
})
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑商品调拨' : '新增商品调拨'
})
const showProduct = ref(false) //
//
const productList = ref([])
//
const handleDeleteProdut = (id: number) => {
productList.value = productList.value.filter((item: any) => item.id !== id)
}
//
const onBindProduct = (e: any[]) => {
console.log(e)
e.forEach((item: any) => {
if (!productList.value.find((t: any) => t.id == item.id)) {
productList.value.push(item)
}
})
showProduct.value = false
}
const changeStore = (e: any) => {
store_id.value = e
resetUserId()
}
const changeWarehouse = (e: any) => {
warehouse_id.value = e
is_warehouse.value = 1
resetUserId()
}
const storeloading = ref(false)
const storeList = ref([])
const remoteMethodStore = (e = '') => {
storeloading.value = true
apiSystemStoreLists({ name: e }).then((res) => {
storeList.value = res.lists
setTimeout(() => {
storeloading.value = false
}, 300)
})
}
const warehouseloading = ref(false)
const warehouseList = ref([])
const remoteMethodWarehouse = (e = '') => {
warehouseloading.value = true
apiWarehouseLists({ name: e }).then((res) => {
warehouseList.value = res.lists
setTimeout(() => {
warehouseloading.value = false
}, 300)
})
}
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
const handleClose = () => {
emit('close')
}
//
const handleSubmit = async () => {
const product_arr = productList.value.map((item: any) => {
return {
product_id: item.product_id,
nums: item.nums,
purchase: item.purchases || 0,
total_price: item.total_price || 0,
manufacture: item.manufacture,
expiration_date: item.expiration_date
}
})
const data = { product_arr, ...formData }
await formRef.value?.validate()
await apiInventoryTransferOrderAdd(data)
popupRef.value?.close()
emit('success')
}
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiInventoryTransferOrderDetail({
id: row.id
})
setFormData(data)
}
const productModalKey = ref(0)
const resetUserId = () => {
productModalKey.value++
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,147 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="订单" prop="order_id">
<el-input
class="w-[280px]"
v-model="queryParams.order_id"
clearable
placeholder="请输入订单"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button
v-perms="['inventory_transfer_order.inventory_transfer_order/add']"
type="primary"
@click="handleAdd"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="订单" prop="order_id" show-overflow-tooltip />
<el-table-column label="转出方" prop="one_name" show-overflow-tooltip />
<el-table-column label="方式" prop="type_name" show-overflow-tooltip />
<el-table-column label="转入方" prop="two_name" show-overflow-tooltip />
<el-table-column label="是否减库" prop="types_name" show-overflow-tooltip />
<el-table-column label="备注" prop="mark" show-overflow-tooltip />
<!-- <el-table-column label="总数量" prop="total_nums" show-overflow-tooltip />
<el-table-column label="总金额" prop="total_price" show-overflow-tooltip /> -->
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleDetai(row)"
>详情</el-button
>
<el-button
v-perms="[
'inventory_transfer_order.inventory_transfer_order/delete'
]"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
<details-popup
v-if="showDetails"
ref="detailsRef"
@success="getLists"
@close="showDetails = false"
:dictData="dictData"
/>
</div>
</template>
<script lang="ts" setup name="inventoryTransferOrderLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import {
apiInventoryTransferOrderLists,
apiInventoryTransferOrderDelete
} from '@/api/inventory_transfer_order'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailsPopup from './details.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailsRef = shallowRef<InstanceType<typeof DetailsPopup>>()
//
const showEdit = ref(false)
const showDetails = ref(false)
//
const queryParams = reactive({
order_id: '',
one_type: '',
two_type: '',
types: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiInventoryTransferOrderLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleDetai = async (data: any) => {
showDetails.value = true
await nextTick()
detailsRef.value?.open()
detailsRef.value?.getDetail(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiInventoryTransferOrderDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,81 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
title="详情"
:async="true"
width="550px"
:cancelButtonText="false"
:confirmButtonText="false"
>
<el-form ref="formRef" :model="formData" label-width="90px">
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="inventoryWarehouseDETAILS">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiInventoryWarehouseAdd, apiInventoryWarehouseEdit, apiInventoryWarehouseDetail } from '@/api/inventory_warehouse'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const formData = reactive({
id: '',
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiInventoryWarehouseDetail({
id: row.id
})
setFormData(data)
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,99 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="数量" prop="nums" v-if="mode == 'edit'">
<el-input v-model="formData.nums" clearable placeholder="请输入实际数量" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="inventoryWarehouseEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import {
apiInventoryWarehouseAdd,
apiInventoryWarehouseEdit,
apiInventoryWarehouseDetail
} from '@/api/inventory_warehouse'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
console.log(mode.value)
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑仓库盘存' : '新增仓库盘存'
})
//
const formData = reactive({
id: '',
nums: ''
})
//
const formRules = reactive<any>({})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiInventoryWarehouseDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await apiInventoryWarehouseEdit(data)
: await apiInventoryWarehouseAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,178 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="仓库名称" prop="warehouse_id">
<div class="flex items-center mr-4">
<el-select v-model="queryParams.warehouse_id" filterable remote reserve-keyword
placeholder="输入仓库名称搜索" remote-show-suffix :remote-method="remoteMethod"
:loading="warehouseLoading" style="width: 240px">
<el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</div>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-input class="w-[280px]" v-model="queryParams.status" clearable placeholder="请输入状态" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['inventory_warehouse.inventory_warehouse/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
生成今日盘库
</el-button>
<el-button v-perms="['inventory_warehouse.inventory_warehouse/enter']" type="primary"
@click="inventoryShow = true">
<template #icon>
<icon name="el-icon-Plus" />
</template>
库存核准
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="商品" prop="product_id" show-overflow-tooltip>
<template #default="{ row }">
{{ row.product_name }}
</template>
</el-table-column>
<el-table-column label="后台人员" prop="admin_id" show-overflow-tooltip>
<template #default="{ row }">
{{ row.admin_name }}
</template>
</el-table-column>
<el-table-column label="盘库数量" prop="nums" show-overflow-tooltip />
<el-table-column label="确认数量" prop="enter_nums" show-overflow-tooltip />
<el-table-column label="时间" prop="create_time" show-overflow-tooltip />
<el-table-column label="状态" prop="status" show-overflow-tooltip>
<template #default="{ row }">
{{ row.status_name }}
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['inventory_warehouse.inventory_warehouse/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<el-dialog v-model="inventoryShow" title="盘库核准" width="600">
<el-form :model="EnterNumsForm" label-width="90px">
<el-form-item label="日期" prop="create_time">
<el-date-picker v-model="EnterNumsForm.create_time" type="date" placeholder="选择日期" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="inventoryShow = false">取消</el-button>
<el-button type="primary" @click="handleEnterNums"> 确认 </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="inventoryStoreLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import {
apiInventoryWarehouseLists,
apiInventoryWarehouseEnterNums
} from '@/api/inventory_warehouse'
import { apiWarehouseLists } from '@/api/warehouse'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import moment from 'moment'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const inventoryShow = ref(false)
//
const queryParams = reactive({
warehouse_id: '',
nums: '',
enter_nums: '',
status: ''
})
const warehouseLoading = ref(false)
const warehouseList = ref([])
const remoteMethod = (e = '') => {
warehouseLoading.value = true
apiWarehouseLists({
name: e,
page_size: 50
})
.then((res) => {
warehouseList.value = res.lists
setTimeout(() => {
warehouseLoading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
warehouseLoading.value = false
}, 300)
})
}
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val : any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiInventoryWarehouseLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
const EnterNumsForm = reactive({
create_time: ''
})
const handleEnterNums = () => {
EnterNumsForm.create_time = moment(EnterNumsForm.create_time).format('YYYY-MM-DD')
apiInventoryWarehouseEnterNums({ ...EnterNumsForm }).then(() => {
getLists()
})
}
//
const handleEdit = async (data : any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
getLists()
</script>

View File

@ -1,109 +0,0 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="标签名字" prop="label_name">
<el-input v-model="formData.label_name" clearable placeholder="请输入标签名字" />
</el-form-item>
<el-form-item label="logo(图片)" prop="logo">
<material-picker v-model="formData.logo" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="labelEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiLabelAdd, apiLabelEdit, apiLabelDetail } from '@/api/label'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑标签' : '新增标签'
})
//
const formData = reactive({
id: '',
label_name: '',
logo: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiLabelDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiLabelEdit(data)
: await apiLabelAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -1,131 +0,0 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="标签名字" prop="label_name">
<el-input class="w-[280px]" v-model="queryParams.label_name" clearable placeholder="请输入标签名字" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['setting.label/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['setting.label/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="标签名字" prop="label_name" show-overflow-tooltip />
<el-table-column label="logo(图片)" prop="logo">
<template #default="{ row }">
<el-image style="width:50px;height:50px;" :src="row.logo" :preview-teleported="true"/>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['setting.label/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['setting.label/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="labelLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiLabelLists, apiLabelDelete } from '@/api/label'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
label_name: '',
logo: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiLabelLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiLabelDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -1,808 +0,0 @@
<template>
<el-card>
<div class="mb-4 text-lg font-bold">预定单添加</div>
<div>
<el-form
ref="formRef"
:model="formData"
label-width="90px"
:inline="true"
:rules="formRules"
>
<el-row>
<el-col :span="5">
<el-form-item label="用户" prop="nickname">
<el-select
v-model="formData.uid"
filterable
remote
reserve-keyword
placeholder="输入用户名称搜索"
remote-show-suffix
:remote-method="remoteMethodUser"
:loading="userloading"
style="width: 220px"
@change="resetUserId"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="`${item.real_name}|${item.mobile} (ID:${item.id})`"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="姓名" prop="nickname">
<el-input v-model="formData.nickname" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="手机号" prop="phone">
<el-input v-model="formData.phone" type="input" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="地址" prop="address">
<el-input v-model="formData.address" type="input" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="订单类型" prop="order_type">
<el-radio-group
v-model="formData.order_type"
@change="handleOrderType()"
>
<el-radio :label="3">一条龙订单</el-radio>
<el-radio :label="1">铺货订单</el-radio>
<el-radio :label="2">摊贩订单</el-radio>
<!-- <el-radio :label="4">线上订单</el-radio> -->
<!-- <el-radio :label="5">仓库补货</el-radio> -->
<el-radio :label="6">往期补单-出库</el-radio>
<el-radio :label="7">采购订单</el-radio>
<el-radio :label="9">往期补单-入库</el-radio>
<el-radio :label="8">其他订单</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="门店" prop="store_id" style="width: 300px">
<el-select
v-model="formData.store_id"
placeholder="请选择门店"
size="large"
@change="resetUserId"
>
<el-option
v-for="item in storeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="是否赊账" prop="is_arrears">
<el-switch v-model="formData.is_arrears" :active-value="2" :inactive-value="1" active-text=""
inactive-text="否" inline-prompt />
</el-form-item>
</el-col>
<el-col :span="6" v-if="formData.order_type == 7">
<el-form-item label="采购人员" prop="buyer_id" style="width: 300px">
<el-select v-model="formData.buyer_id" placeholder="请选择采购人员" size="large">
<el-option v-for="item in delivery_list" :label="item.nickname" :value="item.uid" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="4">
<el-form-item label="到货时间" prop="arrival_time">
<el-date-picker
v-model="formData.arrival_time"
type="datetime"
:readonly="false"
clearable
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择到货时间"
style="width: 180px"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="桌数" prop="tables">
<el-input-number v-model="formData.tables" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="办事天数" prop="days">
<el-input-number v-model="formData.days" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="厨师" prop="chef">
<el-input v-model="formData.chef" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话" prop="chef_phone">
<el-input v-model="formData.chef_phone" type="input" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="备注" prop="purpose">
<el-input
v-model="formData.purpose"
type="input"
style="width: 480px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="内部备注" prop="mark">
<el-input v-model="formData.mark" type="input" style="width: 480px" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="4">
<el-form-item label="分单员" prop="splitting_officer">
<el-input v-model="formData.splitting_officer" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="跟单员" prop="merchandiser">
<el-input v-model="formData.merchandiser" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="仓管员" prop="distribution_personnel">
<el-input v-model="formData.distribution_personnel" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="运输员" prop="transporter">
<el-input v-model="formData.transporter" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="门店员" prop="system_store_name">
<el-input v-model="formData.system_store_name" type="input" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="区域经理" prop="regional_manager">
<el-input v-model="formData.regional_manager" type="input" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="商品" prop="product_id" class="w-full">
<div class="flex-1 w-full">
<div class="mb-2">
<el-button type="primary" @click="showProductModal()"
>添加商品</el-button
>
</div>
<el-table :data="productList">
<el-table-column label="商品ID" prop="id" show-overflow-tooltip>
<template #default="{ row, $index }">
<el-input
v-model="row.id"
@keydown.enter="enterProduct(row)"
:ref="(el) => (labelRefs[$index + 'id'] = el)"
@keyup="moveFocus($event, $index, 'id')"
/>
</template>
</el-table-column>
<el-table-column label="商品图片" prop="image" min-width="80">
<template #default="{ row }">
<el-image
style="width: 50px; height: 50px"
:src="row.image"
:preview-teleported="true"
/>
</template>
</el-table-column>
<el-table-column
label="商品名称"
prop="store_name"
show-overflow-tooltip
>
<template #default="{ row, $index }">
<el-input
v-model="row.store_name"
@keydown.enter="enterStoreName(row)"
:ref="(el) => (labelRefs[$index + 'store_name'] = el)"
@keyup="moveFocus($event, $index, 'store_name')"
/>
</template>
</el-table-column>
<el-table-column label="单位" min-width="80" show-overflow-tooltip>
<template #default="{ row }">
<div>{{ row.unit_name }}-{{ row.status_msg }}</div>
</template>
</el-table-column>
<el-table-column
label="仓库数量"
min-width="80"
show-overflow-tooltip
prop="stock"
/>
<el-table-column label="数量">
<template #default="{ row, $index }">
<el-input
v-model="row.nums"
@change="handleChange(row)"
:ref="(el) => (labelRefs[$index + 'nums'] = el)"
@keyup="moveFocus($event, $index, 'nums')"
/>
</template>
</el-table-column>
<el-table-column label="价格">
<template #default="{ row }">
<el-input v-model="row.price" disabled />
</template>
</el-table-column>
<el-table-column label="总价">
<template #default="{ row }">
<el-input v-model="row.total_price" disabled />
</template>
</el-table-column>
<el-table-column label="型号">
<template #default="{ row, $index }">
<el-input
v-model="row.marques"
:ref="(el) => (labelRefs[$index + 'marques'] = el)"
@keyup="moveFocus($event, $index, 'marques')" readonly
/>
</template>
</el-table-column>
<el-table-column label="包装">
<template #default="{ row, $index }">
<el-input
v-model="row.package"
:ref="(el) => (labelRefs[$index + 'package'] = el)"
@keyup="moveFocus($event, $index, 'package')" readonly
/>
</template>
</el-table-column>
<!-- <el-table-column label="毛重">
<template #default="{ row, $index }">
<el-input
v-model="row.gross_weight"
:ref="(el) => (labelRefs[$index + 'gross_weight'] = el)"
@keyup="moveFocus($event, $index, 'gross_weight')"
/>
</template>
</el-table-column>
<el-table-column label="净重">
<template #default="{ row, $index }">
<el-input
v-model="row.net_weight"
:ref="(el) => (labelRefs[$index + 'net_weight'] = el)"
@keyup="moveFocus($event, $index, 'net_weight')"
/>
</template>
</el-table-column>
<el-table-column label="规格">
<template #default="{ row, $index }">
<el-input
v-model="row.store_info"
:ref="(el) => (labelRefs[$index + 'store_info'] = el)"
@keyup="moveFocus($event, $index, 'store_info')"
/>
</template>
</el-table-column>
<el-table-column label="售后">
<template #default="{ row, $index }">
<el-input
v-model="row.after_sales"
:ref="(el) => (labelRefs[$index + 'after_sales'] = el)"
@keyup="moveFocus($event, $index, 'after_sales')"
/>
</template>
</el-table-column>
<el-table-column label="损耗">
<template #default="{ row, $index }">
<el-input
v-model="row.loss"
:ref="(el) => (labelRefs[$index + 'loss'] = el)"
@keyup="moveFocus($event, $index, 'loss')"
/>
</template>
</el-table-column> -->
<el-table-column label="备注">
<template #default="{ row, $index }">
<el-input
v-model="row.mark"
:ref="(el) => (labelRefs[$index + 'mark'] = el)"
@keyup="moveFocus($event, $index, 'mark')"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
type="danger"
link
@click="handleDeleteProdut(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-form-item>
<el-row>
<el-button @click="handleSubmit(formRef)" type="primary" class="w-40 ml-20"
>提交</el-button
>
<el-form-item label="总价" prop="total_price">
<div>
{{ formData.total_price }}
<span class="ml-4">该金额只做前台展示,后台会从新计算</span>
</div>
</el-form-item>
</el-row>
</el-form>
</div>
<el-dialog v-model="showProduct" title="选择商品" width="70%">
<product-warehouse-pop
:key="productModalKey"
:userId="formData.uid"
:storeId="formData.store_id"
:order_type="formData.order_type"
@onBindStore="onBindProduct"
></product-warehouse-pop>
</el-dialog>
</el-card>
<el-dialog v-model="dialogProductShow" title="选择商品" width="1200">
<el-table :data="dialogProductLists" @current-change="handleCurrentChange" :height="300">
<el-table-column label="商品ID" prop="id" show-overflow-tooltip />
<el-table-column label="商品图片" prop="image" min-width="80">
<template #default="{ row }">
<el-image
style="width: 50px; height: 50px"
:src="row.image"
:preview-teleported="true"
/>
</template>
</el-table-column>
<el-table-column
label="商品名称"
prop="store_name"
min-width="200"
show-overflow-tooltip
/>
<el-table-column label="分类" prop="cate_name" min-width="120" show-overflow-tooltip />
<el-table-column label="单位" prop="unit_name" min-width="80" show-overflow-tooltip />
<el-table-column label="商品价格" prop="price" min-width="100" show-overflow-tooltip />
<el-table-column label="仓库库存" prop="stock" min-width="100" show-overflow-tooltip />
</el-table>
</el-dialog>
</template>
<script lang="ts" setup name="storeProductEdit">
import { ElMessage, type FormInstance } from 'element-plus'
import type { PropType } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { apiBeforehandOrderAdd } from '@/api/beforehand_order'
import { apiSystemStoreLists } from '@/api/system_store'
import { apiStoreProductDetail, apiStoreProductLists } from '@/api/store_product'
import { apiDeliveryServiceLists } from '@/api/delivery_service'
import { apiUserLists } from '@/api/user'
import feedback from '@/utils/feedback'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
// const formRef = shallowRef<FormInstance>()
const formRef = ref<FormInstance>()
//
const formData = reactive({
warehouse_id: '',
is_buyer: -1,
buyer_id: '',
is_arrears: 1,
supplier_id: '',
code: '',
total_price: 0,
order_type: 3,
store_id: '',
arrival_time: '',
purpose: '',
tables: 0,
days: 0,
chef: '',
chef_phone: '',
splitting_officer: '',
merchandiser: '何月英',
distribution_personnel: '余友',
transporter: '',
system_store_name: '',
regional_manager: '张波',
mark: '',
uid: '',
nickname: '',
phone: '',
address: ''
})
const enterProduct = async (e: any) => {
const data = await apiStoreProductDetail({ id: e.id, user_id: formData.uid, store_id: formData.store_id })
setData(e, data)
}
const setData = (e: any, data: any) => {
e.id = data.id
e.image = data.image
e.marques = data.marques
e.store_info = data.store_info
e.price = data.price
e.purchase = data.purchase
e.after_sales = data.after_sales
e.loss = data.loss
e.unit = data.unit
e.store_name = data.store_name
e.unit_name = data.unit_name
e.status_msg = data.status_msg
e.stock = data.stock
e.gross_weight = data.gross_weight
e.net_weight = data.net_weight
e.package = data.package
const ids: any[] = []
productList.value.forEach((item: any) => {
ids.push(item.id)
})
if (ids.includes(0) == false) {
productList.value.push({ id: 0 })
}
}
const showProduct = ref(false) //
//
const productList = ref([{ id: 0 }])
//
const handleDeleteProdut = (id: number) => {
productList.value = productList.value.filter((item: any) => item.id !== id)
}
//
const onBindProduct = (e: any[]) => {
e.forEach((item: any) => {
if (!productList.value.find((t: any) => t.id == item.id)) {
productList.value.push(item)
}
})
showProduct.value = false
}
function handleChange(row) {
row.total_price = (row.nums * row.price).toFixed(2)
if (row.total_price > 0) {
formData.total_price = (
parseFloat(formData.total_price) + parseFloat(row.total_price)
).toFixed(2)
}
}
function handleOrderType(row) {
if (formData.order_type == 7 || formData.order_type == 5) {
formData.is_buyer = 0
} else {
formData.is_buyer = -1
}
if (formData.order_type == 7 && delivery_list.value.length == 0) {
getDeliveryList()
}
}
const router = useRouter()
//
const handleSubmit = async (formEl: FormInstance | undefined) => {
const product_arr = productList.value.map((item: any) => {
return {
product_id: item.id,
nums: item.nums,
price: item.price || 0,
purchase: item.purchase || 0,
total_price: item.total_price || 0,
marques: item.marques,
store_info: item.store_info,
after_sales: item.after_sales,
loss: item.loss,
unit: item.unit,
gross_weight: item.gross_weight,
net_weight: item.net_weight,
package: item.package,
mark: item.mark
}
})
await formEl.validate((valid, fields) => {
if (valid) {
apiBeforehandOrderAdd({
product_arr,
...formData
}).then((res) => {
setTimeout(() => {
router.push({
path: '/order/beforehand_order'
})
}, 2000)
})
}
})
}
const storeList = ref([])
apiSystemStoreLists({ page_no: 1, page_size: 100 }).then((res) => {
storeList.value = res.lists
})
const dialogProductLists = ref([])
const dialogProductShow = ref(false)
const dialogProductData = ref()
const enterStoreName = (e: any) => {
apiStoreProductLists({
store_name: e.store_name,
product_type: [0, 6],
is_warehouse: 1,
order_type: formData.order_type,
user_id: formData.uid,
store_id: formData.store_id
// is_show: 1
}).then((res) => {
if (res.count == 1) {
const data = res.lists[0]
setData(e, data)
}
if (res.count > 1) {
dialogProductLists.value = res.lists
dialogProductShow.value = true
dialogProductData.value = e
}
})
}
//
const handleCurrentChange = (val: any[]) => {
if (val == null) {
return
}
setData(dialogProductData.value, val)
dialogProductShow.value = false
dialogProductLists.value = []
dialogProductData.value = []
}
const labelRefs = reactive<Record<string, HTMLElement>>({})
const moveFocus = (event: any, index: number, key: string) => {
const keyField = [
'id',
'store_name',
'nums',
// 'price',
// 'total_price',
'marques',
// 'gross_weight',
// 'net_weight',
// 'store_info',
// 'after_sales',
// 'loss',
'package',
'mark'
]
// if (event.keyCode === 13) {
// //
// if (index === productList.value.length - 1 && key === keyField[keyField.length - 1]) {
// return
// }
// labelRefs[index + key].blur()
// if (key === keyField[keyField.length - 1]) {
// labelRefs[index + 1 + keyField[0]].focus()
// } else {
// const nextKeyIndex = keyField.findIndex((item) => item === key) + 1
// nextTick(() => {
// labelRefs[index + keyField[nextKeyIndex]].focus()
// })
// }
// }
// 38
if (event.keyCode === 38) {
if (index === 0) {
return //
}
labelRefs[index + key].blur()
nextTick(() => {
labelRefs[index - 1 + key].focus()
})
}
// 40
if (event.keyCode === 40) {
if (index === productList.value.length - 1) {
return //
}
labelRefs[index + key].blur()
nextTick(() => {
labelRefs[index + 1 + key].focus()
})
}
// 37
if (event.keyCode === 37) {
if (index === 0 && key === keyField[0]) {
return
}
labelRefs[index + key].blur()
// ,
if (key === keyField[0]) {
labelRefs[index - 1 + keyField[keyField.length - 1]].focus()
} else {
//
const preKeyIndex = keyField.findIndex((item) => item === key) - 1
nextTick(() => {
labelRefs[index + keyField[preKeyIndex]].focus()
})
}
}
// // 39
if (event.keyCode === 39) {
if (index === productList.value.length - 1 && key === keyField[keyField.length - 1]) {
return
}
labelRefs[index + key].blur()
// ,
if (key === keyField[keyField.length - 1]) {
labelRefs[index + 1 + keyField[0]].focus()
} else {
//
const nextKeyIndex = keyField.findIndex((item) => item === key) + 1
nextTick(() => {
labelRefs[index + keyField[nextKeyIndex]].focus()
})
}
}
}
//
const formRules = reactive<any>({
uid: [
{
required: true,
message: '请输入采购用户',
trigger: ['blur']
}
],
store_id: [
{
required: true,
message: '请选择门店',
trigger: ['blur']
}
],
arrival_time: [
{
required: true,
message: '请选择到货时间',
trigger: ['blur']
}
],
tables: [
{
required: true,
message: '请输入桌数',
trigger: ['blur']
}
],
days: [
{
required: true,
message: '请输入天数',
trigger: ['blur']
}
],
chef: [
{
required: true,
message: '请输入厨师',
trigger: ['blur']
}
],
chef_phone: [
{
required: true,
message: '请输入厨师电话',
trigger: ['blur']
}
],
purpose: [
{
required: true,
message: '请输入采购目的',
trigger: ['blur']
}
],
system_store_name: [
{
required: true,
message: '请输入门店联系人',
trigger: ['blur']
}
],
splitting_officer: [
{
required: true,
message: '请输入分单员',
trigger: ['blur']
}
],
merchandiser: [
{
required: true,
message: '请输入跟单员',
trigger: ['blur']
}
],
distribution_personnel: [
{
required: true,
message: '请输入仓管员',
trigger: ['blur']
}
],
transporter: [
{
required: true,
message: '请输入运输员',
trigger: ['blur']
}
],
regional_manager: [
{
required: true,
message: '请输入区域经理',
trigger: ['blur']
}
]
})
const userloading = ref(false)
const userList = ref([])
const remoteMethodUser = (e = '') => {
userloading.value = true
apiUserLists({
nickname: e,
page_size: 10
})
.then((res) => {
userList.value = res.lists
setTimeout(() => {
userloading.value = false
}, 300)
})
.catch((err) => {
setTimeout(() => {
userloading.value = false
}, 300)
})
}
const showProductModal = () => {
showProduct.value = true
}
const productModalKey = ref(0)
const resetUserId = (e) => {
productModalKey.value++
}
const delivery_list = ref([])
const getDeliveryList = () => {
apiDeliveryServiceLists({ type: 3 }).then((res) => {
delivery_list.value = res.lists
})
}
</script>

Some files were not shown because too many files have changed in this diff Show More