From 4530c68ea3f172b9e01f3f4eec794955b086dcba Mon Sep 17 00:00:00 2001
From: mkm <727897186@qq.com>
Date: Sun, 29 Sep 2024 22:00:26 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BC=80=E5=8F=91=E7=8E=AF?=
 =?UTF-8?q?=E5=A2=83=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=AD=E7=9A=84?=
 =?UTF-8?q?URL=E5=9C=B0=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .env.development                           |   2 +-
 src/views/order/beforehand_order/add.vue   | 204 +++++++++++++++++
 src/views/order/beforehand_order/index.vue | 254 +++++++++++++++++++++
 3 files changed, 459 insertions(+), 1 deletion(-)
 create mode 100644 src/views/order/beforehand_order/add.vue
 create mode 100644 src/views/order/beforehand_order/index.vue

diff --git a/.env.development b/.env.development
index 522e48fce..2eb6f3946 100644
--- a/.env.development
+++ b/.env.development
@@ -6,6 +6,6 @@ VITE_NOW_TYPE = 'dist'
 # VITE_APP_BASE_URL='http://192.168.1.10:8546'
 # VITE_APP_BASE_URL='https://test-multi-store.lihaink.cn'
 # VITE_APP_BASE_URL='https://multi-store.lihaink.cn'
-VITE_APP_BASE_URL='http://192.168.1.22:8545'
+VITE_APP_BASE_URL='http://192.168.1.6:8545'
 # VITE_APP_BASE_URL='https://ceshi-multi-store.lihaink.cn'
 
