You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1615 lines
50 KiB

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
8 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
7 months ago
10 months ago
7 months ago
10 months ago
7 months ago
10 months ago
7 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
7 months ago
10 months ago
7 months ago
10 months ago
7 months ago
10 months ago
10 months ago
10 months ago
10 months ago
7 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
8 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;" >
  4. <el-row>
  5. <el-col :span="24" style="">
  6. <el-form-item :label="'物料编码:'">
  7. <el-input v-model="searchData.partNo" clearable style="width: 120px"></el-input>
  8. </el-form-item>
  9. <el-form-item :label="'物料名称:'">
  10. <el-input v-model="searchData.partDesc" clearable style="width: 150px"></el-input>
  11. </el-form-item>
  12. <el-form-item :label="'通知单号:'">
  13. <el-input v-model="searchData.notifyNo" clearable style="width: 120px"></el-input>
  14. </el-form-item>
  15. <el-form-item :label="'检验单号:'">
  16. <el-input v-model="searchData.orderNo" clearable style="width: 120px"></el-input>
  17. </el-form-item>
  18. <el-form-item :label="'采购单号:'">
  19. <el-input v-model="searchData.poOrderNo" clearable style="width: 120px"></el-input>
  20. </el-form-item>
  21. <el-form-item :label="'采购单行号:'">
  22. <el-input v-model="searchData.poItemNo" clearable style="width: 100px"></el-input>
  23. </el-form-item>
  24. <el-form-item :label="'单据状态:'">
  25. <el-select v-model="searchData.orderStatus" clearable style="width: 100px">
  26. <el-option label="待入库" value="待入库"></el-option>
  27. <el-option label="已完成" value="已完成"></el-option>
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="检验日期">
  31. <el-date-picker
  32. style="width: 130px"
  33. v-model="searchData.startDate"
  34. value-format="yyyy-MM-dd"
  35. clearable
  36. >
  37. </el-date-picker>
  38. -
  39. <el-date-picker
  40. style="width: 130px"
  41. v-model="searchData.endDate "
  42. value-format="yyyy-MM-dd"
  43. clearable
  44. >
  45. </el-date-picker>
  46. </el-form-item>
  47. <el-form-item :label="' '" >
  48. <el-button class="customer-bun-min" type="primary" @click="getMainData" style="">查询</el-button>
  49. <el-button @click="exportExcel()" type="primary" style="margin-left: 2px">{{'导出'}}</el-button>
  50. </el-form-item>
  51. </el-col>
  52. </el-row>
  53. </el-form>
  54. <el-table
  55. :height="height"
  56. :data="mainDataList"
  57. border
  58. ref="mainTable"
  59. highlight-current-row
  60. @row-click="changeData"
  61. v-loading="dataListLoading"
  62. style="margin-top: 0px; width: 100%;">
  63. <el-table-column
  64. header-align="center"
  65. align="center"
  66. width="100"
  67. label="操作">
  68. <template slot-scope="scope">
  69. <a type="text" size="small" @click="addOrUpdateHandle(scope.row)">生成标签</a>
  70. </template>
  71. </el-table-column>
  72. <el-table-column
  73. v-for="(item,index) in columnArray1" :key="index"
  74. :sortable="item.columnSortable"
  75. :prop="item.columnProp"
  76. :header-align="item.headerAlign"
  77. :show-overflow-tooltip="item.showOverflowTooltip"
  78. :align="item.align"
  79. :fixed="item.fixed==''?false:item.fixed"
  80. :min-width="item.columnWidth"
  81. :label="item.columnLabel">
  82. <template slot-scope="scope">
  83. <span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
  84. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  85. style="width: 100px; height: 80px"/></span>
  86. </template>
  87. </el-table-column>
  88. </el-table>
  89. <el-pagination style="margin-top: 0px"
  90. @size-change="sizeChangeHandle"
  91. @current-change="currentChangeHandle"
  92. :current-page="pageIndex"
  93. :page-sizes="[20, 50, 100, 200, 500]"
  94. :page-size="pageSize"
  95. :total="totalPage"
  96. layout="total, sizes, prev, pager, next, jumper">
  97. </el-pagination>
  98. <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 0px;" >
  99. <el-form-item >
  100. <el-button type="primary" @click="printLabels" style="">打印</el-button>
  101. <el-button @click="deleteLabels()" type="primary" style="margin-left: 2px">删除</el-button>
  102. <el-button type="primary" icon="el-icon-upload" @click="openUpload()" style="margin-left: 2px">导入</el-button>
  103. </el-form-item>
  104. </el-form>
  105. <el-table
  106. :height="height"
  107. :data="table2List"
  108. border
  109. ref="table3"
  110. highlight-current-row
  111. @selection-change="handleSelectionChange"
  112. v-loading="dataListLoading"
  113. style="margin-top: 0px; width: 100%;">
  114. <el-table-column
  115. type="selection"
  116. width="55"
  117. align="center">
  118. </el-table-column>
  119. <el-table-column
  120. v-for="(item,index) in columnArray2" :key="index"
  121. :sortable="item.columnSortable"
  122. :prop="item.columnProp"
  123. :header-align="item.headerAlign"
  124. :show-overflow-tooltip="item.showOverflowTooltip"
  125. :align="item.align"
  126. :fixed="item.fixed==''?false:item.fixed"
  127. :min-width="item.columnWidth"
  128. :label="item.columnLabel">
  129. <template slot-scope="scope">
  130. <span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
  131. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  132. style="width: 100px; height: 80px"/></span>
  133. </template>
  134. </el-table-column>
  135. </el-table>
  136. <el-dialog title="标签发行" :close-on-click-modal="false" v-drag :visible.sync="addModelFlag" width="800px">
  137. <el-form :model="addModelData" label-position="top" style="margin-top: -5px;">
  138. <el-row :gutter="20">
  139. <el-col :span="8">
  140. <el-form-item label="物料编码" >
  141. <el-input v-model="addModelData.partNo" disabled style="width: 100%"></el-input>
  142. </el-form-item>
  143. </el-col>
  144. <el-col :span="16">
  145. <el-form-item label="物料名称" >
  146. <el-input v-model="addModelData.partDesc" disabled style="width: 100%"></el-input>
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="8">
  150. <el-form-item label="采购订单" >
  151. <el-input v-model="addModelData.poOrderNo" disabled style="width: 100%"></el-input>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="8">
  155. <el-form-item label="采购订单行号">
  156. <el-input v-model="addModelData.poItemNo" disabled style="width: 100%"></el-input>
  157. </el-form-item>
  158. </el-col>
  159. <el-col :span="8">
  160. <el-form-item label="检验单号">
  161. <el-input v-model="addModelData.orderNo" disabled style="width: 100%"></el-input>
  162. </el-form-item>
  163. </el-col>
  164. <el-col :span="8">
  165. <el-form-item label="本次到货数量">
  166. <el-input v-model="addModelData.orderQty" disabled style="width: 100%"></el-input>
  167. </el-form-item>
  168. </el-col>
  169. <el-col :span="8">
  170. <el-form-item label="本次到货卷数">
  171. <el-input v-model="addModelData.orderRollCount" disabled style="width: 100%"></el-input>
  172. </el-form-item>
  173. </el-col>
  174. <el-col :span="8">
  175. <el-form-item label="检验合格数量">
  176. <el-input v-model="addModelData.batchQualifiedQty" disabled style="width: 100%"></el-input>
  177. </el-form-item>
  178. </el-col>
  179. <el-col :span="4">
  180. <el-form-item label="超入比例" >
  181. <el-input v-model="addModelData.exceedInRatio" disabled style="width: 100%"></el-input>
  182. </el-form-item>
  183. </el-col>
  184. <el-col :span="4">
  185. <el-form-item label="有效期管理">
  186. <el-input v-model="addModelData.expirationFlag" disabled style="width: 100%"></el-input>
  187. </el-form-item>
  188. </el-col>
  189. <el-col :span="8">
  190. <el-form-item label="生产日期" required>
  191. <el-date-picker
  192. v-model="addModelData.productionDate"
  193. type="date"
  194. format="yyyy-MM-dd"
  195. value-format="yyyy-MM-dd"
  196. style="width: 100%">
  197. </el-date-picker>
  198. </el-form-item>
  199. </el-col>
  200. <el-col :span="8">
  201. <el-form-item label="批次号">
  202. <el-input v-model="addModelData.batchNo" style="width: 100%"></el-input>
  203. </el-form-item>
  204. </el-col>
  205. <el-col :span="8">
  206. <el-form-item label="发行张数" required>
  207. <el-input v-model="addModelData.rollCount" @blur="getNowRollQty()" @input="handleInput" type="number" style="width: 100%"></el-input>
  208. </el-form-item>
  209. </el-col>
  210. <el-col :span="8">
  211. <el-form-item label="每张数量" required>
  212. <el-input v-model="addModelData.rollQty" @blur="getNowRollQty()" type="number" style="width: 100%"></el-input>
  213. </el-form-item>
  214. </el-col>
  215. <el-col :span="8">
  216. <el-form-item label="尾卷数量">
  217. <el-input v-model="addModelData.tailRollQty" @blur="getNowRollQty()" type="number" style="width: 100%"></el-input>
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="8">
  221. <el-form-item label="本次发行数量" >
  222. <el-input v-model="addModelData.nowRollQty" disabled style="width: 100%"></el-input>
  223. </el-form-item>
  224. </el-col>
  225. <el-col :span="8">
  226. <el-form-item label="可发行数量">
  227. <el-input v-model="addModelData.remainingIssuableQty" disabled style="width: 100%"></el-input>
  228. </el-form-item>
  229. </el-col>
  230. </el-row>
  231. </el-form>
  232. <div slot="footer" class="dialog-footer" style="text-align: center;">
  233. <el-button type="success" @click="submitDataNoClose()">应用</el-button>
  234. <el-button type="success" @click="submitData()">确定</el-button>
  235. <el-button type="primary" @click="addModelFlag=false">取消</el-button>
  236. </div>
  237. </el-dialog>
  238. <!-- 导入 -->
  239. <qcUpload ref="qcUpload" @refreshPageTables="getDetailTableList()" v-drag></qcUpload>
  240. <!-- 标签打印对话框 -->
  241. <el-dialog
  242. :close-on-click-modal="false"
  243. v-drag
  244. :visible.sync="printDialogVisible"
  245. width="650px"
  246. class="print-dialog">
  247. <div slot="title" class="dialog-title-wrapper">
  248. <i class="el-icon-printer" style="margin-right: 8px; font-size: 20px;"></i>
  249. <span style="font-size: 18px; font-weight: 600;">标签打印设置</span>
  250. </div>
  251. <div class="print-dialog-content">
  252. <!-- 打印信息提示 -->
  253. <div class="print-info-banner">
  254. <i class="el-icon-info" style="margin-right: 8px; font-size: 16px;"></i>
  255. <span>已选择 <strong style="color: #3a7ba8;">{{ selectionDataList.length }}</strong> 个标签请配置打印参数</span>
  256. </div>
  257. <el-form :model="printDialogData" label-position="top" style="margin-top: 20px;">
  258. <el-row :gutter="20">
  259. <el-col :span="12">
  260. <el-form-item required>
  261. <span slot="label" class="form-label">
  262. <i class="el-icon-document-copy" style="margin-right: 5px;"></i>
  263. 打印次数
  264. </span>
  265. <el-input-number
  266. v-model="printDialogData.printTimes"
  267. :min="1"
  268. :max="100"
  269. controls-position="right"
  270. placeholder="每个标签打印份数"
  271. style="width: 100%">
  272. </el-input-number>
  273. <div class="form-tip">设置每个标签的打印份数</div>
  274. </el-form-item>
  275. </el-col>
  276. <el-col :span="12">
  277. <el-form-item required>
  278. <span slot="label" class="form-label">
  279. <i class="el-icon-tickets" style="margin-right: 5px;"></i>
  280. 标签模板
  281. </span>
  282. <el-select
  283. v-model="printDialogData.labelNo"
  284. placeholder="请选择标签模板"
  285. style="width: 100%"
  286. :disabled="labelTemplateList.length === 0">
  287. <el-option
  288. v-for="item in labelTemplateList"
  289. :key="item.labelNo"
  290. :label="item.labelName"
  291. :value="item.labelNo">
  292. <span style="float: left">{{ item.labelName }}</span>
  293. <span style="float: right; color: #8492a6; font-size: 13px">{{ item.labelNo }}</span>
  294. </el-option>
  295. </el-select>
  296. <div class="form-tip" v-if="labelTemplateList.length === 0" style="color: #F56C6C;">
  297. 暂无可用模板
  298. </div>
  299. <div class="form-tip" v-else>
  300. 根据物料自动匹配模板
  301. </div>
  302. </el-form-item>
  303. </el-col>
  304. </el-row>
  305. <el-row>
  306. <el-col :span="24">
  307. <el-form-item required>
  308. <span slot="label" class="form-label">
  309. <i class="el-icon-printer" style="margin-right: 5px;"></i>
  310. 目标打印机
  311. </span>
  312. <el-select
  313. v-model="printDialogData.printerName"
  314. placeholder="请选择打印机"
  315. style="width: 100%"
  316. :disabled="printerList.length === 0">
  317. <el-option
  318. v-for="item in printerList"
  319. :key="item"
  320. :label="item"
  321. :value="item">
  322. <i class="el-icon-printer" style="margin-right: 8px; color: #67C23A;"></i>
  323. {{ item }}
  324. </el-option>
  325. </el-select>
  326. <div class="form-tip" v-if="printerList.length === 0" style="color: #F56C6C;">
  327. 未检测到打印机请确保已安装并启动 CLodop
  328. </div>
  329. <div class="form-tip" v-else>
  330. 已检测到 {{ printerList.length }} 台打印机
  331. </div>
  332. </el-form-item>
  333. </el-col>
  334. </el-row>
  335. <!-- 打印预览说明 -->
  336. <div class="print-summary">
  337. <div class="summary-item">
  338. <span class="summary-label">打印总数</span>
  339. <span class="summary-value">{{ selectionDataList.length * printDialogData.printTimes }} </span>
  340. </div>
  341. <div class="summary-item">
  342. <span class="summary-label">标签数量</span>
  343. <span class="summary-value">{{ selectionDataList.length }} </span>
  344. </div>
  345. <div class="summary-item">
  346. <span class="summary-label">每标签份数</span>
  347. <span class="summary-value">{{ printDialogData.printTimes }} </span>
  348. </div>
  349. </div>
  350. </el-form>
  351. </div>
  352. <div slot="footer" class="dialog-footer">
  353. <el-button
  354. type="success"
  355. icon="el-icon-printer"
  356. @click="confirmPrint()"
  357. :loading="printLoading"
  358. :disabled="!printDialogData.labelNo || !printDialogData.printerName"
  359. size="medium">
  360. {{ printLoading ? '打印中...' : '开始打印' }}
  361. </el-button>
  362. <el-button
  363. @click="printDialogVisible=false"
  364. size="medium">
  365. 取消
  366. </el-button>
  367. </div>
  368. </el-dialog>
  369. </div>
  370. </template>
  371. <script>
  372. /*组件*/
  373. import excel from "@/utils/excel-util.js";
  374. import qcUpload from "@/views/modules/qc/qc_upload";
  375. import {
  376. deletePoPartLabelData,
  377. getInboundQcResultData,
  378. getInboundQcResultOtherData,
  379. getPoOrderRollNoOutData, getPoPartLabelData,
  380. submitPoOrderRollNo,
  381. getPartLabelTemplateList,
  382. callUspPartLabelTemplate
  383. } from '../../../api/wms/wms'
  384. import {poPartLabelPrint} from '../clodopLabel/poPartLabel'
  385. import getLodop from '@/utils/LodopFuncs.js'
  386. import labelPrintTemplates from '@/mixins/labelPrintTemplates.js'
  387. export default {
  388. mixins: [labelPrintTemplates],
  389. data() {
  390. return {
  391. functionId: this.$route.meta.menuId,
  392. height: 200,
  393. currentRow: {},
  394. searchData:{
  395. site:this.$store.state.user.site,
  396. orderNo:'',
  397. notifyNo: '',
  398. partNo:'',
  399. partDesc:'',
  400. poOrderNo:'',
  401. poItemNo:'',
  402. orderStatus:'待入库',
  403. startDate:'',
  404. endDate:'',
  405. page: 1,
  406. limit: 10,
  407. },
  408. selectionDataList:[],
  409. pageIndex: 1,
  410. pageSize: 50,
  411. totalPage: 0,
  412. mainDataList:[],
  413. table2List:[],
  414. dataListLoading: false,
  415. addModelFlag:false,
  416. addModelData:{
  417. expirationWarningDay:'',
  418. site:'',
  419. buNo:'',
  420. partNo: '',
  421. partDesc: '',
  422. poOrderNo: '',
  423. poItemNo: '',
  424. orderNo: '',
  425. orderQty: '',
  426. supplierId: '',
  427. supplierName: '',
  428. orderRollCount: '',
  429. batchQualifiedQty: '',
  430. remainingIssuableQty: '',
  431. exceedInRatio: '',
  432. expirationFlag: '',
  433. expirationDay: '',
  434. nowRollQty: '',
  435. productionDate: '',
  436. batchNo: '',
  437. rollCount: '1',
  438. rollQty: '',
  439. tailRollQty: '0'
  440. },
  441. columnArray1: [
  442. {
  443. userId: this.$store.state.user.name,
  444. functionId: this.functionId,
  445. serialNumber: '670Table1BuNo',
  446. tableId: "670Table1",
  447. tableName: "采购检验合格单",
  448. columnProp: "buNo",
  449. headerAlign: "center",
  450. align: "center",
  451. columnLabel: "BU",
  452. columnWidth: '70',
  453. columnHidden: false,
  454. columnImage: false,
  455. columnSortable: false,
  456. sortLv: 0,
  457. status: true,
  458. fixed: false
  459. },
  460. {
  461. userId: this.$store.state.user.name,
  462. functionId: this.functionId,
  463. serialNumber: '670Table1NotifyNo',
  464. tableId: "670Table1",
  465. tableName: "采购检验合格单",
  466. columnProp: "notifyNo",
  467. headerAlign: "center",
  468. align: "left",
  469. columnLabel: "通知单号",
  470. columnWidth: '120',
  471. columnHidden: false,
  472. columnImage: false,
  473. columnSortable: false,
  474. sortLv: 1,
  475. status: true,
  476. fixed: false
  477. },
  478. {
  479. userId: this.$store.state.user.name,
  480. functionId: this.functionId,
  481. serialNumber: '670Table1OrderNo',
  482. tableId: "670Table1",
  483. tableName: "采购检验合格单",
  484. columnProp: "orderNo",
  485. headerAlign: "center",
  486. align: "left",
  487. columnLabel: "检验单号",
  488. columnWidth: '120',
  489. columnHidden: false,
  490. columnImage: false,
  491. columnSortable: false,
  492. sortLv: 1,
  493. status: true,
  494. fixed: false
  495. },
  496. {
  497. userId: this.$store.state.user.name,
  498. functionId: this.functionId,
  499. serialNumber: '670Table1OrderStatus',
  500. tableId: "670Table1",
  501. tableName: "采购检验合格单",
  502. columnProp: "orderStatus",
  503. headerAlign: "center",
  504. align: "center",
  505. columnLabel: "单据状态",
  506. columnWidth: '100',
  507. columnHidden: false,
  508. columnImage: false,
  509. columnSortable: false,
  510. sortLv: 2,
  511. status: true,
  512. fixed: false
  513. },
  514. {
  515. userId: this.$store.state.user.name,
  516. functionId: this.functionId,
  517. serialNumber: '670Table1PartNo',
  518. tableId: "670Table1",
  519. tableName: "采购检验合格单",
  520. columnProp: "partNo",
  521. headerAlign: "center",
  522. align: "left",
  523. columnLabel: "物料编码",
  524. columnWidth: '120',
  525. columnHidden: false,
  526. columnImage: false,
  527. columnSortable: false,
  528. sortLv: 3,
  529. status: true,
  530. fixed: false
  531. },
  532. {
  533. userId: this.$store.state.user.name,
  534. functionId: this.functionId,
  535. serialNumber: '670Table1PartDesc',
  536. tableId: "670Table1",
  537. tableName: "采购检验合格单",
  538. columnProp: "partDesc",
  539. headerAlign: "center",
  540. align: "left",
  541. columnLabel: "物料名称",
  542. columnWidth: '200',
  543. columnHidden: false,
  544. columnImage: false,
  545. columnSortable: false,
  546. sortLv: 4,
  547. status: true,
  548. fixed: false
  549. },
  550. {
  551. userId: this.$store.state.user.name,
  552. functionId: this.functionId,
  553. serialNumber: '670Table1OrderQty',
  554. tableId: "670Table1",
  555. tableName: "采购检验合格单",
  556. columnProp: "orderQty",
  557. headerAlign: "center",
  558. align: "right",
  559. columnLabel: "到货数量",
  560. columnWidth: '100',
  561. columnHidden: false,
  562. columnImage: false,
  563. columnSortable: false,
  564. sortLv: 10,
  565. status: true,
  566. fixed: false
  567. },
  568. {
  569. userId: this.$store.state.user.name,
  570. functionId: this.functionId,
  571. serialNumber: '670Table1RollCount',
  572. tableId: "670Table1",
  573. tableName: "采购检验合格单",
  574. columnProp: "rollCount",
  575. headerAlign: "center",
  576. align: "right",
  577. columnLabel: "到货卷数",
  578. columnWidth: '100',
  579. columnHidden: false,
  580. columnImage: false,
  581. columnSortable: false,
  582. sortLv: 11,
  583. status: true,
  584. fixed: false
  585. },
  586. {
  587. userId: this.$store.state.user.name,
  588. functionId: this.functionId,
  589. serialNumber: '670Table1BatchQualifiedQty',
  590. tableId: "670Table1",
  591. tableName: "采购检验合格单",
  592. columnProp: "batchQualifiedQty",
  593. headerAlign: "center",
  594. align: "right",
  595. columnLabel: "允许入库数",
  596. columnWidth: '100',
  597. columnHidden: false,
  598. columnImage: false,
  599. columnSortable: false,
  600. sortLv: 14,
  601. status: true,
  602. fixed: false
  603. },
  604. {
  605. userId: this.$store.state.user.name,
  606. functionId: this.functionId,
  607. serialNumber: '670Table1PoOrderNo',
  608. tableId: "670Table1",
  609. tableName: "采购检验合格单",
  610. columnProp: "poOrderNo",
  611. headerAlign: "center",
  612. align: "left",
  613. columnLabel: "采购订单号",
  614. columnWidth: '120',
  615. columnHidden: false,
  616. columnImage: false,
  617. columnSortable: false,
  618. sortLv: 5,
  619. status: true,
  620. fixed: false
  621. },
  622. {
  623. userId: this.$store.state.user.name,
  624. functionId: this.functionId,
  625. serialNumber: '670Table1PoItemNo',
  626. tableId: "670Table1",
  627. tableName: "采购检验合格单",
  628. columnProp: "poItemNo",
  629. headerAlign: "center",
  630. align: "center",
  631. columnLabel: "行号",
  632. columnWidth: '80',
  633. columnHidden: false,
  634. columnImage: false,
  635. columnSortable: false,
  636. sortLv: 6,
  637. status: true,
  638. fixed: false
  639. },
  640. {
  641. userId: this.$store.state.user.name,
  642. functionId: this.functionId,
  643. serialNumber: '670Table1SupplierName',
  644. tableId: "670Table1",
  645. tableName: "采购检验合格单",
  646. columnProp: "supplierName",
  647. headerAlign: "center",
  648. align: "left",
  649. columnLabel: "供应商",
  650. columnWidth: '120',
  651. columnHidden: false,
  652. columnImage: false,
  653. columnSortable: false,
  654. sortLv: 7,
  655. status: true,
  656. fixed: false
  657. },
  658. {
  659. userId: this.$store.state.user.name,
  660. functionId: this.functionId,
  661. serialNumber: '670Table1InspectorDate',
  662. tableId: "670Table1",
  663. tableName: "采购检验合格单",
  664. columnProp: "inspectorDate",
  665. headerAlign: "center",
  666. align: "center",
  667. columnLabel: "检验日期",
  668. columnWidth: '100',
  669. columnHidden: false,
  670. columnImage: false,
  671. columnSortable: false,
  672. sortLv: 8,
  673. status: true,
  674. fixed: false
  675. },
  676. {
  677. userId: this.$store.state.user.name,
  678. functionId: this.functionId,
  679. serialNumber: '670Table1InspectorNo',
  680. tableId: "670Table1",
  681. tableName: "采购检验合格单",
  682. columnProp: "inspectorNo",
  683. headerAlign: "center",
  684. align: "left",
  685. columnLabel: "检验员",
  686. columnWidth: '100',
  687. columnHidden: false,
  688. columnImage: false,
  689. columnSortable: false,
  690. sortLv: 9,
  691. status: true,
  692. fixed: false
  693. },
  694. {
  695. userId: this.$store.state.user.name,
  696. functionId: this.functionId,
  697. serialNumber: '670Table1InspectionResult',
  698. tableId: "670Table1",
  699. tableName: "采购检验合格单",
  700. columnProp: "inspectionResult",
  701. headerAlign: "center",
  702. align: "center",
  703. columnLabel: "检验结论",
  704. columnWidth: '100',
  705. columnHidden: false,
  706. columnImage: false,
  707. columnSortable: false,
  708. sortLv: 12,
  709. status: true,
  710. fixed: false
  711. },
  712. {
  713. userId: this.$store.state.user.name,
  714. functionId: this.functionId,
  715. serialNumber: '670Table1DisposalMeasures',
  716. tableId: "670Table1",
  717. tableName: "采购检验合格单",
  718. columnProp: "disposalMeasures",
  719. headerAlign: "center",
  720. align: "left",
  721. columnLabel: "处置措施",
  722. columnWidth: '120',
  723. columnHidden: false,
  724. columnImage: false,
  725. columnSortable: false,
  726. sortLv: 13,
  727. status: true,
  728. fixed: false
  729. },
  730. ],
  731. columnArray2: [
  732. {
  733. userId: this.$store.state.user.name,
  734. functionId: this.functionId,
  735. serialNumber: '670Table2OrderId',
  736. tableId: "670Table2",
  737. tableName: "采购物料标签清单",
  738. columnProp: "orderId",
  739. headerAlign: "center",
  740. align: "right",
  741. columnLabel: "No .",
  742. columnWidth: '50',
  743. columnHidden: false,
  744. columnImage: false,
  745. columnSortable: false,
  746. sortLv: 0,
  747. status: true,
  748. fixed: false
  749. },
  750. {
  751. userId: this.$store.state.user.name,
  752. functionId: this.functionId,
  753. serialNumber: '670Table2RollNo',
  754. tableId: "670Table2",
  755. tableName: "采购物料标签清单",
  756. columnProp: "rollNo",
  757. headerAlign: "center",
  758. align: "left",
  759. columnLabel: "标签条码",
  760. columnWidth: '150',
  761. columnHidden: false,
  762. columnImage: false,
  763. columnSortable: false,
  764. sortLv: 1,
  765. status: true,
  766. fixed: false
  767. },
  768. {
  769. userId: this.$store.state.user.name,
  770. functionId: this.functionId,
  771. serialNumber: '670Table2RollQty',
  772. tableId: "670Table2",
  773. tableName: "采购物料标签清单",
  774. columnProp: "rollQty",
  775. headerAlign: "center",
  776. align: "right",
  777. columnLabel: "标签数量",
  778. columnWidth: '100',
  779. columnHidden: false,
  780. columnImage: false,
  781. columnSortable: false,
  782. sortLv: 2,
  783. status: true,
  784. fixed: false
  785. },
  786. {
  787. userId: this.$store.state.user.name,
  788. functionId: this.functionId,
  789. serialNumber: '670Table2HardtagInFlag',
  790. tableId: "670Table2",
  791. tableName: "采购物料标签清单",
  792. columnProp: "hardtagInFlag",
  793. headerAlign: "center",
  794. align: "center",
  795. columnLabel: "标签状态",
  796. columnWidth: '100',
  797. columnHidden: false,
  798. columnImage: false,
  799. columnSortable: false,
  800. sortLv: 3,
  801. status: true,
  802. fixed: false
  803. },
  804. {
  805. userId: this.$store.state.user.name,
  806. functionId: this.functionId,
  807. serialNumber: '670Table2PrintFla',
  808. tableId: "670Table2",
  809. tableName: "采购物料标签清单",
  810. columnProp: "printFlag",
  811. headerAlign: "center",
  812. align: "right",
  813. columnLabel: "打印次数",
  814. columnWidth: '100',
  815. columnHidden: false,
  816. columnImage: false,
  817. columnSortable: false,
  818. sortLv: 4,
  819. status: true,
  820. fixed: false
  821. },
  822. {
  823. userId: this.$store.state.user.name,
  824. functionId: this.functionId,
  825. serialNumber: '670Table2BatchNo',
  826. tableId: "670Table2",
  827. tableName: "采购物料标签清单",
  828. columnProp: "batchNo",
  829. headerAlign: "center",
  830. align: "center",
  831. columnLabel: "批次号",
  832. columnWidth: '120',
  833. columnHidden: false,
  834. columnImage: false,
  835. columnSortable: false,
  836. sortLv: 6,
  837. status: true,
  838. fixed: false
  839. },
  840. {
  841. userId: this.$store.state.user.name,
  842. functionId: this.functionId,
  843. serialNumber: '670Table2ProductionDate',
  844. tableId: "670Table2",
  845. tableName: "采购物料标签清单",
  846. columnProp: "productionDate",
  847. headerAlign: "center",
  848. align: "center",
  849. columnLabel: "生产日期",
  850. columnWidth: '120',
  851. columnHidden: false,
  852. columnImage: false,
  853. columnSortable: false,
  854. sortLv: 6,
  855. status: true,
  856. fixed: false
  857. },
  858. {
  859. userId: this.$store.state.user.name,
  860. functionId: this.functionId,
  861. serialNumber: '670Table2ExpirationDate',
  862. tableId: "670Table2",
  863. tableName: "采购物料标签清单",
  864. columnProp: "expirationDate",
  865. headerAlign: "center",
  866. align: "center",
  867. columnLabel: "失效日期",
  868. columnWidth: '120',
  869. columnHidden: false,
  870. columnImage: false,
  871. columnSortable: false,
  872. sortLv: 6,
  873. status: true,
  874. fixed: false
  875. },
  876. {
  877. userId: this.$store.state.user.name,
  878. functionId: this.functionId,
  879. serialNumber: '670Table2ExpirationWarningDate',
  880. tableId: "670Table2",
  881. tableName: "采购物料标签清单",
  882. columnProp: "expirationWarningDate",
  883. headerAlign: "center",
  884. align: "center",
  885. columnLabel: "失效预警日期",
  886. columnWidth: '120',
  887. columnHidden: false,
  888. columnImage: false,
  889. columnSortable: false,
  890. sortLv: 6,
  891. status: true,
  892. fixed: false
  893. },
  894. {
  895. userId: this.$store.state.user.name,
  896. functionId: this.functionId,
  897. serialNumber: '670Table2OCreatedBy',
  898. tableId: "670Table2",
  899. tableName: "采购物料标签清单",
  900. columnProp: "createdBy",
  901. headerAlign: "center",
  902. align: "left",
  903. columnLabel: "操作员",
  904. columnWidth: '100',
  905. columnHidden: false,
  906. columnImage: false,
  907. columnSortable: false,
  908. sortLv: 7,
  909. status: true,
  910. fixed: false
  911. }
  912. ],
  913. exportName: '采购检验合格单'+this.dayjs().format('YYYYMMDDHHmmss'),
  914. exportName2: '采购物料标签清单'+this.dayjs().format('YYYYMMDDHHmmss'),
  915. // 标签打印对话框相关
  916. printDialogVisible: false,
  917. printDialogData: {
  918. printTimes: 1,
  919. labelNo: '',
  920. printerName: ''
  921. },
  922. labelTemplateList: [],
  923. printerList: [],
  924. printLoading: false
  925. }
  926. },
  927. /*组件*/
  928. components: {
  929. excel,
  930. qcUpload,
  931. },
  932. mounted() {
  933. this.$nextTick(() => {
  934. this.height = ( window.innerHeight - 220)/2;
  935. })
  936. },
  937. methods: {
  938. getMainData(){
  939. this.searchData.limit = this.pageSize
  940. this.searchData.page = this.pageIndex
  941. getInboundQcResultData(this.searchData).then(({data}) => {
  942. if (data.code === 0) {
  943. this.mainDataList = data.page.list
  944. this.pageIndex = data.page.currPage
  945. this.pageSize = data.page.pageSize
  946. this.totalPage = data.page.totalCount
  947. //判断是否全部存在数据
  948. if (this.totalPage > 0) {
  949. //设置选中行
  950. this.$refs.mainTable.setCurrentRow(this.mainDataList[0])
  951. this.changeData(this.mainDataList[0])
  952. }else {
  953. this.changeData(null)
  954. }
  955. }
  956. this.dataListLoading = false
  957. })
  958. },
  959. // 每页数
  960. sizeChangeHandle (val) {
  961. this.pageSize = val
  962. this.pageIndex = 1
  963. this.getMainData()
  964. },
  965. // 当前页
  966. currentChangeHandle (val) {
  967. this.pageIndex = val
  968. this.getMainData()
  969. },
  970. async exportExcel() {
  971. this.searchData.limit = -1
  972. this.searchData.page = 1
  973. excel.exportTable({
  974. url: "/wmsPrint/getInboundQcResultData",
  975. columnMapping: this.columnArray1,//可以直接用table,不需要的列就剔除
  976. mergeSetting: [],//需要合并的列
  977. params: this.searchData,
  978. fileName: this.exportName+".xlsx",
  979. rowFetcher: res => res.data,
  980. columnFormatter: [],
  981. dropColumns: [],//需要剔除的列,例如dropColumns: ["netWeight"],即剔除净重列
  982. });
  983. },
  984. changeData(row){
  985. this.currentRow=JSON.parse(JSON.stringify(row))
  986. // let inData={
  987. // site:this.currentRow.site,
  988. // buNo:this.currentRow.buNo,
  989. // inspectionNo:this.currentRow.orderNo,
  990. // }
  991. // getPoOrderRollNoOutData(inData).then(({data}) => {
  992. // //区分请求成功和失败的状况
  993. // if (data && data.code == 0) {
  994. // this.table2List = data.rows
  995. //
  996. // } else {
  997. // this.table2List = [];
  998. // }
  999. // });
  1000. this.getDetailTableList();
  1001. },
  1002. getDetailTableList () {
  1003. let inData={
  1004. site:this.currentRow.site,
  1005. buNo:this.currentRow.buNo,
  1006. inspectionNo:this.currentRow.orderNo,
  1007. }
  1008. getPoOrderRollNoOutData(inData).then(({data}) => {
  1009. //区分请求成功和失败的状况
  1010. if (data && data.code == 0) {
  1011. this.table2List = data.rows
  1012. } else {
  1013. this.table2List = [];
  1014. }
  1015. });
  1016. },
  1017. handleSelectionChange(val){
  1018. this.selectionDataList = val
  1019. console.log(this.selectionDataList)
  1020. },
  1021. addOrUpdateHandle(row) {
  1022. getInboundQcResultOtherData(row).then(({data}) => {
  1023. //区分请求成功和失败的状况
  1024. if (data && data.code=== 0) {
  1025. let outData = data.row
  1026. console.log(data.row);
  1027. this.addModelData={
  1028. site:row.site,
  1029. buNo:row.buNo,
  1030. partNo: row.partNo,
  1031. partDesc: row.partDesc,
  1032. poOrderNo: row.poOrderNo,
  1033. poItemNo: row.poItemNo,
  1034. orderNo: row.orderNo,
  1035. orderQty: row.orderQty,
  1036. supplierId: row.supplierId,
  1037. supplierName: row.supplierName,
  1038. orderRollCount: row.rollCount,
  1039. batchQualifiedQty: row.batchQualifiedQty,
  1040. remainingIssuableQty: outData.remainingIssuableQty,
  1041. exceedInRatio: outData.exceedInRatio,
  1042. expirationFlag: outData.expirationFlag,
  1043. expirationDay:outData.expirationDay?Number(outData.expirationDay):0,
  1044. nowRollQty: row.rollQty,
  1045. productionDate: this.dayjs().format("YYYY-MM-DD"),
  1046. batchNo: '',
  1047. rollCount: '1',
  1048. rollQty: row.rollQty,
  1049. expirationWarningDay: outData.expirationWarningDay,
  1050. tailRollQty: '0'
  1051. }
  1052. if(this.addModelData.exceedInRatio==""||this.addModelData.exceedInRatio==null){
  1053. this.addModelData.exceedInRatio=0
  1054. }
  1055. }
  1056. });
  1057. this.addModelFlag = true;
  1058. },
  1059. submitData() {
  1060. // 验证必填字段
  1061. if (!this.addModelData.productionDate||this.addModelData.productionDate==='') {
  1062. this.$message.error('请选择生产日期');
  1063. return;
  1064. }
  1065. if (!this.addModelData.rollCount||this.addModelData.rollCount==='') {
  1066. this.$message.error('请输入发行张数');
  1067. return;
  1068. }
  1069. if (!this.addModelData.rollQty||this.addModelData.rollQty==='') {
  1070. this.$message.error('请输入每张数量');
  1071. return;
  1072. }
  1073. if ( this.addModelData.nowRollQty>Number(this.addModelData.remainingIssuableQty)+((Number(this.addModelData.exceedInRatio)*Number(this.addModelData.orderQty))/100)) {
  1074. this.$message.error('本次发行数量大于剩余可发行数量和超入数量');
  1075. return;
  1076. }
  1077. // 这里可以添加提交逻辑
  1078. submitPoOrderRollNo(this.addModelData).then(({data}) => {
  1079. if (data && data.code === 0) {
  1080. this.$message.success( '操作成功')
  1081. this.changeData(this.currentRow);
  1082. this.addModelFlag = false;
  1083. }else {
  1084. this.$message.error(data.msg);
  1085. }
  1086. })
  1087. },
  1088. submitDataNoClose() {
  1089. // 验证必填字段
  1090. if (!this.addModelData.productionDate||this.addModelData.productionDate==='') {
  1091. this.$message.error('请选择生产日期');
  1092. return;
  1093. }
  1094. if (!this.addModelData.rollCount||this.addModelData.rollCount==='') {
  1095. this.$message.error('请输入发行张数');
  1096. return;
  1097. }
  1098. if (!this.addModelData.rollQty||this.addModelData.rollQty==='') {
  1099. this.$message.error('请输入每张数量');
  1100. return;
  1101. }
  1102. if ( this.addModelData.nowRollQty>Number(this.addModelData.remainingIssuableQty)+((Number(this.addModelData.exceedInRatio)*Number(this.addModelData.orderQty))/100)) {
  1103. this.$message.error('本次发行数量大于剩余可发行数量和超入数量');
  1104. return;
  1105. }
  1106. // 这里可以添加提交逻辑
  1107. submitPoOrderRollNo(this.addModelData).then(({data}) => {
  1108. if (data && data.code === 0) {
  1109. this.$message.success( '操作成功')
  1110. this.changeData(this.currentRow);
  1111. let row=this.currentRow;
  1112. getInboundQcResultOtherData(row).then(({data}) => {
  1113. //区分请求成功和失败的状况
  1114. if (data && data.code=== 0) {
  1115. let outData = data.row
  1116. console.log(data.row);
  1117. this.addModelData.remainingIssuableQty= outData.remainingIssuableQty
  1118. }
  1119. });
  1120. }else {
  1121. this.$message.error(data.msg);
  1122. }
  1123. })
  1124. },
  1125. getNowRollQty(){
  1126. if(this.addModelData.tailRollQty==''||this.addModelData.tailRollQty==null||this.addModelData.tailRollQty<0){
  1127. this.addModelData.tailRollQty=0
  1128. }
  1129. if(this.addModelData.tailRollQty==0){
  1130. this.addModelData.nowRollQty=Number(this.addModelData.rollQty)*Number(this.addModelData.rollCount)
  1131. }else {
  1132. this.addModelData.nowRollQty=Number(this.addModelData.rollQty)*(Number(this.addModelData.rollCount)-1)+Number(this.addModelData.tailRollQty)
  1133. }
  1134. },
  1135. handleInput(value) {
  1136. // 1. 只保留数字
  1137. value = value.replace(/\D/g, '')
  1138. // 2. 去除前导零(0, 00, 0123 → 123)
  1139. value = value.replace(/^0+/, '')
  1140. // 3. 更新数据(触发 Vue 响应式)
  1141. this.addModelData.rollCount = value
  1142. },
  1143. async printLabels(){
  1144. if(this.selectionDataList.length===0){
  1145. this.$message.error('未选择标签!');
  1146. return false;
  1147. }
  1148. // 检查主信息是否已选择
  1149. if(!this.currentRow || !this.currentRow.site){
  1150. this.$message.error('请先选择上方的检验合格单!');
  1151. return false;
  1152. }
  1153. // 获取标签模板列表
  1154. await this.getLabelTemplates();
  1155. // 获取打印机列表
  1156. this.getPrinterList();
  1157. // 打开标签打印对话框
  1158. this.printDialogData = {
  1159. printTimes: 1,
  1160. labelNo: '',
  1161. printerName: ''
  1162. };
  1163. this.printDialogVisible = true;
  1164. },
  1165. // 获取标签模板列表
  1166. async getLabelTemplates(){
  1167. const params = {
  1168. site: this.currentRow.site,
  1169. buNo: this.currentRow.buNo,
  1170. partNo: this.currentRow.partNo
  1171. };
  1172. try {
  1173. const {data} = await getPartLabelTemplateList(params);
  1174. if (data && data.code === 0) {
  1175. this.labelTemplateList = data.list || [];
  1176. if(this.labelTemplateList.length > 0){
  1177. // 默认选中第一个
  1178. this.printDialogData.labelNo = this.labelTemplateList[0].labelNo;
  1179. }
  1180. } else {
  1181. this.$message.error(data.msg || '获取标签模板失败!');
  1182. }
  1183. } catch (error) {
  1184. console.error('获取标签模板失败:', error);
  1185. this.$message.error('获取标签模板失败!');
  1186. }
  1187. },
  1188. // 获取打印机列表
  1189. getPrinterList(){
  1190. try {
  1191. const LODOP = getLodop();
  1192. if (!LODOP) {
  1193. this.$message.error('无法连接到打印控件,请确保已安装并启动 CLodop!');
  1194. return;
  1195. }
  1196. const printerCount = LODOP.GET_PRINTER_COUNT();
  1197. this.printerList = [];
  1198. for (let i = 0; i < printerCount; i++) {
  1199. this.printerList.push(LODOP.GET_PRINTER_NAME(i));
  1200. }
  1201. if(this.printerList.length > 0){
  1202. // 默认选中第一个打印机
  1203. this.printDialogData.printerName = this.printerList[0];
  1204. }
  1205. } catch (error) {
  1206. console.error('获取打印机列表失败:', error);
  1207. this.$message.error('获取打印机列表失败!');
  1208. }
  1209. },
  1210. // 确认打印
  1211. async confirmPrint(){
  1212. // 验证必填项
  1213. if(!this.printDialogData.labelNo){
  1214. this.$message.error('请选择标签模板!');
  1215. return;
  1216. }
  1217. if(!this.printDialogData.printerName){
  1218. this.$message.error('请选择打印机!');
  1219. return;
  1220. }
  1221. this.printLoading = true;
  1222. try {
  1223. // 调用存储过程获取打印参数
  1224. const printDataList = [];
  1225. for(let i = 0; i < this.selectionDataList.length; i++){
  1226. const item = this.selectionDataList[i];
  1227. const params = {
  1228. site: this.currentRow.site,
  1229. buNo: this.currentRow.buNo,
  1230. menuID: this.$route.meta.menuId,
  1231. relatedOrderNo: this.currentRow.poOrderNo,
  1232. relatedOrderLineNo: this.currentRow.poItemNo,
  1233. documentNo: this.currentRow.notifyNo,
  1234. partNo: item.partNo,
  1235. labelNo: this.printDialogData.labelNo,
  1236. rollNo: item.rollNo
  1237. };
  1238. const {data} = await callUspPartLabelTemplate(params);
  1239. if (data && data.code === 0) {
  1240. // 确保 labelNo 字段存在(统一字段名)
  1241. const printData = {
  1242. ...data.row,
  1243. labelNo: data.row.labelNo
  1244. };
  1245. printDataList.push(printData);
  1246. } else {
  1247. this.$message.error(`获取标签 ${item.rollNo} 的打印参数失败:${data.msg}`);
  1248. this.printLoading = false;
  1249. return;
  1250. }
  1251. }
  1252. // 根据 labelNo 调用相应的打印方法
  1253. await this.executePrint(printDataList);
  1254. this.printDialogVisible = false;
  1255. this.$message.success('打印任务已发送!');
  1256. this.getDetailTableList();
  1257. } catch (error) {
  1258. console.error('打印失败:', error);
  1259. this.$message.error('打印失败:' + error.message);
  1260. } finally {
  1261. this.printLoading = false;
  1262. }
  1263. },
  1264. // 执行打印
  1265. async executePrint(printDataList){
  1266. const LODOP = getLodop();
  1267. if (!LODOP) {
  1268. this.$message.error('无法连接到打印控件!');
  1269. return;
  1270. }
  1271. // 初始化打印任务
  1272. LODOP.PRINT_INIT('物料标签打印');
  1273. // 设置打印模式,隐藏水印
  1274. LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE", true);
  1275. // 设置打印机
  1276. LODOP.SET_PRINTER_INDEX(this.printDialogData.printerName);
  1277. for(let times = 0; times < this.printDialogData.printTimes; times++){
  1278. for(let i = 0; i < printDataList.length; i++){
  1279. const printData = printDataList[i];
  1280. // 根据 labelNo 调用不同的打印方法
  1281. if(printData.labelNo === 'A001'){
  1282. await this.printLabelA001(LODOP, printData, i > 0 || times > 0);
  1283. } else if(printData.labelNo === 'A002'){
  1284. this.printLabelA002(LODOP, printData, i > 0 || times > 0);
  1285. } else if(printData.labelNo === 'A003'){
  1286. this.printLabelA003(LODOP, printData, i > 0 || times > 0);
  1287. } else {
  1288. this.$message.warning(`未知的标签模板:${printData.labelNo}`);
  1289. }
  1290. }
  1291. }
  1292. // 预览打印(避免水印)
  1293. //LODOP.PREVIEW();
  1294. LODOP.PRINT();
  1295. },
  1296. deleteLabels(){
  1297. if(this.selectionDataList.length===0){
  1298. this.$message.error('未选择标签!');
  1299. return false;
  1300. }
  1301. for (let i = 0; i <this.selectionDataList.length ; i++) {
  1302. if(this.selectionDataList[i].hardtagInFlag!=='未入库'){
  1303. this.$message.error('存在不是未入库状态的标签无法删除!');
  1304. return false;
  1305. }
  1306. }
  1307. deletePoPartLabelData(this.selectionDataList).then(({data}) => {
  1308. if (data && data.code === 0) {
  1309. this.getDetailTableList();
  1310. this.$message.success('删除成功!');
  1311. }else {
  1312. this.$message.error(data.msg);
  1313. }
  1314. })
  1315. },
  1316. openUpload(){
  1317. if(!this.currentRow || !this.currentRow.site){
  1318. this.$message.error('请先选择上方的检验合格单!');
  1319. return false;
  1320. }
  1321. let pageData = {
  1322. flag: 'poPartPrint',
  1323. createBy: this.$store.state.user.name,
  1324. site: this.currentRow.site,
  1325. buNo: this.currentRow.buNo,
  1326. orderNo: this.currentRow.orderNo,
  1327. partNo: this.currentRow.partNo,
  1328. partDesc: this.currentRow.partDesc,
  1329. poOrderNo: this.currentRow.poOrderNo,
  1330. poItemNo: this.currentRow.poItemNo,
  1331. supplierId: this.currentRow.supplierId,
  1332. supplierName: this.currentRow.supplierName,
  1333. orderQty: this.currentRow.orderQty,
  1334. inspectionNo: this.currentRow.orderNo
  1335. }
  1336. this.$refs.qcUpload.init(pageData);
  1337. },
  1338. },
  1339. created() {
  1340. //查询报表的类型
  1341. this.getMainData();
  1342. },
  1343. }
  1344. </script>
  1345. <!--当前页面的标签样式-->
  1346. <style scoped lang="scss">
  1347. /deep/ .customer-tab .el-tabs__content {
  1348. padding: 5px !important;
  1349. }
  1350. /deep/ .el-form-item__label {
  1351. font-weight: 500;
  1352. }
  1353. /deep/ .el-form-item.is-required .el-form-item__label:before {
  1354. content: '*';
  1355. color: #f56c6c;
  1356. margin-right: 4px;
  1357. }
  1358. /deep/ .dialog-footer {
  1359. padding: 20px 0 0 0;
  1360. text-align: center;
  1361. }
  1362. /deep/ .el-dialog__body {
  1363. padding: 20px;
  1364. }
  1365. /deep/ .el-input.is-disabled .el-input__inner {
  1366. background-color: #f5f7fa;
  1367. border-color: #e4e7ed;
  1368. color: #c0c4cc;
  1369. }
  1370. /* 标签打印对话框样式 */
  1371. .print-dialog {
  1372. /deep/ .el-dialog__header {
  1373. background: linear-gradient(135deg, #9ac3d0 20%, #b6c7dd 80%);
  1374. padding: 20px 20px 20px 20px;
  1375. border-radius: 4px 4px 0 0;
  1376. }
  1377. /deep/ .el-dialog__title {
  1378. color: #ffffff;
  1379. }
  1380. /deep/ .el-dialog__headerbtn .el-dialog__close {
  1381. color: #ffffff;
  1382. font-size: 20px;
  1383. font-weight: bold;
  1384. &:hover {
  1385. color: #f0f0f0;
  1386. }
  1387. }
  1388. /deep/ .el-dialog__body {
  1389. padding: 0;
  1390. }
  1391. .dialog-title-wrapper {
  1392. color: #ffffff;
  1393. display: flex;
  1394. align-items: center;
  1395. }
  1396. .print-dialog-content {
  1397. padding: 25px 30px;
  1398. }
  1399. .print-info-banner {
  1400. background: linear-gradient(135deg, #e8f4f8 0%, #f0f5fb 100%);
  1401. border-left: 4px solid #60aeff;
  1402. padding: 12px 16px;
  1403. border-radius: 4px;
  1404. color: #606266;
  1405. font-size: 14px;
  1406. display: flex;
  1407. align-items: center;
  1408. box-shadow: 0 2px 4px rgba(0,0,0,0.05);
  1409. }
  1410. .form-label {
  1411. font-size: 14px;
  1412. font-weight: 600;
  1413. color: #303133;
  1414. display: flex;
  1415. align-items: center;
  1416. }
  1417. .form-tip {
  1418. font-size: 12px;
  1419. color: #909399;
  1420. margin-top: 5px;
  1421. line-height: 1.5;
  1422. }
  1423. .print-summary {
  1424. background: linear-gradient(135deg, #e1f0f5 0%, #dae8f3 100%);
  1425. border-radius: 8px;
  1426. padding: 16px 20px;
  1427. margin-top: 20px;
  1428. display: flex;
  1429. justify-content: space-around;
  1430. box-shadow: 0 2px 8px rgba(96, 174, 255, 0.15);
  1431. border: 1px solid #c8dff0;
  1432. .summary-item {
  1433. display: flex;
  1434. flex-direction: column;
  1435. align-items: center;
  1436. .summary-label {
  1437. font-size: 12px;
  1438. color: #5a7a8f;
  1439. margin-bottom: 5px;
  1440. font-weight: 500;
  1441. }
  1442. .summary-value {
  1443. font-size: 20px;
  1444. font-weight: bold;
  1445. color: #3a7ba8;
  1446. }
  1447. }
  1448. }
  1449. /deep/ .el-form-item {
  1450. margin-bottom: 18px;
  1451. }
  1452. /deep/ .el-input-number {
  1453. width: 100%;
  1454. .el-input__inner {
  1455. text-align: left;
  1456. }
  1457. }
  1458. /deep/ .el-select {
  1459. .el-input__inner {
  1460. border: 1px solid #DCDFE6;
  1461. transition: all 0.3s;
  1462. &:hover {
  1463. border-color: #409EFF;
  1464. }
  1465. &:focus {
  1466. border-color: #409EFF;
  1467. }
  1468. }
  1469. }
  1470. /deep/ .dialog-footer {
  1471. padding: 15px 30px 25px 30px;
  1472. text-align: center;
  1473. background-color: #fafafa;
  1474. border-top: 1px solid #e8e8e8;
  1475. .el-button {
  1476. min-width: 120px;
  1477. height: 40px;
  1478. font-weight: 500;
  1479. transition: all 0.3s;
  1480. font-size: 15px;
  1481. }
  1482. .el-button--success {
  1483. background: linear-gradient(135deg, #67C23A 0%, #85ce61 100%);
  1484. border: none;
  1485. box-shadow: 0 2px 4px rgba(103, 194, 58, 0.3);
  1486. &:hover {
  1487. transform: translateY(-2px);
  1488. box-shadow: 0 4px 8px rgba(103, 194, 58, 0.4);
  1489. }
  1490. &:active {
  1491. transform: translateY(0);
  1492. }
  1493. }
  1494. }
  1495. }
  1496. /* 选项样式优化 */
  1497. /deep/ .el-select-dropdown__item {
  1498. padding: 10px 20px;
  1499. transition: all 0.2s;
  1500. &:hover {
  1501. background-color: #f5f7fa;
  1502. }
  1503. }
  1504. /* 输入框聚焦效果 */
  1505. /deep/ .el-input__inner:focus,
  1506. /deep/ .el-textarea__inner:focus {
  1507. border-color: #409EFF;
  1508. box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1);
  1509. }
  1510. </style>