1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<template>
  <div class="app-container">
    <div class="search_form">
      <div>
        <span class="search_title">产品大类:</span>
        <el-input v-model="searchForm.productCategory" style="width: 220px" placeholder="请输入" clearable @change="handleQuery" />
        <span class="search_title ml10">规格型号:</span>
        <el-input v-model="searchForm.specificationModel" style="width: 220px" placeholder="请输入" clearable @change="handleQuery" />
        <el-button type="primary" style="margin-left: 10px" @click="handleQuery">搜索</el-button>
        <el-button @click="resetQuery">重置</el-button>
      </div>
      <div>
        <el-button type="primary" @click="openForm('add')">新增盘点</el-button>
      </div>
    </div>
    <div class="table_list">
      <el-table :data="tableData" border v-loading="tableLoading" height="calc(100vh - 18.5em)">
        <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column label="盘点单号" prop="code" width="140" show-overflow-tooltip />
        <el-table-column label="批次号" prop="inboundBatches" width="140" show-overflow-tooltip />
        <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />
        <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />
        <el-table-column label="单位" prop="unit" width="70" />
        <el-table-column label="账面数量" prop="bookNum" width="110" />
        <el-table-column label="实盘数量" prop="actualNum" width="110" />
        <el-table-column label="差异数量" prop="diffNum" width="110">
          <template #default="scope">
            <span :style="{ color: Number(scope.row.diffNum) === 0 ? '' : (Number(scope.row.diffNum) > 0 ? '#67c23a' : '#f56c6c') }">
              {{ scope.row.diffNum == null ? '-' : scope.row.diffNum }}
            </span>
          </template>
        </el-table-column>
        <el-table-column label="盘点日期" prop="takingDate" width="120" />
        <el-table-column label="盘点人" prop="takingUser" width="100" />
        <el-table-column label="备注" prop="remark" show-overflow-tooltip />
        <el-table-column fixed="right" label="操作" width="130" align="center">
          <template #default="scope">
            <el-button link type="primary" size="small" @click="openForm('edit', scope.row)">编辑</el-button>
            <el-button link type="danger" size="small" @click="handleDelete(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination v-show="page.total > 0" :total="page.total" layout="total, sizes, prev, pager, next, jumper"
        :page="page.current" :limit="page.size" @pagination="paginationChange" />
    </div>
 
    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="600px" @close="closeDialog">
      <el-form :model="form" label-width="110px" label-position="top">
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="产品大类"><el-input v-model="form.productCategory" clearable /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="规格型号"><el-input v-model="form.specificationModel" clearable /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="单位"><el-input v-model="form.unit" clearable /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="批次号"><el-input v-model="form.inboundBatches" clearable /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="账面数量"><el-input-number v-model="form.bookNum" :step="0.01" :min="0" style="width: 100%" /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="实盘数量"><el-input-number v-model="form.actualNum" :step="0.01" :min="0" style="width: 100%" /></el-form-item></el-col>
          <el-col :span="12">
            <el-form-item label="盘点日期">
              <el-date-picker v-model="form.takingDate" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" style="width: 100%" />
            </el-form-item>
          </el-col>
          <el-col :span="12"><el-form-item label="盘点人"><el-input v-model="form.takingUser" clearable /></el-form-item></el-col>
          <el-col :span="24"><el-form-item label="备注"><el-input v-model="form.remark" type="textarea" :rows="2" /></el-form-item></el-col>
        </el-row>
      </el-form>
      <template #footer>
        <el-button type="primary" @click="submitForm">确认</el-button>
        <el-button @click="closeDialog">取消</el-button>
      </template>
    </el-dialog>
  </div>
</template>
 
<script setup>
import { ref, reactive, onMounted } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import pagination from "@/components/PIMTable/Pagination.vue";
import { getStockTakingPage, addStockTaking, updateStockTaking, delStockTaking } from "@/api/inventoryManagement/stockTaking.js";
import useUserStore from "@/store/modules/user";
 
const userStore = useUserStore();
const tableData = ref([]);
const tableLoading = ref(false);
const page = reactive({ current: 1, size: 100, total: 0 });
const searchForm = reactive({ productCategory: "", specificationModel: "" });
const dialogVisible = ref(false);
const dialogTitle = ref("新增盘点");
const dialogMode = ref("add");
const emptyForm = () => ({
  id: null, productCategory: "", specificationModel: "", unit: "", inboundBatches: "",
  bookNum: 0, actualNum: 0, takingDate: "", takingUser: userStore.nickName || "", remark: "",
});
const form = reactive(emptyForm());
 
const getList = () => {
  tableLoading.value = true;
  getStockTakingPage({ ...searchForm, ...page }).then((res) => {
    tableLoading.value = false;
    tableData.value = (res.data && res.data.records) || [];
    page.total = (res.data && res.data.total) || 0;
  }).catch(() => { tableLoading.value = false; });
};
const handleQuery = () => { page.current = 1; getList(); };
const resetQuery = () => { searchForm.productCategory = ""; searchForm.specificationModel = ""; handleQuery(); };
const paginationChange = (obj) => { page.current = obj.page; page.size = obj.limit; getList(); };
 
const openForm = (mode, row) => {
  dialogMode.value = mode;
  dialogTitle.value = mode === "add" ? "新增盘点" : "编辑盘点";
  Object.assign(form, emptyForm());
  if (mode === "edit" && row) {
    Object.keys(form).forEach((k) => { if (row[k] !== undefined) form[k] = row[k]; });
  }
  dialogVisible.value = true;
};
const closeDialog = () => { dialogVisible.value = false; };
const submitForm = () => {
  const payload = { ...form };
  const req = dialogMode.value === "add" ? addStockTaking(payload) : updateStockTaking(payload);
  req.then(() => {
    ElMessage.success(dialogMode.value === "add" ? "新增成功" : "修改成功");
    closeDialog();
    getList();
  }).catch(() => ElMessage.error("操作失败"));
};
const handleDelete = (row) => {
  ElMessageBox.confirm("确认删除该盘点记录?", "提示", { type: "warning" }).then(() => {
    delStockTaking([row.id]).then(() => { ElMessage.success("删除成功"); getList(); });
  }).catch(() => {});
};
 
onMounted(() => { getList(); });
</script>
 
<style scoped lang="scss">
.table_list { margin-top: unset; }
</style>