diff --git a/src/views/order/beforehand_order/add.vue b/src/views/order/beforehand_order/add.vue
new file mode 100644
index 000000000..8cb144673
--- /dev/null
+++ b/src/views/order/beforehand_order/add.vue
@@ -0,0 +1,204 @@
+<template>
+    <el-card>
+        <div class="mb-4 text-lg font-bold">商品入库操作</div>
+        <div>
+            <el-form ref="formRef" :model="formData" label-width="90px">
+                <el-form-item label="总价" prop="total_price">
+                    <el-input
+                        v-model="formData.total_price"
+                        clearable
+                        placeholder="请输入总价"
+                        :readonly="false"
+                        style="width: 240px"
+                    />
+                </el-form-item>
+                <el-form-item label="备注">
+                    <el-input v-model="formData.remark" type="input" rows="4" />
+                </el-form-item>
+                <el-form-item label="商品" prop="store_id">
+                    <div class="flex-1 w-full">
+                        <div class="mb-2">
+                            <el-button type="primary" @click="showProduct = true"
+                                >添加商品</el-button
+                            >
+                        </div>
+                        <el-table :data="productList">
+                            <el-table-column label="商品ID" prop="id" show-overflow-tooltip />
+                            <el-table-column label="商品图片" prop="image" min-width="80">
+                                <template #default="{ row }">
+                                    <el-image
+                                        style="width: 50px; height: 50px"
+                                        :src="row.image"
+                                        :preview-teleported="true"
+                                    />
+                                </template>
+                            </el-table-column>
+                            <el-table-column
+                                label="商品名称"
+                                prop="store_name"
+                                min-width="200"
+                                show-overflow-tooltip
+                            />
+                            <el-table-column
+                                label="单位"
+                                prop="unit_name"
+                                min-width="80"
+                                show-overflow-tooltip
+                            />
+                            <el-table-column label="数量" min-width="150">
+                                <template #default="{ row }">
+                                    <el-input v-model="row.nums" @change="handleChange(row)" />
+                                </template>
+                            </el-table-column>
+                            <el-table-column label="价格" min-width="150">
+                                <template #default="{ row }">
+                                    <el-input v-model="row.purchases" @change="handleChange(row)" />
+                                </template>
+                            </el-table-column>
+                            <el-table-column label="总价" min-width="150">
+                                <template #default="{ row }">
+                                    <el-input v-model="row.total_price" />
+                                </template>
+                            </el-table-column>
+                            <el-table-column label="操作" width="120" fixed="right">
+                                <template #default="{ row }">
+                                    <el-button
+                                        type="danger"
+                                        link
+                                        @click="handleDeleteProdut(row.id)"
+                                    >
+                                        删除
+                                    </el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                    </div>
+                </el-form-item>
+                <el-form-item label="">
+                    <el-button @click="handleSubmit" type="primary" class="w-40">提交</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+        <el-dialog v-model="showProduct" title="选择商品" width="70%">
+            <product-pop @onBindStore="onBindProduct"></product-pop>
+        </el-dialog>
+    </el-card>
+</template>
+
+<script lang="ts" setup name="storeProductEdit">
+import { ElMessage, type FormInstance } from 'element-plus'
+import useMultipleTabs from '@/hooks/useMultipleTabs'
+import { apiStoreProductImport } from '@/api/store_product'
+import { timeFormat } from '@/utils/util'
+import type { PropType } from 'vue'
+import { onMounted } from 'vue'
+import { useRouter, useRoute } from 'vue-router'
+import { apiWarehouseOrderAdd } from '@/api/warehouse_order'
+import { apiWarehouseLists } from '@/api/warehouse'
+import { apiSupplierLists } from '@/api/supplier'
+
+const route = useRoute()
+defineProps({
+    dictData: {
+        type: Object as PropType<Record<string, any[]>>,
+        default: () => ({})
+    }
+})
+const emit = defineEmits(['success', 'close'])
+const formRef = shallowRef<FormInstance>()
+const { removeTab } = useMultipleTabs()
+
+const warehouseList = ref([])
+
+// 表单数据
+const formData = reactive({
+    total_price: '',
+    warehouse_id: '',
+    supplier_id: '',
+    code: '',
+    total_price: 0,
+    remark: '',
+    outstanding_amount: 0,
+    completed_amount: 0
+})
+
+const warehouse = () => {
+    apiWarehouseLists({}).then((res) => {
+        warehouseList.value = res.lists
+    })
+}
+
+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
+}
+const userloading = ref(false)
+const userList = ref([])
+const remoteMethodUser = (e = '') => {
+    userloading.value = true
+    apiSupplierLists({ mer_name: e })
+        .then((res) => {
+            userList.value = res.lists
+            setTimeout(() => {
+                userloading.value = false
+            }, 300)
+        })
+        .catch((err) => {
+            setTimeout(() => {
+                userloading.value = false
+            }, 300)
+        })
+}
+function handleChange(row) {
+    row.total_price = (row.nums * row.purchases).toFixed(2)
+    if (row.total_price > 0) {
+        formData.total_price = (
+            parseFloat(formData.total_price) + parseFloat(row.total_price)
+        ).toFixed(2)
+    }
+}
+
+const router = useRouter()
+// 提交按钮
+const handleSubmit = async () => {
+    const product_arr = productList.value.map((item: any) => {
+        return {
+            product_id: item.id,
+            nums: item.nums,
+            purchase: item.purchases || 0,
+            total_price: item.total_price || 0,
+            manufacture: item.manufacture,
+            expiration_date: item.expiration_date
+        }
+    })
+    apiWarehouseOrderAdd({
+        product_arr,
+        ...formData
+    }).then((res) => {
+        // removeTab()
+        // if (res.code == 1) {
+        // ElMessage.success(res.msg)
+        setTimeout(() => {
+            router.push({
+                path: '/warehouse/warehouse_order'
+            })
+        }, 2000)
+        // } else {
+        //     ElMessage.error(res.msg)
+        // }
+    })
+}
+warehouse()
+</script>
diff --git a/src/views/order/beforehand_order/index.vue b/src/views/order/beforehand_order/index.vue
new file mode 100644
index 000000000..6cbf3b049
--- /dev/null
+++ b/src/views/order/beforehand_order/index.vue
@@ -0,0 +1,254 @@
+<template>
+    <div>
+        <el-card class="!border-none mb-4" shadow="never">
+            <el-form class="mb-[-16px]" :model="queryParams" inline>
+                <el-form-item label="仓库ID" prop="warehouse_id">
+                    <el-input
+                        class="w-[280px]"
+                        v-model="queryParams.warehouse_id"
+                        clearable
+                        placeholder="请输入仓库"
+                    />
+                </el-form-item>
+                <el-form-item label="供应商" prop="supplier_id">
+                    <el-select
+                        v-model="queryParams.supplier_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.mer_name"
+                            :value="item.id"
+                        />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="日期" prop="create_time">
+                    <el-date-picker
+                        v-model="startEndTime"
+                        type="daterange"
+                        range-separator="至"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                        unlink-panels
+                        @change="changeStartEndTime"
+                    />
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="resetPage">查询</el-button>
+                    <el-button @click="resetParams">重置</el-button>
+                    <export-data
+                        class="ml-2.5"
+                        :fetch-fun="apiWarehouseOrderLists"
+                        :params="queryParams"
+                        :page-size="pager.size"
+                    />
+                </el-form-item>
+            </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>
+            <div class="mt-4">
+                <el-table :data="pager.lists" @selection-change="handleSelectionChange">
+                    <el-table-column type="selection" width="55" />
+                    <el-table-column label="id" prop="id" show-overflow-tooltip width="55" />
+                    <el-table-column label="操作时间" prop="create_time" show-overflow-tooltip />
+                    <el-table-column label="仓库" prop="warehouse_name" show-overflow-tooltip />
+                    <el-table-column label="供应商" prop="supplier_name" show-overflow-tooltip />
+                    <el-table-column label="单号" prop="code" show-overflow-tooltip />
+                    <el-table-column label="状态" prop="financial_pm_name" show-overflow-tooltip />
+                    <el-table-column label="填写人员" prop="admin_name" show-overflow-tooltip />
+                    <!-- <el-table-column label="批次" prop="batch" show-overflow-tooltip /> -->
+                    <el-table-column label="已结" prop="completed_amount" show-overflow-tooltip />
+                    <el-table-column label="未结" prop="outstanding_amount" 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="操作" width="120" fixed="right">
+                        <template #default="{ row }">
+                            <el-button type="primary" link @click="handleDetai(row)"
+                                >详情</el-button
+                            >
+                            <el-button
+                                v-perms="['warehouse_order.warehouse_order/edit']"
+                                type="primary"
+                                link
+                                @click="handleEdit(row)"
+                            >
+                                编辑
+                            </el-button>
+                            <el-button
+                                v-perms="['warehouse_order.warehouse_order/delete']"
+                                type="danger"
+                                link
+                                @click="handleDelete(row.id)"
+                            >
+                                删除
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+            <div class="flex mt-4 justify-end">
+                <pagination v-model="pager" @change="getLists" />
+            </div>
+        </el-card>
+        <!-- <edit-popup
+            v-if="showEdit"
+            ref="editRef"
+            :dict-data="dictData"
+            @success="getLists"
+            @close="showEdit = false"
+        />
+        <details-popup
+            v-if="showDetails"
+            ref="detailsRef"
+            @success="getLists"
+            @close="showDetails = false"
+            :dictData="dictData"
+        /> -->
+    </div>
+</template>
+
+<script lang="ts" setup name="warehouseOrderLists">
+import { usePaging } from '@/hooks/usePaging'
+import { useDictData } from '@/hooks/useDictOptions'
+import { apiWarehouseOrderLists, apiWarehouseOrderDelete } from '@/api/warehouse_order'
+import { timeFormat } from '@/utils/util'
+import feedback from '@/utils/feedback'
+// import EditPopup from './edit.vue'
+// import DetailsPopup from './details.vue'
+import { apiSystemStoreLists } from '@/api/system_store'
+import moment from 'moment'
+import { apiSupplierLists } from '@/api/supplier'
+// const editRef = shallowRef<InstanceType<typeof EditPopup>>()
+// const detailsRef = shallowRef<InstanceType<typeof DetailsPopup>>()
+
+// 是否显示编辑框
+const showEdit = ref(false)
+const showDetails = ref(false)
+
+// 查询条件
+const queryParams = reactive({
+    warehouse_id: '',
+    product_name: '',
+    financial_pm: 1,
+    store_id: '',
+    start_time: '',
+    end_time: '',
+    supplier_id: ''
+})
+
+// 选中数据
+const selectData = ref<any[]>([])
+
+// 表格选择后回调事件
+const handleSelectionChange = (val: any[]) => {
+    selectData.value = val.map(({ id }) => id)
+}
+
+// 获取字典数据
+const { dictData } = useDictData('')
+
+// 分页相关
+const { pager, getLists, resetParams, resetPage } = usePaging({
+    fetchFun: apiWarehouseOrderLists,
+    params: queryParams
+})
+
+// 添加
+const handleAdd = async () => {
+    showEdit.value = true
+    await nextTick()
+    editRef.value?.open('add')
+}
+
+// 编辑
+const handleEdit = async (data: any) => {
+    showEdit.value = true
+    await nextTick()
+    editRef.value?.open('edit')
+    editRef.value?.setFormData(data)
+}
+
+// 删除
+const handleDelete = async (id: number | any[]) => {
+    await feedback.confirm('确定要删除?')
+    await apiWarehouseOrderDelete({ id })
+    getLists()
+}
+// 详情
+const handleDetai = async (data: any) => {
+    showDetails.value = true
+    await nextTick()
+    detailsRef.value?.open()
+    detailsRef.value?.getDetail(data)
+}
+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 storeloading = ref(false)
+const storeList = ref([])
+const remoteMethod = (e = '') => {
+    storeloading.value = true
+    apiSystemStoreLists({
+        name: e,
+        page_size: 50
+    })
+        .then((res) => {
+            storeList.value = res.lists
+            setTimeout(() => {
+                storeloading.value = false
+            }, 300)
+        })
+        .catch((err) => {
+            setTimeout(() => {
+                storeloading.value = false
+            }, 300)
+        })
+}
+
+const userloading = ref(false)
+const userList = ref([])
+const remoteMethodUser = (e = '') => {
+    userloading.value = true
+    apiSupplierLists({ mer_name: e })
+        .then((res) => {
+            userList.value = res.lists
+            setTimeout(() => {
+                userloading.value = false
+            }, 300)
+        })
+        .catch((err) => {
+            setTimeout(() => {
+                userloading.value = false
+            }, 300)
+        })
+}
+onMounted(() => {
+    getLists()
+})
+</script>