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.

1614 lines
50 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
3 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
1 month ago
5 months ago
1 month ago
5 months ago
1 month ago
5 months ago
1 month ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
1 month ago
5 months ago
1 month ago
5 months ago
1 month ago
5 months ago
5 months ago
5 months ago
5 months ago
1 month ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
3 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 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. 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. 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. 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. },
  1295. deleteLabels(){
  1296. if(this.selectionDataList.length===0){
  1297. this.$message.error('未选择标签!');
  1298. return false;
  1299. }
  1300. for (let i = 0; i <this.selectionDataList.length ; i++) {
  1301. if(this.selectionDataList[i].hardtagInFlag!=='未入库'){
  1302. this.$message.error('存在不是未入库状态的标签无法删除!');
  1303. return false;
  1304. }
  1305. }
  1306. deletePoPartLabelData(this.selectionDataList).then(({data}) => {
  1307. if (data && data.code === 0) {
  1308. this.getDetailTableList();
  1309. this.$message.success('删除成功!');
  1310. }else {
  1311. this.$message.error(data.msg);
  1312. }
  1313. })
  1314. },
  1315. openUpload(){
  1316. if(!this.currentRow || !this.currentRow.site){
  1317. this.$message.error('请先选择上方的检验合格单!');
  1318. return false;
  1319. }
  1320. let pageData = {
  1321. flag: 'poPartPrint',
  1322. createBy: this.$store.state.user.name,
  1323. site: this.currentRow.site,
  1324. buNo: this.currentRow.buNo,
  1325. orderNo: this.currentRow.orderNo,
  1326. partNo: this.currentRow.partNo,
  1327. partDesc: this.currentRow.partDesc,
  1328. poOrderNo: this.currentRow.poOrderNo,
  1329. poItemNo: this.currentRow.poItemNo,
  1330. supplierId: this.currentRow.supplierId,
  1331. supplierName: this.currentRow.supplierName,
  1332. orderQty: this.currentRow.orderQty,
  1333. inspectionNo: this.currentRow.orderNo
  1334. }
  1335. this.$refs.qcUpload.init(pageData);
  1336. },
  1337. },
  1338. created() {
  1339. //查询报表的类型
  1340. this.getMainData();
  1341. },
  1342. }
  1343. </script>
  1344. <!--当前页面的标签样式-->
  1345. <style scoped lang="scss">
  1346. /deep/ .customer-tab .el-tabs__content {
  1347. padding: 5px !important;
  1348. }
  1349. /deep/ .el-form-item__label {
  1350. font-weight: 500;
  1351. }
  1352. /deep/ .el-form-item.is-required .el-form-item__label:before {
  1353. content: '*';
  1354. color: #f56c6c;
  1355. margin-right: 4px;
  1356. }
  1357. /deep/ .dialog-footer {
  1358. padding: 20px 0 0 0;
  1359. text-align: center;
  1360. }
  1361. /deep/ .el-dialog__body {
  1362. padding: 20px;
  1363. }
  1364. /deep/ .el-input.is-disabled .el-input__inner {
  1365. background-color: #f5f7fa;
  1366. border-color: #e4e7ed;
  1367. color: #c0c4cc;
  1368. }
  1369. /* 标签打印对话框样式 */
  1370. .print-dialog {
  1371. /deep/ .el-dialog__header {
  1372. background: linear-gradient(135deg, #9ac3d0 20%, #b6c7dd 80%);
  1373. padding: 20px 20px 20px 20px;
  1374. border-radius: 4px 4px 0 0;
  1375. }
  1376. /deep/ .el-dialog__title {
  1377. color: #ffffff;
  1378. }
  1379. /deep/ .el-dialog__headerbtn .el-dialog__close {
  1380. color: #ffffff;
  1381. font-size: 20px;
  1382. font-weight: bold;
  1383. &:hover {
  1384. color: #f0f0f0;
  1385. }
  1386. }
  1387. /deep/ .el-dialog__body {
  1388. padding: 0;
  1389. }
  1390. .dialog-title-wrapper {
  1391. color: #ffffff;
  1392. display: flex;
  1393. align-items: center;
  1394. }
  1395. .print-dialog-content {
  1396. padding: 25px 30px;
  1397. }
  1398. .print-info-banner {
  1399. background: linear-gradient(135deg, #e8f4f8 0%, #f0f5fb 100%);
  1400. border-left: 4px solid #60aeff;
  1401. padding: 12px 16px;
  1402. border-radius: 4px;
  1403. color: #606266;
  1404. font-size: 14px;
  1405. display: flex;
  1406. align-items: center;
  1407. box-shadow: 0 2px 4px rgba(0,0,0,0.05);
  1408. }
  1409. .form-label {
  1410. font-size: 14px;
  1411. font-weight: 600;
  1412. color: #303133;
  1413. display: flex;
  1414. align-items: center;
  1415. }
  1416. .form-tip {
  1417. font-size: 12px;
  1418. color: #909399;
  1419. margin-top: 5px;
  1420. line-height: 1.5;
  1421. }
  1422. .print-summary {
  1423. background: linear-gradient(135deg, #e1f0f5 0%, #dae8f3 100%);
  1424. border-radius: 8px;
  1425. padding: 16px 20px;
  1426. margin-top: 20px;
  1427. display: flex;
  1428. justify-content: space-around;
  1429. box-shadow: 0 2px 8px rgba(96, 174, 255, 0.15);
  1430. border: 1px solid #c8dff0;
  1431. .summary-item {
  1432. display: flex;
  1433. flex-direction: column;
  1434. align-items: center;
  1435. .summary-label {
  1436. font-size: 12px;
  1437. color: #5a7a8f;
  1438. margin-bottom: 5px;
  1439. font-weight: 500;
  1440. }
  1441. .summary-value {
  1442. font-size: 20px;
  1443. font-weight: bold;
  1444. color: #3a7ba8;
  1445. }
  1446. }
  1447. }
  1448. /deep/ .el-form-item {
  1449. margin-bottom: 18px;
  1450. }
  1451. /deep/ .el-input-number {
  1452. width: 100%;
  1453. .el-input__inner {
  1454. text-align: left;
  1455. }
  1456. }
  1457. /deep/ .el-select {
  1458. .el-input__inner {
  1459. border: 1px solid #DCDFE6;
  1460. transition: all 0.3s;
  1461. &:hover {
  1462. border-color: #409EFF;
  1463. }
  1464. &:focus {
  1465. border-color: #409EFF;
  1466. }
  1467. }
  1468. }
  1469. /deep/ .dialog-footer {
  1470. padding: 15px 30px 25px 30px;
  1471. text-align: center;
  1472. background-color: #fafafa;
  1473. border-top: 1px solid #e8e8e8;
  1474. .el-button {
  1475. min-width: 120px;
  1476. height: 40px;
  1477. font-weight: 500;
  1478. transition: all 0.3s;
  1479. font-size: 15px;
  1480. }
  1481. .el-button--success {
  1482. background: linear-gradient(135deg, #67C23A 0%, #85ce61 100%);
  1483. border: none;
  1484. box-shadow: 0 2px 4px rgba(103, 194, 58, 0.3);
  1485. &:hover {
  1486. transform: translateY(-2px);
  1487. box-shadow: 0 4px 8px rgba(103, 194, 58, 0.4);
  1488. }
  1489. &:active {
  1490. transform: translateY(0);
  1491. }
  1492. }
  1493. }
  1494. }
  1495. /* 选项样式优化 */
  1496. /deep/ .el-select-dropdown__item {
  1497. padding: 10px 20px;
  1498. transition: all 0.2s;
  1499. &:hover {
  1500. background-color: #f5f7fa;
  1501. }
  1502. }
  1503. /* 输入框聚焦效果 */
  1504. /deep/ .el-input__inner:focus,
  1505. /deep/ .el-textarea__inner:focus {
  1506. border-color: #409EFF;
  1507. box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1);
  1508. }
  1509. </style>