index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <div class="page-container row-container">
  3. <!-- 左侧区域 -->
  4. <section class="list-part-container" style="flex: 3">
  5. <!-- 搜索区 -->
  6. <el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true"
  7. style="margin-right: 0px">
  8. <el-form-item class="section-title" label="盘点" />
  9. <el-form-item label="创建时间:">
  10. <el-date-picker v-model="queryParams.createStartTime" type="date" value-format="YYYY-MM-DD"
  11. :editable="false" clearable placeholder="请选择" style="width: 130px" />
  12. <span>到</span>
  13. <el-date-picker v-model="queryParams.createEndTime" type="date" value-format="YYYY-MM-DD"
  14. :editable="false" clearable placeholder="请选择" style="width: 130px" />
  15. </el-form-item>
  16. <el-form-item label="开始时间:">
  17. <el-date-picker v-model="queryParams.startTimeStr" type="date" value-format="YYYY-MM-DD"
  18. :editable="false" clearable placeholder="请选择" style="width: 130px" />
  19. <span>到</span>
  20. <el-date-picker v-model="queryParams.startTimeEnd" type="date" value-format="YYYY-MM-DD"
  21. :editable="false" clearable placeholder="请选择" style="width: 130px" />
  22. </el-form-item>
  23. <el-form-item label="结束时间:">
  24. <el-date-picker v-model="queryParams.endTimeStr" type="date" value-format="YYYY-MM-DD"
  25. :editable="false" clearable placeholder="请选择" style="width: 130px" />
  26. <span>到</span>
  27. <el-date-picker v-model="queryParams.endTimeEnd" type="date" value-format="YYYY-MM-DD"
  28. :editable="false" clearable placeholder="请选择" style="width: 130px" />
  29. </el-form-item>
  30. <el-form-item label="状态:">
  31. <el-select v-model="queryParams.status" clearable placeholder="请选择盘点状态" style="width: 145px">
  32. <el-option v-for="dict in take_stock_status" :key="dict.value" :label="dict.label"
  33. :value="dict.value"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="备注:">
  37. <el-input placeholder="请输入备注" v-model.trim="queryParams.remark" @keydown.enter.prevent clearable
  38. style="width: 120px" />
  39. </el-form-item>
  40. <el-form-item style="margin-left: 0">
  41. <el-button type="info" icon="Search" @click="handleQuery">搜索
  42. </el-button>
  43. <el-button v-show="!hasAlreadyAddTakeStock && !hasAlreadyTakeStock"
  44. v-hasPermi="['business:inventoryCheck:add']" type="primary" icon="Plus"
  45. @click="handleAdd">新增</el-button>
  46. </el-form-item>
  47. </el-form>
  48. <div class="el-table-container">
  49. <div class="el-table-inner-container">
  50. <el-table ref="takeStockPeriodTable" :data="takeStockPeriodList" v-loading="loading"
  51. highlight-current-row height="100%">
  52. <el-table-column type="index" label="行号" width="50" align="center" />
  53. <el-table-column label="创建时间" prop="createTime" width="200" align="center" />
  54. <el-table-column label="开始时间" prop="startTime" width="200" align="center" />
  55. <el-table-column label="结束时间" prop="endTime" width="200" align="center" />
  56. <el-table-column label="盘点年月" prop="stockTime" width="150" align="center">
  57. <template #default="scope">
  58. <el-date-picker v-if="scope.row.selectDateStatus" v-model="scope.row.stockTime"
  59. type="month" value-format="YYYY-M" :editable="false" clearable placeholder="请选择"
  60. style="width: 130px" />
  61. <div v-else>{{ scope.row.stockTime }}</div>
  62. </template>
  63. </el-table-column>
  64. <el-table-column label="盘点状态" prop="status" width="80" align="center">
  65. <template #default="scope">
  66. <dict-tag :options="take_stock_status" :value="scope.row.status" />
  67. </template>
  68. </el-table-column>
  69. <el-table-column label="备注" prop="remark" align="center">
  70. <template #default="scope">
  71. <div v-if="scope.row.editStatus">
  72. <el-input v-model.trim="scope.row.remark" placeholder="请输入备注" />
  73. </div>
  74. <div v-else>{{ scope.row.remark }}</div>
  75. </template>
  76. </el-table-column>
  77. <el-table-column label="操作" align="center" width="300">
  78. <template #default="scope">
  79. <el-button v-show="!scope.row.editStatus" v-hasPermi="['business:inventoryCheck:edit']"
  80. link type="warning" icon="Edit" @click="handleUpdate(scope.row)">
  81. 编辑
  82. </el-button>
  83. <el-button
  84. v-show="!scope.row.editStatus && (scope.row.status == 1 || scope.row.status == 2)"
  85. v-hasPermi="['business:inventoryCheck:view']" link type="primary" icon="View"
  86. @click="handleView(scope.row)">
  87. 查看
  88. </el-button>
  89. <el-button v-show="!scope.row.editStatus && scope.row.status == 0"
  90. v-hasPermi="['business:inventoryCheck:start']" link type="success" icon="Open"
  91. @click="handleStartTakeStock(scope.row)">
  92. 开始盘点
  93. </el-button>
  94. <el-button v-show="!scope.row.editStatus && scope.row.status == 1" link
  95. v-hasPermi="['business:inventoryCheck:end']" type="danger" icon="TurnOff"
  96. @click="handleEndTakeStock(scope.row)">
  97. 结束盘点
  98. </el-button>
  99. <el-button link v-if="scope.row.editStatus" icon="Close" type="danger"
  100. @click="handleCancel(scope.row, scope.$index)">取消</el-button>
  101. <el-button link icon="Check" v-if="scope.row.editStatus" type="success"
  102. @click="handleSave(scope.row)">保存</el-button>
  103. <el-button v-if="scope.row.status == 2"
  104. v-hasPermi="['business:inventoryCheck:downLoad']" link type="primary"
  105. icon="Download" @click="handleExport(scope.row)">导出
  106. </el-button>
  107. </template>
  108. </el-table-column>
  109. </el-table>
  110. </div>
  111. </div>
  112. <!-- 分页 -->
  113. <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
  114. v-model:limit="queryParams.pageSize" @pagination="getTakeStockPeriodList" />
  115. </section>
  116. <!-- 盘点详情 -->
  117. <inventory-check-form ref="inventoryCheckFormRef" />
  118. </div>
  119. </template>
  120. <script setup name="inventoryCheck">
  121. import { listTakeStockPeriod, addTakeStockPeriod, updateTakeStockPeriod } from "@/api/business/takeStockPeriod";
  122. import inventoryCheckForm from "./form.vue";
  123. import { ref } from "vue";
  124. const { proxy } = getCurrentInstance();
  125. /** 字典 */
  126. const { take_stock_status } = proxy.useDict("take_stock_status");
  127. /** 盘点 */
  128. const takeStockPeriodTable = ref(null);
  129. const takeStockPeriodList = ref([])
  130. //列表中是否已经存在开始盘点的数据
  131. const hasAlreadyTakeStock = ref(false);
  132. //列表中已经存在新增的盘点
  133. const hasAlreadyAddTakeStock = ref(false);
  134. const loading = ref(false);
  135. const total = ref(0);
  136. const queryParams = ref({
  137. status: null,
  138. createStartTime: null,
  139. createEndTime: null,
  140. startTimeStr: null,
  141. startTimeEnd: null,
  142. endTimeStr: null,
  143. endTimeEnd: null,
  144. remark: null,
  145. pageNum: 1,
  146. pageSize: 10,
  147. });
  148. /*********************** 工段相关事件 ****************************/
  149. function getTakeStockPeriodList() {
  150. loading.value = true;
  151. listTakeStockPeriod(queryParams.value).then(res => {
  152. takeStockPeriodList.value = res.rows;
  153. hasAlreadyTakeStock.value = res.others.hasAddTakeStockStatus
  154. hasAlreadyAddTakeStock.value = res.others.hasTakeStockStatus
  155. total.value = res.total;
  156. })
  157. loading.value = false
  158. }
  159. //新增
  160. function handleAdd() {
  161. takeStockPeriodList.value.unshift({ createTime: proxy.moment().format("YYYY-MM-DD HH:mm:ss"), startTime: null, stockTime: null, endTime: null, status: "0", remark: null, editStatus: true, selectDateStatus: true })
  162. hasAlreadyAddTakeStock.value = true
  163. }
  164. //保存按钮
  165. function handleSave(row) {
  166. if (row.stockTime == null) {
  167. proxy.$modal.msgError("请选择盘点时间")
  168. return
  169. }
  170. row.stockYear = row.stockTime.substring(0, 4)
  171. row.stockMonth = row.stockTime.substring(5, 7)
  172. console.log(row)
  173. addTakeStockPeriod(row).then(res => {
  174. if (res.code === 200) {
  175. getTakeStockPeriodList()
  176. }
  177. })
  178. }
  179. function handleExport(data) {
  180. console.log(data)
  181. proxy.download('/ezhizao-dms-production/business/taksStockLot/download', {
  182. id: data.id
  183. }, `盘点汇总${new Date().getTime()}.xlsx`)
  184. }
  185. //查看按钮
  186. function handleView(row) {
  187. proxy.$refs.inventoryCheckFormRef.open(row);
  188. }
  189. //结束盘点
  190. function handleEndTakeStock(row) {
  191. proxy.$modal
  192. .confirm("是否确认结束盘点?")
  193. .then(function () {
  194. row.endTime = proxy.moment().format("YYYY-MM-DD HH:mm:ss")
  195. row.status = 2
  196. updateTakeStockPeriod(row).then(res => {
  197. if (res.code === 200) {
  198. proxy.$modal.msgSuccess("已成功结束盘点");
  199. getTakeStockPeriodList()
  200. }
  201. })
  202. })
  203. }
  204. //编辑按钮
  205. function handleUpdate(row) {
  206. row.editStatus = true
  207. }
  208. //开始盘点
  209. function handleStartTakeStock(row) {
  210. proxy.$modal
  211. .confirm("是否确认开始盘点?")
  212. .then(function () {
  213. row.startTime = proxy.moment().format("YYYY-MM-DD HH:mm:ss")
  214. row.flag = 0
  215. updateTakeStockPeriod(row).then(res => {
  216. if (res.code === 200) {
  217. proxy.$modal.msgSuccess("已成功开始盘点");
  218. getTakeStockPeriodList()
  219. }
  220. })
  221. })
  222. }
  223. /** 搜索按钮操作 */
  224. function handleQuery() {
  225. getTakeStockPeriodList();
  226. }
  227. function handleCancel(row, index) {
  228. if (row.id) {
  229. takeStockPeriodList.value[index].editStatus = false
  230. }
  231. getTakeStockPeriodList()
  232. }
  233. onMounted(() => {
  234. getTakeStockPeriodList();
  235. });
  236. </script>
  237. <style scoped>
  238. .el-form--inline .el-form-item {
  239. margin-right: 20px;
  240. }
  241. </style>