SubOrder.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <!-- 子订单状态页面 -->
  2. <template>
  3. <el-dialog v-model="SubWorkOrderStatusListlog" :before-close="SubWorkOrderClose" width="100%" style="height: 100vh;margin: 0px;overflow-y: auto;" top="0vh">
  4. <el-button type="danger" style="width: 90px;height: 40px;margin-left: 10px;" @click="SubWorkOrderClose">关闭</el-button>
  5. <br><br>
  6. <div class="order-info" style="margin-left: 10px;">
  7. <el-text style="font-size: 24px;">订单编号:&nbsp;</el-text>
  8. <el-input v-model="orderform['订单编号']" disabled style="width: 7%; height: 40px;" />
  9. &nbsp;&nbsp;&nbsp;&nbsp;
  10. <el-text style="font-size: 24px;">子订单编号:&nbsp;</el-text>
  11. <el-input v-model="orderform['子订单编号']" disabled style="width: 10%; height: 40px;" />
  12. &nbsp;&nbsp;&nbsp;&nbsp;
  13. <el-text style="font-size: 24px;">客户编号:&nbsp;</el-text>
  14. <el-input v-model="orderform['客户编号']" disabled style="width: 5%; height: 40px;" />
  15. &nbsp;&nbsp;&nbsp;&nbsp;
  16. <el-text style="font-size: 24px;">PO款号:&nbsp;</el-text>
  17. <el-input v-model="orderform['款号']" disabled style="width: 10%; height: 40px;" />
  18. &nbsp;&nbsp;&nbsp;&nbsp;
  19. <el-text style="font-size: 24px;">款式:&nbsp;</el-text>
  20. <el-input v-model="orderform['款式']" disabled style="width: 10%; height: 40px;" />
  21. </div>
  22. <br>
  23. <el-table ref="multipleTable"
  24. style="width: 100%; height: 35vh; font-size: 16px;margin-left: 10px;"
  25. :row-style="{ height: '40px' }" :header-cell-style="{ padding: '0px'}"
  26. :cell-style="{ padding: '0px', fontSize: '16px' }"
  27. @row-click="orderlistclick" :cell-class-name="satusCellClass"
  28. border :data="orderdata" highlight-current-row="true"class="custom-table">
  29. <el-table-column align="center" label="工序名称" prop="工序名称" width="90"/>
  30. <!-- 尺码列表 -->
  31. <template v-for="item in arr">
  32. <el-table-column align="left" :label=item :prop=item width="75"/>
  33. </template>
  34. <el-table-column align="left" label="完成总数量" prop="total" width="110"/>
  35. <el-table-column align="left" label="制单数" prop="制单数" width="100"/>
  36. <el-table-column align="left" label="完成百分比" prop="scale" width="100"/>
  37. </el-table>
  38. <br>
  39. <h3>成品入仓完成率</h3>
  40. <div class="progress-wrapper">
  41. <div
  42. class="progress-row"
  43. v-for="item in progressList"
  44. :key="item.subOrderNo"
  45. >
  46. <div class="progress-info">
  47. <span style='font-size: 20px;'><strong>子订单编号:</strong>{{ item.subOrderNo }}</span>
  48. </div>
  49. <el-progress
  50. :percentage="item.percentage"
  51. :status="item.percentage >= 100 ? 'success' : 'success'"
  52. :stroke-width="17"
  53. :text-inside="true"
  54. style="flex: 1;width: 79%;"
  55. />
  56. </div>
  57. </div>
  58. <br>
  59. <div style="display: flex; align-items: center;">
  60. <el-tag type="info" style="width: 40px; height: 40px; margin-right: 10px;"><h2>包数</h2></el-tag>
  61. <h2 style="margin: 0 20px 0 0;">白格子图标表示“已有包”</h2>
  62. <el-tag type="success" style="width: 40px; height: 40px; margin-right: 10px;"><h2>包数</h2></el-tag>
  63. <h2 style="margin: 0 20px 0 0;">绿格子图标表示“已完成包”</h2>
  64. <el-tag type="danger" style="width: 40px; height: 40px; margin-right: 10px;"><h2>包数</h2></el-tag>
  65. <h2 style="margin: 0;">红格子图标表示“废弃包”</h2>
  66. </div>
  67. <div class="number-container">
  68. <div
  69. v-for="(item, index) in Mabaolistform"
  70. :key="index"
  71. :class="getBoxClass(item)">
  72. {{ typeof item === 'object' ? item.value : item }}
  73. </div>
  74. </div>
  75. </el-dialog>
  76. </template>
  77. <script setup>
  78. // 全量引入格式化工具 请按需保留
  79. // import $script from 'scriptjs'
  80. // import $ from 'jquery';
  81. // import LuckyExcel from 'luckyexcel';
  82. import { Layout, LayoutSider, LayoutContent } from '@arco-design/web-vue';
  83. import {ref, reactive} from 'vue';
  84. import {SubWorkOrderStatusList,Mabaolist,SubOrderProgress} from '@/api/mes/job';
  85. import { useUserStore } from '@/pinia/modules/user';
  86. defineOptions({name: 'Company'})
  87. const SubWorkOrderStatusListlog = ref(false)
  88. // let baoshulist = []; // 确保在使用前已经声明
  89. const gx = ref('')
  90. const orderid = ref('')
  91. const orderdata = reactive([])
  92. const arr = reactive([])
  93. const orderform = ref({
  94. "订单编号": '',
  95. "子订单编号": '',
  96. "客户编号": '',
  97. "款号": '',
  98. "款式": ''
  99. });
  100. const progressList = ref([])
  101. const open = async (ddzbh,gongxu) => {
  102. console.log("orderid",ddzbh)
  103. console.log("gx",gongxu)
  104. orderid.value = ddzbh
  105. gx.value = gongxu
  106. SubWorkOrderStatusListlog.value = true
  107. const order = await SubWorkOrderStatusList({order:orderid.value});
  108. console.log(order)
  109. arr.length = 0
  110. baoshulist(gx.value);
  111. console.log(order.data.workOrderData)
  112. orderform.value = order.data.workOrderData
  113. orderdata.splice(0,order.data.data.length,...order.data.data);//表格数据
  114. arr.splice(0,order.data.arr.length,...order.data.arr);//表格尺码投数据
  115. const SubOrderProgress_list = await SubOrderProgress({order:order.data.workOrderData['订单编号']});
  116. console.log(SubOrderProgress_list)
  117. progressList.value = SubOrderProgress_list.data.result.map(item => ({
  118. subOrderNo: item['子订单编号'],
  119. 入仓数量: item['入仓数量'],
  120. 裁剪数量: item['裁剪数量'],
  121. percentage: parseFloat(item['完成率'].replace('%', ''))
  122. }))
  123. }
  124. const satusCellClass = ({row, column, rowIndex, columnIndex}) =>{
  125. if(row['工序名称'] === gx.value){
  126. return 'status-plan-usage-low';
  127. }
  128. }
  129. const multipleTable = ref(null);
  130. const Mabaolistform = reactive([]);
  131. // 表格点击事件
  132. const orderlistclick = async (row) => {
  133. baoshulist(row['工序名称']);
  134. if(row['工序名称'] !== gx.value){
  135. gx.value = null;
  136. }
  137. };
  138. const baoshulist = async (gx) => {
  139. const orderMabaolist = await Mabaolist({ order: orderid.value, process:gx});
  140. console.log(orderMabaolist);
  141. // 初始化所有包的数据,将 chefeng 转换为对象以便标记状态
  142. Mabaolistform.splice(
  143. 0,
  144. Mabaolistform.length,
  145. ...orderMabaolist.data.chefeng.map((item) => ({ value: item, status: 'default' }))
  146. );
  147. // 遍历完成包数,将状态标记为 complete
  148. orderMabaolist.data.complete.forEach((completed) => {
  149. const target = Mabaolistform.find((item) => item.value === completed);
  150. if (target) {
  151. target.status = 'complete';
  152. }
  153. });
  154. // 遍历废掉包数,将状态标记为 deleted
  155. orderMabaolist.data.delete.forEach((deleted) => {
  156. const target = Mabaolistform.find((item) => item.value === deleted);
  157. if (target) {
  158. target.status = 'deleted';
  159. }
  160. });
  161. };
  162. // 动态获取样式类
  163. const getBoxClass = (item) => {
  164. if (item && item.status === 'complete') {
  165. return 'number-box green'; // 完成包数
  166. } else if (item && item.status === 'deleted') {
  167. return 'number-box red'; // 废弃包数
  168. }
  169. return 'number-box'; // 默认状态
  170. };
  171. //退出
  172. const SubWorkOrderClose = () => {
  173. SubWorkOrderStatusListlog.value = false
  174. }
  175. defineExpose({open})
  176. </script>
  177. <style scoped>
  178. .custom-button-text {
  179. font-size: 25px;
  180. /* 或者你想要的任何大小 */
  181. }
  182. /* 自定义表格样式 */
  183. .custom-table >>> .el-table {
  184. border: 2px solid #333; /* 表格整体边框加深 */
  185. }
  186. .custom-table >>> .el-table__header-wrapper th {
  187. border-bottom: 2px solid #333; /* 表头底部边框加深 */
  188. }
  189. .custom-table >>> .el-table__body-wrapper td {
  190. border: 1px solid #666; /* 表格单元格边框加深 */
  191. }
  192. .custom-table >>> .el-table__cell {
  193. font-size: 20px; /* 单元格字体大小 */
  194. font-weight: 600; /* 单元格字体加粗 */
  195. }
  196. .number-container {
  197. display: flex;
  198. flex-wrap: wrap;
  199. gap: 4px;
  200. margin-top: 3px;
  201. }
  202. .number-box {
  203. display: flex;
  204. justify-content: center;
  205. align-items: center;
  206. width: 40px;
  207. height: 40px;
  208. background-color: #f2f2f2;
  209. border: 1px solid #ddd;
  210. border-radius: 8px;
  211. font-size: 18px;
  212. color: #333;
  213. font-weight: bold;
  214. transition: background-color 0.3s;
  215. }
  216. :deep(.number-box.green) {
  217. /* 完成包数(绿色) */
  218. background-color: palegreen !important;
  219. color: #155724;
  220. border-color: #c3e6cb;
  221. }
  222. :deep(.number-box.red) {
  223. background-color: red !important;
  224. color: #721c24;
  225. border-color: #f5c6cb;
  226. }
  227. :deep(.el-table__body .status-plan-usage-low) {
  228. background: #ff80ff !important;
  229. }
  230. :deep(.el-table__body .status-plan-usage-lows) {
  231. background: white !important;
  232. }
  233. </style>