tuihuan.vue 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142
  1. <template>
  2. <div>
  3. <layout>
  4. <el-row :gutter="24" style="margin-bottom: 6px;">
  5. <el-input v-model="records_searchInfo" placeholder="请搜索退还单号、订单编号或生产款号进行查询相关退还记录" @input="records_handleInput"
  6. @keyup.enter="search_onSubmit" id="searchInput" style="width: 460px;height: 50px;margin-left: 10px;">
  7. </el-input>
  8. <el-button type="primary" @click="Reporting_onSubmit" style="height: 50px;font-size: 20px;margin-left: 20px;">面料退还</el-button>
  9. <!-- <el-button type="danger" @click="deldetail_delclick" style="width: 80px;height: 50px;" v-if="del_details=== true" :disabled="details_Selection === '' " class="bt" >删除</el-button> -->
  10. </el-row>
  11. <layout>
  12. <layout-sider :resize-directions="['right']" :width="190" style="margin-right: 10px;">
  13. <div class="JKWTree-tree" style="height: 70vh;">
  14. <h3>面料库存</h3>
  15. <el-tree :data="treeData" class="treecolor" highlight-current="true" @node-click="handleNodeClick" />
  16. </div>
  17. </layout-sider>
  18. <layout-content >
  19. <div class="gva-table-box">
  20. <el-tabs v-model="activeName" @tab-click="handleClick">
  21. <el-tab-pane label="退还记录" @click="showTable('退还记录')" name="first">
  22. <el-table ref="multipleTable"
  23. :row-style="{ height: '30px' }" :header-cell-style="{ padding: '0px' }"
  24. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  25. :show-overflow-tooltip="true" highlight-current-row="true"
  26. @row-click="Recordclicks" @row-dblclick="Doubleclickrecord"
  27. @selection-change="detailSelectionChange" style="width: 100%;height: 65vh" border
  28. :summary-method="getSummaries" tooltip-effect="dark" :data="recordtableData" row-key="ID" >
  29. <!-- <el-table-column align="center" type="selection" width="40"//> -->
  30. <el-table-column align="left" label="退还单" prop="退还单" width="140"/>
  31. <el-table-column align="left" label="订单编号" prop="订单编号" width="180"/>
  32. <el-table-column align="left" label="款号" prop="款号" width="180"/>
  33. <el-table-column align="left" label="款式" prop="款式" width="180"/>
  34. <el-table-column align="left" label="物料名称" prop="物料名称" width="180"/>
  35. <el-table-column align="left" label="单号类型" prop="单号类型" width="90"/>
  36. <el-table-column align="left" label="退还总数" prop="总数" width="110"/>
  37. <el-table-column align="left" label="退还人员" prop="操作机台" width="110"/>
  38. <el-table-column align="left" label="退还日期" prop="日期" width="120"/>
  39. <el-table-column align="left" label="创建日期" prop="创建日期" width="160"/>
  40. <el-table-column fixed="right" label="操作" width="130">
  41. <template #default="{ row, $index }">
  42. <el-button @click="record_deleteRow(row,$index)" type="success" size="small"
  43. style="font-size: 16px;padding: 0px;width: 90px;">
  44. 退还明细
  45. </el-button>
  46. </template>
  47. </el-table-column>
  48. </el-table>
  49. </el-tab-pane>
  50. <!-- 分页 -->
  51. <div class="gva-pagination">
  52. <el-pagination
  53. @size-change="handleSizeChange"
  54. @current-change="handleCurrentChange"
  55. :current-page="page"
  56. :page-sizes="[10, 30, 50, 100]"
  57. :page-size="pageSize"
  58. layout="total, sizes, prev, pager, next, jumper"
  59. :total="total">
  60. </el-pagination>
  61. </div>
  62. </el-tabs>
  63. <div class="dialog-footer" style="text-align: left;margin-right: 60px;">
  64. </div>
  65. </div>
  66. </layout-content>
  67. </layout>
  68. </layout>
  69. </div>
  70. <!-- 明细数据 -->
  71. <el-dialog v-model="recorddialogFormVisible" :before-close="record_bomcloseDialog" width="100%" style="height: 100%;margin: 0%;padding: 0px 10px 0px 10px;" destroy-on-close>
  72. <el-button type="primary" @click="record_closeDialog" style="width: 100px;height: 50px;margin-left: 10px;">关 闭</el-button>
  73. <div class="gva-table-box">
  74. <el-tabs v-model="activeName" @tab-click="handleClick">
  75. <el-tab-pane label="退还明细" name="first">
  76. <el-table ref="multipleTable"
  77. :row-style="{ height: '30px' }" :header-cell-style="{ padding: '0px' }"
  78. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  79. :show-overflow-tooltip="true" highlight-current-row="true"
  80. @row-click="detailsclicks" @row-dblclick="Doubleclickdetails"
  81. @selection-change="detailSelectionChange" style="width: 100%;height: 75vh" border
  82. :summary-method="getSummaries" tooltip-effect="dark" :data="rdetailstableData" row-key="ID" >
  83. <!-- <el-table-column align="center" type="selection" width="40"/> -->
  84. <el-table-column align="left" label="退还单号" prop="出库单据编号" width="140"/>
  85. <!-- <el-table-column align="left" label="批次号" prop="批次号" width="90"/> -->
  86. <el-table-column align="left" label="订单编号" prop="订单编号" width="105"/>
  87. <!-- <el-table-column align="left" label="客户" prop="客户编号" width="70"/> -->
  88. <el-table-column align="left" label="生产款号" prop="款号" width="140"/>
  89. <!-- <el-table-column align="left" label="款式" prop="款式" width="120"/> -->
  90. <!-- <el-table-column align="left" label="物料编码" prop="物料编码" width="150"/> -->
  91. <el-table-column align="left" label="物料名称" prop="物料名称" width="150"/>
  92. <el-table-column align="left" label="颜色" prop="BOM_颜色" width="120"/>
  93. <!-- <el-table-column align="left" label="计划用料" prop="计划用料" width="90"/> -->
  94. <!-- <el-table-column align="left" label="计划门幅" prop="计划门幅" width="90"/> -->
  95. <el-table-column align="left" label="定额用料" prop="实际门幅" width="90"/>
  96. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="90"/>
  97. <el-table-column align="left" label="退还数量" prop="数量" width="90"/>
  98. <el-table-column align="left" label="入仓总量" prop="入仓总量" width="90"/>
  99. <el-table-column align="left" label="库存总量" prop="库存数量" width="90"/>
  100. <el-table-column align="left" label="退还类型" prop="退还类型" width="90"/>
  101. <el-table-column align="left" label="投料单位" prop="单位" width="90"/>
  102. <el-table-column align="left" label="部门" prop="departname" width="90"/>
  103. <el-table-column align="left" label="备注" prop="remark" width="90"/>
  104. <el-table-column align="left" label="退还人员" prop="操作机台" width="100"/>
  105. <el-table-column align="left" label="退还日期" prop="日期" width="160"/>
  106. </el-table>
  107. </el-tab-pane>
  108. </el-tabs>
  109. <div class="dialog-footer" style="text-align: left;margin-right: 60px;">
  110. </div>
  111. </div>
  112. </el-dialog>
  113. <!-- 选择退还弹窗 -->
  114. <el-dialog v-model="res_bomdialogFormVisible" :before-close="res_bomcloseDialog" style="width: 100%;height: 100%;margin: 0px;padding: 0px;" destroy-on-close>
  115. <div class="dialog-footer" style="margin: 0px;">
  116. <el-button type="primary" @click="res_bomcloseDialog" style="width: 100px;height: 50px;margin-left: 10px;">关 闭</el-button>
  117. <el-button type="primary" @click="dj_Dialog" style="width: 120px; height: 50px;">
  118. 添加面料
  119. </el-button>
  120. <el-button type="primary" @click="res_bomenterDialog" style="width: 100px;height: 50px;">一键退还</el-button>
  121. </div>
  122. <el-divider style='margin: 10px 0px 10px 0px;'><span class="print-title" style="font-size: 18px;">面料退还明细</span></el-divider>
  123. <div style="display: flex; gap: 20px; align-items: center;">
  124. <!-- 左部分 -->
  125. <div style="">
  126. <el-input v-model="add_searchInfo" placeholder="请扫描订单编号或输入生产款号查询" @input="handleInput"
  127. @keyup.enter="add_onSubmit" id="details_searchInput" style="width: 470px;height: 50px;margin-left: 10px;">
  128. </el-input>
  129. <el-table ref="multipleTable" style="width: 100%;height: 40vh" tooltip-effect="dark"
  130. :row-style="{ height: '40px' }" :header-cell-style="{ padding: '0px' }"
  131. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  132. :data="restableData" border row-key="ID" size="small"
  133. :cell-class-name="tableDataCellClass"
  134. highlight-current-row="true" @row-dblclick="updateCompanyFunc"
  135. @row-click="tableRowClick" :show-overflow-tooltip="true"
  136. @selection-change="handleSelectionChange">
  137. <el-table-column align="left" label="关联编号" prop="关联编号" width="90" />
  138. <el-table-column align="left" label="订单编号" prop="订单编号" width="110" />
  139. <el-table-column align="left" label="生产款号" prop="生产款号" width="110" />
  140. <el-table-column align="left" label="物料名称" prop="物料名称" width="120" />
  141. <el-table-column align="left" label="颜色" prop="颜色" width="80" />
  142. </el-table>
  143. </div>
  144. <!-- 右部分 -->
  145. <div style="position: relative;width: 1300px;height: 416px;">
  146. <el-descriptions class="margin-top" :column="4" :size="size" border>
  147. <el-descriptions-item label="批次号">{{ mianliaotabData.批次号 }}</el-descriptions-item>
  148. <el-descriptions-item label="关联号">{{ mianliaotabData.关联号 }}</el-descriptions-item>
  149. <el-descriptions-item label="订单编号">{{ mianliaotabData.订单编号 }}</el-descriptions-item>
  150. <el-descriptions-item label="客户">{{ mianliaotabData.客户编号 }}</el-descriptions-item>
  151. <el-descriptions-item label="物料编号">{{ mianliaotabData.物料编号 }}</el-descriptions-item>
  152. <el-descriptions-item label="生产款号">{{ mianliaotabData.生产款号 }}</el-descriptions-item>
  153. <el-descriptions-item label="颜色">{{ mianliaotabData.颜色 }}</el-descriptions-item>
  154. <el-descriptions-item label="物料名称">{{ mianliaotabData.物料名称 }}</el-descriptions-item>
  155. </el-descriptions>
  156. <el-descriptions class="margin-top" :column="4" :size="size" border>
  157. <!-- <el-descriptions-item label="计划用料">{{ mianliaotabData.计划用料 }}</el-descriptions-item> -->
  158. <!-- <el-descriptions-item label="计划门幅">{{ mianliaotabData.计划门幅 }}</el-descriptions-item> -->
  159. <el-descriptions-item label="累计退还数量">{{ mianliaotabData.入仓总数量 }}</el-descriptions-item>
  160. <el-descriptions-item label="库存数量">{{ mianliaotabData.库存数量 }}</el-descriptions-item>
  161. <el-descriptions-item label="单位" >
  162. <el-radio-group v-model="mianliaotabData.单位" >
  163. <el-radio label="米" border >米</el-radio>
  164. <el-radio label="码" border >码</el-radio>
  165. <el-radio label="公斤" border >公斤</el-radio>
  166. </el-radio-group>
  167. </el-descriptions-item>
  168. </el-descriptions>
  169. <el-descriptions class="margin-top" :column="4" :size="size" border>
  170. <el-descriptions-item label="定额用料">{{ mianliaotabData.定额用料 }}</el-descriptions-item>
  171. <el-descriptions-item label="定额门幅">{{ mianliaotabData.定额门幅 }}</el-descriptions-item>
  172. <el-descriptions-item label="实际门幅">{{ mianliaotabData.实际门幅 }}</el-descriptions-item>
  173. <!-- <el-descriptions-item label="实际门幅">
  174. <el-input v-model="mianliaotabData.实际门幅" placeholder="" style="margin: 0; width: 100px;"/>
  175. </el-descriptions-item> -->
  176. <el-descriptions-item label="退还数量">
  177. <el-input v-model="mianliaotabData.退还数量" id='rksl' placeholder="" class="green-bg-item" style="margin: 0; width: 100px;"/>
  178. </el-descriptions-item>
  179. </el-descriptions>
  180. <!-- <el-descriptions class="margin-top" :column="2" :size="size" border>
  181. </el-descriptions> -->
  182. <el-descriptions class="margin-top" :column="2" :size="size" border>
  183. <el-descriptions-item label="退还类型">
  184. <el-radio v-model="radio1" label="退面料" border>退面料</el-radio>
  185. <el-radio v-model="radio1" label="退厂商" border>退厂商</el-radio>
  186. <el-radio v-model="radio1" label="退次品" border>退次品</el-radio>
  187. </el-descriptions-item>
  188. </el-descriptions>
  189. <el-descriptions class="margin-top" :column="2" :size="size" border>
  190. <el-descriptions-item label="选择部门" >
  191. <el-radio-group v-model="mianliaotabData.部门" >
  192. <el-radio label="业务部" border >业务部</el-radio>
  193. <el-radio label="技术部" border >技术部</el-radio>
  194. <el-radio label="内销" border >内销</el-radio>
  195. <el-radio label="裁床" border >裁床</el-radio>
  196. <el-radio label="其他" border >其他</el-radio>
  197. </el-radio-group>
  198. </el-descriptions-item>
  199. </el-descriptions>
  200. <el-descriptions class="margin-top" :column="3" :size="size" border>
  201. <el-descriptions-item label="备注">
  202. <el-input v-model="mianliaotabData.备注" placeholder="" class="green-bg-item" style="margin: 0;"/>
  203. </el-descriptions-item>
  204. </el-descriptions>
  205. <!-- <el-button type="primary" @click="dj_Dialog" style="width: 120px; height: 50px; position: absolute; bottom: 0px; right: 10px;">
  206. 添加面料
  207. </el-button> -->
  208. </div>
  209. </div>
  210. <br>
  211. <br>
  212. <el-divider><span class="print-title" style="font-size: 18px;">面料退还单</span></el-divider>
  213. <el-descriptions class="margin-top" :column="3" :size="size" border>
  214. <el-descriptions-item label="退还单号">{{danhao}}</el-descriptions-item>
  215. <el-descriptions-item label="退还日期" >
  216. <el-date-picker class="green-bg-item"
  217. v-model="riqi"
  218. type="date"
  219. placeholder="选择日期">
  220. </el-date-picker>
  221. </el-descriptions-item>
  222. <el-descriptions-item label="退还人员">{{chukuren}}</el-descriptions-item>
  223. </el-descriptions>
  224. <br>
  225. <div>
  226. <el-table ref="multipleTable" style="width: 100%;height: 25vh" tooltip-effect="dark"
  227. :row-style="{ height: '40px' }" :header-cell-style="{ padding: '0px' }"
  228. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  229. :data="danjutableData" border row-key="ID" size="small"
  230. :cell-class-name="danju_tableDataCellClass"
  231. highlight-current-row="true" :show-overflow-tooltip="true">
  232. <!-- <el-table-column type="selection" width="80" /> -->
  233. <el-table-column align="left" label="批次号" prop="批次号" width="90"/>
  234. <el-table-column align="left" label="关联号" prop="关联号" width="90"/>
  235. <el-table-column align="left" label="订单编号" prop="订单编号" width="110"/>
  236. <el-table-column align="left" label="生产款号" prop="生产款号" width="110"/>
  237. <el-table-column align="left" label="物料编号" prop="物料编号" width="160" />
  238. <el-table-column align="left" label="物料名称" prop="物料名称" width="130" />
  239. <el-table-column align="left" label="客户" prop="客户编号" width="90"/>
  240. <el-table-column align="left" label="款式" prop="款式" width="120"/>
  241. <el-table-column align="left" label="颜色" prop="颜色" width="90"/>
  242. <!-- <el-table-column align="left" label="计划用料" prop="计划用料" width="90"/> -->
  243. <!-- <el-table-column align="left" label="计划门幅" prop="计划门幅" width="90" /> -->
  244. <el-table-column align="left" label="定额用料" prop="定额用料" width="90" />
  245. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="90" />
  246. <el-table-column align="left" label="实际门幅" prop="实际门幅" width="90"/>
  247. <el-table-column align="left" label="退还数量" prop="退还数量" width="90"/>
  248. <el-table-column align="left" label="退还类型" prop="退还类型" width="90"/>
  249. <!-- <el-table-column align="left" label="累计退还数量" prop="入仓总数量" width="110"/>
  250. <el-table-column align="left" label="库存数量" prop="库存数量" width="90"/> -->
  251. <!-- <el-table-column align="left" label="领用数量" prop="领用数量" width="90"/> -->
  252. <el-table-column align="left" label="单位" prop="单位" width="60"/>
  253. <el-table-column align="left" label="部门" prop="部门" width="100"/>
  254. <el-table-column align="left" label="备注" prop="备注" width="100"/>
  255. <!-- <el-table-column align="left" label="关联订单" prop="关联订单" width="300"/> -->
  256. <el-table-column fixed="right" label="操作" width="120">
  257. <template #default="{ row, $index }">
  258. <el-button @click="deleteRow($index)" type="text" size="small">
  259. 移除
  260. </el-button>
  261. </template>
  262. </el-table-column>
  263. </el-table>
  264. <br>
  265. <br>
  266. </div>
  267. </el-dialog>
  268. <!--单号详情记录 -->
  269. <el-dialog v-model="details_pickingaddvisible" :before-close="()=> details_pickingaddvisible = false" style="width: 100%; margin: 0% auto; height: 100%;" :title="单据详情"
  270. destroy-on-close>
  271. <div class="dialog-footer" style="bottom: 10px; right: 10px; width: 100%;">
  272. <el-button type="primary" @click="details_ckth_closeDialog" style="width: 80px;height: 40px;">关 闭</el-button>
  273. </div>
  274. <br>
  275. <div>
  276. <el-table ref="multipleTable"
  277. :row-style="{ height: '30px' }" :header-cell-style="{ padding: '0px' }"
  278. :cell-style="{ padding: '0px' }" :header-row-style="{ height: '20px' }"
  279. :show-overflow-tooltip="true" highlight-current-row="true"
  280. @row-click="tableclick" @row-dblclick="ysupdateCompanyFunc"
  281. @selection-change="detailSelectionChange" style="width: 100%;height: 65vh" border
  282. :summary-method="getSummaries" tooltip-effect="dark" :data="ruku_detailstableData" row-key="ID" >
  283. <el-table-column align="center" type="selection" width="40"/>
  284. <el-table-column align="left" label="订单编号" prop="订单编号" width="110"/>
  285. <el-table-column align="left" label="生产款号" prop="生产款号" width="140"/>
  286. <el-table-column align="left" label="物料名称" prop="物料名称" width="140"/>
  287. <el-table-column align="left" label="计划用料" prop="计划用料" width="100"/>
  288. <el-table-column align="left" label="定额用料" prop="定额用料" width="100"/>
  289. <el-table-column align="left" label="计划门幅" prop="计划门幅" width="100"/>
  290. <el-table-column align="left" label="定额门幅" prop="定额门幅" width="100"/>
  291. <el-table-column align="left" label="裁床实际用料" prop="裁床实际用料" width="110"/>
  292. <el-table-column align="left" label="裁床领用面料" prop="裁床领用面料" width="110"/>
  293. <el-table-column align="left" label="裁床退还数量" prop="裁床退还数量" width="110"/>
  294. <el-table-column align="left" label="库存总量" prop="退还总量" width="100"/>
  295. <el-table-column align="left" label="面料结余" prop="面料结余" width="100"/>
  296. <el-table-column align="left" label="退还数量" prop="退还数量" width="100"/>
  297. <el-table-column align="left" label="投料单位" prop="投料单位" width="90"/>
  298. <el-table-column align="left" label="退还人员" prop="退还人员" width="120"/>
  299. <el-table-column align="left" label="退还时间" prop="退还时间" width="160"/>
  300. <el-table-column align="left" label="款式" prop="款式" width="140"/>
  301. <el-table-column align="left" label="客户" prop="客户编号" width="80"/>
  302. </el-table>
  303. </div>
  304. </el-dialog>
  305. </template>
  306. <script>
  307. //点击按钮显示下方表格
  308. export default {
  309. data() {
  310. return {
  311. currentTable: '', // 当前展示的表格
  312. activeName: 'first',
  313. _ddhval:'',
  314. add_gddialogFormVisible: true,
  315. };
  316. },
  317. methods: {
  318. }
  319. };
  320. </script>
  321. <script setup>
  322. // 全量引入格式化工具 请按需保留
  323. import { Layout, LayoutSider, LayoutContent } from '@arco-design/web-vue';
  324. import {ref, reactive} from 'vue'
  325. import {getInputDetail,
  326. TuihuoReport,
  327. OutOrderSearch,outReport,FabricDetail,gitReceiptNumber,FabricDetaillist,FabricDetaildel,ReceiptList,ReceiptDetail,fetchMonthlyFabricRecords} from '@/api/mes/job'
  328. import { ElMessage, ElMessageBox,ElUpload, ElButton } from 'element-plus';
  329. import { useUserStore } from '@/pinia/modules/user'
  330. // import { get } from 'scriptjs';
  331. defineOptions({name: 'Company'})
  332. //获取用户登录信息
  333. const userStore = useUserStore()
  334. const _username = ref('')
  335. _username.value = userStore.userInfo.userName + '/' + userStore.userInfo.nickName
  336. console.log('获取用户名称',_username.value)
  337. //全局调用获取当前日期
  338. const today = new Date();
  339. const year = today.getFullYear();
  340. const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需要补零
  341. const day = String(today.getDate()).padStart(2, '0');
  342. const hours = String(today.getHours()).padStart(2, '0');
  343. const minutes = String(today.getMinutes()).padStart(2, '0');
  344. const seconds = String(today.getSeconds()).padStart(2, '0');
  345. const currentDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  346. const currentDates = `${year}-${month}-${day}`;
  347. const currentMonth = `${year}-${month}`;
  348. //自动聚焦光标input
  349. // const getMachineMacdata = async () => {
  350. // setTimeout(() => {
  351. // const inputElement = document.getElementById('searchInput');
  352. // if (inputElement) {
  353. // inputElement.focus();
  354. // }
  355. // }, 100); // 延迟100毫秒
  356. // }
  357. // getMachineMacdata();
  358. // =========== 分页 ===========
  359. // 分页相关的响应式变量
  360. const page = ref(1)
  361. const total = ref(0)
  362. const pageSize = ref(50)
  363. // 分页
  364. const handleCurrentChange = (val) => {
  365. page.value = val;
  366. records_onSubmit();
  367. };
  368. // 修改页面容量 点击多少条/页
  369. const handleSizeChange = (val) => {
  370. page.value = 1;//默认显示
  371. pageSize.value = val;
  372. records_onSubmit();
  373. };
  374. //全局调用参数
  375. const danhao = ref('')
  376. const riqi = ref('')
  377. const chukuren = ref('')
  378. const add_searchInfo = ref('')//搜索
  379. const records_searchInfo = ref('')//历史记录搜索
  380. const add_lysearchInfo = ref('')//搜索
  381. const restableData = reactive([])//表格
  382. const _orderid = ref('')//订单子编号
  383. const _kh = ref('')//生产款号
  384. const radio1 = ref('退面料')
  385. // 侧边栏数据请求
  386. const treeData = reactive([]);
  387. const getTreeData = async () => {
  388. try {
  389. const response = await fetchMonthlyFabricRecords();
  390. if (response.code === 0 && response.data.退还) {
  391. // 1. 只处理退还数据
  392. const transformedData = Object.entries(response.data.退还).map(([month, dates]) => ({
  393. label: month, // "2025-03"
  394. children: dates.map(date => ({
  395. label: date, // "2025-03-31"
  396. params: {
  397. date, // 已经是正确格式,无需再转换
  398. month // 添加月份信息便于后续使用
  399. }
  400. }))
  401. }));
  402. // 2. 更简洁的数组更新方式
  403. Object.assign(treeData, transformedData);
  404. } else if (!response.data.退还) {
  405. console.warn('接口中没有退还数据');
  406. treeData.length = 0; // 清空数据
  407. }
  408. } catch (error) {
  409. console.error('获取数据失败:', error);
  410. // 可以在这里添加错误提示
  411. ElMessage.error('获取退还数据失败');
  412. }
  413. };
  414. getTreeData();
  415. const nodedata = ref('')
  416. const handleNodeClick = async (node, check) => {
  417. nodedata.value = node.label
  418. console.log(nodedata.value);
  419. restableData.splice(0, restableData.length);//清空表格
  420. // 取消所有节点的颜色
  421. const allNodes = document.querySelectorAll('.treecolor .el-tree-node');
  422. allNodes.forEach(node => {
  423. node.querySelector('.el-tree-node__label').style.color = '';
  424. });
  425. // 获取点击的节点 给当前点击的节点改变颜色【红色】
  426. const clickedNodeId = node['$treeNodeId'];
  427. const clickedNode = document.querySelector(`.treecolor .el-tree-node[data-key="${clickedNodeId}"]`);
  428. if (clickedNode) {
  429. clickedNode.querySelector('.el-tree-node__label').style.color = 'red';
  430. }
  431. //订单信息数据查询【接口】
  432. const ReceiptList_res = await ReceiptList({mouth:nodedata.value,search:'',page: page.value, limit: pageSize.value,code:'退还'});
  433. if (ReceiptList_res && ReceiptList_res.data && Array.isArray(ReceiptList_res.data.table)) {
  434. const filteredData = ReceiptList_res.data.table.filter(item => item.单号类型 === '退还');
  435. // 更新数据
  436. recordtableData.splice(0, recordtableData.length);
  437. recordtableData.splice(0, 0, ...filteredData);
  438. } else {
  439. console.error("数据获取失败");
  440. }
  441. }
  442. //查询按钮
  443. const search_onSubmit = async () => {
  444. const UnapprovalListtable = await ReceiptList({ mouth: '', search: records_searchInfo.value, page: page.value, limit: pageSize.value,code:'退还' });
  445. if (UnapprovalListtable && UnapprovalListtable.data && Array.isArray(UnapprovalListtable.data.table)) {
  446. const filteredData = UnapprovalListtable.data.table.filter(item => item.单号类型 === '退还');
  447. // 更新数据
  448. recordtableData.splice(0, recordtableData.length);
  449. recordtableData.splice(0, 0, ...filteredData);
  450. }
  451. };
  452. //input实时调用
  453. const handleInput = async ()=>{
  454. restableData.splice(0, restableData.length);//清空表格
  455. //订单信息数据查询【接口】
  456. const orderSearchdata = await OutOrderSearch({search:add_searchInfo.value});
  457. // if(orderSearchdata.data.length === 1){
  458. // _orderid.value = orderSearchdata.data[0]['订单编号']
  459. // add_searchInfo.value = orderSearchdata.data[0]['订单编号']
  460. // ddhformData.ddh = orderSearchdata.data[0]['订单编号']
  461. // ddhformData.kh = orderSearchdata.data[0]['客户编号']
  462. // ddhformData.sckh = orderSearchdata.data[0]['生产款号']
  463. // ddhformData.ks = orderSearchdata.data[0]['款式']
  464. // add_lysearchInfo.value = add_searchInfo.value
  465. // const gitReceiptNumberdata = await gitReceiptNumber({number:'TH'});
  466. // danhao.value = gitReceiptNumberdata.data.number
  467. // chukuren.value = userStore.userInfo.nickName
  468. // riqi.value = currentDates
  469. // }else{
  470. // restableData.splice(0,orderSearchdata.length,...orderSearchdata.data);
  471. // }
  472. if(orderSearchdata.code === 0){
  473. restableData.splice(0,orderSearchdata.length,...orderSearchdata.data);
  474. }
  475. }
  476. //input回车事件
  477. const add_onSubmit = async ()=>{
  478. //清空表格
  479. restableData.splice(0, restableData.length);
  480. const orderSearchdata = await OutOrderSearch({search:add_searchInfo.value});
  481. // if(orderSearchdata.data.length === 1){
  482. // res_bomdialogFormVisible.value = true
  483. // _orderid.value = orderSearchdata.data[0]['订单编号']
  484. // add_searchInfo.value = orderSearchdata.data[0]['订单编号']
  485. // ddhformData.ddh = orderSearchdata.data[0]['订单编号']
  486. // ddhformData.kh = orderSearchdata.data[0]['客户编号']
  487. // ddhformData.sckh = orderSearchdata.data[0]['生产款号']
  488. // ddhformData.ks = orderSearchdata.data[0]['款式']
  489. // add_lysearchInfo.value = add_searchInfo.value
  490. // const gitReceiptNumberdata = await gitReceiptNumber({number:'TH'});
  491. // console.log(gitReceiptNumberdata)
  492. // danhao.value = gitReceiptNumberdata.data.number
  493. // chukuren.value = userStore.userInfo.nickName
  494. // riqi.value = currentDates
  495. // }else{
  496. // restableData.splice(0,orderSearchdata.length,...orderSearchdata.data);
  497. // }
  498. if(orderSearchdata.code === 0){
  499. restableData.splice(0,orderSearchdata.length,...orderSearchdata.data);
  500. }
  501. };
  502. const mianliaotabData = ref({
  503. 物料编号: '',
  504. 物料名称: '',
  505. 关联号: '',
  506. 批次号: '',
  507. 计划用料: '',
  508. 计划门幅: '',
  509. 定额用料: '',
  510. 定额门幅: '',
  511. 退还数量: '',
  512. 入仓总数量: '',
  513. 库存数量: '',
  514. 领用数量: '',
  515. // 关联订单: '',
  516. 颜色: '',
  517. 单位: '',
  518. 部门: '',
  519. 备注: '',
  520. 实际门幅: '',
  521. });
  522. //表格行点击
  523. const tableRowClick = async (row) => {
  524. // 延迟 100 毫秒后聚焦输入框
  525. setTimeout(() => {
  526. const inputElement = document.getElementById('rksl');
  527. if (inputElement) {
  528. inputElement.focus();
  529. }
  530. }, 100);
  531. // 更新表单数据
  532. add_searchInfo.value = row.订单编号;
  533. _orderid.value = row.订单编号;
  534. _kh.value = row.生产款号;
  535. ddhformData.glbh = row['关联编号'];
  536. ddhformData.ddh = row['订单编号'];
  537. ddhformData.kh = row['客户编号'];
  538. ddhformData.sckh = row['生产款号'];
  539. ddhformData.wlbh = row['物料编码'];
  540. ddhformData.ks = row['款式'];
  541. // 获取详情数据
  542. const Detailres = await getInputDetail({
  543. 关联编号: row.关联编号,
  544. 订单编号: row.订单编号,
  545. 物料编码: row.物料编码,
  546. });
  547. console.log(Detailres);
  548. // 如果获取详情数据成功
  549. if (Detailres.code === 0 && Detailres.data) {
  550. // 初始化 mianliaotabData
  551. mianliaotabData.value = {
  552. 订单编号: row.订单编号,
  553. 客户编号: row.客户编号,
  554. 生产款号: row.生产款号,
  555. 款式: row.款式,
  556. 物料编号: Detailres.data.BOM_物料编码,
  557. 物料名称: Detailres.data.BOM_物料名称,
  558. 关联号: Detailres.data.关联编号,
  559. 批次号: Detailres.data.批次号,
  560. 计划用料: Detailres.data.计划用料,
  561. 计划门幅: Detailres.data.BOM_计划门幅,
  562. 定额用料: Detailres.data.定额用料,
  563. 定额门幅: Detailres.data.BOM_定额门幅,
  564. 退还数量: '',
  565. 入仓总数量: Detailres.data.退还数量 ? Detailres.data.退还数量 : 0,
  566. 库存数量: Detailres.data.库存数量 ? Detailres.data.库存数量 : 0,
  567. 领用数量: Detailres.data.领用数量,
  568. 关联订单: Detailres.data.关联订单,
  569. 颜色: Detailres.data.BOM_颜色,
  570. 单位: Detailres.data.单位,
  571. 部门: Detailres.data.departname,
  572. 备注: Detailres.data.remark,
  573. 实际门幅: Detailres.data.实际门幅,
  574. };
  575. // // 获取 mianliaotabData 的物料名称和颜色
  576. // const { 物料名称, 颜色 } = mianliaotabData.value;
  577. // // 计算 danjutableData 中相同物料名称和颜色的退还数量总和
  578. // const totalOutbound = danjutableData.value
  579. // .filter(
  580. // (item) =>
  581. // item.物料名称 === 物料名称 &&
  582. // item.颜色 === 颜色
  583. // )
  584. // .reduce((sum, item) => {
  585. // // 根据退还类型决定是加还是减
  586. // if (item.退还类型 === '退面料') {
  587. // return sum + Number(item.退还数量); // 退面料,增加退还数量
  588. // }
  589. // // else if (item.退还类型 === '退厂商') {
  590. // // return sum - Number(item.退还数量); // 退厂商,减少退还数量
  591. // // }
  592. // return sum; // 其他退还类型不处理
  593. // }, 0);
  594. // // 更新 mianliaotabData 的库存数量
  595. // mianliaotabData.value.库存数量 += totalOutbound;
  596. } else {
  597. console.error('获取详情数据失败:', Detailres.msg);
  598. }
  599. };
  600. const danjutableData = ref([]); // 使用 ref 定义响应式数组
  601. //添加按钮
  602. const dj_Dialog = () => {
  603. // 确保 mianliaotabData 和 mianliaotabData.value 存在
  604. if (!mianliaotabData || !mianliaotabData.value) {
  605. console.error('mianliaotabData 为空,无法添加到 danjutableData');
  606. return;
  607. }
  608. // 检查退还数量是否为空或无效
  609. if (
  610. mianliaotabData.value.退还数量 === '' ||
  611. mianliaotabData.value.退还数量 === undefined ||
  612. mianliaotabData.value.退还数量 === '0'
  613. ) {
  614. ElMessage({ type: 'warning', message: '请填写退还数量' });
  615. return;
  616. }
  617. // 获取 mianliaotabData 的物料名称和颜色
  618. const { 物料名称, 颜色, 退还数量, 库存数量 } = mianliaotabData.value;
  619. // 计算 danjutableData 中相同物料名称和颜色的退还数量总和
  620. const totalOutbound = danjutableData.value
  621. .filter(
  622. (item) =>
  623. item.物料名称 === 物料名称 && item.颜色 === 颜色
  624. )
  625. .reduce((sum, item) => sum + Number(item.退还数量), 0);
  626. // 计算总退还数量(danjutableData 中的总和 + mianliaotabData 中的退还数量)
  627. const totalOutboundQuantity = totalOutbound + Number(退还数量);
  628. // 判断总退还数量是否大于库存数量
  629. if (totalOutboundQuantity > 库存数量) {
  630. ElMessage({ type: 'warning', message: '退还数量不能大于库存数量' });
  631. return;
  632. }
  633. // 如果通过检查,将数据添加到 danjutableData
  634. danjutableData.value.push({
  635. ...mianliaotabData.value,
  636. 实际门幅: mianliaotabData.value.实际门幅 || mianliaotabData.value.定额门幅,
  637. 退还类型:radio1.value
  638. });
  639. mianliaotabData.value.退还数量 = '';
  640. if(radio1.value === '退面料'){
  641. // 更新 mianliaotabData 的库存数量
  642. // mianliaotabData.value.库存数量 = +mianliaotabData.value.库存数量 + Number(退还数量);
  643. }
  644. // else if(radio1.value === '退厂商'){
  645. // // 更新 mianliaotabData 的库存数量
  646. // mianliaotabData.value.库存数量 = mianliaotabData.value.库存数量 - Number(退还数量);
  647. // }
  648. // mianliaotabData.value.库存数量 = mianliaotabData.value.库存数量 - Number(退还数量);
  649. };
  650. //操作移除按钮
  651. const deleteRow = (index) => {
  652. //当前点击索引值
  653. console.log(index)
  654. //移除当前行
  655. danjutableData.value.splice(index, 1);
  656. }
  657. //选择退还弹窗
  658. const res_bomdialogFormVisible = ref(false)
  659. const resbomtableData = ref([]);
  660. const ddhformData = reactive({
  661. glbh: '',
  662. ddh: '',
  663. kh:'',
  664. sckh:'',
  665. ks:'',
  666. wlbh:'',
  667. });
  668. const resbom_tableColumns = ref(
  669. [
  670. { label: '物料编号', prop: '物料编号', width: '160' },
  671. { label: '物料名称', prop: '物料名称', width: '100' },
  672. { label: '计划用料', prop: '计划用料', width: '90' },
  673. { label: '计划门幅', prop: 'BOM_计划门幅', width: '90' },
  674. { label: '定额用料', prop: '定额用料', width: '90' },
  675. { label: '定额门幅', prop: 'BOM_定额门幅', width: '90' },
  676. { label: '实际门幅', prop: '实际门幅', width: '100' },
  677. { label: '退还数量', prop: '退还数量', width: '90' },
  678. { label: '入仓总数量', prop: '入仓总量', width: '100' },
  679. { label: '库存数量', prop: '库存数量', width: '90' },
  680. { label: '领用数量', prop: '领用数量', width: '100' },
  681. { label: '批次号', prop: '批次号', width: '80' },
  682. { label: '关联号', prop: '关联号', width: '80' },
  683. { label: '颜色', prop: 'BOM_颜色', width: '100' },
  684. { label: '关联订单', prop: '关联订单', width: '160' },
  685. { label: '单位', prop: '单位', width: '90' },
  686. ]
  687. )
  688. //选择退还
  689. const Reporting_onSubmit = async ()=>{
  690. ddhformData.value = []
  691. mianliaotabData.value = []
  692. // if(_orderid.value === '' || _orderid.value === null){
  693. // ElMessage({type: 'warning',message: '请扫描订单后,再操作此功能'})
  694. // }else{
  695. //打开选择退还弹窗
  696. res_bomdialogFormVisible.value = true
  697. danjutableData.value = []
  698. setTimeout(() => {
  699. const inputElement = document.getElementById('details_searchInput');
  700. if (inputElement) {
  701. inputElement.focus();
  702. }
  703. }, 100);//100毫秒
  704. //获取单据编号接口
  705. const gitReceiptNumberdata = await gitReceiptNumber({number:'TH'});
  706. danhao.value = gitReceiptNumberdata.data.number
  707. chukuren.value = userStore.userInfo.nickName
  708. riqi.value = currentDates
  709. _TestCoefficient();
  710. // }
  711. }
  712. //调用接口【获取退还面料信息】
  713. const _TestCoefficient = async () => {
  714. try {
  715. const Detailres = await getInputDetail({
  716. 关联编号: ddhformData.glbh,
  717. 订单编号: ddhformData.ddh,
  718. 物料编码: ddhformData.wlbh
  719. });
  720. console.log(Detailres);
  721. // 如果接口返回的data是单条数据(对象),可以直接赋值
  722. if (Detailres.code === 0 && Detailres.data) {
  723. resbomtableData.value = [Detailres.data]; // 将单条数据包装为数组,便于表格渲染
  724. }
  725. } catch (error) {
  726. console.error(error);
  727. }
  728. }
  729. const resbom_handleKeyDown = (event, x, y, prop) => {
  730. const currentElement = document.getElementById(`input${x}${y}`);
  731. if (currentElement === null && currentElement === undefined) return
  732. let move = 0
  733. switch (event.keyCode) {
  734. case 13: // Enter
  735. case 40: // 向下箭头
  736. if (y < resbomtableData.value.length )
  737. document.getElementById(`input${x}${y + 1}`).focus();
  738. break;
  739. case 38: // 向上箭头
  740. if ( y > 0) {
  741. document.getElementById(`input${x}${y - 1}`).focus();
  742. }
  743. break;
  744. case 39: // 向左箭头
  745. if (x >= 0 && x <=6) {
  746. move = x + 1
  747. }
  748. document.getElementById(`input${move}${y}`).focus();
  749. break;
  750. case 37: // 向右箭头
  751. if (x = 0 && x <=6) {
  752. move = x - 1
  753. }
  754. document.getElementById(`input${move}${y}`).focus();
  755. break;
  756. default:
  757. break;
  758. }
  759. }
  760. const scfjfpxsCellClass = ({row, column, rowIndex, columnIndex}) =>{
  761. if (column.label === '退还数量' ||column.label === '实际门幅') {
  762. return 'background-plan-usage-low';
  763. }
  764. }
  765. // 确定
  766. const res_bomenterDialog = async () => {
  767. console.log(danjutableData);
  768. if(danjutableData.value[0]['退还数量'] === ''|| danjutableData.value[0]['退还数量'] === undefined){
  769. ElMessage({type: 'warning',message: '退还数量不能为空'})
  770. return
  771. }
  772. //日期转换
  773. let lhrq_formattedDeliveryDate = '';
  774. if (riqi.value) {
  775. const date = new Date(riqi.value);
  776. lhrq_formattedDeliveryDate = `${date.getFullYear()}-${('0' + (date.getMonth() + 1)).slice(-2)}-${('0' + date.getDate()).slice(-2)}`;
  777. }
  778. // 构造一个包含所有数据的数组
  779. const formattedDataArray = danjutableData.value.map(item => ({
  780. order_id: item['订单编号'],
  781. 款号: item['生产款号'],
  782. 物料编码: item['物料编号'],
  783. 物料名称: item['物料名称'],
  784. number: item['退还数量'],
  785. name: "退还",
  786. sys_id: userStore.userInfo.nickName,
  787. receipt_number: danhao.value,
  788. 客户编号: item['客户编号'],
  789. 款式: item['款式'],
  790. rq: lhrq_formattedDeliveryDate,
  791. 批次号: item['批次号'],
  792. 关联编号: item['关联号'],
  793. 单位: item['单位'],
  794. departname: item['部门'],
  795. remark: item['备注'],
  796. 实际门幅: item['实际门幅'],
  797. type: item['退还类型'],
  798. }));
  799. console.log(formattedDataArray);
  800. try {
  801. // 异步调用输入数据的接口
  802. const add_TuihuoReport = await TuihuoReport(formattedDataArray);
  803. // 根据返回的 code 进行提示
  804. if (add_TuihuoReport.code === 0) {
  805. res_bomdialogFormVisible.value = false;
  806. ElMessage({ type: 'success', message: '退还成功' });
  807. add_searchInfo.value = '';
  808. restableData.splice(0, restableData.length);
  809. danjutableData.value.splice(0, danjutableData.value.length); // 清空表格数据
  810. getTreeData();
  811. records_onSubmit();
  812. } else {
  813. ElMessage({ type: 'error', message: '退还失败' });
  814. }
  815. } catch (error) {
  816. console.error('出库失败:', error);
  817. ElMessage({ type: 'error', message: '退还失败' });
  818. }
  819. }
  820. // 取消
  821. const res_bomcloseDialog = () => {
  822. _orderid.value = '';
  823. add_searchInfo.value = '';
  824. restableData.splice(0, restableData.length);
  825. res_bomdialogFormVisible.value = false;
  826. //自动获取光标
  827. getMachineMacdata();
  828. }
  829. // 输入框只能输入数字和小数点
  830. const handleInput2 = (value, row, prop) => {
  831. if(prop != "物料名称" && prop != "备注" ){
  832. // 使用正则表达式过滤非数字和小数点的字符
  833. let filteredValue = value.replace(/[^\d.]/g, '');
  834. // 不允许以 . 开头
  835. if (filteredValue.startsWith('.')) {
  836. filteredValue = filteredValue.slice(1); // 去掉开头的 .
  837. }
  838. // 确保只有一个小数点
  839. const parts = filteredValue.split('.');
  840. if (parts.length > 2) {
  841. // 如果超过一个小数点,只保留第一个
  842. row[prop] = `${parts[0]}.${parts.slice(1).join('')}`;
  843. } else {
  844. // 否则直接赋值
  845. row[prop] = filteredValue;
  846. }
  847. }
  848. };
  849. //表格
  850. const recordtableData = reactive([])
  851. const records_onSubmit = async () => {
  852. // 清空数组
  853. recordtableData.splice(0, recordtableData.length);
  854. // 获取退还单数据
  855. const ReceiptList_res = await ReceiptList({ mouth: nodedata.value ? nodedata.value : currentMonth, search: '', page: page.value, limit: pageSize.value,code:'退还' });
  856. if (ReceiptList_res && ReceiptList_res.data && Array.isArray(ReceiptList_res.data.table)) {
  857. const filteredData = ReceiptList_res.data.table.filter(item => item.单号类型 === '退还');
  858. // 更新数据
  859. recordtableData.splice(0, 0, ...filteredData);
  860. } else {
  861. console.error("数据获取失败");
  862. }
  863. };
  864. records_onSubmit();
  865. const recorddialogFormVisible = ref(false)
  866. const rdetailstableData = reactive([])
  867. //查看明细
  868. const record_deleteRow = async (row) => {
  869. console.log(row)
  870. recorddialogFormVisible.value = true
  871. rdetailstableData.splice(0,rdetailstableData.length);
  872. const FabricDetaillists = await ReceiptDetail({receipt:row['出库单']});
  873. rdetailstableData.splice(0,FabricDetaillists.length,...FabricDetaillists.data);
  874. }
  875. const record_closeDialog = async (row) => {
  876. console.log(row)
  877. recorddialogFormVisible.value = false
  878. }
  879. const details_pickingaddvisible = ref(false)
  880. const ruku_detailstableData = reactive([])
  881. const rukuupdateCompanyFunc = async (row)=>{
  882. details_pickingaddvisible.value = true
  883. ruku_detailstableData.splice(0,ruku_detailstableData.length);
  884. const FabricDetaillistdata = await FabricDetaillist({order:row.订单编号});
  885. ruku_detailstableData.splice(0,FabricDetaillistdata.length,...FabricDetaillistdata.data['退还记录']);
  886. console.log(FabricDetaillistdata)
  887. }
  888. const thupdateCompanyFunc = async (row)=>{
  889. dh.value = row.单号
  890. type.value = 'th'
  891. details_pickingaddvisible.value = true
  892. console.log(row)
  893. const FabricDetaillistdata = await FabricDetaillist({order:row.单号,search:'退还'});
  894. console.log(FabricDetaillistdata)
  895. }
  896. //详情页取消
  897. const details_ckth_closeDialog = async ()=>{
  898. details_pickingaddvisible.value = false
  899. //自动聚焦光标input
  900. getMachineMacdata();
  901. }
  902. //表格复选框
  903. const del_details = ref(true)//删除BOM资料
  904. const details_Selection = ref('')//存储选中Uniqid
  905. const detailSelectionChange = (selection, type) => {
  906. const ids = selection.map(item => {
  907. return item.id
  908. })
  909. details_Selection.value = ids.join(',')
  910. console.log("复选框",details_Selection.value)
  911. }
  912. // // 删除详情按钮
  913. // const deldetail_delclick = async () => {
  914. // try {
  915. // // 弹出确认框
  916. // await ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
  917. // confirmButtonText: '确定',
  918. // cancelButtonText: '取消',
  919. // type: 'warning',
  920. // });
  921. // // 用户点击“确定”后执行以下逻辑
  922. // const params = {
  923. // id: details_Selection._value,
  924. // Mod_id: userStore.userInfo.nickName,
  925. // };
  926. // console.log('删除参数:', params);
  927. // // 调用删除接口
  928. // const res1 = await FabricDetaildel(params);
  929. // if (res1.code === 0) {
  930. // ElMessage.success('删除成功');
  931. // } else {
  932. // ElMessage.error('删除失败');
  933. // return; // 如果删除失败,直接返回
  934. // }
  935. // // 重新获取BOM列表数据
  936. // rukutableData.splice(0,ruku_detailstableData.length);
  937. // const FabricDetaillists = await FabricDetaillist({order:records_searchInfo.value});
  938. // rukutableData.splice(0,FabricDetaillists.length,...FabricDetaillists.data['退还记录']);
  939. // } catch (error) {
  940. // // 用户点击“取消”或弹框关闭
  941. // console.log('用户取消删除操作');
  942. // }
  943. // };
  944. </script>
  945. <style scoped>
  946. /* 根据出库状态文字颜色 */
  947. :deep(.status-plan-usage-low div) {
  948. color: #8c939d !important;
  949. }
  950. :deep(.statusy-plan-usage-low div) {
  951. color: blue !important;
  952. }
  953. .form-container {
  954. display: flex;
  955. flex-wrap: wrap;
  956. }
  957. .form-column {
  958. /*flex: 1;*/
  959. margin-right: 15px; /* 调整列之间的间距 */
  960. }
  961. /* 左侧输入框宽度调整 */
  962. .form-column .el-form-item .el-input {
  963. width: 150px; /* 调整左侧输入框的宽度 */
  964. }
  965. /* 媒体查询,根据需要调整断点 */
  966. @media screen and (max-width: 768px) {
  967. .form-column {
  968. flex: 1 0 100%; /* 在小屏幕下变成单列布局 */
  969. margin-right: 0;
  970. }
  971. }
  972. .JKWTree-container {
  973. display: flex;
  974. }
  975. .JKWTree-tree {
  976. /*width: 300px;*/
  977. background-color: #fff;
  978. padding: 10px;
  979. margin-right: 20px;
  980. }
  981. .JKWTree-tree h3 {
  982. font-size: 15px;
  983. font-weight: 700;
  984. margin: 10px 0;
  985. }
  986. .JKWTree-content {
  987. flex: 1;
  988. }
  989. /* 表格复选框大小调整 */
  990. :deep(.el-checkbox.el-checkbox--small .el-checkbox__inner) {
  991. width: 45px; /* 复选框宽度 */
  992. height: 23px; /* 复选框高度 */
  993. }
  994. /*bom参数背景*/
  995. :deep(.el-table__body .background-plan-usage-low div div div) {
  996. background: #80FA80 !important;
  997. }
  998. /* 选中某行时的背景色 */
  999. :deep(.el-table__body tr.current-row) > td {
  1000. background: #ff80ff !important;
  1001. }
  1002. :deep(.el-checkbox.el-checkbox--small.is-checked .el-checkbox__inner::after) {
  1003. transform: scale(1.2) rotate(45deg); /* 调整选中后的对勾大小 */
  1004. top: 5%; /* 调整对勾位置 */
  1005. left: 40%; /* 调整对勾位置 */
  1006. width: 5px; /* 调整对勾宽度 */
  1007. height: 9px; /* 调整对勾高度 */
  1008. }
  1009. /* 选中某行时的背景色 */
  1010. :deep(.el-table__body tr.current-row) > td {
  1011. background: #ff80ff !important;
  1012. }
  1013. </style>
  1014. <style scoped>
  1015. :deep(.el-table td .cell) {
  1016. line-height: 20px !important;
  1017. }
  1018. :deep(.el-tabs__header){
  1019. margin-bottom: 0;
  1020. }
  1021. .search{
  1022. margin-left: 0px !important;
  1023. margin-right: 10px !important;
  1024. }
  1025. .bt{
  1026. margin-left: 2px !important;
  1027. padding: 3px !important;
  1028. font-size: 12px;
  1029. }
  1030. .el-tabs__header{
  1031. margin: 0px !important;
  1032. }
  1033. .gva-table-box{
  1034. padding: 0px !important;
  1035. margin-left: 5px !important;
  1036. }
  1037. .mab{
  1038. margin-bottom: 5px;
  1039. }
  1040. /* 搜索样式 */
  1041. ::v-deep .el-input__wrapper #searchInput {
  1042. font-size: 16px;
  1043. }
  1044. ::v-deep(.el-descriptions__table tbody tr .is-bordered-label){
  1045. width: 60px;
  1046. }
  1047. ::v-deep(.el-descriptions__table tbody tr .el-descriptions__content){
  1048. width: 120px;
  1049. }
  1050. :deep(.el-descriptions__content) {
  1051. width: 120px !important;
  1052. min-width: 120px !important;
  1053. max-width: 120px !important;
  1054. overflow: hidden !important;
  1055. text-overflow: ellipsis !important;
  1056. }
  1057. :deep(.green-bg-item >.el-input__wrapper) {
  1058. background-color: #80fa80 !important; /* 浅绿色背景 */
  1059. padding: 8px 12px !important;
  1060. border-radius: 4px !important;
  1061. }
  1062. </style>