|
@@ -0,0 +1,315 @@
|
|
|
|
+<template>
|
|
|
|
+ <div>
|
|
|
|
+ <div class="search">
|
|
|
|
+ <el-form ref="advancedFormRef" :model="advancedForm" label-width="160px">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="activeName === 'first' ? 12 : 8">
|
|
|
|
+ <el-form-item label="出入时间">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="advancedForm.goodsExchange_time_range"
|
|
|
|
+ type="daterange"
|
|
|
|
+ align="center"
|
|
|
|
+ :editable="false"
|
|
|
|
+ unlink-panels
|
|
|
|
+ :clearable="true"
|
|
|
|
+ :default-time="['00:00:00', '23:59:59']"
|
|
|
|
+ range-separator="-"
|
|
|
|
+ start-placeholder="开始日期"
|
|
|
|
+ end-placeholder="结束日期"
|
|
|
|
+ value-format="timestamp"
|
|
|
|
+ :picker-options="{
|
|
|
|
+ disabledDate(time) {
|
|
|
|
+ return time.getTime() - 1 >= new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime() + 86400000 - 1;
|
|
|
|
+ },
|
|
|
|
+ shortcuts: MixinPickerShortcuts,
|
|
|
|
+ }"
|
|
|
|
+ ></el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="8">
|
|
|
|
+ <el-form-item label="仓库">
|
|
|
|
+ <el-select v-model="advancedForm.warehouse_id" clearable>
|
|
|
|
+ <el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <!-- <el-col :span="6" v-if="activeName === 'second'">
|
|
|
|
+ <el-form-item label="入库类型">
|
|
|
|
+ <el-select v-model="advancedForm.type" clearable>
|
|
|
|
+ <el-option v-for="item in entryList" :key="item.id" :label="item.label" :value="item.value" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="8" v-if="activeName === 'second'">
|
|
|
|
+ <el-form-item label="客户名称">
|
|
|
|
+ <el-input v-model="advancedForm.customer_name" clearable placeholder="请输入客户名称"></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="8" v-if="activeName === 'second'">
|
|
|
|
+ <el-form-item label="手机号">
|
|
|
|
+ <el-input v-model="advancedForm.customer_phone" clearable placeholder="请输入手机号"></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col> -->
|
|
|
|
+ </el-row>
|
|
|
|
+ </el-form>
|
|
|
|
+ <el-button @click="advancedSearchEvent"> 搜索 </el-button>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <en-table-layout :tableData="tableData.data" :loading="loading" @selection-change="handleSelectionChange">
|
|
|
|
+ <template #toolbar>
|
|
|
|
+ <div class="inner-toolbar">
|
|
|
|
+ <div class="toolbar-btns">
|
|
|
|
+ <!-- <el-button size="mini" v-if="checkPermission(['addInventory']) && activeName === 'second'" type="primary" @click="handleAddGoodsExchange"
|
|
|
|
+ >新增入库</el-button
|
|
|
|
+ > -->
|
|
|
|
+ <el-button size="mini" v-if="checkPermission(['goodsExchangeAdd'])" type="primary" @click="handleShiftGoodsExchange">新增出库</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+
|
|
|
|
+ <template #table-columns>
|
|
|
|
+ <el-table-column type="selection" width="55" />
|
|
|
|
+ <el-table-column prop="sn" label="出库单号">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ {{ scope.row.sn }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="warehouse_id" label="仓库名称">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ {{ warehouseName(scope.row.warehouse_id) }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="warehouse_id" label="客户名称">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ {{ scope.row.customer_name }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="warehouse_id" label="客户手机号">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ {{ scope.row.customer_phone }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="memo" label="出库类型">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <span>{{ outName(scope.row.type) }}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="order_id_list" label="订单编号" />
|
|
|
|
+ <el-table-column label="状态">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <span>{{ scope.row.has_submit === 'Y' ? '已出库' : '未出库' }}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="memo" label="出库时间">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <span>{{ scope.row.create_time }}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="memo" label="备注">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <span>{{ scope.row.notes }}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column label="操作" width="450">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <el-button size="mini" v-if="checkPermission(['checkInventory'])" @click="handleAuditGoodsExchange(scope.row)">查看</el-button>
|
|
|
|
+ <el-button
|
|
|
|
+ size="mini"
|
|
|
|
+ v-if="scope.row.has_submit === 'N' && checkPermission(['editInventory']) && checkPermission(['goodsExchangeEdit'])"
|
|
|
|
+ @click="handleEditGoodsExchange(scope.row)"
|
|
|
|
+ >出库</el-button
|
|
|
|
+ >
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </template>
|
|
|
|
+
|
|
|
|
+ <el-pagination
|
|
|
|
+ v-if="tableData.data && tableData.data.length"
|
|
|
|
+ @size-change="handlePageSizeChange"
|
|
|
|
+ @current-change="handlePageCurrentChange"
|
|
|
|
+ :current-page="tableData.page_no"
|
|
|
|
+ :page-sizes="[10, 20, 50, 100]"
|
|
|
|
+ :page-size="tableData.page_size"
|
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
|
+ :total="tableData.data_total"
|
|
|
|
+ ></el-pagination>
|
|
|
|
+ </en-table-layout>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+ <script setup>
|
|
|
|
+import { ref, reactive, onMounted, watchEffect } from 'vue';
|
|
|
|
+import { useRouter, useRoute } from 'vue-router';
|
|
|
|
+import * as API_GoodsExchange from '@/api/goodsExchange';
|
|
|
|
+import * as API_Setting from '@/api/setting';
|
|
|
|
+import * as API_BasicSetting from '@/api/basicSetting';
|
|
|
|
+
|
|
|
|
+const router = useRouter();
|
|
|
|
+const route = useRoute();
|
|
|
|
+
|
|
|
|
+const warehouseList = ref([]);
|
|
|
|
+const deptList = ref([]);
|
|
|
|
+const loading = ref(false);
|
|
|
|
+const params = reactive({
|
|
|
|
+ page_no: 1,
|
|
|
|
+ page_size: 10,
|
|
|
|
+});
|
|
|
|
+const advancedForm = reactive({});
|
|
|
|
+const tableData = ref('');
|
|
|
|
+const dialogVisible = ref(false);
|
|
|
|
+const multipleSelection = ref([]);
|
|
|
|
+const goodsExchangeForm = reactive({});
|
|
|
|
+const activeName = ref('second');
|
|
|
|
+const entryList = ref([]);
|
|
|
|
+const outList = ref([]);
|
|
|
|
+const advancedFormRef = ref(null);
|
|
|
|
+
|
|
|
|
+const GET_WarehouseList = () => {
|
|
|
|
+ API_BasicSetting.getWarehouseListAll().then((response) => {
|
|
|
|
+ warehouseList.value = response;
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const GET_DeptList = () => {
|
|
|
|
+ /* API_Setting.getPage({ dictType: 'warehouse_entry_type' }).then((res) => {
|
|
|
|
+ entryList.value = res.data;
|
|
|
|
+ }); */
|
|
|
|
+ API_Setting.getPage({ dictType: 'out_warehouse_type' }).then((res) => {
|
|
|
|
+ outList.value = res.data;
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const GET_GoodsExchangeList = () => {
|
|
|
|
+ loading.value = true;
|
|
|
|
+ API_GoodsExchange.getWarehouseOut(params)
|
|
|
|
+ .then((response) => {
|
|
|
|
+ loading.value = false;
|
|
|
|
+ tableData.value = response;
|
|
|
|
+ })
|
|
|
|
+ .catch(() => {
|
|
|
|
+ loading.value = false;
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const GET_WarehouseEntry = () => {
|
|
|
|
+ loading.value = true;
|
|
|
|
+ API_GoodsExchange.getWarehouseEntry(params)
|
|
|
|
+ .then((response) => {
|
|
|
|
+ loading.value = false;
|
|
|
|
+ tableData.value = response;
|
|
|
|
+ })
|
|
|
|
+ .catch(() => {
|
|
|
|
+ loading.value = false;
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleClick = (tab) => {
|
|
|
|
+ activeName.value = tab.name;
|
|
|
|
+ params.page_no = 1;
|
|
|
|
+ GET_GoodsExchangeList();
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleEditGoodsExchange = (row) => {
|
|
|
|
+ router.push({
|
|
|
|
+ name: 'goodsExchangeEdit',
|
|
|
|
+ params: { id: row.id },
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleAuditGoodsExchange = (row) => {
|
|
|
|
+ router.push({
|
|
|
|
+ name: 'checkInventory',
|
|
|
|
+ params: {
|
|
|
|
+ id: row.id,
|
|
|
|
+ type: activeName.value,
|
|
|
|
+ },
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleSelectionChange = (val) => {
|
|
|
|
+ multipleSelection.value = val;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handlePageSizeChange = (size) => {
|
|
|
|
+ params.page_size = size;
|
|
|
|
+ GET_GoodsExchangeList();
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handlePageCurrentChange = (page) => {
|
|
|
|
+ params.page_no = page;
|
|
|
|
+ GET_GoodsExchangeList();
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleShiftGoodsExchange = () => {
|
|
|
|
+ router.push({
|
|
|
|
+ name: 'goodsExchangeAdd',
|
|
|
|
+ params: { callback: GET_GoodsExchangeList, type: 'first' },
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleAddGoodsExchange = () => {
|
|
|
|
+ router.push({
|
|
|
|
+ name: 'addInventory',
|
|
|
|
+ params: { callback: GET_GoodsExchangeList, type: 'second' },
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const advancedSearchEvent = () => {
|
|
|
|
+ Object.assign(params, advancedForm);
|
|
|
|
+ delete params.start_time;
|
|
|
|
+ delete params.end_time;
|
|
|
|
+ if (advancedForm.goodsExchange_time_range) {
|
|
|
|
+ params.start_time = parseInt(Number(advancedForm.goodsExchange_time_range[0]) / 1000);
|
|
|
|
+ params.end_time = parseInt(Number(advancedForm.goodsExchange_time_range[1]) / 1000);
|
|
|
|
+ }
|
|
|
|
+ delete params.goodsExchange_time_range;
|
|
|
|
+ params.page_no = 1;
|
|
|
|
+ GET_GoodsExchangeList();
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const warehouseName = (val) => {
|
|
|
|
+ let name = '';
|
|
|
|
+ warehouseList.value.map((el) => {
|
|
|
|
+ if (el.id === val) {
|
|
|
|
+ name = el.name;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return name;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const outName = (val) => {
|
|
|
|
+ let name = '';
|
|
|
|
+ outList.value.map((el) => {
|
|
|
|
+ if (el.value === val) {
|
|
|
|
+ name = el.label;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return name;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const entryName = (val) => {
|
|
|
|
+ let name = '';
|
|
|
|
+ entryList.value.map((el) => {
|
|
|
|
+ if (el.value === val) {
|
|
|
|
+ name = el.label;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return name;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+onMounted(() => {
|
|
|
|
+ GET_GoodsExchangeList();
|
|
|
|
+ GET_DeptList();
|
|
|
|
+ GET_WarehouseList();
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+watchEffect(() => {
|
|
|
|
+ if (route.query.status) {
|
|
|
|
+ params.status = route.query.status;
|
|
|
|
+ advancedForm.status = route.query.status;
|
|
|
|
+ }
|
|
|
|
+ params.page_no = 1;
|
|
|
|
+
|
|
|
|
+ GET_GoodsExchangeList();
|
|
|
|
+});
|
|
|
|
+</script>
|