specimenCheckingDetail.vue 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011
  1. <template>
  2. <view class="specimenCheckingDetail">
  3. <view class="page_header" v-if="modifyReason || imgs.length">
  4. <view class="page_header_item" v-if="modifyReason">
  5. <view class="page_header_title"> 修改原因: </view>
  6. <view class="page_header_content">
  7. {{ modifyReason }}
  8. </view>
  9. </view>
  10. <view class="page_header_item" v-if="imgs.length">
  11. <view class="page_header_title"> 图片列表: </view>
  12. <view class="page_header_content">
  13. <image v-for="(item, i) in imgs" :key="i" :src="item" @click="previewImage(i)" mode="widthFix"
  14. @error="close(i)"></image>
  15. </view>
  16. </view>
  17. </view>
  18. <view class="page_item_wrap" v-for="(item, i) in list" :key="item.id">
  19. <view class="page_item">
  20. <view class="page_item_top">
  21. <view class="page_item_top-inner">
  22. <view class="page_item_top_L">
  23. <view class="L_text"><text class="serialNumber">{{i + 1}}</text>{{ item.specimenDesc || "无" }}</view>
  24. </view>
  25. <view class="page_item_top_R">
  26. <view class="L_iocn">
  27. <text :style="{color:item.urgent == 1?'red':'green'}">{{item.urgent == 1 ? "急" : "普"}}</text>
  28. <button type="primary" size="mini" class="back" @click="back(item, msg.uuid)" v-if="options.t">
  29. 退回
  30. </button>
  31. </view>
  32. </view>
  33. </view>
  34. </view>
  35. <view class="page_item_cont">
  36. <view class="page_item_cont_T">
  37. <view class="page_item_cont_title">
  38. <view style="width: 10em;"> {{item.stype ? item.stype.name : '无'}} <text v-if="item.tubeType">、</text> {{item.tubeType && item.tubeType.name}}</view>
  39. <view class="text_big">{{ item.scode || "无" }}</view>
  40. </view>
  41. <view class="page_item_cont_title">
  42. <view class="text_big"> {{ item.patientName }}<text v-if="item.bedNum">({{item.bedNum}}床)</text> </view>
  43. <view class="text_big">{{ item.residenceNo }}</view>
  44. </view>
  45. <view class="page_item_cont_title">
  46. <view class="text_big"> 收取:{{item.receiverName||'无'}} </view>
  47. <view class="text_big">{{item.arriveTime||'无'}}</text></view>
  48. </view>
  49. <view class="page_item_cont_title">
  50. <view class="text_big">{{
  51. item.sickRoom ? item.sickRoom.dept : "无"
  52. }}</view>
  53. <text style="width: 4em;text-align: center;" class="newicon newicon-arrow-right-full"></text>
  54. <view class="text_big">{{
  55. item.checkDept ? item.checkDept.dept : "无"
  56. }}</view>
  57. </view>
  58. </view>
  59. </view>
  60. <view class="L"></view>
  61. <view class="R"></view>
  62. </view>
  63. <view class="L-l"></view>
  64. <view class="R-l"></view>
  65. </view>
  66. <view class="foot_btn2">
  67. <view class="btn2" @click="showChangeSpe()" v-if="!tubeTypeId">修改数量</view>
  68. <view class="btn2" @click="goto()">返回</view>
  69. </view>
  70. <!-- 修改标本数量弹窗 -->
  71. <changeSpeNum v-if="changeSpeModels.disjunctor" :title="changeSpeModels.title"
  72. :disjunctor="changeSpeModels.disjunctor" @ok="speOk" @cancel="speCancel" :num="speNum">
  73. </changeSpeNum>
  74. <!-- 退回弹窗 -->
  75. <backModel v-if="backModels.disjunctor" :title="backModels.title" :disjunctor="backModels.disjunctor" @ok="backOk"
  76. @cancel="backCancel"></backModel>
  77. <!-- 填写交接人工号弹窗 -->
  78. <selectAccount v-if="hosModels.disjunctor" :disjunctor="hosModels.disjunctor" @ok="hosOk"
  79. @cancel="hosCancel">
  80. </selectAccount>
  81. <!-- 弹窗 -->
  82. <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
  83. :operate="models.operate" @know="know"></showModel>
  84. </view>
  85. </template>
  86. <script>
  87. import {
  88. get,
  89. post,
  90. webHandle
  91. } from "../../http/http.js";
  92. export default {
  93. data() {
  94. return {
  95. res: {},
  96. backStatus: "",
  97. workOrderId: 0,
  98. backSpecimen: {},
  99. backParams: {},
  100. imgs: [],
  101. // --------------------
  102. speNum: 0,
  103. modifyReason: "",
  104. options: {},
  105. selectDeptId: null,
  106. msg: {}, //传递的信息
  107. list: [],
  108. targetDeptShow: [], //目标科室
  109. // 修改标本数量弹窗model
  110. changeSpeModels: {
  111. disjunctor: false,
  112. },
  113. // 退回弹窗model
  114. backModels: {
  115. disjunctor: false,
  116. },
  117. // 填写交接人工号弹窗model
  118. hosModels: {
  119. disjunctor: false,
  120. },
  121. // 弹窗model
  122. models: {
  123. disjunctor: false,
  124. },
  125. tubeTypeId: null //试管类型
  126. };
  127. },
  128. methods: {
  129. close(i) {
  130. this.imgs.splice(i, 1);
  131. },
  132. know() {
  133. this.models.disjunctor = false;
  134. this.backModels.disjunctor = false;
  135. if (this.models.icon === "success") {
  136. this.getList();
  137. }
  138. },
  139. // 退回
  140. back(specimen, workOrderId) {
  141. this.backSpecimen = specimen;
  142. this.backStatus = "back";
  143. this.workOrderId = workOrderId;
  144. this.showBack();
  145. },
  146. // 退回
  147. backHandler(specimen, workorderId, data) {
  148. console.log(specimen);
  149. const {
  150. reasonForReturn,
  151. remarks
  152. } = this.backParams;
  153. uni.showLoading({
  154. title: "加载中",
  155. mask: true,
  156. });
  157. let postData = {
  158. deptId: this.selectDeptId == "undefined" ?
  159. this.msg.startDept : this.selectDeptId,
  160. reasonForReturn: reasonForReturn.id,
  161. remarks,
  162. scode: specimen.scode,
  163. hosId: uni.getStorageSync("userData").user.currentHospital.id,
  164. speState: specimen.speState ? specimen.speState.id : undefined,
  165. handoverId: data ? data.accountId : undefined,
  166. handoverName: data ? data.accountName : undefined,
  167. gdId: workorderId || undefined,
  168. };
  169. post("/workerOrder/returnSpecimen", postData).then((res) => {
  170. uni.hideLoading();
  171. if (res.state == 200) {
  172. this.models = {
  173. disjunctor: true,
  174. title: "提示",
  175. content: `标本退回成功`,
  176. icon: "success",
  177. };
  178. } else {
  179. this.models = {
  180. disjunctor: true,
  181. title: "提示",
  182. content: `标本退回失败`,
  183. icon: "error",
  184. };
  185. }
  186. });
  187. },
  188. // 填写交接人工号-确认
  189. hosOk(data) {
  190. console.log(data);
  191. const {
  192. accountName,
  193. account,
  194. accountId
  195. } = data;
  196. if (!accountName && !account) {
  197. //没有填写交接人
  198. uni.showModal({
  199. title: "提示",
  200. content: "请填写交接人工号!",
  201. showCancel: false,
  202. success: function(res) {
  203. if (res.confirm) {
  204. console.log("用户点击确定");
  205. } else if (res.cancel) {
  206. console.log("用户点击取消");
  207. }
  208. },
  209. });
  210. return;
  211. } else if ((!accountName && account) || (accountName && !account)) {
  212. //没有填写交接人
  213. uni.showModal({
  214. title: "提示",
  215. content: "请填写正确的交接人工号!",
  216. showCancel: false,
  217. success: function(res) {
  218. if (res.confirm) {
  219. console.log("用户点击确定");
  220. } else if (res.cancel) {
  221. console.log("用户点击取消");
  222. }
  223. },
  224. });
  225. return;
  226. }
  227. this.hosModels.disjunctor = false;
  228. uni.showLoading({
  229. title: "加载中",
  230. mask: true,
  231. });
  232. console.log(this.backStatus, "this.backStatus");
  233. if ((this.backStatus = "back")) {
  234. // 退回
  235. this.backHandler(this.backSpecimen, this.msg.uuid, data);
  236. }
  237. },
  238. // 填写交接人工号-取消
  239. hosCancel() {
  240. this.hosModels.disjunctor = false;
  241. },
  242. // 填写交接人工号弹窗
  243. showSelectAccount() {
  244. this.hosModels = {
  245. disjunctor: true,
  246. };
  247. },
  248. // 退回-确认
  249. backOk(data) {
  250. console.log(data);
  251. this.backParams = data;
  252. this.hosModels.disjunctor = false;
  253. // ====================================
  254. uni.showLoading({
  255. title: "加载中",
  256. mask: true,
  257. });
  258. const userData = uni.getStorageSync("userData");
  259. // 查询标本配送业务
  260. post("/simple/data/fetchDataList/taskType",{
  261. "idx": 0,
  262. "sum": 10,
  263. "taskType": {
  264. "simpleQuery": true,
  265. "hosId": {
  266. "id": userData.user.currentHospital.id
  267. },
  268. "associationType": {
  269. "key": "association_types",
  270. "value": "specimen"
  271. }
  272. }
  273. }).then((res) => {
  274. if (res.status == 200) {
  275. let taskTypeDTO = res.list[0];
  276. if(taskTypeDTO){
  277. // 查询业务页面控制-标本
  278. post("/simple/data/fetchDataList/taskTypeConfig",{
  279. "idx": 0,
  280. "sum": 10,
  281. "taskTypeConfig": {
  282. taskTypeDTO,
  283. }
  284. }).then((res) => {
  285. uni.hideLoading();
  286. if (res.status == 200) {
  287. let data = res.list[0];
  288. if(data){
  289. if (data.returnSpecimenWhetherHandover == 1 && this.backParams.reasonForReturn.extra1 == 1) {
  290. this.backCancel();
  291. this.showSelectAccount();
  292. } else {
  293. this.backHandler(this.backSpecimen, this.workOrderId);
  294. }
  295. }else{
  296. this.backHandler(this.backSpecimen, this.workOrderId);
  297. }
  298. } else {
  299. uni.showToast({
  300. icon: "none",
  301. title: res.msg || "接口获取数据失败!",
  302. });
  303. }
  304. });
  305. }else{
  306. uni.hideLoading();
  307. uni.showToast({
  308. icon: "none",
  309. title: "未查询到标本配送业务!",
  310. });
  311. }
  312. } else {
  313. uni.hideLoading();
  314. uni.showToast({
  315. icon: "none",
  316. title: res.msg || "接口获取数据失败!",
  317. });
  318. }
  319. });
  320. // ====================================
  321. },
  322. // 退回-取消
  323. backCancel() {
  324. this.backModels.disjunctor = false;
  325. },
  326. // 退回弹窗
  327. showBack() {
  328. this.backModels = {
  329. title: "退回",
  330. disjunctor: true,
  331. };
  332. },
  333. previewImage(index) {
  334. //uniapp预览轮播图
  335. uni.previewImage({
  336. current: index, //预览图片的下标
  337. urls: this.imgs, //预览图片的地址,必须要数组形式,如果不是数组形式就转换成数组形式就可以
  338. });
  339. },
  340. // ---------------------------
  341. getInfo() {
  342. uni.showLoading({
  343. mask: true,
  344. title: "加载中",
  345. });
  346. let postData = {
  347. deptId: this.selectDeptId == "undefined" ?
  348. this.msg.startDept : this.selectDeptId,
  349. gdId: this.msg.uuid,
  350. };
  351. post(`/api/getStartDeptSpecimensNum`, postData).then((res) => {
  352. uni.hideLoading();
  353. if (res.status == 200) {
  354. this.speNum = res.data[0].deptSpecimensNum;
  355. this.modifyReason = res.data[0].modifyReason;
  356. get(
  357. `/common/common/listAttachment/specimenPhotos/${res.data[0].bindId}`
  358. ).then((result) => {
  359. if (result.status == 200) {
  360. this.imgs = result.data.map((v) => v.previewUrl);
  361. } else {
  362. this.imgs = [];
  363. }
  364. });
  365. } else {
  366. this.speNum = "";
  367. this.modifyReason = "";
  368. }
  369. });
  370. },
  371. getList() {
  372. uni.showLoading({
  373. mask: true,
  374. title: "加载中",
  375. });
  376. let postData = {
  377. checkDept: this.options.endDepts, //终点科室
  378. transDept: Number(this.msg.startDept), //起点科室id
  379. gdId: this.msg.uuid, //工单id或uuid
  380. tubeTypeId: null //试管类型id
  381. };
  382. if (this.selectDeptId != "undefined") {
  383. if (Number(this.msg.startDept) != Number(this.selectDeptId)) {
  384. postData.checkDept = Number(this.selectDeptId); //签到的科室或者选择的科室
  385. if (this.options.t) {
  386. postData.sign = true; //待送达
  387. }
  388. }
  389. }
  390. if(this.tubeTypeId){
  391. postData.tubeTypeId = this.tubeTypeId
  392. }else{
  393. delete postData.tubeTypeId
  394. }
  395. post(`/api/getTransDeptSpecimens`, postData).then((res) => {
  396. uni.hideLoading();
  397. uni.stopPullDownRefresh();
  398. if (res.status == 200) {
  399. this.list = res.data;
  400. this.getInfo();
  401. } else {
  402. uni.showToast({
  403. icon: "none",
  404. title: res.msg || "接口获取数据失败!",
  405. });
  406. }
  407. });
  408. },
  409. // 返回
  410. goto() {
  411. if (this.options.t == "big") {
  412. uni.navigateBack();
  413. } else if (this.options.t == "small") {
  414. uni.navigateBack();
  415. } else {
  416. uni.navigateTo({
  417. url: `../../pages/specimenChecking/specimenChecking?infoDATA=${encodeURIComponent(
  418. JSON.stringify(this.msg)
  419. )}`,
  420. });
  421. }
  422. },
  423. // 修改标本数量-确认
  424. speOk(data) {
  425. console.log(data);
  426. const pathUrl = uni.getStorageSync("path");
  427. const {
  428. speNum,
  429. reason,
  430. imageValue
  431. } = data;
  432. this.changeSpeModels.disjunctor = false;
  433. uni.showLoading({
  434. mask: true,
  435. title: "加载中",
  436. });
  437. let postData = {
  438. checkDept: this.options.endDepts, //终点科室
  439. transDeptId: this.msg.startDept,
  440. gdId: this.msg.uuid,
  441. deptId: this.selectDeptId == "undefined" ?
  442. this.msg.startDept : this.selectDeptId,
  443. specimensNum: speNum,
  444. modifyReason: reason,
  445. };
  446. post("/api/updateCheckDeptSpecimensNum", postData).then((res) => {
  447. if (res.status == 200) {
  448. console.log(imageValue);
  449. if (!imageValue.length) {
  450. uni.hideLoading();
  451. if (this.options.t == "big") {
  452. if (this.options.gdState == 4) {
  453. // 待到达
  454. uni.navigateTo({
  455. url: `../../pages/receiptpage/receiptpage`,
  456. });
  457. } else if (this.options.gdState == 5) {
  458. // 待送达
  459. if (res.type1 === "plan-spe-ddd-2") {} else {
  460. let content = `本工单已签到<strong class="red">${
  461. res.scanSet ? res.scanSet.join("、") : ""
  462. }</strong>,剩余需签到科室<strong class="red">${
  463. res.notScanSet ? res.notScanSet.join("、") : ""
  464. }</strong>,您确定完成工单吗?`;
  465. uni.navigateTo({
  466. url: `../scanning/scanning?type=${res.type}&type1=${
  467. res.type1
  468. }&id=${encodeURIComponent(
  469. JSON.stringify([res.gdid])
  470. )}&content=${content}`,
  471. });
  472. }
  473. }
  474. } else if (this.options.t == "small") {
  475. if (this.selectDeptId == "undefined") {
  476. //快捷建单建单进入
  477. uni.navigateTo({
  478. url: `../../pages/receiptpage/receiptpage`,
  479. });
  480. } else {
  481. if (this.options.gdState == 4) {
  482. // 待到达
  483. uni.navigateTo({
  484. url: `../../pages/receiptpage/receiptpage`,
  485. });
  486. } else if (this.options.gdState == 5) {
  487. // 待送达
  488. if (res.type1 === "plan-spe-ddd-2") {} else {
  489. let content = `本工单已签到<strong class="red">${
  490. res.scanSet ? res.scanSet.join("、") : ""
  491. }</strong>,剩余需签到科室<strong class="red">${
  492. res.notScanSet ? res.notScanSet.join("、") : ""
  493. }</strong>,您确定完成工单吗?`;
  494. uni.navigateTo({
  495. url: `../scanning/scanning?type=${res.type}&type1=${
  496. res.type1
  497. }&id=${encodeURIComponent(
  498. JSON.stringify([res.gdid])
  499. )}&content=${content}`,
  500. });
  501. }
  502. }
  503. }
  504. } else {
  505. uni.navigateTo({
  506. url: `../../pages/specimenChecking/specimenChecking?infoDATA=${encodeURIComponent(
  507. JSON.stringify(this.msg)
  508. )}`,
  509. });
  510. }
  511. return;
  512. }
  513. let n = 0;
  514. imageValue.forEach((v) => {
  515. // 图片上传 start
  516. console.log("压缩前");
  517. let canvasWidth = v.image.width; //图片原始长宽
  518. let canvasHeight = v.image.height;
  519. let img = new Image();
  520. img.src = v.path;
  521. let canvas = document.createElement("canvas");
  522. let ctx = canvas.getContext("2d");
  523. canvas.width = canvasWidth;
  524. canvas.height = canvasHeight;
  525. ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight);
  526. canvas.toBlob(
  527. (fileSrc) => {
  528. let tp = window.URL.createObjectURL(fileSrc);
  529. console.log("压缩后");
  530. n++;
  531. uni.uploadFile({
  532. url: pathUrl +
  533. "/common/common/uploadAttachment/specimenPhotos/" +
  534. res.deptSpecimensNumId +
  535. "/666",
  536. filePath: tp,
  537. name: "file",
  538. formData: {
  539. filename: v.name,
  540. },
  541. success: (uploadFileRes) => {
  542. console.log(uploadFileRes);
  543. if (--n === 0) {
  544. uni.hideLoading();
  545. uni.showModal({
  546. title: "提示",
  547. content: "修改成功!",
  548. showCancel: false,
  549. success: (result) => {
  550. if (result.confirm) {
  551. console.log("用户点击确定", this.options.t);
  552. if (this.options.t == "big") {
  553. if (this.options.gdState == 4) {
  554. // 待到达
  555. uni.navigateTo({
  556. url: `../../pages/receiptpage/receiptpage`,
  557. });
  558. } else if (this.options.gdState == 5) {
  559. // 待送达
  560. if (res.type1 === "plan-spe-ddd-2") {} else {
  561. let content = `本工单已签到<strong class="red">${
  562. res.scanSet ? res.scanSet.join("、") : ""
  563. }</strong>,剩余需签到科室<strong class="red">${
  564. res.notScanSet ? res.notScanSet.join("、") : ""
  565. }</strong>,您确定完成工单吗?`;
  566. uni.navigateTo({
  567. url: `../scanning/scanning?type=${res.type}&type1=${
  568. res.type1
  569. }&id=${encodeURIComponent(
  570. JSON.stringify([res.gdid])
  571. )}&content=${content}`,
  572. });
  573. }
  574. }
  575. } else if (this.options.t == "small") {
  576. if (this.selectDeptId == "undefined") {
  577. //快捷建单建单进入
  578. uni.navigateTo({
  579. url: `../../pages/receiptpage/receiptpage`,
  580. });
  581. } else {
  582. if (this.options.gdState == 4) {
  583. // 待到达
  584. uni.navigateTo({
  585. url: `../../pages/receiptpage/receiptpage`,
  586. });
  587. } else if (this.options.gdState == 5) {
  588. // 待送达
  589. if (res.type1 === "plan-spe-ddd-2") {} else {
  590. let content = `本工单已签到<strong class="red">${
  591. res.scanSet ? res.scanSet.join("、") : ""
  592. }</strong>,剩余需签到科室<strong class="red">${
  593. res.notScanSet ? res.notScanSet.join("、") : ""
  594. }</strong>,您确定完成工单吗?`;
  595. uni.navigateTo({
  596. url: `../scanning/scanning?type=${res.type}&type1=${
  597. res.type1
  598. }&id=${encodeURIComponent(
  599. JSON.stringify([res.gdid])
  600. )}&content=${content}`,
  601. });
  602. }
  603. }
  604. }
  605. } else {
  606. uni.navigateTo({
  607. url: `../../pages/specimenChecking/specimenChecking?infoDATA=${encodeURIComponent(
  608. JSON.stringify(this.msg)
  609. )}`,
  610. });
  611. }
  612. } else if (result.cancel) {
  613. console.log("用户点击取消");
  614. }
  615. },
  616. });
  617. }
  618. },
  619. fail: (err) => {
  620. n--;
  621. console.error(err);
  622. uni.hideLoading();
  623. uni.showToast({
  624. icon: "none",
  625. title: "上传失败",
  626. duration: 2000,
  627. });
  628. },
  629. });
  630. },
  631. "image/jpeg",
  632. 0.3
  633. );
  634. // 图片上传 end
  635. });
  636. } else {
  637. uni.hideLoading();
  638. uni.showToast({
  639. icon: "none",
  640. title: res.msg || "接口获取数据失败!",
  641. });
  642. }
  643. });
  644. },
  645. // 修改标本数量-取消
  646. speCancel() {
  647. this.changeSpeModels.disjunctor = false;
  648. },
  649. // 修改标本数量弹窗
  650. showChangeSpe() {
  651. this.changeSpeModels = {
  652. title: "修改标本数量",
  653. disjunctor: true,
  654. };
  655. },
  656. },
  657. onLoad(options) {
  658. console.log(options, "快捷建单");
  659. this.options = options;
  660. if(options.infoDATA){
  661. this.msg = JSON.parse(options.infoDATA);
  662. }
  663. this.selectDeptId = options.id;
  664. if(options.tubeTypeId){
  665. this.tubeTypeId = options.tubeTypeId
  666. }else{
  667. this.tubeTypeId = null
  668. }
  669. // this.msg = JSON.parse(options.infoDATA);
  670. // this.targetDeptShow = this.msg.targetDeptShow.split(",");
  671. this.getList();
  672. // #ifdef APP-PLUS
  673. webHandle("no", "app");
  674. // #endif
  675. // #ifdef H5
  676. webHandle("no", "wx");
  677. // #endif
  678. },
  679. onPullDownRefresh() {
  680. this.getList();
  681. },
  682. };
  683. </script>
  684. <style lang="less" scoped>
  685. .specimenCheckingDetail {
  686. padding-bottom: 100rpx;
  687. .page_header {
  688. margin: 20rpx;
  689. padding: 16rpx;
  690. border: 2rpx solid #e5e9ed;
  691. background: #fff;
  692. border-radius: 8rpx;
  693. .page_header_item {
  694. margin-bottom: 16rpx;
  695. .page_header_title {
  696. margin-bottom: 8rpx;
  697. font-weight: bold;
  698. }
  699. .page_header_content {
  700. display: flex;
  701. image {
  702. height: 100rpx;
  703. width: 30%;
  704. margin: 0 8rpx;
  705. }
  706. }
  707. }
  708. }
  709. .page_item_wrap {
  710. width: 100%;
  711. height: auto;
  712. box-sizing: border-box;
  713. position: relative;
  714. margin-bottom: 16rpx;
  715. .page_item {
  716. margin-top: 16rpx;
  717. margin-bottom: 124rpx;
  718. background: #fff;
  719. border-radius: 8rpx;
  720. margin: 0 20rpx;
  721. border: 2rpx solid #e5e9ed;
  722. position: relative;
  723. overflow: hidden;
  724. padding: 0 16rpx;
  725. .L {
  726. width: 40rpx;
  727. height: 40rpx;
  728. border-radius: 50%;
  729. background: #f9fafb;
  730. position: absolute;
  731. left: -20rpx;
  732. top: 68rpx;
  733. border: 2rpx solid #e5e9ed;
  734. }
  735. .R {
  736. width: 40rpx;
  737. height: 40rpx;
  738. border-radius: 50%;
  739. background: #f9fafb;
  740. position: absolute;
  741. float: right;
  742. right: -20rpx;
  743. top: 68rpx;
  744. border: 2rpx solid #e5e9ed;
  745. }
  746. .starting {
  747. width: 50rpx;
  748. height: 50rpx;
  749. color: #fff;
  750. background: #49b856;
  751. display: inline-block;
  752. border-radius: 50%;
  753. text-align: center;
  754. line-height: 46rpx;
  755. font-size: 32rpx;
  756. margin-right: 6rpx;
  757. }
  758. .End {
  759. width: 50rpx;
  760. height: 50rpx;
  761. color: #fff;
  762. background: #39b199;
  763. display: inline-block;
  764. border-radius: 50%;
  765. text-align: center;
  766. line-height: 46rpx;
  767. font-size: 32rpx;
  768. margin-right: 6rpx;
  769. }
  770. .page_item_top {
  771. height: 88rpx;
  772. border-bottom: 2rpx dashed #e5e9ed;
  773. padding: 0 16rpx;
  774. .page_item_top-inner {
  775. display: flex;
  776. justify-content: space-between;
  777. align-items: center;
  778. height: 100%;
  779. .page_item_top_L {
  780. .serialNumber{
  781. width: 50rpx;
  782. height: 50rpx;
  783. border-radius: 50%;
  784. background-color: #49b856;
  785. display: flex;
  786. justify-content: center;
  787. align-items: center;
  788. color: #fff;
  789. line-height: 0;
  790. margin-right: 8rpx;
  791. }
  792. .emergencys {
  793. background: #ff3b53 !important;
  794. width: 124rpx !important;
  795. }
  796. .emergency {
  797. background: #ff3b53 !important;
  798. }
  799. .emergency1 {
  800. background: #49b856 !important;
  801. }
  802. .page_item_cont_start {
  803. text-align: center;
  804. height: 44rpx;
  805. width: 104rpx;
  806. line-height: 44rpx;
  807. border-radius: 8rpx;
  808. background: #49b856;
  809. color: #fff;
  810. display: inline-block;
  811. }
  812. .L_time {
  813. color: #6cc076;
  814. font-size: 32rpx;
  815. }
  816. .L_text {
  817. font-size: 32rpx;
  818. font-weight: 700;
  819. display: flex;
  820. align-items: center;
  821. }
  822. }
  823. .page_item_top_R {
  824. font-size: 32rpx;
  825. .back {
  826. color: rgb(7, 134, 60);
  827. background-color: #49b856;
  828. margin-left: 16rpx;
  829. }
  830. .L_iocn {
  831. display: flex;
  832. justify-content: space-between;
  833. align-items: center;
  834. font-size: 36rpx;
  835. font-weight: 700;
  836. }
  837. }
  838. }
  839. }
  840. .page_item_cont {
  841. min-height: 90rpx;
  842. padding: 0 16rpx;
  843. text-align: left;
  844. position: relative;
  845. .text_big {
  846. font-size: 32rpx;
  847. font-weight: 700;
  848. margin-top: 10rpx;
  849. p {
  850. font-weight: 700;
  851. line-height: 1.5;
  852. }
  853. }
  854. .page_item_cont_T {
  855. padding-top: 28rpx;
  856. padding-bottom: 28rpx;
  857. font-size: 28rpx;
  858. .page_item_cont_title {
  859. height: 100%;
  860. font-size: 32rpx;
  861. display: flex;
  862. justify-content: space-between;
  863. align-items: center;
  864. }
  865. }
  866. .page_item_cont_B {
  867. padding-top: 28rpx;
  868. margin-bottom: 28rpx;
  869. .page_item_cont_title {
  870. font-size: 32rpx;
  871. display: flex;
  872. justify-content: space-between;
  873. }
  874. .page_item_cont_title1 {
  875. height: 60rpx;
  876. line-height: 60rpx;
  877. font-size: 32rpx;
  878. padding-left: 64rpx;
  879. }
  880. }
  881. }
  882. .page_item_foot {
  883. border-top: 2rpx dashed #e5e9ed;
  884. border-bottom: 2rpx dashed #e5e9ed;
  885. padding: 28rpx 16rpx;
  886. text-align: left;
  887. .page_item_foot_text {
  888. font-size: 32rpx;
  889. margin-bottom: 20rpx;
  890. .text1 {
  891. color: rgb(102, 102, 102);
  892. }
  893. .text2 {
  894. float: right;
  895. font-weight: 700;
  896. }
  897. }
  898. }
  899. #infos {
  900. display: none;
  901. }
  902. .page_item_infos {
  903. padding-bottom: 20rpx;
  904. border-bottom: 2rpx dashed #e5e9ed;
  905. .page_item_info2 {
  906. text-align: left;
  907. line-height: 60rpx;
  908. font-size: 32rpx;
  909. padding-left: 16rpx;
  910. .page_item_foot_text {
  911. font-size: 32rpx;
  912. margin-bottom: 20rpx;
  913. .text1 {
  914. color: rgb(102, 102, 102);
  915. }
  916. .text2 {
  917. float: right;
  918. font-weight: 700;
  919. }
  920. }
  921. }
  922. }
  923. }
  924. .L-l {
  925. width: 2rpx;
  926. height: 40rpx;
  927. background: #f9fafb;
  928. position: absolute;
  929. left: 20rpx;
  930. top: 72rpx;
  931. }
  932. .R-l {
  933. width: 2rpx;
  934. height: 40rpx;
  935. background: #f9fafb;
  936. position: absolute;
  937. right: 20rpx;
  938. top: 72rpx;
  939. }
  940. }
  941. .foot_btn2 {
  942. position: fixed;
  943. bottom: 0;
  944. width: 100vw;
  945. padding: 0 20rpx;
  946. box-sizing: border-box;
  947. line-height: 66rpx;
  948. height: 100rpx;
  949. border-top: 2rpx solid #e5e9ed;
  950. background: #f9fafb;
  951. text-align: center;
  952. display: flex;
  953. justify-content: center;
  954. align-items: center;
  955. .btn2 {
  956. height: 66rpx;
  957. flex: 1;
  958. margin: 16rpx 16rpx 0;
  959. background-image: linear-gradient(to right, #72c172, #3bb197);
  960. color: #fff;
  961. border-radius: 8rpx;
  962. font-size: 32rpx;
  963. }
  964. }
  965. }
  966. </style>