HXYcheck.vue 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076
  1. <template>
  2. <div>
  3. <Toptitle title="查看">
  4. <Button
  5. @click="handleMatchedSelectAll()"
  6. type="primary"
  7. :ghost="!isMatchedSelectAll"
  8. style="margin-right: 10px"
  9. >{{ isMatchedSelectAll ? "取消选中" : "全部选中" }}</Button
  10. >
  11. <Button type="primary" style="margin-right: 10px" @click="print_chip"
  12. >打印芯片</Button
  13. >
  14. <!-- <Button type="primary" style="margin-right: 10px" @click="test"
  15. >测试查看</Button
  16. > -->
  17. <Button @click="back" type="primary" ghost style="margin-right: 10px"
  18. >返回</Button
  19. >
  20. </Toptitle>
  21. <Row style="padding: 10px;font-size: 18px;">
  22. <Col span="6">
  23. <span>项目编号:</span><span>{{ project_number }}</span>
  24. </Col>
  25. <Col span="6">
  26. <span>项目名称:</span><span>{{ project_name }}</span>
  27. </Col>
  28. </Row>
  29. <div class="context-tabs">
  30. <Row type="flex" align="middle" style="padding:10px 0">
  31. <Col span="4">
  32. <span>图号:</span>
  33. <span>
  34. <Select
  35. filterable
  36. multiple
  37. filter-by-label
  38. clearable
  39. transfer
  40. v-model="matchedInfo.url_number"
  41. :max-tag-count="2"
  42. size="small"
  43. style="width: 150px"
  44. >
  45. <Option
  46. v-for="(item, index) in urlMatchedList"
  47. :key="index"
  48. :label="item"
  49. :value="item"
  50. ></Option>
  51. </Select>
  52. </span>
  53. </Col>
  54. <Col span="5">
  55. <span>图号批量查询:</span>
  56. <span>
  57. <Input clearable v-model="matchedInfo.url_numbers" placeholder="请输入" size="small"
  58. style="width: 150px"/>
  59. </span>
  60. </Col>
  61. <Col span="5">
  62. <span>产品名称:</span>
  63. <span>
  64. <Select
  65. filterable
  66. multiple
  67. filter-by-label
  68. clearable
  69. transfer
  70. v-model="matchedInfo.product_id"
  71. :max-tag-count="2"
  72. size="small"
  73. style="width: 150px"
  74. >
  75. <Option
  76. v-for="(item,index) in productMatchedList"
  77. :key="index"
  78. :label="item.title"
  79. :value="item.id"
  80. ></Option>
  81. </Select>
  82. </span>
  83. </Col>
  84. <Col span="5">
  85. <span>区域名称:</span>
  86. <span>
  87. <Select
  88. filterable
  89. multiple
  90. filter-by-label
  91. clearable
  92. transfer
  93. v-model="matchedInfo.layer"
  94. :max-tag-count="2"
  95. size="small"
  96. style="width: 150px"
  97. >
  98. <Option
  99. v-for="(item, index) in layerList"
  100. :key="index"
  101. :label="item"
  102. :value="item"
  103. ></Option>
  104. </Select>
  105. </span>
  106. </Col>
  107. <Col span="2">
  108. <Button @click="initData(matchedInfo)" size="small" type="primary">
  109. 搜索
  110. </Button>
  111. </Col>
  112. </Row>
  113. <div
  114. v-for="(matched_info,index) in matchedList"
  115. :key="index"
  116. class="matched-block"
  117. >
  118. <Row type="flex" justify="space-between" align="top">
  119. <Col style="display:flex;justify-content: space-around;">
  120. <Checkbox
  121. v-model="matched_info.isSelect"
  122. @on-change="(e) => handleMatchedSelect(matched_info, e)"
  123. >选择</Checkbox
  124. >
  125. <span>图号:{{ matched_info.url_number }}</span>
  126. </Col>
  127. <Col span="3">
  128. <span>产品名称:{{ matched_info.product_title }}</span>
  129. </Col>
  130. <Col span="3">
  131. <span>区域:{{ matched_info.layer }}</span>
  132. </Col>
  133. <Col style="display:flex;justify-content: space-between;" span="8">
  134. <div>
  135. 总计
  136. <span style="color:red">{{ matched_info.total }}</span>
  137. 条数据
  138. </div>
  139. <div>
  140. <Button
  141. @click="handleShowCurrencyMatched(matched_info,index)"
  142. size="small"
  143. type="text"
  144. >{{ matched_info.isCurrenct ? "收缩" : "展开" }}</Button
  145. >
  146. <Icon
  147. size="20"
  148. :type="
  149. matched_info.isCurrenct
  150. ? 'md-arrow-dropdown'
  151. : 'md-arrow-dropright'
  152. "
  153. style="vertical-align: middle;"
  154. />
  155. </div>
  156. </Col>
  157. </Row>
  158. <Row style="margin-top:20px" v-if="matched_info.isCurrenct">
  159. <Col span="4">
  160. <span>房号:</span>
  161. <span>
  162. <Select
  163. filterable
  164. multiple
  165. transfer
  166. clearable
  167. filter-by-label
  168. v-model="matchedInfoDetail.number"
  169. :max-tag-count="2"
  170. size="small"
  171. style="width: 150px"
  172. >
  173. <Option
  174. v-for="(item, index) in numberMatchedList"
  175. :key="index"
  176. :label="item.number"
  177. :value="item.number"
  178. ></Option>
  179. </Select>
  180. </span>
  181. </Col>
  182. <Col span="4">
  183. <span>行号:</span>
  184. <span>
  185. <Select
  186. filterable
  187. multiple
  188. transfer
  189. clearable
  190. filter-by-label
  191. v-model="matchedInfoDetail.sort"
  192. :max-tag-count="2"
  193. size="small"
  194. style="width: 150px"
  195. >
  196. <Option
  197. v-for="(item, index) in sortList"
  198. :key="index"
  199. :label="item"
  200. :value="item"
  201. ></Option>
  202. </Select>
  203. </span>
  204. </Col>
  205. <Col span="4">
  206. <span>组合名称:</span>
  207. <span>
  208. <Select
  209. filterable
  210. multiple
  211. transfer
  212. clearable
  213. filter-by-label
  214. v-model="matchedInfoDetail.compose_name"
  215. :max-tag-count="2"
  216. size="small"
  217. style="width: 150px"
  218. >
  219. <Option
  220. v-for="(item, index) in compose_name_list"
  221. :key="index"
  222. :label="item"
  223. :value="item"
  224. ></Option>
  225. </Select>
  226. </span>
  227. </Col>
  228. <Col span="4">
  229. <span>部件名称:</span>
  230. <span>
  231. <Select
  232. filterable
  233. multiple
  234. transfer
  235. clearable
  236. filter-by-label
  237. v-model="matchedInfoDetail.parts_id"
  238. :max-tag-count="2"
  239. size="small"
  240. style="width: 150px"
  241. >
  242. <Option
  243. v-for="(item, index) in partNameMatchedList"
  244. :key="index"
  245. :label="item.title"
  246. :value="item.id"
  247. ></Option>
  248. </Select>
  249. </span>
  250. </Col>
  251. <Col span="2">
  252. <Button
  253. @click="getMatchedDetailList(matched_info,matchedInfoDetail)"
  254. size="small"
  255. type="primary"
  256. >
  257. 搜索
  258. </Button>
  259. </Col>
  260. </Row>
  261. <div v-if="matched_info.isCurrenct">
  262. <Table
  263. :columns="matchedSheetTableColumns"
  264. border
  265. :max-height="500"
  266. :data="matchedDetailList"
  267. @on-select='select'
  268. @on-select-cancel='selectCancel'
  269. ref='table'
  270. @on-select-all='selectAll($event,null,1)'
  271. @on-select-all-cancel='selectAllCancel($event,null,1)'
  272. >
  273. </Table>
  274. <span>总计{{matchedDetailList.length?matchedDetailList.length:0}}条记录</span>
  275. </div>
  276. </div>
  277. </div>
  278. <Modal v-model="processModal" title="下生产">
  279. <div>
  280. <div class="process_modal">
  281. <span>生产人员:</span>
  282. <Select
  283. v-model="process_man"
  284. filterable
  285. filter-by-label
  286. clearable
  287. style="width: 150px"
  288. >
  289. <Option
  290. v-for="(item,index) in processManList"
  291. :key="index"
  292. :label="item.nickname"
  293. :value="item.id"
  294. ></Option>
  295. </Select>
  296. </div>
  297. <div class="process_modal">
  298. <span>选择时间:</span>
  299. <DatePicker
  300. type="date"
  301. v-model="process_start_time"
  302. placeholder="年/月/日"
  303. style="width: 150px"
  304. ></DatePicker>
  305. <DatePicker
  306. type="date"
  307. v-model="process_end_time"
  308. placeholder="年/月/日"
  309. style="width: 150px"
  310. ></DatePicker>
  311. </div>
  312. </div>
  313. <div slot="footer">
  314. <Button
  315. @click="processModal = false"
  316. type="primary"
  317. ghost
  318. style="margin-right: 10px"
  319. >取消</Button
  320. >
  321. <Button
  322. @click="handleProcess"
  323. type="primary"
  324. style="margin-right: 10px"
  325. :disabled="process_control"
  326. >确定</Button
  327. >
  328. </div>
  329. </Modal>
  330. <Modal v-model="showDel" title="" @on-ok='important_del' :closable='false' style="text-align:center" :width='20'>
  331. <div style="margin-top:30px"><span style="margin-right:10px">用户:</span><Input v-model="delData.user_name" style="width:70%"></Input></div>
  332. <div style="margin-top:30px"><span style="margin-right:10px">密码:</span><Input v-model="delData.password" style="width:70%"></Input></div>
  333. </Modal>
  334. </div>
  335. </template>
  336. <script>
  337. // 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
  338. // 例如:import 《组件名称》 from '《组件路径》';
  339. import $ from "jquery";
  340. import { ContainerMixin } from 'vue-slicksort';
  341. export default {
  342. name: "",
  343. components: {},
  344. props: {},
  345. // import引入的组件需要注入到对象中才能使用
  346. data() {
  347. // 这里存放数据
  348. return {
  349. compose_name_list:[],
  350. sortList:[],
  351. delData:{
  352. user_name:'',
  353. password:'',
  354. },
  355. layerList:[],
  356. project_number: this.$route.query.project_number,
  357. project_name: this.$route.query.project_name,
  358. isMatchedSelectAll: false,
  359. matchedInfoDetail:{
  360. compose_name:[],
  361. sort:[],
  362. parts_id:[],
  363. number:[]
  364. },
  365. matchedInfo: {
  366. url_number: [],
  367. product_id: [],
  368. layer:[],
  369. url_numbers:'',
  370. },
  371. urlMatchedList: [],
  372. productMatchedList: [],
  373. regionMatchedList: [],
  374. numberMatchedList: [],
  375. partNameMatchedList: [],
  376. matchedDetailList: [],
  377. matchedList: [],
  378. matchedSheetTableColumns: [
  379. {type:'selection',align:'center',width:60},
  380. { title: "序号", align: "center", type: "index", resizable: true,
  381. minWidth: 80 },
  382. { title: "行号", align: "center", key: "sort", resizable: true,
  383. minWidth: 120 },
  384. { title: "区域名称", align: "center", key: "area", resizable: true,
  385. minWidth: 160 },
  386. { title: "房号", align: "center", key: "number", resizable: true,
  387. minWidth: 160 },
  388. { title: "组合名称", align: "center", key:'compose_name', resizable: true,
  389. minWidth: 100 },
  390. { title: "部件名称", align: "center", key: "part_title", resizable: true,
  391. minWidth: 180 },
  392. { title: "精裁面积", align: "center", key: "ext_1", resizable: true,
  393. minWidth: 150 },
  394. { title: "贴皮面积", align: "center", key: "skin_area", resizable: true,
  395. minWidth: 150 },
  396. {
  397. title: "精裁尺寸",
  398. align: "center",
  399. resizable: true,
  400. minWidth: 150,
  401. render: (h, params) => {
  402. return h("span", {}, params.row.measure);
  403. },
  404. },
  405. {
  406. title:"毛料尺寸",
  407. align:'center',
  408. resizable:true,
  409. width:150,
  410. key:"wool_size"
  411. },
  412. { title: "打印芯片", align: "center", key: "chip_state", resizable: true,
  413. minWidth: 80 , render: (h, params) => {
  414. return h("span", {}, params.row.chip_state==0?'否':'是');
  415. }},
  416. { title: "工艺要求", align: "center", key: "remark", resizable: true,
  417. minWidth: 180 },
  418. { title: "操作", align: "center", key: "set", resizable: true,
  419. minWidth: 180 ,render:(h,params)=>{
  420. const {row} = params;
  421. return h('a',{on:{'click':()=>{
  422. this.print_chip(row,1)
  423. }}},'打印芯片')
  424. }},
  425. ], //匹配表头
  426. processModal: false,
  427. process_man: "",
  428. processManList: [],
  429. process_start_time: "",
  430. process_end_time: "",
  431. process_control: false,
  432. cut_order_product_ids: [],
  433. matchedSelectedList: [],
  434. delList:[],
  435. showDel:false,
  436. selectIndex:'',
  437. selectArr:[],
  438. };
  439. },
  440. // 生命周期 - 创建完成(可以访问当前this实例)
  441. created() {
  442. this.axios("/api/user").then(
  443. (res) => (this.processManList = res.data.data)
  444. );
  445. },
  446. // 生命周期 - 挂载完成(可以访问DOM元素)
  447. mounted() {
  448. this.initData();
  449. },
  450. methods: {
  451. test(){
  452. console.log(this.selectArr)
  453. },
  454. selectAll(selection,arr,type){
  455. let ids =[];
  456. if(arr){
  457. arr.forEach(m=>{
  458. ids.push(m.id)
  459. })
  460. }else{
  461. this.matchedDetailList.forEach(m=>{
  462. ids.push(m.id)
  463. })}
  464. for(let i =0;i<this.matchedSelectedList.length;i++){
  465. if(ids.indexOf(this.matchedSelectedList[i].id)>=0){
  466. this.matchedSelectedList.splice(i,1);
  467. i--;
  468. }
  469. }
  470. if(arr){
  471. this.matchedSelectedList.push(...arr);
  472. }else{
  473. this.matchedSelectedList.push(...this.matchedDetailList);}
  474. if(typeof this.selectIndex === 'number'){
  475. let ids = [];
  476. if(type){
  477. this.matchedList[this.selectIndex].isSelect = true;
  478. this.selectArr.forEach(v=>{
  479. ids.push(v.id)
  480. })
  481. if(ids.indexOf(this.matchedList[this.selectIndex].id)<0){
  482. this.selectArr.push(this.matchedList[this.selectIndex]);}
  483. }}
  484. this.$forceUpdate();
  485. },
  486. selectAllCancel(selection,arr,type){
  487. let ids =[];
  488. if(arr){
  489. arr.forEach(v=>{
  490. ids.push(v.id)
  491. })
  492. }else{
  493. this.matchedDetailList.forEach(m=>{
  494. ids.push(m.id)
  495. })}
  496. console.log(ids);
  497. for(let i =0;i<this.matchedSelectedList.length;i++){
  498. if(ids.indexOf(this.matchedSelectedList[i].id)>=0){
  499. this.matchedSelectedList.splice(i,1);
  500. i--;
  501. }
  502. }
  503. // this.matchedSelectedList.forEach((v,index)=>{
  504. // if(ids.indexOf(v.id)>=0){
  505. // this.matchedSelectedList.splice(index,1);
  506. // index--;
  507. // console.log(this.matchedSelectedList)
  508. // }
  509. // })
  510. if(typeof this.selectIndex === 'number'){
  511. if(type){
  512. this.matchedList[this.selectIndex].isSelect = false;
  513. this.selectArr.forEach((m,index)=>{
  514. if(m.id == this.matchedList[this.selectIndex].id){
  515. this.selectArr.splice(index,1);
  516. }
  517. })}
  518. this.$forceUpdate();
  519. }
  520. },
  521. select(selection,row){
  522. let ids = [];
  523. this.matchedSelectedList.forEach(v=>{
  524. ids.push(v.id)
  525. })
  526. if(ids.indexOf(row.id)<0){
  527. this.matchedSelectedList.push(row);
  528. }
  529. console.log(selection)
  530. if(selection.length == this.matchedDetailList.length){
  531. this.matchedList[this.selectIndex].isSelect = true;
  532. this.selectArr.push(this.matchedList[this.selectIndex]);
  533. this.$forceUpdate();
  534. }else{
  535. this.matchedList[this.selectIndex].isSelect = false;
  536. this.selectArr.forEach((m,index)=>{
  537. if(m.id == this.matchedList[this.selectIndex].id){
  538. this.selectArr.splice(index,1);
  539. }
  540. })
  541. this.$forceUpdate();
  542. }
  543. console.log(this.matchedSelectedList);
  544. },
  545. selectCancel(selection,cancelRow){
  546. // this.matchedList[this.selectIndex].isSelect = false;
  547. this.matchedSelectedList.forEach((v,index)=>{
  548. if(v.id == cancelRow.id){
  549. this.matchedSelectedList.splice(index,1)
  550. }
  551. })
  552. if(selection.length == this.matchedDetailList.length){
  553. this.matchedList[this.selectIndex].isSelect = true;
  554. this.$forceUpdate();
  555. }else{
  556. this.matchedList[this.selectIndex].isSelect = false;
  557. this.selectArr.forEach((m,index)=>{
  558. if(m.id == this.matchedList[this.selectIndex].id){
  559. this.selectArr.splice(index,1);
  560. }
  561. })
  562. this.$forceUpdate();
  563. }
  564. console.log(this.matchedSelectedList)
  565. },
  566. hexCharCodeToStr(hexCharCodeStr) {
  567. let trimedStr = hexCharCodeStr.trim();
  568. let rawStr = trimedStr.substr(0,2).toLowerCase() === "0x"?trimedStr.substr(2):trimedStr;
  569. let len = rawStr.length;
  570. if(len % 2 !== 0) {
  571. alert("Illegal Format ASCII Code!");
  572. return "";}
  573. let curCharCode;
  574. let resultStr = [];
  575. for(var i = 0; i < len;i = i + 2) {
  576. curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
  577. resultStr.push(String.fromCharCode(curCharCode));
  578. }
  579. return resultStr.join("");
  580. },
  581. handlePrintChipsUsb(contents, type) {
  582. console.log(contents)
  583. this.axios.get("/api/get_print_url").then((res) => {
  584. let data = {};
  585. // let url = "http://192.168.0.145:888/postek/print"; //request_url
  586. let url = `http://${res.data.request_url}:888/postek/print`; //request_url
  587. data.reqParam = "1"; //这个一般不用改,如需改,查api
  588. let printparamsJsonArray = [];
  589. // let IP = "192.168.1.58";//print_url
  590. // let IP = "192.168.0.199"; //print_url
  591. printparamsJsonArray.push({ PTK_OpenUSBPort: 255 });
  592. printparamsJsonArray.push({ PTK_ClearBuffer: "" });
  593. printparamsJsonArray.push({ PTK_SetDirection: "B" });
  594. printparamsJsonArray.push({ PTK_SetPrintSpeed: "4" });
  595. printparamsJsonArray.push({ PTK_SetDarkness: "10" });
  596. printparamsJsonArray.push({
  597. PTK_SetLabelHeight: 624 + "," + 24 + ",0,false",
  598. });
  599. printparamsJsonArray.push({ PTK_SetLabelWidth: 1080 });
  600. // 打印类型 1江山 2贝斯特
  601. if (type == 1) {
  602. contents.map((content) => {
  603. //江山打印格式
  604. //上
  605. const printContent_l1 = `单号:${content.order_no}`;
  606. printparamsJsonArray.push({
  607. PTK_DrawText_TrueType:
  608. "100,40,60,0,微软雅黑,1,700,0,0,0," + printContent_l1,
  609. });
  610. const printContent_l1_2 = `型号:${content.product_title}`;
  611. printparamsJsonArray.push({
  612. PTK_DrawText_TrueType:
  613. "600,40,60,0,微软雅黑,1,700,0,0,0," + printContent_l1_2,
  614. });
  615. const printContent_l2 = `尺寸:${content.measure}`;
  616. printparamsJsonArray.push({
  617. PTK_DrawText_TrueType:
  618. "100,110,60,0,微软雅黑,1,700,0,0,0," + printContent_l2,
  619. });
  620. const printContent_l2_2 = `工艺:${content.process_title}`;
  621. printparamsJsonArray.push({
  622. PTK_DrawText_TrueType:
  623. "600,110,60,0,微软雅黑,1,700,0,0,0," + printContent_l2_2,
  624. });
  625. const printContent_l3 = `颜色:${content.color_title}`;
  626. printparamsJsonArray.push({
  627. PTK_DrawText_TrueType:
  628. "100,250,60,0,微软雅黑,1,700,0,0,0," + printContent_l3,
  629. });
  630. const printContent_l3_2 = `部件:${content.part_title}`;
  631. printparamsJsonArray.push({
  632. PTK_DrawText_TrueType:
  633. "100,180,60,0,微软雅黑,1,700,0,0,0," + printContent_l3_2,
  634. });
  635. //下
  636. printparamsJsonArray.push({
  637. PTK_DrawText_TrueType:
  638. "100,435,45,0,微软雅黑,1,700,0,0,0," + printContent_l1,
  639. });
  640. printparamsJsonArray.push({
  641. PTK_DrawText_TrueType:
  642. "600,435,45,0,微软雅黑,1,700,0,0,0," + printContent_l1_2,
  643. });
  644. printparamsJsonArray.push({
  645. PTK_DrawText_TrueType:
  646. "100,480,45,0,微软雅黑,1,700,0,0,0," + printContent_l2,
  647. });
  648. printparamsJsonArray.push({
  649. PTK_DrawText_TrueType:
  650. "600,480,45,0,微软雅黑,1,700,0,0,0," + printContent_l2_2,
  651. });
  652. printparamsJsonArray.push({
  653. PTK_DrawText_TrueType:
  654. "100,525,45,0,微软雅黑,1,700,0,0,0," + printContent_l3,
  655. });
  656. printparamsJsonArray.push({
  657. PTK_DrawText_TrueType:
  658. "600,525,45,0,微软雅黑,1,700,0,0,0," + printContent_l3_2,
  659. });
  660. printparamsJsonArray.push({
  661. PTK_RWRFIDLabel:
  662. "1,0,0," + content.chip.length / 2 + ",1," + content.chip,
  663. });
  664. printparamsJsonArray.push({ PTK_PrintLabel: "1,1" });
  665. });
  666. } else {
  667. contents.map((content) => {
  668. //贝斯特打印格式
  669. //上
  670. const printContent_l1 = `项目:${content.client_name}`;
  671. printparamsJsonArray.push({
  672. PTK_DrawText_TrueType:
  673. "150,40,60,0,微软雅黑,1,700,0,0,0," + printContent_l1,
  674. });
  675. const printContent_l1_2 = `区域:${
  676. content.house ? content.house + "-" : ""
  677. }${content.layer ? content.layer : ""}${
  678. content.position ? content.position : ""
  679. }`;
  680. printparamsJsonArray.push({
  681. PTK_DrawText_TrueType:
  682. "650,40,60,0,微软雅黑,1,700,0,0,0," + printContent_l1_2,
  683. });
  684. const printContent_l2 = `房号:${content.number_detail}`;
  685. printparamsJsonArray.push({
  686. PTK_DrawText_TrueType:
  687. "150,110,60,0,微软雅黑,1,700,0,0,0," + printContent_l2,
  688. });
  689. const printContent_l2_2 = `产品:${content.product_title}`;
  690. printparamsJsonArray.push({
  691. PTK_DrawText_TrueType:
  692. "650,110,60,0,微软雅黑,1,700,0,0,0," + printContent_l2_2,
  693. });
  694. const printContent_l3 = `图号:${content.url_number}`;
  695. printparamsJsonArray.push({
  696. PTK_DrawText_TrueType:
  697. "150,180,60,0,微软雅黑,1,700,0,0,0," + printContent_l3,
  698. });
  699. const printContent_l3_2 = `部件:${content.part_title}`;
  700. printparamsJsonArray.push({
  701. PTK_DrawText_TrueType:
  702. "650,180,60,0,微软雅黑,1,700,0,0,0," + printContent_l3_2,
  703. });
  704. const printContent_l4 = `木皮:${content.color_title}`;
  705. printparamsJsonArray.push({
  706. PTK_DrawText_TrueType:
  707. "150,320,60,0,微软雅黑,1,700,0,0,0," + printContent_l4,
  708. });
  709. const printContent_l4_2 = `尺寸:${content.measure}`;
  710. printparamsJsonArray.push({
  711. PTK_DrawText_TrueType:
  712. "150,250,60,0,微软雅黑,1,700,0,0,0," + printContent_l4_2,
  713. });
  714. let space_str = '\u0000'
  715. let printContent_l5_data=this.hexCharCodeToStr(content.chip);
  716. printContent_l5_data = printContent_l5_data.replace(space_str,'')
  717. const printContent_l5 = `芯片编码:${printContent_l5_data}`;
  718. // console.log(printContent_l5_data)
  719. printparamsJsonArray.push({
  720. PTK_DrawText_TrueTypeEx:
  721. "970,330,25,0,微软雅黑,1,700,0,0,0,10,0,0,0," + printContent_l5,
  722. });
  723. //下
  724. printparamsJsonArray.push({
  725. PTK_DrawText_TrueType:
  726. "150,435,45,0,微软雅黑,1,700,0,0,0," + printContent_l1,
  727. });
  728. printparamsJsonArray.push({
  729. PTK_DrawText_TrueType:
  730. "650,435,45,0,微软雅黑,1,700,0,0,0," + printContent_l1_2,
  731. });
  732. printparamsJsonArray.push({
  733. PTK_DrawText_TrueType:
  734. "150,480,45,0,微软雅黑,1,700,0,0,0," + printContent_l2,
  735. });
  736. printparamsJsonArray.push({
  737. PTK_DrawText_TrueType:
  738. "650,480,45,0,微软雅黑,1,700,0,0,0," + printContent_l2_2,
  739. });
  740. printparamsJsonArray.push({
  741. PTK_DrawText_TrueType:
  742. "150,525,45,0,微软雅黑,1,700,0,0,0," + printContent_l3,
  743. });
  744. printparamsJsonArray.push({
  745. PTK_DrawText_TrueType:
  746. "650,525,45,0,微软雅黑,1,700,0,0,0," + printContent_l3_2,
  747. });
  748. printparamsJsonArray.push({
  749. PTK_DrawText_TrueType:
  750. "150,570,45,0,微软雅黑,1,700,0,0,0," + printContent_l4,
  751. });
  752. printparamsJsonArray.push({
  753. PTK_DrawText_TrueType:
  754. "650,570,45,0,微软雅黑,1,700,0,0,0," + printContent_l4_2,
  755. });
  756. printparamsJsonArray.push({
  757. PTK_DrawText_TrueTypeEx:
  758. "970,530,25,0,微软雅黑,1,700,0,0,0,10,0,0,0," + printContent_l5,
  759. });
  760. // 17,35 420
  761. printparamsJsonArray.push({
  762. PTK_RWRFIDLabel:
  763. "1,0,0," + content.chip.length / 2 + ",1," + content.chip,
  764. });
  765. printparamsJsonArray.push({ PTK_PrintLabel: "1,1" });
  766. });
  767. }
  768. printparamsJsonArray.push({ PTK_CloseUSBPort: "" });
  769. data.printparams = printparamsJsonArray;
  770. let sub_data = JSON.parse(JSON.stringify(data));
  771. sub_data.printparams = JSON.stringify(sub_data.printparams);
  772. let _this = this;
  773. $.ajax({
  774. type: "post",
  775. url,
  776. data: sub_data,
  777. dataType: "json",
  778. timeout: 5000,
  779. success: function(result) {
  780. // _this.getChipDetail();
  781. if (result.retval == "0") {
  782. _this.$Message.success("发送成功");
  783. } else {
  784. _this.$Message.error("发送失败,返回结果:" + result.msg);
  785. }
  786. },
  787. error: function() {
  788. // _this.getChipDetail();
  789. },
  790. });
  791. });
  792. },
  793. print_chip(row,type){
  794. if(type){
  795. this.axios.post('/api/station_print',{matching_type:1,id:row.id,num:1,order_no:this.$route.query.project_number,product_id:row.product_id,rows:[],type:1}).then(resp=>{
  796. if(resp.code == 200){
  797. this.axios.get("/api/get_print_local_url").then((res) => {
  798. if (res.code == 200) {
  799. if (res.data.state) {
  800. this.handlePrintChipsUsb(resp.data, res.data.type);
  801. }
  802. }
  803. });
  804. } })
  805. }else{
  806. this.matchedSelectedList.forEach(v=>{
  807. this.axios.post('/api/station_print',{matching_type:1,id:v.id,num:1,order_no:this.$route.query.project_number,product_id:v.product_id,rows:[],type:1}).then(resp=>{
  808. if(resp.code == 200){
  809. this.axios.get("/api/get_print_local_url").then((res) => {
  810. if (res.code == 200) {
  811. if (res.data.state) {
  812. this.handlePrintChipsUsb(resp.data, res.data.type);
  813. }
  814. }
  815. });
  816. } })
  817. })
  818. }
  819. },
  820. important_del(){
  821. this.axios.post('/api/delete_cut_order_product',{id:[...this.delList],...this.delData}).then(res=>{
  822. if(res.code == 200){
  823. this.$Message.success(res.msg);
  824. this.delList = [];
  825. this.isMatchedSelectAll=false;
  826. this.initData();
  827. }
  828. })
  829. },
  830. handleMatchedSelectAll(){
  831. this.isMatchedSelectAll = !this.isMatchedSelectAll;
  832. this.matchedSelectedList = [];
  833. this.matchedList.map((v) => {
  834. v.isSelect = JSON.parse(JSON.stringify(this.isMatchedSelectAll));
  835. this.handleMatchedSelect(v,this.isMatchedSelectAll);
  836. });
  837. // this.$nextTick(()=>{this.matchedDetailList.forEach(v=>{
  838. // v._checked = true;
  839. // })})
  840. if(!this.isMatchedSelectAll){
  841. let ids = [];
  842. this.matchedList.forEach(element => {
  843. ids.push(element.id);
  844. });
  845. for(let i =0;i<this.selectArr.length;i++){
  846. if(ids.indexOf(this.selectArr[i].id)>=0){
  847. this.selectArr.splice(i,1);
  848. i--;
  849. }
  850. }
  851. }else{
  852. let ids = [];
  853. this.selectArr.forEach(element => {
  854. ids.push(element.id);
  855. });
  856. this.matchedList.forEach(v=>{
  857. if(ids.indexOf(v.id)<0){
  858. this.selectArr.push(v)
  859. }
  860. })
  861. }
  862. },
  863. handleMatchedSelect(row, e) {
  864. row.isSelect = e;
  865. let flag = true;
  866. if(e){
  867. this.selectArr.push(row);
  868. this.axios.post('/api/change_match_detail',{layer:row.layer,order_no:this.$route.query.project_number,url_number:row.url_number}).then(res=>{
  869. if(row.isCurrenct){
  870. this.matchedDetailList = res.data.list.data;
  871. this.matchedDetailList.forEach(v=>{
  872. v._checked = true;
  873. })}
  874. this.selectAll(null,res.data.list.data);
  875. })
  876. }else{
  877. flag = false;
  878. this.selectArr.forEach((m,index)=>{
  879. if(m.id == row.id){
  880. this.selectArr.splice(index,1);
  881. }
  882. })
  883. this.axios.post('/api/change_match_detail',{layer:row.layer,order_no:this.$route.query.project_number,url_number:row.url_number}).then((res)=>{
  884. if(row.isCurrenct){
  885. this.matchedDetailList = res.data.list.data;
  886. }
  887. this.selectAllCancel(null,res.data.list.data);
  888. })
  889. }
  890. this.isMatchedSelectAll = flag;
  891. this.cut_order_product_ids = JSON.parse(JSON.stringify(this.matchedSelectedList));
  892. },
  893. MatchedSelect(row,e){
  894. row.del_isSelect = e;
  895. console.log(row);
  896. console.log(this.matchedList)
  897. this.delList = [];
  898. this.matchedList.forEach(v=>{
  899. if(v.del_isSelect){
  900. this.delList.push(v.id);
  901. }
  902. })
  903. },
  904. back() {
  905. this.$router.go(-1);
  906. },
  907. handleProcess() {
  908. this.process_control = true;
  909. console.log(this.cut_order_product_ids);
  910. this.axios({
  911. method: "post",
  912. url: "/api/bst_pull",
  913. data: {
  914. cut_order_product_ids: this.cut_order_product_ids,
  915. process_man: this.process_man,
  916. process_start_time: this.func.replaceDateNoHMS(
  917. this.process_start_time
  918. ),
  919. process_end_time: this.func.replaceDateNoHMS(this.process_end_time),
  920. },
  921. }).then((res) => {
  922. if (res.code == 200) {
  923. this.$Message.success(res.msg);
  924. this.processModal = false;
  925. this.matchedSelectedList = [];
  926. this.initData();
  927. }
  928. setTimeout(() => {
  929. this.process_control = false;
  930. }, 500);
  931. });
  932. },
  933. initData(row) {
  934. console.log(this.matchedList)
  935. this.axios
  936. .post("/api/change_match_list", {
  937. order_no:this.$route.query.project_number,
  938. ...row
  939. })
  940. .then((res) => {
  941. // this.matchedList = [];
  942. res.data.list.map((v) => {
  943. v.isCurrenct = false;
  944. });
  945. this.urlMatchedList = res.data.url_number;
  946. this.productMatchedList = res.data.product_list;
  947. this.layerList = res.data.layer;
  948. this.matchedList = res.data.list;
  949. this.matchedList.forEach((v,index)=>{
  950. this.selectArr.forEach(m=>{
  951. if(v.url_number===m.url_number){
  952. if(v.layer===m.layer){
  953. this.matchedList[index].isSelect = true;
  954. console.log(5555555)
  955. }
  956. }
  957. })
  958. })
  959. });
  960. },
  961. handleHiddenMatchedDetail(row) {
  962. if (row.isHidden) {
  963. row.isHidden = !row.isHidden;
  964. } else {
  965. row.isHidden = true;
  966. }
  967. this.$forceUpdate();
  968. },
  969. handleShowCurrencyMatched(row,index) {
  970. if (row.isCurrenct) {
  971. this.selectIndex = '';
  972. row.isCurrenct = !row.isCurrenct;
  973. } else {
  974. this.matchedInfoDetail={
  975. compose_name:[],
  976. sort:[],
  977. parts_id:[],
  978. number:[]
  979. };
  980. this.selectIndex = index;
  981. this.matchedList.map((v) => (v.isCurrenct = false));
  982. row.isCurrenct = true;
  983. }
  984. this.getMatchedDetailList(row);
  985. },
  986. getMatchedDetailList(row,arr) {
  987. row.isCurrenct &&
  988. this.axios
  989. .post("/api/change_match_detail", {
  990. layer: row.layer,
  991. url_number:row.url_number,
  992. order_no:this.$route.query.project_number,
  993. ...arr
  994. })
  995. .then((res) => {
  996. this.regionMatchedList = res.data.region;
  997. this.sortList = res.data.sort_list;
  998. this.compose_name_list = res.data.compose_name_list;
  999. this.numberMatchedList = res.data.house_list;
  1000. this.partNameMatchedList = res.data.part_list;
  1001. this.matchedDetailList = res.data.list.data;
  1002. if(row.isSelect){
  1003. this.matchedDetailList.forEach(v=>{
  1004. v._checked = true;
  1005. })
  1006. }else{
  1007. this.matchedDetailList.forEach(v=>{
  1008. this.matchedSelectedList.forEach(m=>{
  1009. if(v.id==m.id){
  1010. v._checked=true;
  1011. }
  1012. })
  1013. })
  1014. }
  1015. });
  1016. },
  1017. },
  1018. // 监听属性 类似于data概念
  1019. computed: {},
  1020. // 监控data中的数据变化
  1021. watch: {},
  1022. beforeCreate() {}, // 生命周期 - 创建之前
  1023. beforeMount() {}, // 生命周期 - 挂载之前
  1024. beforeUpdate() {}, // 生命周期 - 更新之前
  1025. updated() {}, // 生命周期 - 更新之后
  1026. beforeDestroy() {}, // 生命周期 - 销毁之前
  1027. destroyed() {}, // 生命周期 - 销毁完成
  1028. activated() {}, // 如果页面有keep-alive缓存功能,这个函数会触发
  1029. };
  1030. </script>
  1031. <style lang="scss" scoped>
  1032. .context-tabs {
  1033. position: relative;
  1034. max-height: 650px;
  1035. overflow: hidden;
  1036. overflow-y: auto;
  1037. padding: 15px;
  1038. margin: 10px;
  1039. margin-bottom: 30px;
  1040. border-radius: 5px;
  1041. box-shadow: 1px 1px 5px 1px #999;
  1042. }
  1043. .matched-block {
  1044. padding: 15px;
  1045. margin-bottom: 30px;
  1046. background-color: #e9ecef;
  1047. border-radius: 5px;
  1048. }
  1049. .process_modal {
  1050. display: flex;
  1051. justify-content: center;
  1052. align-items: center;
  1053. padding: 10px;
  1054. }
  1055. /deep/.del_check .ivu-checkbox .ivu-checkbox-inner{
  1056. border-radius: 50%;
  1057. }
  1058. </style>