添加预订单
This commit is contained in:
parent
ea51d1a974
commit
f1c191d1a8
92
src/api/beforehand_order.ts
Normal file
92
src/api/beforehand_order.ts
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 预订单表列表
|
||||||
|
export function apiBeforehandOrderLists(params: any) {
|
||||||
|
return request.get({ url: '/beforehand_order/beforehandorder/lists', 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 apiBeforehandOrderDelete(params: any) {
|
||||||
|
return request.post({ url: '/beforehand_order/beforehandorder/delete', 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 })
|
||||||
|
}
|
60
src/api/beforehand_order_cart_info.ts
Normal file
60
src/api/beforehand_order_cart_info.ts
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
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
|
||||||
|
})
|
||||||
|
}
|
42
src/api/store_product.ts
Normal file
42
src/api/store_product.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
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 })
|
||||||
|
}
|
||||||
|
export function apiAdminStoreProductLists(params: any) {
|
||||||
|
return request.get({ url: '/store_product/storeproduct/adminLists', params })
|
||||||
|
}
|
@ -20,3 +20,6 @@ export function getUserInfo() {
|
|||||||
export function setUserInfo(params: any) {
|
export function setUserInfo(params: any) {
|
||||||
return request.post({ url: '/auth/admin/editSelf', params })
|
return request.post({ url: '/auth/admin/editSelf', params })
|
||||||
}
|
}
|
||||||
|
export function apiUserLists(params: any) {
|
||||||
|
return request.get({ url: '/user/user/lists', params })
|
||||||
|
}
|
602
src/views/beforehand_order/add.vue
Normal file
602
src/views/beforehand_order/add.vue
Normal file
@ -0,0 +1,602 @@
|
|||||||
|
<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="1">铺货订单</el-radio>
|
||||||
|
<el-radio :label="2">摊贩订单</el-radio>
|
||||||
|
<el-radio :label="3">一条龙订单</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="一键不采购" prop="is_buyer">
|
||||||
|
<el-radio-group v-model="formData.is_buyer">
|
||||||
|
<el-radio :label="0">待处理</el-radio>
|
||||||
|
<el-radio :label="-1">不采购</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</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-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')" />
|
||||||
|
</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')" />
|
||||||
|
</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"
|
||||||
|
@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 { apiStoreProductDetail, apiStoreProductLists } from '@/api/store_product'
|
||||||
|
import { apiUserLists } from '@/api/user'
|
||||||
|
import feedback from '@/utils/feedback'
|
||||||
|
import productWarehousePop from './component/productWarehousePop.vue'
|
||||||
|
|
||||||
|
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,
|
||||||
|
supplier_id: '',
|
||||||
|
code: '',
|
||||||
|
total_price: 0,
|
||||||
|
order_type: 1,
|
||||||
|
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 })
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 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,
|
||||||
|
user_id: formData.uid
|
||||||
|
// 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',
|
||||||
|
'mark'
|
||||||
|
]
|
||||||
|
|
||||||
|
// 向上 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++
|
||||||
|
}
|
||||||
|
</script>
|
140
src/views/beforehand_order/component/editProduct.vue
Normal file
140
src/views/beforehand_order/component/editProduct.vue
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<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" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="数量" prop="nums">
|
||||||
|
<el-input
|
||||||
|
v-model="formData.nums"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入数量"
|
||||||
|
:readonly="false"
|
||||||
|
@change="compute"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="零售价" prop="purchases">
|
||||||
|
<el-input
|
||||||
|
v-model="formData.purchases"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入价格"
|
||||||
|
:readonly="false"
|
||||||
|
@change="compute"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="总价" prop="total_price">
|
||||||
|
<el-input
|
||||||
|
v-model="formData.total_price"
|
||||||
|
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="warehouseOrderEdit">
|
||||||
|
import type { FormInstance } from 'element-plus'
|
||||||
|
import Popup from '@/components/popup/index.vue'
|
||||||
|
import {
|
||||||
|
apiBeforehandOrderCartInfoEdit,
|
||||||
|
apiBeforehandOrderCartInfoDetail
|
||||||
|
} from '@/api/beforehand_order_cart_info'
|
||||||
|
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: '',
|
||||||
|
bhoid: '',
|
||||||
|
store_name: '',
|
||||||
|
total_price: '',
|
||||||
|
nums: '',
|
||||||
|
purchases: '',
|
||||||
|
mark: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
// 表单验证
|
||||||
|
const formRules = reactive<any>({})
|
||||||
|
const compute = () => {
|
||||||
|
formData.total_price = (formData.nums * formData.purchases).toFixed(2)
|
||||||
|
}
|
||||||
|
// 获取详情
|
||||||
|
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.nums = data.cart_num
|
||||||
|
console.log(data)
|
||||||
|
formData.purchases = data.price
|
||||||
|
}
|
||||||
|
|
||||||
|
const getDetail = async (row: Record<string, any>) => {
|
||||||
|
const data = await apiBeforehandOrderCartInfoDetail({
|
||||||
|
id: row.id
|
||||||
|
})
|
||||||
|
setFormData(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交按钮
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
await formRef.value?.validate()
|
||||||
|
const data = { ...formData }
|
||||||
|
await apiBeforehandOrderCartInfoEdit(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>
|
157
src/views/beforehand_order/component/orderCartInfo.vue
Normal file
157
src/views/beforehand_order/component/orderCartInfo.vue
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form class="inline-block" :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-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div>
|
||||||
|
<el-table :data="pager.lists" v-loading="pager.loading">
|
||||||
|
<el-table-column label="id" prop="id" show-overflow-tooltip />
|
||||||
|
<el-table-column label="商品信息" prop="store_name" show-overflow-tooltip>
|
||||||
|
<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="top_cate_name" show-overflow-tooltip />
|
||||||
|
<el-table-column label="单位" prop="unit_name" show-overflow-tooltip />
|
||||||
|
<el-table-column label="仓库库存" prop="warehouse_stock" show-overflow-tooltip />
|
||||||
|
<el-table-column label="需要数量" prop="cart_num" show-overflow-tooltip />
|
||||||
|
<el-table-column label="分拣数量" prop="accept_num" show-overflow-tooltip />
|
||||||
|
<el-table-column label="零售价" prop="price" show-overflow-tooltip />
|
||||||
|
<el-table-column label="合计金额" prop="total_price" show-overflow-tooltip />
|
||||||
|
<el-table-column label="支付金额" prop="pay_price" show-overflow-tooltip />
|
||||||
|
<el-table-column label="备注" prop="mark" show-overflow-tooltip />
|
||||||
|
<el-table-column label="操作" width="120" fixed="right">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button v-perms="['beforehand_order_cart_info.beforehand_order_cart_info/edit']"
|
||||||
|
type="primary" link @click="handleEdit(row)">
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button v-perms="[
|
||||||
|
'beforehand_order_cart_info.beforehand_order_cart_info/delete'
|
||||||
|
]" type="danger" link @click="handleDeletes(row.id)">
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<div class="flex mt-4 justify-end" v-if="pager.lists.length < pager.count">
|
||||||
|
<pagination v-model="pager" @change="getLists" />
|
||||||
|
</div>
|
||||||
|
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup name="subOrder">
|
||||||
|
import { usePaging } from '@/hooks/usePaging'
|
||||||
|
import {
|
||||||
|
apiBeforehandOrderCartInfoLists,
|
||||||
|
apiBeforehandOrderCartInfoDelete,
|
||||||
|
apiBeforehandOrderCartInfoProcurementStatus,
|
||||||
|
apiBeforehandOrderCartInfoFix
|
||||||
|
} from '@/api/beforehand_order_cart_info'
|
||||||
|
import feedback from '@/utils/feedback'
|
||||||
|
import EditPopup from './editProduct.vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
const route = useRoute()
|
||||||
|
|
||||||
|
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||||
|
|
||||||
|
// 是否显示编辑框
|
||||||
|
const showEdit = ref(false)
|
||||||
|
const ids = ref()
|
||||||
|
// 编辑
|
||||||
|
const handleEdit = async (data : any) => {
|
||||||
|
showEdit.value = true
|
||||||
|
await nextTick()
|
||||||
|
editRef.value?.open('edit')
|
||||||
|
editRef.value?.setFormData(data)
|
||||||
|
}
|
||||||
|
// 删除
|
||||||
|
const handleDeletes = async (id : number | any[]) => {
|
||||||
|
await feedback.confirm('确定要删除?')
|
||||||
|
await apiBeforehandOrderCartInfoDelete({ id })
|
||||||
|
getLists()
|
||||||
|
}
|
||||||
|
const formData = ref({
|
||||||
|
id: '',
|
||||||
|
top_cate: []
|
||||||
|
})
|
||||||
|
const queryParams = reactive({
|
||||||
|
store_name: '',
|
||||||
|
bhoid: '',
|
||||||
|
pay_type: '',
|
||||||
|
top_cate: '',
|
||||||
|
top_cate_value: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const purchase_product_offer = ref({
|
||||||
|
order_id: '',
|
||||||
|
product_id: '',
|
||||||
|
need_num: '',
|
||||||
|
unit: '',
|
||||||
|
is_buyer: '',
|
||||||
|
buyer_id: '',
|
||||||
|
mark: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
// 分页相关
|
||||||
|
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||||
|
fetchFun: apiBeforehandOrderCartInfoLists,
|
||||||
|
params: queryParams
|
||||||
|
})
|
||||||
|
const topCateChange = (row : any) => {
|
||||||
|
if (row.id == 0) {
|
||||||
|
queryParams.top_cate = ''
|
||||||
|
queryParams.top_cate_value = '全部'
|
||||||
|
getLists()
|
||||||
|
} else {
|
||||||
|
queryParams.top_cate = row.id
|
||||||
|
queryParams.top_cate_value = row.name
|
||||||
|
|
||||||
|
getLists()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const beforehand_order_cart_info = () => {
|
||||||
|
apiBeforehandOrderCartInfoLists({
|
||||||
|
export: 2,
|
||||||
|
bhoid: formData.value.id
|
||||||
|
}).then((res) => {
|
||||||
|
window.open(res.url, '_blank')
|
||||||
|
ElMessage.success('导出成功')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getList(data : any) {
|
||||||
|
formData.value = data
|
||||||
|
queryParams.bhoid = data.id
|
||||||
|
getLists()
|
||||||
|
}
|
||||||
|
|
||||||
|
const fixAcceptNum = () => {
|
||||||
|
apiBeforehandOrderCartInfoFix({
|
||||||
|
bhoid: formData.value.id
|
||||||
|
}).then((res) => {
|
||||||
|
ElMessage.success('处理成功')
|
||||||
|
getLists()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
queryParams.bhoid = route.query.id
|
||||||
|
formData.value.id = route.query.id
|
||||||
|
getLists()
|
||||||
|
})
|
||||||
|
defineExpose({
|
||||||
|
getList
|
||||||
|
})
|
||||||
|
</script>
|
81
src/views/beforehand_order/component/productWarehousePop.vue
Normal file
81
src/views/beforehand_order/component/productWarehousePop.vue
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<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 { apiAdminStoreProductLists } from '@/api/store_product'
|
||||||
|
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { defineProps } from 'vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
userId: Number
|
||||||
|
});
|
||||||
|
|
||||||
|
// 查询条件
|
||||||
|
const queryParams = reactive({
|
||||||
|
store_name: '',
|
||||||
|
is_warehouse: 1,
|
||||||
|
user_id: props.userId,
|
||||||
|
type_filter: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
// 选中数据
|
||||||
|
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: apiAdminStoreProductLists,
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
</script>
|
361
src/views/beforehand_order/details.vue
Normal file
361
src/views/beforehand_order/details.vue
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
<template>
|
||||||
|
<el-card>
|
||||||
|
<div class="flex items-center justify-between m-4">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">姓名:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.nickname }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">手机:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.phone }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">送货地址:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.address }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center justify-between m-4">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">单号:</div>
|
||||||
|
<div style="color: black">{{ formData.order_id }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">支付单号:</div>
|
||||||
|
<div style="color: black">{{ formData.order_sn }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">门店:</div>
|
||||||
|
<div style="color: black">{{ formData.system_store }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center justify-between m-4">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">到货时间:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.arrival_time }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">桌数:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.tables }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">办事天数:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.days }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">厨师:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.chef }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">电话:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.chef_phone }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center justify-between m-4">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">采购事由:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.purpose }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">备注:</div>
|
||||||
|
<div style="color: black">{{ formData.mark }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">分单员:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.splitting_officer }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">跟单员:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.merchandiser }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">仓管员:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.distribution_personnel }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">运输员:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.transporter }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">门店员:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.system_store_name }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">区域经理:</div>
|
||||||
|
<div style="color: black">{{ formData.other_data?.regional_manager }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center justify-between m-4">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">总价</div>
|
||||||
|
<div style="color: black">¥{{ formData.total_price }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<div style="color: gray">支付金额</div>
|
||||||
|
<div style="color: black">¥{{ formData.pay_price }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col flex-2">
|
||||||
|
<div style="color: gray">时间</div>
|
||||||
|
<div style="color: black">{{ formData.create_time }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-button type="primary" @click="dialogShop = true" v-if="formData.order_type != 7">
|
||||||
|
追加
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-tabs v-model="activeName" class="demo-tabs mt-3" type="border-card" @tab-change="tabChange">
|
||||||
|
<el-tab-pane v-if="formData.order_type != 7" label="明细" name="second">
|
||||||
|
<orderCartInfo ref="orderCartInfoRef" :id="formData.id" />
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</el-card>
|
||||||
|
<el-dialog v-model="dialogShop" title="追加商品" width="1200">
|
||||||
|
<el-form ref="formRef" label-width="90px">
|
||||||
|
<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="180" show-overflow-tooltip />
|
||||||
|
<el-table-column label="分类" prop="cate_name" min-width="80" 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.num" @change="handleChange(row)" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="价格" min-width="150">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-input v-model="row.price" disabled />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="总价" min-width="150">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-input v-model="row.total_price" disabled />
|
||||||
|
</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>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="dialogShop = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="appendAdd"> 确认 </el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
<el-dialog v-model="showProduct" title="选择商品" width="70%">
|
||||||
|
<product-warehouse-pop :key="productModalKey" :userId="formData.uid"
|
||||||
|
@onBindStore="onBindProduct"></product-warehouse-pop>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog v-model="generateOrderShow" title="生成支付订单设置" width="600">
|
||||||
|
<el-form :model="generateOrderData" label-width="90px">
|
||||||
|
<el-form-item label="用户">
|
||||||
|
<el-select v-model="generateOrderData.user_id" filterable remote reserve-keyword placeholder="输入用户名称搜索"
|
||||||
|
remote-show-suffix :remote-method="remoteMethodUser" :loading="userloading" style="width: 240px">
|
||||||
|
<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-form-item label="门店" prop="store_id">
|
||||||
|
<el-select v-model="generateOrderData.store_id" placeholder="请选择门店" size="large" style="width: 240px">
|
||||||
|
<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="pay_type">
|
||||||
|
<el-select v-model="generateOrderData.pay_type" placeholder="请选择支付方式" size="large" style="width: 240px">
|
||||||
|
<el-option label="微信小程序支付" value="7" />
|
||||||
|
<el-option label="采购款支付" value="18" />
|
||||||
|
<el-option label="余额支付" value="3" />
|
||||||
|
<el-option label="现金支付" value="17" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="generateOrderShow = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="generateOrderAdd"> 确认 </el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup name="storeOrderDETAILS">
|
||||||
|
import { ElMessage, type FormInstance } from 'element-plus'
|
||||||
|
import {
|
||||||
|
apiBeforehandOrderCartInfoLists,
|
||||||
|
apiBeforehandOrderCartInfoAppendAdd
|
||||||
|
} from '@/api/beforehand_order_cart_info'
|
||||||
|
import {
|
||||||
|
apiPurchaseOrderExport,
|
||||||
|
apiPurchaseOrderGenerateOrder,
|
||||||
|
apiBeforehandOrderDetail,
|
||||||
|
apiPurchaseOrderExportOrderList,
|
||||||
|
apiPurchaseOrderOrderAllocation,
|
||||||
|
apiPurchaseOrderOrderInfo,
|
||||||
|
apiPurchaseOrderOrderOutbound
|
||||||
|
} from '@/api/beforehand_order'
|
||||||
|
import type { PropType, nextTick } from 'vue'
|
||||||
|
import { usePaging } from '@/hooks/usePaging'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
import orderCartInfo from './component/orderCartInfo.vue'
|
||||||
|
import productWarehousePop from './component/productWarehousePop.vue'
|
||||||
|
import { apiUserLists } from '@/api/user'
|
||||||
|
|
||||||
|
const generateOrderShow = ref(false)
|
||||||
|
|
||||||
|
const orderCartInfoRef = ref(null)
|
||||||
|
const route = useRoute()
|
||||||
|
const tabChange = (type : any) => {
|
||||||
|
if (type == 'second') {
|
||||||
|
orderCartInfoRef.value?.getList(formData.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defineProps({
|
||||||
|
dictData: {
|
||||||
|
type: Object as PropType<Record<string, any[]>>,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits(['success', 'close'])
|
||||||
|
const showDialog = ref(false)
|
||||||
|
const dialogShop = ref(false)
|
||||||
|
const activeName = ref('second')
|
||||||
|
const warehouse_id = ref(0)
|
||||||
|
const is_warehouse = ref(0)
|
||||||
|
const financial_pm = ref(0)
|
||||||
|
// 表单数据
|
||||||
|
const formData = ref({
|
||||||
|
id: '',
|
||||||
|
code: '',
|
||||||
|
total_price: '',
|
||||||
|
supplier_name: '',
|
||||||
|
warehouse_name: '',
|
||||||
|
system_store: '',
|
||||||
|
financial_pm: '',
|
||||||
|
order_sn: '',
|
||||||
|
warehousing_id: '',
|
||||||
|
top_cate: [],
|
||||||
|
uid: '',
|
||||||
|
store_id: '',
|
||||||
|
order_type: ''
|
||||||
|
})
|
||||||
|
const generateOrderData = ref({
|
||||||
|
id: '',
|
||||||
|
user_id: '',
|
||||||
|
pay_type: '',
|
||||||
|
store_id: ''
|
||||||
|
})
|
||||||
|
const appendAdd = () => {
|
||||||
|
const product_arr = productList.value.map((item : any) => {
|
||||||
|
return {
|
||||||
|
id: item.id,
|
||||||
|
nums: item.num || 0,
|
||||||
|
purchase: item.price || 0,
|
||||||
|
prices: item.purchase || 0,
|
||||||
|
total_price: item.total_price || 0,
|
||||||
|
manufacture: item.manufacture,
|
||||||
|
expiration_date: item.expiration_date
|
||||||
|
}
|
||||||
|
})
|
||||||
|
apiBeforehandOrderCartInfoAppendAdd({
|
||||||
|
id: queryParams.bhoid,
|
||||||
|
product_arr: product_arr
|
||||||
|
}).then((res) => {
|
||||||
|
dialogShop.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const queryParams = reactive({
|
||||||
|
bhoid: route.query.id,
|
||||||
|
pay_type: '',
|
||||||
|
top_cate: '',
|
||||||
|
top_cate_value: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const getDetail = () => {
|
||||||
|
apiBeforehandOrderDetail({ id: queryParams.bhoid }).then((row : any) => {
|
||||||
|
formData.value = { ...row }
|
||||||
|
warehouse_id.value = row.warehouse_id
|
||||||
|
generateOrderData.value.id = row.id
|
||||||
|
generateOrderData.value.store_id = row.store_id
|
||||||
|
generateOrderData.value.user_id = row.uid
|
||||||
|
if (row.financial_pm == 0) {
|
||||||
|
is_warehouse.value = 1
|
||||||
|
} else {
|
||||||
|
financial_pm.value = 1
|
||||||
|
}
|
||||||
|
productList.value = []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
getDetail()
|
||||||
|
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[]) => {
|
||||||
|
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.num * row.price
|
||||||
|
}
|
||||||
|
//打开弹窗
|
||||||
|
const open = () => {
|
||||||
|
showDialog.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
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 storeList = ref([])
|
||||||
|
const generateOrderAdd = () => {
|
||||||
|
apiPurchaseOrderGenerateOrder(generateOrderData.value).then((res) => {
|
||||||
|
generateOrderShow.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const productModalKey = ref(0)
|
||||||
|
const resetUserId = (e) => {
|
||||||
|
productModalKey.value++
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open
|
||||||
|
})
|
||||||
|
</script>
|
175
src/views/beforehand_order/edit.vue
Normal file
175
src/views/beforehand_order/edit.vue
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
<template>
|
||||||
|
<div class="edit-popup">
|
||||||
|
<popup ref="popupRef" :title="popupTitle" :async="true" width="1000px" @confirm="handleSubmit"
|
||||||
|
@close="handleClose">
|
||||||
|
<el-form ref="formRef" :model="formData" label-width="90px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="用户" prop="nickname">
|
||||||
|
<el-input v-model="formData.other_data.nickname" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="电话" prop="phone">
|
||||||
|
<el-input v-model="formData.other_data.phone" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="地址" prop="address">
|
||||||
|
<el-input v-model="formData.other_data.address" type="input" style="width: 400px" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="到货时间" prop="arrival_time">
|
||||||
|
<el-date-picker v-model="formData.other_data.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="6">
|
||||||
|
<el-form-item label="桌数" prop="tables">
|
||||||
|
<el-input-number v-model="formData.other_data.tables" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="办事天数" prop="days">
|
||||||
|
<el-input-number v-model="formData.other_data.days" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="厨师" prop="chef">
|
||||||
|
<el-input v-model="formData.other_data.chef" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="电话" prop="chef_phone">
|
||||||
|
<el-input v-model="formData.other_data.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.other_data.purpose" 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.other_data.splitting_officer" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="跟单员" prop="merchandiser">
|
||||||
|
<el-input v-model="formData.other_data.merchandiser" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="仓管员" prop="distribution_personnel">
|
||||||
|
<el-input v-model="formData.other_data.distribution_personnel" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="运输员" prop="transporter">
|
||||||
|
<el-input v-model="formData.other_data.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.other_data.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.other_data.regional_manager" type="input" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-form-item label="图片" prop="file">
|
||||||
|
<material-picker v-model="formData.file" :limit="1" />
|
||||||
|
</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="beforehandOrderEdit">
|
||||||
|
import type { FormInstance } from 'element-plus'
|
||||||
|
import Popup from '@/components/popup/index.vue'
|
||||||
|
import {
|
||||||
|
apiBeforehandOrderAdd,
|
||||||
|
apiBeforehandOrderEdit,
|
||||||
|
apiBeforehandOrderDetail
|
||||||
|
} from '@/api/beforehand_order'
|
||||||
|
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: '',
|
||||||
|
file: '',
|
||||||
|
other_data: {},
|
||||||
|
store_id: '',
|
||||||
|
mark: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
// 获取详情
|
||||||
|
const setFormData = async (data : Record<any, any>) => {
|
||||||
|
const datas = await apiBeforehandOrderDetail({
|
||||||
|
id: data.id
|
||||||
|
})
|
||||||
|
for (const key in formData) {
|
||||||
|
if (datas[key] != null && datas[key] != undefined) {
|
||||||
|
//@ts-ignore
|
||||||
|
formData[key] = datas[key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提交按钮
|
||||||
|
const handleSubmit = async () => {
|
||||||
|
await formRef.value?.validate()
|
||||||
|
const data = { ...formData }
|
||||||
|
mode.value == 'edit' ? await apiBeforehandOrderEdit(data) : await apiBeforehandOrderAdd(data)
|
||||||
|
popupRef.value?.close()
|
||||||
|
emit('success')
|
||||||
|
}
|
||||||
|
|
||||||
|
//打开弹窗
|
||||||
|
const open = (type = 'add') => {
|
||||||
|
mode.value = type
|
||||||
|
popupRef.value?.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭回调
|
||||||
|
const handleClose = () => {
|
||||||
|
emit('close')
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
open,
|
||||||
|
setFormData
|
||||||
|
})
|
||||||
|
</script>
|
197
src/views/beforehand_order/index.vue
Normal file
197
src/views/beforehand_order/index.vue
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card class="!border-none mb-4" shadow="never">
|
||||||
|
<el-form class="mb-[-16px]" :model="queryParams" label-width="80px">
|
||||||
|
<el-row>
|
||||||
|
<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 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 label="订单类型" prop="order_type">
|
||||||
|
<el-select v-model="queryParams.order_type" placeholder="请选择订单类型" style="width: 240px">
|
||||||
|
<el-option :value="1" label="铺货订单"></el-option>
|
||||||
|
<el-option :value="2" label="摊贩订单"></el-option>
|
||||||
|
<el-option :value="3" label="一条龙订单"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="支付订单号" prop="order_sn">
|
||||||
|
<el-input class="w-[200px]" v-model="queryParams.order_sn" clearable placeholder="请输入订单号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="入库单号" prop="order_rk">
|
||||||
|
<el-input class="w-[200px]" v-model="queryParams.order_rk" clearable placeholder="请输入入库单号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="出库单号" prop="order_ck">
|
||||||
|
<el-input class="w-[200px]" v-model="queryParams.order_ck" clearable placeholder="请输入出库单号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="mark">
|
||||||
|
<el-input class="w-[200px]" v-model="queryParams.mark" clearable placeholder="请输入备注" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="出入库" prop="warehouse_type">
|
||||||
|
<el-select v-model="queryParams.warehouse_type" placeholder="请选择出入库类型" style="width: 180px">
|
||||||
|
<el-option :value="1" label="未出库"></el-option>
|
||||||
|
<el-option :value="2" label="已出库"></el-option>
|
||||||
|
<el-option :value="3" label="未入库"></el-option>
|
||||||
|
<el-option :value="4" label="已入库"></el-option>
|
||||||
|
</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-row>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||||
|
<router-link :to="{
|
||||||
|
path: 'beforehand_order_add'
|
||||||
|
}" class="ml-4">
|
||||||
|
<el-button type="primary"> 添加 </el-button>
|
||||||
|
</router-link>
|
||||||
|
<router-link :to="{
|
||||||
|
path: 'beforehand_order_cart_info'
|
||||||
|
}" class="ml-4">
|
||||||
|
<el-button type="primary"> 商品列表 </el-button>
|
||||||
|
</router-link>
|
||||||
|
<div class="mt-4">
|
||||||
|
<el-table :data="pager.lists">
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
<el-table-column label="id" prop="id" show-overflow-tooltip width="55" />
|
||||||
|
<el-table-column label="操作时间/人员" prop="create_time" show-overflow-tooltip width="150">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<div>{{ row.admin_name }}</div>
|
||||||
|
<div>{{ row.create_time }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="单号" prop="order_id" show-overflow-tooltip width="180">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<div>{{ row.order_id }}</div>
|
||||||
|
<div>{{ row.order_sn }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="订单类型" prop="order_type_name" show-overflow-tooltip />
|
||||||
|
<el-table-column label="门店" prop="system_store" show-overflow-tooltip />
|
||||||
|
<el-table-column label="入库" prop="warehousing" show-overflow-tooltip />
|
||||||
|
<el-table-column label="出库" prop="outbound" show-overflow-tooltip />
|
||||||
|
<el-table-column label="总价格" prop="total_price" show-overflow-tooltip />
|
||||||
|
<el-table-column label="内部备注" prop="mark" show-overflow-tooltip />
|
||||||
|
<el-table-column label="通知" prop="msg" show-overflow-tooltip />
|
||||||
|
<el-table-column label="文件" prop="file" show-overflow-tooltip>
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-image style="width: 50px; height: 50px" :src="row.file" :preview-teleported="true" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="120" fixed="right">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<router-link :to="{
|
||||||
|
path: 'beforehand_order_details',
|
||||||
|
query: {
|
||||||
|
id: row.id
|
||||||
|
}
|
||||||
|
}" class="ml-4">
|
||||||
|
详情
|
||||||
|
</router-link>
|
||||||
|
<el-button link @click="handleEdit(row)"
|
||||||
|
v-perms="['beforehand_order.beforehand_order/edit']">
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button v-perms="['beforehand_order.beforehand_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" @success="getLists" @close="showEdit = false" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup name="manageProjectLists">
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
import { usePaging } from '@/hooks/usePaging'
|
||||||
|
import {
|
||||||
|
apiBeforehandOrderLists,
|
||||||
|
apiBeforehandOrderDelete,
|
||||||
|
apiPurchaseOrderOrderOutbound,
|
||||||
|
apiPurchaseOrderOrderOutbound3
|
||||||
|
} from '@/api/beforehand_order'
|
||||||
|
import feedback from '@/utils/feedback'
|
||||||
|
import EditPopup from './edit.vue'
|
||||||
|
import moment from 'moment'
|
||||||
|
|
||||||
|
// 查询条件
|
||||||
|
const queryParams = reactive({
|
||||||
|
order_id: '',
|
||||||
|
product_name: '',
|
||||||
|
financial_pm: 1,
|
||||||
|
store_id: '',
|
||||||
|
start_time: '',
|
||||||
|
end_time: '',
|
||||||
|
supplier_id: '',
|
||||||
|
order_sn: '',
|
||||||
|
order_ck: '',
|
||||||
|
order_rk: '',
|
||||||
|
order_type: '',
|
||||||
|
warehouse_type: '',
|
||||||
|
mark: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const startEndTime = ref([])
|
||||||
|
|
||||||
|
const changeStartEndTime = () => {
|
||||||
|
if (startEndTime.value[0] && startEndTime.value[1]) {
|
||||||
|
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'
|
||||||
|
} else {
|
||||||
|
queryParams.start_time = ''
|
||||||
|
queryParams.end_time = ''
|
||||||
|
}
|
||||||
|
getLists()
|
||||||
|
}
|
||||||
|
|
||||||
|
const date = ref([])
|
||||||
|
|
||||||
|
const showEdit = ref(false)
|
||||||
|
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||||
|
// 详情
|
||||||
|
const handleEdit = async (data : any) => {
|
||||||
|
showEdit.value = true
|
||||||
|
await nextTick()
|
||||||
|
editRef.value?.open('edit')
|
||||||
|
editRef.value?.setFormData(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页相关
|
||||||
|
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||||
|
fetchFun: apiBeforehandOrderLists,
|
||||||
|
params: queryParams
|
||||||
|
})
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
const handleDelete = async (id : number | any[]) => {
|
||||||
|
await feedback.confirm('确定要删除?')
|
||||||
|
await apiBeforehandOrderDelete({ id })
|
||||||
|
getLists()
|
||||||
|
}
|
||||||
|
|
||||||
|
getLists()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.esplise {
|
||||||
|
width: 100px;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
x
Reference in New Issue
Block a user