添加预订单

This commit is contained in:
lewis 2025-01-03 17:48:10 +08:00
parent ea51d1a974
commit f1c191d1a8
11 changed files with 1910 additions and 0 deletions

View 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 })
}

View 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
View 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 })
}

View File

@ -20,3 +20,6 @@ export function getUserInfo() {
export function setUserInfo(params: any) {
return request.post({ url: '/auth/admin/editSelf', params })
}
export function apiUserLists(params: any) {
return request.get({ url: '/user/user/lists', params })
}

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>