caiqiebaogong.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
  1. <template>
  2. <div>
  3. <layout>
  4. <layout-content >
  5. <div class="gva-table-box">
  6. <div style="display: flex; align-items: baseline; margin-bottom: 10px;">
  7. <h1 style="margin: 0;">{{_code}}完工报工</h1>
  8. </div>
  9. <el-row :gutter="10" style="align-items: center; margin-bottom: 20px;">
  10. <!-- 子订单编号输入框 -->
  11. <el-col :span="4" style="padding: 0px;margin: 0px;">
  12. <el-input v-model="add_searchInfo" placeholder="请扫描子订单编号"@keyup.enter="add_onSubmit" id="searchInput" style="width: 100%; height: 50px;"/>
  13. </el-col>
  14. <!-- 查询按钮 -->
  15. <el-col :span="1.5" style="padding: 0px;margin: 0px;">
  16. <el-button type="primary" icon="search" @click="add_onSubmit"style="height: 50px;width: 80px;">查询</el-button>
  17. </el-col>
  18. <el-col :span="1.5" style="padding: 0px;margin: 0px;">
  19. <el-text style="font-size: 30px;">机台号</el-text>
  20. </el-col>
  21. <!-- 机台号输入框 -->
  22. <el-col :span="2"><el-input v-model="add_formData['机台号']" readonly style="width: 100%; height: 40px;"/></el-col>
  23. <el-col :span="1.5" style="padding: 0px;margin: 0px;">
  24. <el-text style="font-size: 30px;">工序</el-text>
  25. </el-col>
  26. <!-- 工序输入框 -->
  27. <el-col :span="2"><el-input v-model="add_formData['工序']" readonly style="width: 100%; height: 40px;" /></el-col>
  28. <el-col :span="1.5" style="padding: 0px;margin: 0px;">
  29. <el-text style="font-size: 30px;">组别</el-text>
  30. </el-col>
  31. <!-- 组别输入框 -->
  32. <el-col :span="2"><el-input v-model="add_formData['组别']" readonly style="width: 100%; height: 40px;" /></el-col>
  33. <el-col :span="1.5" style="padding: 0px;margin: 0px;">
  34. <el-text style="font-size: 30px;">人员</el-text>
  35. </el-col>
  36. <!-- 人员输入框 -->
  37. <el-col :span="2"><el-input v-model="add_formData['人员']" readonly style="width: 100%; height: 40px;"/></el-col>
  38. </el-row>
  39. <el-row :gutter="0">
  40. <el-col :span="2.5"><el-text style="font-size: 30px;margin-left: 90px;">尺 码</el-text></el-col>
  41. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm1" id="cm1" readonly style="width: 65px;height: 40px;" /></el-col>
  42. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm2" id="cm2" readonly style="width: 65px;height: 40px;" /></el-col>
  43. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm3" id="cm3" readonly style="width: 65px;height: 40px;" /></el-col>
  44. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm4" id="cm4" readonly style="width: 65px;height: 40px;" /></el-col>
  45. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm5" id="cm5" readonly style="width: 65px;height: 40px;" /></el-col>
  46. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm6" id="cm6" readonly style="width: 65px;height: 40px;" /></el-col>
  47. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm7" id="cm7" readonly style="width: 65px;height: 40px;" /></el-col>
  48. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm8" id="cm8" readonly style="width: 65px;height: 40px;" /></el-col>
  49. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm9" id="cm9" readonly style="width: 65px;height: 40px;" /></el-col>
  50. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmformdata.cm10" id="cm10" readonly style="width: 65px;height: 40px;" /></el-col>
  51. <el-col :span="1"><el-input v-model="cmformdata.cm11" id="cm11" readonly style="width: 65px;height: 40px;" /></el-col>
  52. </el-row>
  53. <el-row :gutter="0">
  54. <el-col :span="2.5"><el-text style="font-size: 30px;margin-left: 70px;">制单数</el-text></el-col>
  55. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl1" id="zdsc1" readonly style="width: 65px;height: 40px;" /></el-col>
  56. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl2" id="zdsc2" readonly style="width: 65px;height: 40px;" /></el-col>
  57. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl3" id="zdsc3" readonly style="width: 65px;height: 40px;" /></el-col>
  58. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl4" id="zdsc4" readonly style="width: 65px;height: 40px;" /></el-col>
  59. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl5" id="zdsc5" readonly style="width: 65px;height: 40px;" /></el-col>
  60. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl6" id="zdsc6" readonly style="width: 65px;height: 40px;" /></el-col>
  61. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl7" id="zdsc7" readonly style="width: 65px;height: 40px;" /></el-col>
  62. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl8" id="zdsc8" readonly style="width: 65px;height: 40px;" /></el-col>
  63. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl9" id="zdsc9" readonly style="width: 65px;height: 40px;" /></el-col>
  64. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="cmslformdata.cmsl10" id="zdsc10" readonly style="width: 65px;height: 40px;" /></el-col>
  65. <el-col :span="1"><el-input v-model="cmslformdata.zdtotal" id="zdtotal" readonly style="width: 65px;height: 40px;" /></el-col>
  66. </el-row>
  67. <el-row :gutter="0">
  68. <el-col :span="2.5"><el-text style="font-size: 30px;margin-left: 10px;">新增实裁数</el-text></el-col>
  69. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs1" @input="updateTotal" id="scs1" style="width: 65px;height: 40px;" /></el-col>
  70. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs2" @input="updateTotal" id="scs2" style="width: 65px;height: 40px;" /></el-col>
  71. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs3" @input="updateTotal" id="scs3" style="width: 65px;height: 40px;" /></el-col>
  72. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs4" @input="updateTotal" id="scs4" style="width: 65px;height: 40px;" /></el-col>
  73. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs5" @input="updateTotal" id="scs5" style="width: 65px;height: 40px;" /></el-col>
  74. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs6" @input="updateTotal" id="scs6" style="width: 65px;height: 40px;" /></el-col>
  75. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs7" @input="updateTotal" id="scs7" style="width: 65px;height: 40px;" /></el-col>
  76. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs8" @input="updateTotal" id="scs8" style="width: 65px;height: 40px;" /></el-col>
  77. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs9" @input="updateTotal" id="scs9" style="width: 65px;height: 40px;" /></el-col>
  78. <el-col :span="1" style="padding-right: 5px;margin-right: 11px;"><el-input v-model="scsformdata.scs10" @input="updateTotal" id="scs10" style="width: 65px;height: 40px;" /></el-col>
  79. <el-col :span="1"><el-input v-model="scsformdata.sctotal" id="sctotal" readonly style="width: 65px;height: 40px;" /></el-col>
  80. <el-button type="primary" @click="add_Dialog"
  81. style="width: 100px;height: 60px;font-size: 20px;margin: 0px 0 0 20px">报工</el-button>
  82. <el-button type="primary" @click="gd_yulan"
  83. style="width: 100px;height: 60px;font-size: 20px;margin: 0px 0 0 15px">工单预览</el-button>
  84. </el-row>
  85. <el-main>
  86. <!-- 表格数据 -->
  87. <el-tabs v-model="activeName">
  88. <el-tab-pane label="产量进度汇总记录" @click="showTable('产量进度汇总记录')" name="first">
  89. <el-table ref="multipleTable" style="width: 100%;height: 52vh" tooltip-effect="dark"
  90. :row-style="{ height: '50px' }" :header-cell-style="{ padding: '5px', fontSize: '20px' }"
  91. :cell-style="{ padding: '10px', fontSize: '20px' }" :header-row-style="{ height: '20px' }"
  92. :data="jdhz_tableData" border row-key="ID"
  93. size="small"
  94. show-summary :summary-method="getSummaries"
  95. highlight-current-row="true" @row-dblclick="updateCompanyFunc"
  96. @row-click="tableRowClick" :show-overflow-tooltip="true"
  97. @selection-change="handleSelectionChange">
  98. <!-- <el-table-column type="selection" width="55" /> -->
  99. <!-- <el-table-column sortable align="center" label="订单编号" prop="订单编号" width="120"/> -->
  100. <el-table-column align="left" label="订单子编号" prop="子订单编号" width="130"/>
  101. <!-- <el-table-column sortable align="left" label="客户编号" prop="客户编号" width="120"/> -->
  102. <el-table-column align="left" label="款号" prop="款号" width="140" />
  103. <!-- <el-table-column sortable align="left" label="款式" prop="款式" width="100" /> -->
  104. <el-table-column align="left" label="色系名称" prop="颜色" width="100" />
  105. <!-- <el-table-column sortable align="left" label="组别" prop="组别" width="100" /> -->
  106. <el-table-column v-for="item in sizeDatas" :key="item" align="left" :label="item"
  107. :prop="item" width="60" :cell-style="cellStyle">
  108. <template v-slot="scope">
  109. <div
  110. style="width: 80px;"
  111. @click="handleSizeClick(scope.$index, item, scope.row)">
  112. {{ scope.row[item] }}
  113. </div>
  114. </template>
  115. </el-table-column>
  116. <!-- <el-table-column sortable align="left" label="制单总数" prop="制单数" width="108" /> -->
  117. <el-table-column align="left" label="裁剪数" prop="裁剪数" width="90" />
  118. <el-table-column align="left" label="上报时间" prop="上报时间" width="160" />
  119. </el-table>
  120. </el-tab-pane>
  121. <el-tab-pane label="技术附件" @click="showTable('技术附件')" name="fourth">
  122. <el-table ref="multipleTable"
  123. :row-style="{ height: '20px' }"
  124. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  125. :header-cell-style="{ padding: '0px' }"
  126. :show-overflow-tooltip="true"
  127. :cell-class-name="planUsageCellClass"
  128. highlight-current-row="true"
  129. @row-dblclick="ExcelShow"
  130. style="width: 100%;height: 36vh" border tooltip-effect="dark" :data="jstableData" row-key="ID" @selection-change="handleSelectionChange">
  131. <!-- <el-table-column type="selection" width="55" /> -->
  132. <el-table-column align="left" label="备注" prop="附件备注" width="120"/>
  133. <el-table-column align="left" label="文件类型" prop="附件类型" width="120"/>
  134. <el-table-column align="left" label="关联产品" prop="关联编号" width="120"/>
  135. <el-table-column align="left" label="建档用户" prop="sys_id" width="120"/>
  136. <el-table-column align="left" label="建档时间" prop="sys_rq" width="160"/>
  137. <el-table-column align="left" label="更新时间" prop="mod_rq" width="120"/>
  138. </el-table>
  139. </el-tab-pane>
  140. </el-tabs>
  141. </el-main>
  142. </div>
  143. <!-- 是否订单尾包确认弹窗 -->
  144. <el-dialog v-model="DialogVisible" title="是否订单尾包" destroy-on-close width="30%" style="top: 20%;">
  145. <h3>请再次确认是否该订单产品已全部报工,该批为订单尾包?</h3>
  146. <div class="dialog-footer" style="text-align: right;">
  147. <el-button @click="confirmDialogVisible">取消</el-button>
  148. <el-button type="primary" @click="handleConfirm">确认</el-button>
  149. </div>
  150. </el-dialog>
  151. <!-- 查看技术附件弹窗 -->
  152. <el-dialog v-model="luckyexcelVisible" :before-close="luckyexcelCloseDialog" width="100%" top="0vh">
  153. <div id="luckyexcel" style="width: 100%;height: 100vh;"></div>
  154. </el-dialog>
  155. </layout-content>
  156. </layout>
  157. <PrintPage ref="printPageRef" />
  158. <!-- </el-main> -->
  159. </div>
  160. </template>
  161. <script>
  162. export default {
  163. data() {
  164. return {
  165. currentTable: '', // 当前展示的表格
  166. activeName: 'first',
  167. dialogFormVisible: false,
  168. formDataTest: {
  169. imageUrl: '' // 添加一个字段来保存上传的图片路径
  170. },
  171. rule: {} // 初始化rule对象
  172. };
  173. },
  174. methods: {
  175. handleKeyDown(event, prevId, currentId, nextId) {
  176. const currentElement = document.getElementById(currentId);
  177. const isEmpty = currentElement.value === '';
  178. const atStart = currentElement.selectionStart === 0;
  179. const atEnd = currentElement.selectionStart === currentElement.value.length;
  180. switch (event.keyCode) {
  181. case 13: // Enter
  182. case 40: // 向下箭头
  183. if (nextId) {
  184. document.getElementById(nextId).focus();
  185. }
  186. break;
  187. case 38: // 向上箭头
  188. if (prevId) {
  189. document.getElementById(prevId).focus();
  190. }
  191. break;
  192. case 8: // 删除键
  193. if (prevId && (isEmpty || atStart)) {
  194. document.getElementById(prevId).focus();
  195. }
  196. break;
  197. case 37: // 向左箭头
  198. if (prevId && atStart) {
  199. document.getElementById(prevId).focus();
  200. }
  201. break;
  202. case 39: // 向右箭头
  203. if (nextId && atEnd) {
  204. document.getElementById(nextId).focus();
  205. }
  206. break;
  207. default:
  208. break;
  209. }
  210. },
  211. },
  212. };
  213. </script>
  214. <script setup>
  215. // 全量引入格式化工具 请按需保留
  216. import $script from 'scriptjs'
  217. import $ from 'jquery';
  218. import LuckyExcel from 'luckyexcel';
  219. import { Layout, LayoutSider, LayoutContent } from '@arco-design/web-vue';
  220. import {ref, reactive} from 'vue';
  221. import {getSpotList,getInfo,OrderAttachments,getTabByGdbh,search} from '@/api/mes/job';
  222. import {getMachineMac} from '@/api/jixiaoguanli/jitairibaobiao'
  223. import {getMac} from '@/api/jixiaoguanli/baogong'
  224. import {ElMessage} from "element-plus";
  225. import PrintPage from '../yunyin/shengchanguanli/components/print.vue';
  226. import { useUserStore } from '@/pinia/modules/user';
  227. defineOptions({name: 'Company'})
  228. //获取登录用户信息
  229. const userStore = useUserStore()
  230. const _username = ref('')
  231. _username.value = userStore.userInfo.userName + '/' + userStore.userInfo.nickName
  232. console.log('获取用户名称',_username.value)
  233. //全局获取当前日期
  234. const today = new Date();
  235. const year = today.getFullYear();
  236. const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需要补零
  237. const day = String(today.getDate()).padStart(2, '0');
  238. const hours = String(today.getHours()).padStart(2, '0');
  239. const minutes = String(today.getMinutes()).padStart(2, '0');
  240. const seconds = String(today.getSeconds()).padStart(2, '0');
  241. const currentDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  242. const currentDates = `${year}-${month}-${day}`;
  243. const printPageRef = ref()
  244. const add_searchInfo = ref('')
  245. //全局获取code,接口接收code
  246. const _code = '裁剪'
  247. //全局接口接受的物理地址
  248. const Machine = ref('')
  249. //全局获取UniqId
  250. const UniqId = ref('')
  251. //物理地址获取机台编号
  252. const getMachineMacdata = async () => {
  253. try {
  254. const data = await getMachineMac({sys_sbID:Machine.value});
  255. if (data.data === null) {
  256. ElMessage({
  257. type: 'error',
  258. message: '未获取到机台编号请确认MAC地址或与管理员联系'
  259. })
  260. return;
  261. }
  262. // console.log(data)
  263. add_formData['机台号'] = data.data['机台号']
  264. add_formData['工序'] = data.data['生产工序']
  265. add_formData['组别'] = data.data['组别']
  266. add_formData['人员'] = data.data['组长']
  267. setTimeout(() => {
  268. const inputElement = document.getElementById('searchInput');
  269. if (inputElement) {
  270. inputElement.focus();
  271. }
  272. }, 100); // 延迟100毫秒
  273. } catch (error) {
  274. console.error(error)
  275. }
  276. }
  277. //自动获取物理地址
  278. const GetAddr = () => {
  279. var xmlhttp = null;
  280. var res;
  281. if (window.XMLHttpRequest) {
  282. xmlhttp = new XMLHttpRequest();
  283. } else if (window.ActiveXObject) {
  284. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  285. }
  286. // 2. 设置回调函数
  287. xmlhttp.onreadystatechange = function() {
  288. if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  289. res = eval('('+xmlhttp.response+')');
  290. let result = ''
  291. for (let i = 0; i < res.macAddress.length; i++) {
  292. if (i % 2 === 0 && i !== 0) {
  293. result += '-' // 根据实际需求修改分隔符
  294. }
  295. result += res.macAddress[i]
  296. }
  297. Machine.value = result
  298. getMachineMacdata(Machine.value)
  299. }
  300. }
  301. // 3. 打开一个连接
  302. xmlhttp.open("get", "http://127.0.0.1:8090/init")
  303. // 5. 发送
  304. xmlhttp.send();
  305. }
  306. // getMachineMacdata();
  307. GetAddr()
  308. //技术附件
  309. const add_formData = reactive({
  310. 机台号: '',
  311. 工序: '',
  312. 组别: '',
  313. 人员: '',
  314. 尺码: '',
  315. 数量: '',
  316. 是否订单尾包: '',
  317. });
  318. //清空对象的属性值
  319. const gd_clearFormData = () => {
  320. Object.keys(add_formData).forEach(key => {
  321. add_formData[key] = '';
  322. });
  323. };
  324. // 尺码
  325. const cmformdata = reactive({
  326. cm1:'',
  327. cm2:'',
  328. cm3:'',
  329. cm4:'',
  330. cm5:'',
  331. cm6:'',
  332. cm7:'',
  333. cm8:'',
  334. cm9:'',
  335. cm10:'',
  336. cm11:'合计',
  337. });
  338. // 制单数
  339. const cmslformdata = reactive({
  340. cmsl1: '',
  341. cmsl2: '',
  342. cmsl3: '',
  343. cmsl4: '',
  344. cmsl5: '',
  345. cmsl6: '',
  346. cmsl7: '',
  347. cmsl8: '',
  348. cmsl9: '',
  349. cmsl10: '',
  350. zdtotal: ''
  351. });
  352. // 实裁数
  353. const scsformdata = reactive({
  354. scs1:'',
  355. scs2:'',
  356. scs3:'',
  357. scs4:'',
  358. scs5:'',
  359. scs6:'',
  360. scs7:'',
  361. scs8:'',
  362. scs9:'',
  363. scs10:'',
  364. sctotal:'',
  365. });
  366. //实裁相加
  367. function updateTotal() {
  368. // 直接指定要累加的属性名
  369. const relevantKeys = ['scs1', 'scs2', 'scs3', 'scs4', 'scs5', 'scs6', 'scs7', 'scs8', 'scs9', 'scs10'];
  370. const values = relevantKeys.map(key => parseInt(scsformdata[key], 10) || 0); // 使用 || 0 来处理可能的 NaN 或 undefined/null
  371. scsformdata.sctotal = values.reduce((sum, value) => sum + value, 0);
  372. }
  373. //进度汇总表格数据
  374. const add_tableData = reactive([]);
  375. const jdhz_tableData = reactive([]);
  376. const _order = ref('');
  377. const _UniqId = ref('');
  378. //尺寸列表
  379. const sizeDatas = reactive([])
  380. //技术附件
  381. const jstableData = reactive([])
  382. const _list = ref('');
  383. //查询
  384. const add_onSubmit = async ()=>{
  385. if(add_searchInfo.value === '' || add_searchInfo.value === undefined){
  386. const WorkListdata = [];
  387. // add_tableData.splice(0,add_tableData.length,...WorkListdata);
  388. jdhz_tableData.splice(0,jdhz_tableData.length,...WorkListdata);
  389. ElMessage({type: 'warning',message: '搜索内容不能为空' })
  390. return;
  391. }
  392. // 如果没有以"DC"开头,自动补充添加DC
  393. if (!add_searchInfo.value.startsWith('DC')) {
  394. add_searchInfo.value = 'DC' + add_searchInfo.value;
  395. }
  396. sizeDatas.length = 0;
  397. _order.value = add_searchInfo.value;
  398. //进度汇总表格数据
  399. const getSpotLists = await getSpotList({order:_order.value,code:_code});
  400. if(getSpotLists.data.total === 0){
  401. ElMessage({type: 'warning',message: '此订单未出库,请先出库' })
  402. return false
  403. }
  404. console.log('查询数据',getSpotLists.data)
  405. setTimeout(() => {
  406. const inputElement = document.getElementById('scs1');
  407. if (inputElement) {
  408. inputElement.focus();
  409. }
  410. }, 100);//100毫秒
  411. sizeDatas.splice(0, getSpotLists.data.headers.length, ...getSpotLists.data.headers);
  412. // add_tableData.splice(0, add_tableData.length, ...getSpotLists.data.list);
  413. jdhz_tableData.splice(0, jdhz_tableData.length, ...getSpotLists.data.table);
  414. console.log('上方数据',jdhz_tableData)
  415. //技术附件
  416. const searchValue = add_searchInfo.value.split('-')[0];
  417. const jsOrderAttachments = await OrderAttachments({order:searchValue,desc:'技术附件'})
  418. jstableData.splice(0,jsOrderAttachments.data.length,...jsOrderAttachments.data);
  419. _list.value = getSpotLists.data.list
  420. _UniqId.value = getSpotLists.data.list.UniqId
  421. const keys1 = ['cm1', 'cm2', 'cm3', 'cm4','cm5','cm6','cm7','cm8','cm9','cm10',];
  422. const keys2 = ['cmsl1', 'cmsl2', 'cmsl3', 'cmsl4','cmsl5','cmsl6','cmsl7','cmsl8','cmsl9','cmsl10','zdtotal',];
  423. if(_order.value.includes('-')){
  424. for (let key of keys1) {
  425. if (getSpotLists.data.list.hasOwnProperty(key)) { // 确保键存在于对象中
  426. cmformdata[key] = getSpotLists.data.list[key];
  427. }
  428. }
  429. for (let key of keys2) {
  430. if (getSpotLists.data.list.hasOwnProperty(key)) { // 确保键存在于对象中
  431. cmslformdata[key] = getSpotLists.data.list[key];
  432. }
  433. }
  434. }else{
  435. for (let key of keys1) {
  436. cmformdata[key] = '';
  437. }
  438. for (let key of keys2) {
  439. cmslformdata[key] = '';
  440. }
  441. }
  442. // getSummaries();
  443. };
  444. //合计
  445. const getSummaries = (param) => {
  446. const { columns, data } = param;
  447. const sums = {};
  448. const summableLabels = [...sizeDatas, "裁剪总数"];
  449. columns.forEach((column, index) => {
  450. if (index === 1) {
  451. sums[index] = '总数量合计';
  452. return;
  453. }
  454. if (summableLabels.includes(column.label)) {
  455. const values = data.map(item => Number(item[column.property]));
  456. // 检查数组中是否所有值都是 NaN
  457. if (!values.every(value => isNaN(value))) {
  458. sums[index] = values.reduce((prev, curr) => {
  459. const value = Number(curr);
  460. if (!isNaN(value)) {
  461. return prev + value;
  462. }
  463. return prev;
  464. }, 0);
  465. // 如果需要,可以在这里添加单位
  466. // sums[index] += ' 件';
  467. } else {
  468. sums[index] = '';
  469. }
  470. }
  471. });
  472. return sums;
  473. };
  474. //技术资料excel展示
  475. const ExcelShow = (row) =>{
  476. console.log("技术资料excel展示")
  477. console.log(row)
  478. if(!row.附件内容) return
  479. $.getScript('/luckysheet/plugins/js/plugin.js', () => {
  480. $script('/luckysheet/luckysheet.umd.js', () => {
  481. function dataURLtoBlob(dataUrl) {
  482. const byteString = atob(dataUrl.split(',')[1]);
  483. const ab = new ArrayBuffer(byteString.length);
  484. const ia = new Uint8Array(ab);
  485. for (let i = 0; i < byteString.length; i++) {
  486. ia[i] = byteString.charCodeAt(i);
  487. }
  488. return new Blob([ab], { type: 'application/octet-stream' });
  489. }
  490. const blob = dataURLtoBlob(row.附件内容);
  491. luckyexcelVisible.value = true
  492. LuckyExcel.transformExcelToLucky(blob, function(exportJson, luckysheetfile){
  493. if(exportJson.sheets==null || exportJson.sheets.length==0){
  494. alert("Failed to read the content of the excel file, currently does not support xls files!");
  495. return;
  496. }
  497. if(luckyExcel) luckyExcel.destroy();
  498. luckysheet.create({
  499. container: 'luckyexcel', //容器的ID
  500. data: exportJson.sheets,
  501. title: exportJson.info.name, // 工作簿名称
  502. lang: "zh", // 设定表格语言 国际化设置,允许设置表格的语言,支持中文("zh")和英文("en")
  503. showtoolbar: false, // 是否显示工具栏
  504. showinfobar: false, // 是否显示顶部信息栏
  505. allowEdit: false, // 是否允许前台编辑
  506. enableAddRow: false, // 允许增加行
  507. enableAddCol: false, // 允许增加列
  508. userInfo: false, // 右上角的用户信息展示样式
  509. showRowBar: false, // 是否显示行号区域
  510. showColumnBar: false, // 是否显示列号区域
  511. sheetFormulaBar: false, // 是否显示公式栏
  512. enableAddBackTop: false,//返回头部按钮
  513. });
  514. luckyExcel = luckysheet;
  515. })
  516. })
  517. })
  518. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/css/pluginsCss.css'));
  519. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/plugins/plugins.css'));
  520. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/css/luckysheet.css'));
  521. $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', '/luckysheet/assets/iconfont/iconfont.css'));
  522. }
  523. let luckyExcel = null
  524. const luckyexcelVisible = ref(false)
  525. const luckyexcelCloseDialog = () => {
  526. luckyexcelVisible.value = false
  527. }
  528. //表格行点击
  529. const tableRowClick = async (row)=>{
  530. add_searchInfo.value = row.子订单编号
  531. // console.log(row)
  532. _order.value = row.子订单编号
  533. // add_onSubmit();
  534. }
  535. //复选框选择
  536. const ckSelection = ref('')
  537. const handleSelectionChange = (selection, type) => {
  538. const ids = selection.map(item => {
  539. return item.子订单编号
  540. })
  541. ckSelection.value = ids.join(',')
  542. console.log(ckSelection.value)
  543. }
  544. //报工
  545. const add_Dialog = async ()=>{
  546. if (!add_formData['机台号']) {
  547. ElMessage({ type: 'warning', message: '未获取到机台' });
  548. return false;
  549. }
  550. if (!_order.value) {
  551. ElMessage({ type: 'warning', message: '请扫描子订单(条码)后,在进行报工' });
  552. return;
  553. }
  554. // 检查 scs1 到 scs10 是否都为空
  555. const isAllEmpty = Array.from({ length: 10 }, (_, i) => scsformdata[`scs${i + 1}`]).every(value => !value);
  556. if (isAllEmpty) {
  557. ElMessage({ type: 'warning', message: '请至少填写一个报工数据' });
  558. return;
  559. }
  560. //尺码
  561. let cmArray = [cmformdata.cm1, cmformdata.cm2, cmformdata.cm3, cmformdata.cm4, cmformdata.cm5, cmformdata
  562. .cm6, cmformdata.cm7, cmformdata.cm8, cmformdata.cm9, cmformdata.cm10
  563. ];
  564. //制单数
  565. let zdsl1Array = [cmslformdata.cmsl1, cmslformdata.cmsl2, cmslformdata.cmsl3, cmslformdata.cmsl4,
  566. cmslformdata.cmsl5, cmslformdata.cmsl6, cmslformdata.cmsl7, cmslformdata.cmsl8, cmslformdata
  567. .cmsl9, cmslformdata.cmsl10
  568. ];
  569. //上报数量
  570. let scArray = [scsformdata.scs1, scsformdata.scs2, scsformdata.scs3, scsformdata.scs4, scsformdata.scs5, scsformdata.scs6, scsformdata.scs7, scsformdata.scs8, scsformdata.scs9, scsformdata.scs10
  571. ];
  572. let resultArrays = [];
  573. for (let i = 0; i < scArray.length; i++) {
  574. // 创建一个新数组来存储当前索引下的所有值
  575. let currentValues = [add_formData['机台号'], cmArray[i], zdsl1Array[i], scArray[i]];
  576. // 添加到结果数组中
  577. resultArrays.push(currentValues);
  578. }
  579. let paramsList = [];
  580. for (let i = 0; i < resultArrays.length; i++) {
  581. if (scArray[i]) {
  582. let params = {};
  583. params.order_id = add_searchInfo.value;
  584. params.sczl_jtbh = add_formData['机台号'];
  585. params.gxmc = add_formData['工序'];
  586. params.sys_id = add_formData['人员'];
  587. params.sczl_bh = add_formData['组别'];
  588. params.cm = resultArrays[i][1];
  589. params.sl = resultArrays[i][3];
  590. params.sys_rq = currentDates;
  591. params.code = _code;
  592. paramsList.push(params);
  593. }
  594. }
  595. if (paramsList.length === 0) {
  596. ElMessage({type: 'info',message: '请填写实裁数'});
  597. return;
  598. }
  599. let allSuccess = true;
  600. for (let i = 0; i < paramsList.length; i++) {
  601. const cf_gettab = await search(paramsList[i]);
  602. console.log('新增产量计酬返回信息',cf_gettab)
  603. if (cf_gettab.code !== 0) {
  604. // ElMessage({ type: 'error', message: '报工失败' });
  605. allSuccess = false;
  606. break; // 如果某个报工失败,则中断循环
  607. }
  608. }
  609. // return;
  610. // 记录每一次上报数据信息日志
  611. let datalog = {};
  612. datalog.code = _code;
  613. datalog.订单编号 = _list.value[0].订单编号;
  614. datalog.子订单编号 = _list.value[0].子订单编号;
  615. datalog.款号 = _list.value[0].款号;
  616. datalog.款式 = _list.value[0].款式;
  617. datalog.颜色 = _list.value[0].颜色;
  618. datalog.上报时间 = currentDate;
  619. //循环生成 cm1 到 cm20 的字段
  620. for (let i = 1; i <= 10; i++) {
  621. datalog[`cm${i}`] = _list.value[0][`cm${i}`];
  622. }
  623. //循环生成 scsl1 到 scsl20 的字段
  624. for (let i = 1; i <= 10; i++) {
  625. datalog[`scsl${i}`] = scsformdata[`scs${i}`];
  626. }
  627. // 记录总实裁数
  628. datalog.sctotal = scsformdata.sctotal;
  629. datalog.zdtotal = cmslformdata['zdtotal'];
  630. datalog['组别'] = add_formData['组别'];
  631. console.log(datalog)
  632. const getTabByGdbhs = await getTabByGdbh(datalog);
  633. // //光标跳转input框
  634. // setTimeout(() => {
  635. // const inputElement = document.getElementById('searchInput');
  636. // if (inputElement) {
  637. // inputElement.focus();
  638. // }
  639. // }, 100); // 延迟100毫秒
  640. //报工修改印件资料一条数据
  641. if (_order.value.indexOf('-') !== -1) {
  642. let params = {}
  643. params.scsl1 = scsformdata.scs1
  644. params.scsl2 = scsformdata.scs2
  645. params.scsl3 = scsformdata.scs3
  646. params.scsl4 = scsformdata.scs4
  647. params.scsl5 = scsformdata.scs5
  648. params.scsl6 = scsformdata.scs6
  649. params.scsl7 = scsformdata.scs7
  650. params.scsl8 = scsformdata.scs8
  651. params.scsl9 = scsformdata.scs9
  652. params.scsl10 = scsformdata.scs10
  653. params.sctotal = scsformdata['sctotal']
  654. params.order_id = _order.value;//子订单编号
  655. params.rq = currentDates;//时间
  656. params.UniqId = _UniqId.value
  657. console.log(params)
  658. const baogong_getInfo = await getInfo(params);
  659. if (baogong_getInfo.code === 0) {
  660. ElMessage({ type: 'success', message: '报工成功' });
  661. setTimeout(() => {
  662. const inputElement = document.getElementById('searchInput');
  663. if (inputElement) {
  664. inputElement.focus();
  665. }
  666. }, 100); // 延迟100毫秒
  667. // 清空表单数据
  668. if (scsformdata) {
  669. // 批量清空 scs1 到 scs10 和总和字段
  670. for (let i = 1; i <= 10; i++) {
  671. scsformdata[`scs${i}`] = '';
  672. }
  673. scsformdata.sctotal = '';
  674. } else {
  675. console.error('scsformdata 未定义');
  676. }
  677. const getSpotLists = await getSpotList({ order: _order.value, code: _code });
  678. jdhz_tableData.splice(0, jdhz_tableData.length, ...getSpotLists.data.rows); //表格数据
  679. add_searchInfo.value = ''; // 清空搜索信息
  680. } else {
  681. ElMessage({ type: 'error', message: '报工失败' });
  682. }
  683. }
  684. }
  685. const gd_yulan = () => {
  686. if(add_searchInfo.value === '' || add_searchInfo.value === null){
  687. ElMessage({type: 'warning',message: '请选择具体的工单后,再操作此功能'})
  688. return false;
  689. }else{
  690. const order = add_searchInfo.value.split('-')[0]
  691. printPageRef.value.open(order)
  692. }
  693. }
  694. // =========== 分页 ===========
  695. // 分页相关的响应式变量
  696. const page = ref(1)
  697. const total = ref(0)
  698. const pageSize = ref(10)
  699. // 分页
  700. const handleCurrentChange = (val) => {
  701. page.value = val;
  702. _getStaffList();
  703. };
  704. // 修改页面容量 点击多少条/页
  705. const handleSizeChange = (val) => {
  706. page.value = 10;//默认显示
  707. pageSize.value = val;
  708. _getStaffList();
  709. };
  710. </script>
  711. <style scoped>
  712. .form-container {
  713. display: flex;
  714. flex-wrap: wrap;
  715. }
  716. .form-column {
  717. /*flex: 1;*/
  718. margin-right: 15px; /* 调整列之间的间距 */
  719. }
  720. /* 左侧输入框宽度调整 */
  721. .form-column .el-form-item .el-input {
  722. width: 150px; /* 调整左侧输入框的宽度 */
  723. }
  724. /* 媒体查询,根据需要调整断点 */
  725. @media screen and (max-width: 768px) {
  726. .form-column {
  727. flex: 1 0 100%; /* 在小屏幕下变成单列布局 */
  728. margin-right: 0;
  729. }
  730. }
  731. /*:deep(.el-table td .cell) {*/
  732. /* line-height: 30px !important;*/
  733. /*}*/
  734. .JKWTree-container {
  735. display: flex;
  736. }
  737. .JKWTree-tree {
  738. /*width: 300px;*/
  739. background-color: #fff;
  740. padding: 10px;
  741. margin-right: 20px;
  742. }
  743. .JKWTree-tree h3 {
  744. font-size: 15px;
  745. font-weight: 700;
  746. margin: 10px 0;
  747. }
  748. .JKWTree-content {
  749. flex: 1;
  750. }
  751. /* 图片上传 */
  752. .upload-box {
  753. width: 200px;
  754. height: 200px;
  755. border: 2px dashed #e2e2e2;
  756. display: flex;
  757. justify-content: center;
  758. align-items: center;
  759. position: relative;
  760. cursor: pointer;
  761. }
  762. .uploaded-image {
  763. width: 100%;
  764. height: 100%;
  765. object-fit: cover;
  766. }
  767. .upload-icon {
  768. font-size: 40px;
  769. color: #c0c4cc;
  770. }
  771. .file-input {
  772. display: none;
  773. }
  774. .el-table .warning-row {
  775. background: oldlace;
  776. }
  777. /* 选中某行时的背景色 */
  778. :deep(.el-table__body tr.current-row) > td {
  779. background: #ff80ff !important;
  780. }
  781. </style>
  782. <style scoped>
  783. :deep(.el-table td .cell) {
  784. line-height: 20px !important;
  785. }
  786. :deep(.el-tabs__header){
  787. margin-bottom: 0;
  788. }
  789. .search{
  790. margin-left: 0px !important;
  791. margin-right: 10px !important;
  792. }
  793. .bt{
  794. margin-left: 2px !important;
  795. padding: 3px !important;
  796. font-size: 12px;
  797. }
  798. .el-tabs__header{
  799. margin: 0px !important;
  800. }
  801. .gva-table-box{
  802. padding: 0px !important;
  803. margin-left: -10px !important;
  804. }
  805. .mab{
  806. margin-bottom: 5px;
  807. }
  808. /* 搜索样式 */
  809. ::v-deep .el-input__wrapper #searchInput {
  810. font-size: 16px;
  811. }
  812. ::v-deep .el-input__wrapper #jitaihao {
  813. font-size: 18px;
  814. }
  815. ::v-deep .el-input__wrapper #gongxu {
  816. font-size: 18px;
  817. }
  818. ::v-deep .el-input__wrapper #zubie {
  819. font-size: 18px;
  820. }
  821. ::v-deep .el-input__wrapper #renyuan {
  822. font-size: 18px;
  823. }
  824. ::v-deep .el-input__wrapper #shuliang {
  825. font-size: 18px;
  826. color: red;
  827. }
  828. ::v-deep .el-input__wrapper #chima {
  829. font-size: 18px;
  830. }
  831. /* 尺码/制单数合计样式 */
  832. ::v-deep .el-input__wrapper #cm1{
  833. font-size: 20px;
  834. }
  835. ::v-deep .el-input__wrapper #cm2{
  836. font-size: 20px;
  837. }
  838. ::v-deep .el-input__wrapper #cm3{
  839. font-size: 20px;
  840. }
  841. ::v-deep .el-input__wrapper #cm4{
  842. font-size: 20px;
  843. }
  844. ::v-deep .el-input__wrapper #cm5{
  845. font-size: 20px;
  846. }
  847. ::v-deep .el-input__wrapper #cm6{
  848. font-size: 20px;
  849. }
  850. ::v-deep .el-input__wrapper #cm7{
  851. font-size: 20px;
  852. }
  853. ::v-deep .el-input__wrapper #cm8{
  854. font-size: 20px;
  855. }
  856. ::v-deep .el-input__wrapper #cm9{
  857. font-size: 20px;
  858. }
  859. ::v-deep .el-input__wrapper #cm10{
  860. font-size: 20px;
  861. }
  862. ::v-deep .el-input__wrapper #cm11{
  863. font-size: 20px;
  864. }
  865. /* 本次实裁新增样式 */
  866. ::v-deep .el-input__wrapper #cmsl1{
  867. font-size: 20px;
  868. color: red !important;
  869. }
  870. ::v-deep .el-input__wrapper #cmsl2{
  871. font-size: 20px;
  872. color: red !important;
  873. }
  874. ::v-deep .el-input__wrapper #cmsl3{
  875. font-size: 20px;
  876. color: red !important;
  877. }
  878. ::v-deep .el-input__wrapper #cmsl4{
  879. font-size: 20px;
  880. color: red !important;
  881. }
  882. ::v-deep .el-input__wrapper #cmsl5{
  883. font-size: 20px;
  884. color: red !important;
  885. }
  886. ::v-deep .el-input__wrapper #cmsl6{
  887. font-size: 20px;
  888. color: red !important;
  889. }
  890. ::v-deep .el-input__wrapper #cmsl7{
  891. font-size: 20px;
  892. color: red !important;
  893. }
  894. ::v-deep .el-input__wrapper #cmsl8{
  895. font-size: 20px;
  896. color: red !important;
  897. }
  898. ::v-deep .el-input__wrapper #cmsl9{
  899. font-size: 20px;
  900. color: red !important;
  901. }
  902. ::v-deep .el-input__wrapper #cmsl10{
  903. font-size: 20px;
  904. color: red !important;
  905. }
  906. ::v-deep .el-input__wrapper #zdtotal{
  907. font-size: 20px;
  908. color: red !important;
  909. }
  910. </style>