sampleTrack.vue 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190
  1. <!--样品跟踪界面-->
  2. <template>
  3. <div class="examination">
  4. <div class="common-head-search">
  5. <el-form :inline="true">
  6. <el-form-item label="样品类型">
  7. <el-select
  8. v-model="search.sampleTypeCode"
  9. clearable
  10. filterable
  11. collapse-tags
  12. size="small"
  13. style="width: 200px"
  14. placeholder="请选择样品类型"
  15. >
  16. <el-option
  17. v-for="item in sampleTypeNameType"
  18. :key="item.baseName"
  19. :label="item.baseName"
  20. :value="item.baseCode"
  21. >
  22. </el-option>
  23. </el-select>
  24. </el-form-item>
  25. <el-form-item label="委托编号">
  26. <el-input
  27. v-model="search.carNo"
  28. @keyup.enter.native="searchData()"
  29. size="small"
  30. placeholder="请输入委托编号"
  31. style="width: 200px"
  32. ></el-input>
  33. </el-form-item>
  34. <el-form-item label="中心编号">
  35. <el-input
  36. v-model="search.sampleNo"
  37. @keyup.enter.native="searchData()"
  38. size="small"
  39. placeholder="请输入中心编号"
  40. style="width: 200px"
  41. ></el-input>
  42. </el-form-item>
  43. <el-form-item label="物料名称">
  44. <el-input
  45. v-model="search.matName"
  46. @keyup.enter.native="searchData()"
  47. size="small"
  48. placeholder="请输入物料名称"
  49. style="width: 200px"
  50. ></el-input>
  51. </el-form-item>
  52. <el-form-item label="任务日期">
  53. <el-date-picker v-model="search.entrTime[0]" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date"
  54. placeholder="开始日期" size="mini" style="width: 140px">
  55. </el-date-picker>
  56. <span>至</span>
  57. <el-date-picker v-model="search.entrTime[1]" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date"
  58. placeholder="结束日期" size="mini" style="width: 140px">
  59. </el-date-picker>
  60. <!-- <el-date-picker
  61. v-model="search.entrTime"
  62. type="daterange"
  63. range-separator="至"
  64. start-placeholder="开始日期"
  65. end-placeholder="结束日期"
  66. size="small"
  67. style="width: 300px"
  68. format="yyyy-MM-dd"
  69. value-format="yyyy-MM-dd"
  70. >
  71. </el-date-picker> -->
  72. </el-form-item>
  73. <el-form-item>
  74. <el-button
  75. icon="el-icon-search"
  76. type="goon"
  77. size="mini"
  78. @click="searchData"
  79. >查询</el-button
  80. >
  81. <el-button
  82. icon="el-icon-refresh"
  83. type="info"
  84. plain
  85. size="mini"
  86. @click="reset"
  87. >重置</el-button
  88. >
  89. </el-form-item>
  90. </el-form>
  91. </div>
  92. <el-row>
  93. <el-col :span="12">
  94. <div class="common-title-div">
  95. <div class="common-title-name">
  96. <img
  97. style="width: 25px; height: 25px"
  98. src="../../../../assets/img/imgScreen/logo.png"
  99. />
  100. 样品信息
  101. </div>
  102. </div>
  103. <div class="common-table-div" style="margin-bottom: 0; margin-top: 0">
  104. <el-table
  105. v-loading="tableLoading1"
  106. ref="dataTable"
  107. border
  108. :height="tableTop"
  109. highlight-current-row
  110. @selection-change="handleSelectionChange"
  111. @cell-click="searchFollow"
  112. :data="tableData1"
  113. :row-class-name="tableRowClassName"
  114. :icore-filter-flag="icoreFilterFlag"
  115. :header-cell-style="tableHeaderCellStyle"
  116. :summary-method="getSummaries2"
  117. show-summary
  118. >
  119. <el-table-column
  120. type="index"
  121. label="NO"
  122. fixed="left"
  123. align="center"
  124. ></el-table-column>
  125. <el-table-column
  126. :show-overflow-tooltip="true"
  127. sortable
  128. min-width="80px"
  129. prop="validFlagName"
  130. label="数据状态"
  131. align="center"
  132. ></el-table-column>
  133. <el-table-column
  134. :show-overflow-tooltip="true"
  135. sortable
  136. min-width="100px"
  137. prop="carNo"
  138. label="委托编号"
  139. align="center"
  140. style="color: blue"
  141. ></el-table-column>
  142. <el-table-column
  143. :show-overflow-tooltip="true"
  144. sortable
  145. min-width="140px"
  146. prop="sampleNo"
  147. label="中心编号"
  148. align="center"
  149. ></el-table-column>
  150. <el-table-column
  151. :show-overflow-tooltip="true"
  152. sortable
  153. min-width="140px"
  154. prop="matName"
  155. label="样品名称"
  156. align="center"
  157. ></el-table-column>
  158. <el-table-column
  159. :show-overflow-tooltip="true"
  160. sortable
  161. min-width="100px"
  162. prop="sampleTypeName"
  163. label="样品类型"
  164. align="center"
  165. ></el-table-column>
  166. <el-table-column
  167. :show-overflow-tooltip="true"
  168. sortable
  169. min-width="100px"
  170. prop="smpDeliName"
  171. label="取样频次"
  172. align="center"
  173. ></el-table-column>
  174. <el-table-column
  175. :show-overflow-tooltip="true"
  176. sortable
  177. min-width="100px"
  178. prop="testTypeName"
  179. label="检验类型"
  180. align="center"
  181. ></el-table-column>
  182. <el-table-column
  183. :show-overflow-tooltip="true"
  184. sortable
  185. min-width="210px"
  186. prop="id"
  187. label="任务编号"
  188. align="center"
  189. ></el-table-column>
  190. <el-table-column
  191. :show-overflow-tooltip="true"
  192. sortable
  193. min-width="210px"
  194. prop="entrId"
  195. label="委托主键"
  196. align="center"
  197. ></el-table-column>
  198. <el-table-column
  199. :show-overflow-tooltip="true"
  200. sortable
  201. min-width="80px"
  202. prop="entrTypeName"
  203. label="委托类型"
  204. align="center"
  205. ></el-table-column>
  206. <el-table-column
  207. sortable
  208. :show-overflow-tooltip="true"
  209. min-width="100px"
  210. prop="createMan"
  211. label="创建人"
  212. align="center"
  213. ></el-table-column>
  214. <el-table-column
  215. sortable
  216. :show-overflow-tooltip="true"
  217. min-width="160px"
  218. prop="createTime"
  219. label="创建时间"
  220. align="center"
  221. ></el-table-column>
  222. <el-table-column
  223. sortable
  224. :show-overflow-tooltip="true"
  225. min-width="100px"
  226. prop="updateMan"
  227. label="修改人"
  228. align="center"
  229. ></el-table-column>
  230. <el-table-column
  231. sortable
  232. :show-overflow-tooltip="true"
  233. min-width="160px"
  234. prop="updateTime"
  235. label="修改时间"
  236. align="center"
  237. ></el-table-column>
  238. <el-table-column
  239. sortable
  240. :show-overflow-tooltip="true"
  241. min-width="100px"
  242. prop="memo"
  243. label="备注"
  244. align="center"
  245. ></el-table-column>
  246. </el-table>
  247. </div>
  248. <!-- 分页一 -->
  249. <div class="common-foot-style">
  250. <el-pagination
  251. @size-change="pageSizeChange"
  252. @current-change="pageCurrentChange"
  253. :current-page="pageIndex"
  254. :page-sizes="[100, 300, 500, 1000, 1500]"
  255. :page-size="pageSize"
  256. layout="total, sizes, prev, pager, next, jumper"
  257. :total="total"
  258. background
  259. >
  260. </el-pagination>
  261. </div>
  262. </el-col>
  263. <el-col :span="12">
  264. <div style="display: flex; flex-direction: column">
  265. <div style="flex: 1">
  266. <div class="common-title-div">
  267. <div class="common-title-name">
  268. <img
  269. style="width: 25px; height: 25px"
  270. src="../../../../assets/img/imgScreen/logo.png"
  271. />
  272. 样品跟踪
  273. </div>
  274. <div>
  275. <el-button
  276. icon="el-icon-circle-close"
  277. type="danger"
  278. :loading="buttonLoading3"
  279. size="mini"
  280. v-privilege="activeMenu + 'disableDep'"
  281. @click="deleteData2"
  282. >停用</el-button
  283. >
  284. <el-button
  285. size="mini"
  286. type="goon"
  287. icon="el-icon-remove-outline"
  288. :loading="buttonLoading4"
  289. v-privilege="activeMenu + 'effectivityDep'"
  290. @click="recoverData2"
  291. >启用</el-button
  292. >
  293. </div>
  294. </div>
  295. <div
  296. class="common-table-div"
  297. style="margin-bottom: 0; margin-top: 0"
  298. >
  299. <el-table
  300. v-loading="tableLoading2"
  301. ref="dataTable2"
  302. border
  303. :height="tableBot"
  304. highlight-current-row
  305. @selection-change="handleSelectionChange2"
  306. :data="tableData2"
  307. @cell-click="clickTwoTable"
  308. :row-class-name="tableRowClassName2"
  309. :icore-filter-flag="icoreFilterFlag"
  310. :header-cell-style="tableHeaderCellStyle"
  311. :summary-method="getSummaries2"
  312. show-summary
  313. >
  314. <el-table-column
  315. type="index"
  316. label="NO"
  317. align="center"
  318. fixed="left"
  319. ></el-table-column>
  320. <el-table-column
  321. :show-overflow-tooltip="true"
  322. sortable
  323. min-width="100px"
  324. prop="stateFlagName"
  325. label="状态"
  326. align="center"
  327. ></el-table-column>
  328. <el-table-column
  329. :show-overflow-tooltip="true"
  330. sortable
  331. min-width="100px"
  332. prop="validFlagName"
  333. label="数据状态"
  334. align="center"
  335. ></el-table-column>
  336. <el-table-column
  337. :show-overflow-tooltip="true"
  338. sortable
  339. min-width="200px"
  340. prop="testItemName"
  341. label="任务名称"
  342. align="center"
  343. ></el-table-column>
  344. <el-table-column
  345. :show-overflow-tooltip="true"
  346. sortable
  347. min-width="200px"
  348. prop="returnItem"
  349. label="报出项"
  350. align="center"
  351. ></el-table-column>
  352. <el-table-column
  353. :show-overflow-tooltip="true"
  354. sortable
  355. min-width="100px"
  356. prop="itemTypeName"
  357. label="任务类型"
  358. align="center"
  359. ></el-table-column>
  360. <el-table-column
  361. sortable
  362. :show-overflow-tooltip="true"
  363. min-width="100px"
  364. prop="optMan"
  365. label="任务领用人"
  366. align="center"
  367. ></el-table-column>
  368. <el-table-column
  369. sortable
  370. :show-overflow-tooltip="true"
  371. min-width="100px"
  372. prop="checkMan"
  373. label="任务提交人"
  374. align="center"
  375. ></el-table-column>
  376. <el-table-column
  377. sortable
  378. :show-overflow-tooltip="true"
  379. min-width="100px"
  380. prop="checkTime"
  381. label="任务提交时间"
  382. align="center"
  383. ></el-table-column>
  384. <el-table-column
  385. sortable
  386. :show-overflow-tooltip="true"
  387. min-width="100px"
  388. prop="auditMan"
  389. label="二审审核人"
  390. align="center"
  391. ></el-table-column>
  392. <el-table-column
  393. sortable
  394. :show-overflow-tooltip="true"
  395. min-width="100px"
  396. prop="auditTime"
  397. label="二审审核时间"
  398. align="center"
  399. ></el-table-column>
  400. <el-table-column
  401. sortable
  402. :show-overflow-tooltip="true"
  403. min-width="100px"
  404. prop="apprMan"
  405. label="三审审核人"
  406. align="center"
  407. ></el-table-column>
  408. <el-table-column
  409. sortable
  410. :show-overflow-tooltip="true"
  411. min-width="100px"
  412. prop="apprTime"
  413. label="三审审核时间"
  414. align="center"
  415. ></el-table-column>
  416. <el-table-column
  417. :show-overflow-tooltip="true"
  418. sortable
  419. min-width="80px"
  420. prop="doOrder"
  421. label="执行顺序"
  422. align="center"
  423. ></el-table-column>
  424. <el-table-column
  425. sortable
  426. :show-overflow-tooltip="true"
  427. min-width="180px"
  428. prop="createMan"
  429. label="任务创建人"
  430. align="center"
  431. ></el-table-column>
  432. <el-table-column
  433. sortable
  434. :show-overflow-tooltip="true"
  435. min-width="100px"
  436. prop="createTime"
  437. label="创建时间"
  438. align="center"
  439. ></el-table-column>
  440. <el-table-column
  441. :show-overflow-tooltip="true"
  442. sortable
  443. min-width="100px"
  444. prop="memo"
  445. label="备注"
  446. align="center"
  447. ></el-table-column>
  448. </el-table>
  449. </div>
  450. </div>
  451. <!-- <div style="flex: 1">
  452. <div class="common-title-div">
  453. <div class="common-title-name">
  454. <img
  455. style="width: 25px; height: 25px"
  456. src="../../../../assets/img/imgScreen/logo.png"
  457. />
  458. 样品台账
  459. </div>
  460. </div>
  461. <div
  462. class="common-table-div"
  463. style="margin-bottom: 0; margin-top: 0"
  464. >
  465. <el-table
  466. v-loading="tableLoading3"
  467. ref="dataTable3"
  468. border
  469. :height="tableBot / 2 - 25"
  470. highlight-current-row
  471. :data="tableData3"
  472. :row-class-name="tableRowClassName2"
  473. :icore-filter-flag="icoreFilterFlag"
  474. :header-cell-style="tableHeaderCellStyle"
  475. :summary-method="getSummaries2"
  476. show-summary
  477. >
  478. <el-table-column
  479. type="index"
  480. label="NO"
  481. align="center"
  482. fixed="left"
  483. ></el-table-column>
  484. <el-table-column
  485. sortable
  486. show-overflow-tooltip
  487. align="center"
  488. width="160"
  489. prop="CAR_NO"
  490. label="委托编号"
  491. ></el-table-column>
  492. <el-table-column
  493. sortable
  494. show-overflow-tooltip
  495. align="center"
  496. width="120"
  497. prop="SAMPLE_NO"
  498. label="中心编号"
  499. ></el-table-column>
  500. <el-table-column
  501. sortable
  502. show-overflow-tooltip
  503. align="center"
  504. width="120"
  505. prop="MAT_NAME"
  506. label="物料名称"
  507. ></el-table-column>
  508. <el-table-column
  509. sortable
  510. show-overflow-tooltip
  511. align="center"
  512. width="120"
  513. prop="MEMO"
  514. label="委托备注"
  515. ></el-table-column>
  516. <el-table-column
  517. v-for="col in cols"
  518. :prop="col.ANLY_ITEM_NO"
  519. show-overflow-tooltip
  520. align="center"
  521. :key="col.ANLY_ITEM_NO"
  522. :label="col.ANLY_ITEM_NAME"
  523. >
  524. <template slot-scope="scope">
  525. <span
  526. :style="redStyle(scope.row.SA_ID, col.ANLY_ITEM_NO)"
  527. >{{ scope.row[col.ANLY_ITEM_NO] }}</span
  528. >
  529. </template>
  530. </el-table-column>
  531. <el-table-column
  532. sortable
  533. show-overflow-tooltip
  534. align="center"
  535. width="120"
  536. prop="UPDATE_TIME"
  537. label="开始时间"
  538. ></el-table-column>
  539. <el-table-column
  540. sortable
  541. show-overflow-tooltip
  542. align="center"
  543. width="120"
  544. prop="CREATE_TIME"
  545. label="结束时间"
  546. ></el-table-column>
  547. </el-table>
  548. </div>
  549. </div> -->
  550. </div>
  551. </el-col>
  552. </el-row>
  553. <div class="no-content-wrap" v-if="isShowNoContent">
  554. <img
  555. class="no-content-img"
  556. src="../../../../assets/img/no-content.png"
  557. alt=""
  558. />
  559. <p class="no-content-text">
  560. 未查询到样品,请确认样品已完成制样并确认委托
  561. </p>
  562. <el-button type="goon" @click="hideNoContent">返回</el-button>
  563. </div>
  564. </div>
  565. </template>
  566. <script>
  567. import { getCookie, formatDate, isStartEndDate } from "@/utils/util.js";
  568. import { cookieUserId, cookieUserName } from "@/config/config.js";
  569. let userName = getCookie(cookieUserName);
  570. let userId = getCookie(cookieUserId);
  571. export default {
  572. data() {
  573. return {
  574. icoreFilterFlag: true,
  575. taskId: "",
  576. testItemNo: "",
  577. search: {
  578. mode: "",
  579. carNo: "",
  580. entrTime: [],
  581. sampleTypeCode: "",
  582. matName: "",
  583. sampleNo: "",
  584. markNo: "",
  585. encryNo: "",
  586. entrId: "",
  587. },
  588. tableData1: [],
  589. tableData2: [],
  590. tableData3: [],
  591. sampleTypeNameType: [],
  592. tableLoading1: false,
  593. tableLoading2: false,
  594. tableLoading3: false,
  595. buttonLoading1: false,
  596. buttonLoading2: false,
  597. buttonLoading3: false,
  598. buttonLoading4: false,
  599. clickFlag: {},
  600. selectMain: [],
  601. selectDep: [],
  602. tableTop: 0,
  603. tableBot: 0,
  604. pageIndex: 1,
  605. pageSize: 500,
  606. total: 0,
  607. multipleSelection4: [],
  608. activeMenu: "",
  609. cols: ["无"],
  610. redDataCk: [], //显红的数据
  611. isSearch: false,
  612. isShowNoContent: false,
  613. };
  614. },
  615. created() {
  616. this.tableTop =
  617. window.innerHeight - 320 < 249 ? 249 : window.innerHeight - 320;
  618. this.tableBot =
  619. window.innerHeight - 320 < 249 ? 249 : window.innerHeight - 320;
  620. let timestamp = new Date().getTime() - 7 * 24 * 60 * 60 * 1000; // 默认前一周
  621. this.search.entrTime = [
  622. this.getYNM(new Date(timestamp)),
  623. this.getYNM(new Date()),
  624. ];
  625. // this.search.entrTime= [this.getYNM(new Date()), this.getYNM(new Date())]
  626. this.activeMenu = window.top.localStorage.getItem("activeMenu");
  627. this.axios
  628. .post(
  629. "pass/baseManagement/v1/limsbaseinfos/queryBaseInfoByBaseCode",
  630. { validFlag: 1, baseCode: 4801 },
  631. { individualType: "json" }
  632. )
  633. .then((res) => {
  634. this.sampleTypeNameType = res.data;
  635. console.log("物料类型信息", this.sampleTypeNameType);
  636. });
  637. },
  638. mounted() {
  639. this.dataMain();
  640. this.addScreen();
  641. this.addScreen2();
  642. // this.addScreen3();
  643. },
  644. methods: {
  645. getYNM(date) {
  646. let year = date.getFullYear().toString();
  647. let month = date.getMonth() + 1;
  648. let day = date.getDate();
  649. month = month < 10 ? "0" + month : month;
  650. day = day < 10 ? "0" + day : day;
  651. return `${year}-${month}-${day}`;
  652. },
  653. getSummaries2(param) {
  654. const { columns, data } = param;
  655. const sums = [];
  656. columns.forEach((column, index) => {
  657. if (index === 0) {
  658. sums[index] = "总计";
  659. }
  660. if (index === 1) {
  661. sums[index] = data.length;
  662. } else if (column.property === "quantity") {
  663. let val = 0;
  664. for (let i in data) {
  665. val = this.floatComputed(
  666. data[i].quantity ? data[i].quantity : 0,
  667. val,
  668. "+"
  669. );
  670. }
  671. sums[index] = val;
  672. } else if (column.property === "factweight") {
  673. let val = 0;
  674. for (let i in data) {
  675. val = this.floatComputed(
  676. data[i].factweight ? data[i].factweight : 0,
  677. val,
  678. "+"
  679. );
  680. }
  681. sums[index] = val;
  682. }
  683. });
  684. return sums;
  685. },
  686. // 停用
  687. deleteData() {
  688. if (this.selectMain.length < 1) {
  689. this.$message.warning("请勾选您要停用的数据");
  690. return;
  691. }
  692. this.buttonLoading1 = true;
  693. let tempArr = [];
  694. this.selectMain.map((item) => {
  695. tempArr.push(item.id);
  696. });
  697. this.axios
  698. .post("pass/testManagement/v1/limstesttasks/invalid", tempArr, {
  699. individualType: "json",
  700. })
  701. .then((res) => {
  702. if (res.code == 0 || res.code == 200) {
  703. this.$message.success(res.message);
  704. this.searchData();
  705. } else {
  706. this.$message.error(res.message);
  707. }
  708. this.buttonLoading1 = false;
  709. })
  710. .catch((err) => {
  711. this.buttonLoading1 = false;
  712. this.$message.error(err.message);
  713. });
  714. },
  715. // 恢复
  716. recoverData() {
  717. if (this.selectMain.length < 1) {
  718. this.$message.warning("请勾选您要启用的数据");
  719. return;
  720. }
  721. this.buttonLoading2 = true;
  722. let tempArr = [];
  723. this.selectMain.map((item) => {
  724. tempArr.push(item.id);
  725. });
  726. this.axios
  727. .post("pass/testManagement/v1/limstesttasks/valid", tempArr, {
  728. individualType: "json",
  729. })
  730. .then((res) => {
  731. if (res.code == 0 || res.code == 200) {
  732. this.$message.success(res.message);
  733. this.searchData();
  734. } else {
  735. this.$message.error(res.message);
  736. }
  737. this.buttonLoading2 = false;
  738. })
  739. .catch((err) => {
  740. this.buttonLoading2 = false;
  741. this.$message.error(err.message);
  742. });
  743. },
  744. // 查询
  745. searchData() {
  746. this.selectMain = [];
  747. this.pageIndex = 1;
  748. this.pageSize = 500;
  749. this.isSearch = true;
  750. this.dataMain();
  751. },
  752. //查询检验任务信息
  753. dataMain() {
  754. this.clickFlag = {};
  755. this.tableData2 = [];
  756. this.tableData3 = [];
  757. let startTime = "";
  758. let endTime = "";
  759. if (!this.search.entrTime) {
  760. startTime = "";
  761. endTime = "";
  762. } else {
  763. startTime = this.search.entrTime[0] + " 00:00:00";
  764. endTime = this.search.entrTime[1] + " 23:59:59";
  765. }
  766. let tempobj = {
  767. object: {
  768. matName: this.search.matName,
  769. carNo: this.search.carNo,
  770. sampleNo: this.search.sampleNo,
  771. markNo: this.search.markNo,
  772. encryNo: this.search.encryNo,
  773. entrId: this.search.entrId,
  774. sampleTypeCode: this.search.sampleTypeCode,
  775. },
  776. pageIndex: this.pageIndex,
  777. pageSize: this.pageSize,
  778. startTime: startTime,
  779. endTime: endTime,
  780. };
  781. this.tableLoading1 = true;
  782. this.axios
  783. .post(
  784. "pass/testManagement/v1/limstesttasks/queryLimsTestTasksInfo",
  785. tempobj,
  786. { individualType: "json" }
  787. )
  788. .then((res) => {
  789. if (res.code == 0 || res.code == 200) {
  790. this.tableData1 = res.data.list;
  791. this.total = res.data.total;
  792. if (this.isSearch && this.total === 0) {
  793. this.isShowNoContent = true;
  794. }
  795. this.isSearch = false;
  796. this.tableData1.forEach((item) => {
  797. item.validFlagName =
  798. item.validFlag == 0
  799. ? "无效"
  800. : item.validFlag == 1
  801. ? "有效"
  802. : "";
  803. // item.stateFlagName = item.stateFlag == 0 ? '编辑' : item.stateFlag == 1 ? '取样' : item.stateFlag == 2 ? '制样' : item.stateFlag == 3 ? '检验' : item.stateFlag == 4 ? '审核' : item.stateFlag == 5 ? '发布' : item.stateFlag == 6 ? '质保书' : ''
  804. });
  805. if (this.tableData1.length > 0) {
  806. this.$refs.dataTable.setCurrentRow(this.tableData1[0]);
  807. this.searchFollow(this.tableData1[0]);
  808. }
  809. } else {
  810. this.$message.error(res.message);
  811. }
  812. this.tableLoading1 = false;
  813. })
  814. .catch((e) => {
  815. this.tableLoading1 = false;
  816. this.$message.error(e.message);
  817. });
  818. },
  819. //点击检验任务信息表格数据,查询测试项目信息数据
  820. searchFollow(row) {
  821. this.tableData2 = [];
  822. this.tableData3 = [];
  823. this.clickFlag = row;
  824. if (!row.id) {
  825. return;
  826. }
  827. this.tableLoading2 = true;
  828. this.axios
  829. .post(
  830. "pass/testManagement/v1/limstesttaskds/queryLimsTestTaskDInfo?taskId=" +
  831. row.id,
  832. { individualType: "json" }
  833. )
  834. .then((res) => {
  835. if (res.code == 0 || res.code == 200) {
  836. this.tableData2 = res.data;
  837. if (this.tableData2.length > 0) {
  838. this.tableData2.forEach((item) => {
  839. // 报出项
  840. const filteredLsidList = item.lsidList.filter((lsidItem) => lsidItem.isReport === '1');
  841. if (filteredLsidList.length) {
  842. item.returnItem = filteredLsidList
  843. .map((item) => item.anlyItemName)
  844. .join(",");
  845. }
  846. item.validFlagName =
  847. item.validFlag == 0
  848. ? "无效"
  849. : item.validFlag == 1
  850. ? "有效"
  851. : "";
  852. item.isAutoName =
  853. item.isAuto == 0 ? "否" : item.isAuto == 1 ? "是" : "";
  854. if (
  855. item.testItemNo === "T0013" ||
  856. item.testItemNo === "T0014"
  857. ) {
  858. item.stateFlagName =
  859. item.stateFlag == 0
  860. ? "未生成"
  861. : item.stateFlag == 1
  862. ? "已生成"
  863. : item.stateFlag == 2
  864. ? "待审核"
  865. : item.stateFlag == 3
  866. ? "已审核"
  867. : "";
  868. } else {
  869. item.stateFlagName =
  870. item.stateFlag == 0
  871. ? "未生成"
  872. : item.stateFlag == 1
  873. ? "已生成"
  874. : item.stateFlag == 2
  875. ? "已领用"
  876. : item.stateFlag == 3
  877. ? "已提交"
  878. : item.stateFlag == 4
  879. ? "二审已审"
  880. : item.stateFlag == 5
  881. ? "三审已审"
  882. : "";
  883. }
  884. });
  885. this.$refs.dataTable2.setCurrentRow(this.tableData2[0]);
  886. this.clickTwoTable(this.tableData2[0]);
  887. }
  888. } else {
  889. this.$message.error(res.message);
  890. }
  891. this.tableLoading2 = false;
  892. })
  893. .catch((err) => {
  894. this.tableLoading2 = false;
  895. this.$message.error(err.message);
  896. });
  897. // this.tableLoading3 = true;
  898. // let obj = {
  899. // matName: row.matName, // 样品名称
  900. // sampleNo: row.sampleNo, // 中心编号
  901. // };
  902. // this.axios
  903. // .post(
  904. // "pass/baseManagement/v1/limssamplereleases/queryParameterMatName",
  905. // obj,
  906. // { individualType: "json" }
  907. // )
  908. // .then((res) => {
  909. // if (res.code == 0 || res.code == 200) {
  910. // const list = res.data;
  911. // if (list && list.length) {
  912. // let startTime = "";
  913. // let endTime = "";
  914. // if (!this.search.entrTime) {
  915. // startTime = "";
  916. // endTime = "";
  917. // } else {
  918. // startTime = this.search.entrTime[0];
  919. // endTime = this.search.entrTime[1];
  920. // }
  921. // let obj2 = {
  922. // sampleTypeCode: "",
  923. // sampleNo: row.sampleNo,
  924. // carNo: "",
  925. // pageIndex: 1,
  926. // pageSize: 100,
  927. // stateFlag: 1,
  928. // validFlag: 1,
  929. // startTime: startTime,
  930. // endTime: endTime,
  931. // matNo: list[0].MAT_NO,
  932. // };
  933. // this.axios
  934. // .post(
  935. // "pass/baseManagement/v1/limssamplereleases/queryParameter",
  936. // obj2,
  937. // {
  938. // individualType: "json",
  939. // }
  940. // )
  941. // .then((res) => {
  942. // if (res.code == 0 || res.code == 200) {
  943. // if (res.data.head[0] != null) {
  944. // this.cols = res.data.head;
  945. // } else {
  946. // this.cols = [];
  947. // }
  948. // this.tableData3 = res.data.badyData.list || [];
  949. // if (this.tableData3.length > 0) {
  950. // this.$refs.dataTable3.setCurrentRow(this.tableData3[0]);
  951. // this.redDataCk = res.data.redMap || {};
  952. // }
  953. // } else {
  954. // this.$message.error(res.message);
  955. // }
  956. // this.tableLoading3 = false;
  957. // })
  958. // .catch((err) => {
  959. // this.tableLoading3 = false;
  960. // this.$message.error(err.message);
  961. // });
  962. // } else {
  963. // this.tableLoading3 = false;
  964. // }
  965. // } else {
  966. // this.tableLoading3 = false;
  967. // this.$message.error(res.message);
  968. // }
  969. // })
  970. // .catch((err) => {
  971. // this.tableLoading3 = false;
  972. // this.$message.error(err.message);
  973. // });
  974. },
  975. //点击测试项目信息表格,查询分析项目信息
  976. clickTwoTable(row) {
  977. return;
  978. },
  979. // 重置
  980. reset() {
  981. this.search.matName = "";
  982. this.search.sampleTypeCode = "";
  983. this.search.sampleNo = "";
  984. this.search.carNo = "";
  985. this.search.markNo = "";
  986. this.search.encryNo = "";
  987. this.search.entrId = "";
  988. this.search.entrTime = [this.getYNM(new Date()), this.getYNM(new Date())];
  989. // this.searchData();
  990. },
  991. // 删除
  992. deleteData2() {
  993. if (this.selectDep.length < 1) {
  994. this.$message.warning("请勾选测试任务信息表中您要停用的数据");
  995. return;
  996. }
  997. let tempArr = [];
  998. this.selectDep.map((item) => {
  999. tempArr.push(item.id);
  1000. });
  1001. this.buttonLoading3 = true;
  1002. this.axios
  1003. .post("pass/testManagement/v1/limstesttaskds/invalid", tempArr, {
  1004. individualType: "json",
  1005. })
  1006. .then((res) => {
  1007. if (res.code == 0 || res.code == 200) {
  1008. this.$message.success(res.message);
  1009. this.searchFollow(this.clickFlag);
  1010. } else {
  1011. this.$message.error(res.message);
  1012. }
  1013. this.buttonLoading3 = false;
  1014. })
  1015. .catch((err) => {
  1016. this.buttonLoading3 = false;
  1017. this.$message.error(err.message);
  1018. });
  1019. },
  1020. // 取消
  1021. recoverData2() {
  1022. if (this.selectDep.length < 1) {
  1023. this.$message.warning("请勾选测试任务信息表中您要启用的数据");
  1024. return;
  1025. }
  1026. let tempArr = [];
  1027. this.selectDep.map((item) => {
  1028. tempArr.push(item.id);
  1029. });
  1030. this.buttonLoading4 = true;
  1031. this.axios
  1032. .post("pass/testManagement/v1/limstesttaskds/valid", tempArr, {
  1033. individualType: "json",
  1034. })
  1035. .then((res) => {
  1036. if (res.code == 0 || res.code == 200) {
  1037. this.$message.success(res.message);
  1038. this.searchFollow(this.clickFlag);
  1039. } else {
  1040. this.$message.error(res.message);
  1041. }
  1042. this.buttonLoading4 = false;
  1043. })
  1044. .catch((err) => {
  1045. this.buttonLoading4 = false;
  1046. this.$message.error(err.message);
  1047. });
  1048. },
  1049. pageSizeChange(size) {
  1050. this.pageIndex = 1;
  1051. this.pageSize = size;
  1052. this.dataMain();
  1053. },
  1054. pageCurrentChange(index) {
  1055. this.pageIndex = index;
  1056. this.dataMain();
  1057. },
  1058. //勾选主表数据
  1059. handleSelectionChange(val) {
  1060. this.selectMain = val;
  1061. },
  1062. handleSelectionChange2(val) {
  1063. this.selectDep = val;
  1064. },
  1065. addScreen() {
  1066. this.$nextTick(() => {
  1067. let ss = document.createElement("div");
  1068. ss.innerHTML = "筛选";
  1069. ss.style = "text-align: center;";
  1070. try {
  1071. this.$refs.dataTable.$el
  1072. .getElementsByClassName("el-table__fixed")[0]
  1073. .getElementsByTagName("td")[0]
  1074. .appendChild(ss);
  1075. } catch (e) {
  1076. console.log(e);
  1077. }
  1078. });
  1079. },
  1080. addScreen2() {
  1081. this.$nextTick(() => {
  1082. let ss = document.createElement("div");
  1083. ss.innerHTML = "筛选";
  1084. ss.style = "text-align: center;";
  1085. try {
  1086. this.$refs.dataTable2.$el
  1087. .getElementsByClassName("el-table__fixed")[0]
  1088. .getElementsByTagName("td")[0]
  1089. .appendChild(ss);
  1090. } catch (e) {
  1091. console.log(e);
  1092. }
  1093. });
  1094. },
  1095. addScreen3() {
  1096. this.$nextTick(() => {
  1097. let ss = document.createElement("div");
  1098. ss.innerHTML = "筛选";
  1099. ss.style = "text-align: center;";
  1100. try {
  1101. this.$refs.dataTable3.$el
  1102. .getElementsByClassName("el-table__fixed")[0]
  1103. .getElementsByTagName("td")[0]
  1104. .appendChild(ss);
  1105. } catch (e) {
  1106. console.log(e);
  1107. }
  1108. });
  1109. },
  1110. tableRowClassName({ row, column, rowIndex, columnIndex }) {
  1111. if (row.validFlag !== "1") {
  1112. return "error-row";
  1113. }
  1114. },
  1115. tableRowClassName2({ row, column, rowIndex, columnIndex }) {
  1116. if (row.validFlag !== "1") {
  1117. return "error-row";
  1118. }
  1119. return "";
  1120. },
  1121. // 表格上横线
  1122. tableHeaderCellStyle() {
  1123. return "color: rgb(255,255,255);border-bottom: 1px solid #DCDFE7;";
  1124. },
  1125. // selectCellStyle({row, column, rowIndex, columnIndex}){
  1126. // let cellStyle;
  1127. // if (row.stateFlag === '0'){
  1128. // cellStyle = 'color : rgb(12,21,12);'
  1129. // }else if (row.stateFlag === '3') {
  1130. // cellStyle = 'color : rgb(103,194,58);'
  1131. // }else {
  1132. // cellStyle = 'color : green'
  1133. // }
  1134. // return cellStyle;
  1135. // },
  1136. redStyle(stId, anlyNo) {
  1137. let arr = this.redDataCk[stId];
  1138. if (!arr || arr.length < 1) {
  1139. return {};
  1140. }
  1141. let obj = arr.find((ii) => ii == anlyNo);
  1142. if (obj) {
  1143. return { color: "red" };
  1144. } else {
  1145. return {};
  1146. }
  1147. },
  1148. hideNoContent() {
  1149. this.isShowNoContent = false;
  1150. },
  1151. },
  1152. };
  1153. </script>
  1154. <style scoped>
  1155. .demo-table-expand {
  1156. font-size: 0;
  1157. }
  1158. .demo-table-expand label {
  1159. width: 180px;
  1160. color: #99a9bf;
  1161. }
  1162. .demo-table-expand .el-form-item {
  1163. margin-right: 0;
  1164. margin-bottom: 0;
  1165. width: 100%;
  1166. }
  1167. .no-content-wrap {
  1168. background: #fff;
  1169. position: absolute;
  1170. width: 100%;
  1171. height: 100%;
  1172. top: 0;
  1173. left: 0;
  1174. z-index: 999;
  1175. display: flex;
  1176. flex-direction: column;
  1177. align-items: center;
  1178. }
  1179. .no-content-wrap .no-content-img {
  1180. width: 300px;
  1181. margin-bottom: 30px;
  1182. margin-top: 100px;
  1183. }
  1184. .no-content-wrap .no-content-text {
  1185. font-size: 18px;
  1186. color: #333;
  1187. margin-bottom: 30px;
  1188. }
  1189. </style>