orders.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <div>
  3. <div class="commonTitle">{{ activeName == "ok" ? "已完成工单" : "待完成工单" }}[{{ ordersSum }}]</div>
  4. <el-tabs v-model="activeName" class="demo-tabs" type="card" @tab-click="handleClick">
  5. <el-tab-pane label="未完成" name="false" />
  6. <el-tab-pane label="已完成" name="ok" />
  7. </el-tabs>
  8. <div style="margin-bottom: 10px">
  9. <el-input
  10. v-model="searchText"
  11. class="input-with-select"
  12. clearable
  13. placeholder="请输入物料名称或工单编号或计划编号进行查询"
  14. @clear="clearSearch"
  15. @keydown.enter="startSearch"
  16. >
  17. <template #append>
  18. <el-button :icon="Search" @click="startSearch" />
  19. </template>
  20. </el-input>
  21. </div>
  22. <el-scrollbar ref="wrapRef" v-loading="map.get('getProcessOrders')" class="barHeight" @scroll="handleScroll">
  23. <!-- <el-scrollbar class="barHeight" ref="wrapRef" @scroll="handleScroll"> -->
  24. <Order
  25. v-for="(item, index) in ordersDataArray"
  26. :key="index"
  27. :hoverStatus="index == selectIndex ? true : false"
  28. :item="item"
  29. @click="setSlectIndex(index)"
  30. />
  31. <div v-if="ordersQuery.pageNo == ordersQuery.totalPages" class="describeText notice">已经到底啦~</div>
  32. </el-scrollbar>
  33. <Empty v-if="ordersDataArray.length < 1" />
  34. </div>
  35. </template>
  36. <script lang="ts" setup>
  37. import Order from "@/views/process/components/order.vue";
  38. import { useCommonStoreHook, useDictionaryStore, useProcessStore } from "@/store";
  39. import { getOrders,getTaskWorkOrder,queryOpsList } from "@/api/process";
  40. import { emitter, EventsNames } from "@/utils/common";
  41. import { Search } from "@element-plus/icons-vue";
  42. const dictS = useDictionaryStore();
  43. const store = useProcessStore();
  44. const selectSeqIndex = inject("selectSeqIndex");
  45. const selectedOderStatus = inject("selectedOderStatus");
  46. const ordersSum = ref(0);
  47. const commonS = useCommonStoreHook();
  48. const map = commonS.loadingMap;
  49. const emit = defineEmits(["getindex"]);
  50. const ordersDataArray = inject("ordersDataArray");
  51. const selectSeqArray = inject("selectSeqArray");
  52. //获取未完成订单的参数
  53. const ordersQuery = ref({
  54. pageNo: 1,
  55. pageSize: 900,
  56. queryComplete: 0,
  57. totalPages: 1,
  58. keyword: "",
  59. });
  60. const wrapRef = ref(null);
  61. //获取未完成订单Data
  62. const getOrdersData = async () => {
  63. const { code, data } = await getTaskWorkOrder(ordersQuery.value);
  64. if (code == "200") {
  65. if (ordersQuery.value.pageNo == 1) {
  66. ordersDataArray.value = data.records;
  67. } else {
  68. ordersDataArray.value.push(...data.records);
  69. }
  70. ordersSum.value = data.totalCount;
  71. ordersQuery.value.totalPages = data.totalPages;
  72. }
  73. };
  74. //重新刷新当前页码数据
  75. const resetOrdersDataArray = async () => {
  76. ordersDataArray.value = [];
  77. ordersQuery.value = {
  78. pageNo: 1,
  79. pageSize: 5,
  80. queryComplete: 0,
  81. totalPages: 1,
  82. };
  83. store.odersData.productLineId = "";
  84. store.odersData.workOrderCode = "";
  85. store.processInfo.materialName = "";
  86. store.processInfo.materialModel = "";
  87. store.odersData.operationId = "";
  88. store.processInfo.operationCode = "";
  89. store.processInfo.operationName = "";
  90. store.useSeqNo = "";
  91. selectSeqArray.value = [];
  92. selectSeqIndex.value = null;
  93. getOrdersData();
  94. };
  95. const activeName = ref("false");
  96. //这里是存放控制当前选择工序的index
  97. const selectIndex = ref(null);
  98. const setSlectIndex = async (index: number) => {
  99. // if (selectIndex.value == index) return;
  100. if (index == null) {
  101. selectIndex.value = null;
  102. selectedOderStatus.value = false;
  103. return;
  104. }
  105. setSlectIndex(null);
  106. ordersDataArray.value[index].ops = []
  107. selectIndex.value = index;
  108. store.odersData.productLineId = ordersDataArray.value[selectIndex.value].productLineId;
  109. store.odersData.workOrderCode = ordersDataArray.value[selectIndex.value].workOrderCode;
  110. store.processInfo.materialName = ordersDataArray.value[selectIndex.value].materialName;
  111. store.processInfo.materialModel = ordersDataArray.value[selectIndex.value].materialModel;
  112. store.processInfo.documentShow = ordersDataArray.value[selectIndex.value].documentShow;
  113. store.odersData.operationId = "";
  114. store.processInfo.operationCode = "";
  115. store.processInfo.operationName = "";
  116. store.useSeqNo = "";
  117. selectSeqArray.value = [];
  118. selectSeqIndex.value = null;
  119. const {code, data} = await queryOpsList({workOrderCode: store.odersData.workOrderCode});
  120. ordersDataArray.value[selectIndex.value].ops = data
  121. emit("getindex", selectIndex.value);
  122. };
  123. const handleClick = (tab: TabsPaneContext, event: Event) => {
  124. setSlectIndex(null);
  125. store.odersData.productLineId = "";
  126. store.odersData.workOrderCode = "";
  127. store.processInfo.materialName = "";
  128. store.processInfo.materialModel = "";
  129. store.processInfo.documentShow = "";
  130. };
  131. //滚动事件
  132. const handleScroll = (obj: obj) => {
  133. //当发生滚动触底时
  134. if (wrapRef.value.wrapRef.scrollHeight == Math.ceil(obj.scrollTop) + wrapRef.value.wrapRef.clientHeight) {
  135. if (ordersQuery.value.pageNo < ordersQuery.value.totalPages) {
  136. ordersQuery.value.pageNo = ordersQuery.value.pageNo + 1;
  137. getOrdersData();
  138. }
  139. }
  140. };
  141. watch(
  142. () => activeName.value,
  143. (val) => {
  144. if (val == "ok") {
  145. ordersQuery.value.queryComplete = 1;
  146. ordersQuery.value.pageNo = 1;
  147. } else {
  148. ordersQuery.value.queryComplete = 0;
  149. ordersQuery.value.pageNo = 1;
  150. }
  151. ordersDataArray.value = [];
  152. getOrdersData();
  153. }
  154. );
  155. onMounted(() => {
  156. getOrdersData();
  157. emitter.on(EventsNames.PROCESS_REDER, () => {
  158. resetOrdersDataArray();
  159. setSlectIndex(null);
  160. });
  161. });
  162. // 顶部添加搜索
  163. const searchText = ref("");
  164. const clearSearch = () => {
  165. searchText.value = "";
  166. ordersQuery.value.keyword = "";
  167. ordersQuery.value.pageNo = 1;
  168. getOrdersData();
  169. };
  170. const startSearch = () => {
  171. // if (searchText.value.trim() == "") {
  172. // return;
  173. // }
  174. searchText.value = searchText.value.trim();
  175. ordersQuery.value.keyword = searchText.value;
  176. ordersQuery.value.pageNo = 1;
  177. getOrdersData();
  178. };
  179. </script>
  180. <style lang="scss" scoped>
  181. .barHeight {
  182. height: calc(100vh - 305px);
  183. .notice {
  184. text-align: center;
  185. }
  186. }
  187. :deep(.el-tabs--card > .el-tabs__header .el-tabs__nav) {
  188. background: rgba(0, 0, 0, 0.1);
  189. border-radius: 16px 16px 16px 16px;
  190. overflow: hidden;
  191. border: 0;
  192. }
  193. :deep(.el-tabs--card > .el-tabs__header) {
  194. height: 80px;
  195. border: 0;
  196. overflow: hidden;
  197. border-radius: 16px 16px 16px 16px;
  198. }
  199. :deep(.el-tabs--card > .el-tabs__header .el-tabs__item) {
  200. width: calc(12.5vw - 15px);
  201. height: 80px;
  202. border-radius: 0;
  203. font-weight: 500;
  204. font-size: 24px;
  205. overflow: hidden;
  206. background: transparent;
  207. border-color: transparent;
  208. }
  209. :deep(.el-tabs--card > .el-tabs__header .el-tabs__item.is-active) {
  210. background: white;
  211. border-radius: 16px 16px 16px 16px;
  212. border-color: transparent;
  213. overflow: hidden;
  214. }
  215. .scrollbar-demo-item {
  216. display: flex;
  217. align-items: center;
  218. justify-content: center;
  219. height: 50px;
  220. margin: 10px;
  221. text-align: center;
  222. border-radius: 4px;
  223. background: var(--el-color-primary-light-9);
  224. color: var(--el-color-primary);
  225. }
  226. .input-with-select .el-input-group__prepend {
  227. background-color: var(--el-fill-color-blank);
  228. }
  229. </style>