scanning_all.vue 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370
  1. <template>
  2. <view class="Scanning_all">
  3. <view class="Scanning">
  4. <view class="Scanning_top" id="Scanning_tops" :animation="animationData" v-if="workData.length > 0">
  5. <view class="Scanning_top_icon">
  6. <text class="cubeic-ok icon_transport transport-duigou"></text>
  7. </view>
  8. <view class="Scanning_top_text">
  9. <view class="text1">签到成功</view>
  10. </view>
  11. <view class="Scanning_cont">
  12. 当前科室关联多个工单,请查看工单信息,
  13. <view>可选择多个工单后,点击 一键送达 完成配送.</view>
  14. </view>
  15. </view>
  16. <view class="Scanning_top" id="Scanning_tops" :animation="animationData" v-if="workData.length === 0">
  17. <view class="Scanning_top_icon">
  18. <text class="cubeic-close icon_transport transport-shibai"></text>
  19. </view>
  20. <view class="Scanning_top_text">
  21. <view class="text1">签到失败</view>
  22. </view>
  23. <view class="Scanning_cont">
  24. 您扫描的科室为<text class="red">{{deptName}}</text>,未匹配到工单,请确认。
  25. </view>
  26. </view>
  27. <view class="title" v-if="workData.length > 0">
  28. <text class="span1">工单信息</text>
  29. <text class="span2" @click="all()" v-if="tabType != 'specimenPlan'">全选</text>
  30. <text class="span3" @click="Dall()">全不选</text>
  31. </view>
  32. <view class="tabs" v-if="workData.length > 0">
  33. <view class="tab">
  34. <view @click="act('drugsBag')" v-if="infoDATA['drugsBag']">
  35. <view id="10" :class="{ acts: tabType == 'drugsBag' }">药品({{ infoDATA.drugsBag.length }})</view>
  36. </view>
  37. <view @click="act('specimen')" v-if="infoDATA['specimen']">
  38. <view id="40" :class="{ acts: tabType == 'specimen' }">标本({{ infoDATA.specimen.length }})</view>
  39. </view>
  40. <view @click="act('specimenPlan')" v-if="infoDATA['specimenPlan']">
  41. <view id="40" :class="{ acts: tabType == 'specimenPlan' }">标本轮巡({{ infoDATA.specimenPlan.length }})</view>
  42. </view>
  43. <view @click="act('patientTransport')" v-if="infoDATA['patientTransport']">
  44. <view id="20" :class="{ acts: tabType == 'patientTransport' }">患者转运({{ infoDATA.patientTransport.length }})
  45. </view>
  46. </view>
  47. <view @click="act('inspect')" v-if="infoDATA['inspect']">
  48. <view id="30" :class="{ acts: tabType == 'inspect' }">患者陪检({{ infoDATA.inspect.length }})</view>
  49. </view>
  50. <view @click="act('jPBag')" v-if="infoDATA['jPBag']">
  51. <view id="40" :class="{ acts: tabType == 'jPBag' }">静配({{ infoDATA.jPBag.length }})</view>
  52. </view>
  53. <view @click="act('other')" v-if="infoDATA['other']">
  54. <view id="40" :class="{ acts: tabType == 'other' }">其他({{ infoDATA.other.length }})</view>
  55. </view>
  56. <view @click="act('blood')" v-if="infoDATA['blood']">
  57. <view id="40" :class="{ acts: tabType == 'blood' }">血制品({{ infoDATA.blood.length }})</view>
  58. </view>
  59. <view @click="act('clothingGet')" v-if="infoDATA['clothingGet']">
  60. <view id="40" :class="{ acts: tabType == 'clothingGet' }">被服洗涤回收({{ infoDATA.clothingGet.length }})</view>
  61. </view>
  62. <view @click="act('clothingSend')" v-if="infoDATA['clothingSend']">
  63. <view id="40" :class="{ acts: tabType == 'clothingSend' }">被服洗涤送回({{ infoDATA.clothingSend.length }})</view>
  64. </view>
  65. </view>
  66. </view>
  67. <view class="page_items" v-if="!workData.length" style="font-size: 18px; margin-top: 15%">
  68. <view class="zwsj">
  69. <image class="zwsj_img" mode="widthFix" src="../../static/img/zanwushuju.png"></image>
  70. <view class="zwsj_txt">暂无工单</view>
  71. </view>
  72. </view>
  73. <view class="page_items footerOtherMargin" v-if="workData.length > 0">
  74. <view class="page_item" v-for="(infoDATA, i) of workData" :key="i">
  75. <view class="page_item_top">
  76. <view class="page_item_top_L">
  77. <text v-show="hasSelect(infoDATA.id)" class="ac" @click="ac(infoDATA, i)" :id="infoDATA.id">
  78. <text class="ac-span"></text>
  79. </text>
  80. <text v-show="!hasSelect(infoDATA.id)" class="ac1" @click="ac1(infoDATA, i)"
  81. :id="infoDATA.id + '0'"></text>
  82. <text class="L_text">单号:{{ infoDATA.gdcode }}</text>
  83. <view class="page_item_cont_start emergency1" v-if="infoDATA.emergencyType.value == 1">
  84. <text class="page_item_cont_start_txt">
  85. <text class="cubeic-star icon_transport transport-shiwujiaoxing"></text>
  86. {{ infoDATA.emergencyType.name }}
  87. </text>
  88. </view>
  89. <view class="page_item_cont_start emergency" v-if="infoDATA.emergencyType.value == 2">
  90. <text class="page_item_cont_start_txt">
  91. <text class="cubeic-star icon_transport transport-shiwujiaoxing"></text>
  92. {{ infoDATA.emergencyType.name }}
  93. </text>
  94. </view>
  95. <view class="page_item_cont_start emergencys" v-if="infoDATA.emergencyType.value == 3">
  96. <text class="page_item_cont_start_txt">
  97. <text class="cubeic-star icon_transport transport-shiwujiaoxing"></text>
  98. {{ infoDATA.emergencyType.name }}
  99. </text>
  100. </view>
  101. </view>
  102. <view class="page_item_top_R">
  103. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'specimen'">标本</text>
  104. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'specimenPlan'">标本</text>
  105. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'drugsBag'">药品</text>
  106. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'jPBag'">静配</text>
  107. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'inspect'">患者陪检</text>
  108. <text class="L_iocn" v-if="
  109. infoDATA.taskType.associationType.value == 'patientTransport'
  110. ">患者转运</text>
  111. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'other'">其他</text>
  112. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'blood'">血制品</text>
  113. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'clothingGet'">被服洗涤回收</text>
  114. <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'clothingSend'">被服洗涤送回</text>
  115. </view>
  116. <view class="L"></view>
  117. <view class="R"></view>
  118. </view>
  119. <view class="page_item_cont">
  120. <view class="page_item_cont_T">
  121. <view class="page_item_cont_title">
  122. <text> <text class="starting">起</text> 点科室 </text>
  123. <text class="text_big">{{ infoDATA.startDept.dept }}</text>
  124. </view>
  125. </view>
  126. <view class="line"></view>
  127. <view class="page_item_cont_B">
  128. <template v-if="infoDATA.taskType.associationType.value == 'inspect'">
  129. <view class="page_item_cont_title" v-for="(dept, i) of infoDATA.middleDept" :key="i">
  130. <text> <text class="End">检</text> 查科室 </text>
  131. <text class="text_big">{{ dept.dept }}</text>
  132. <view></view>
  133. </view>
  134. </template>
  135. <template v-if="infoDATA.taskType.associationType.value != 'inspect'">
  136. <view class="page_item_cont_title" v-for="(dept, i) of infoDATA.endDepts" :key="i">
  137. <text> <text class="End">终</text> 点科室 </text>
  138. <text class="text_big">{{ dept.dept }}</text>
  139. </view>
  140. </template>
  141. </view>
  142. </view>
  143. <view class="page_item_foot">
  144. <view class="page_item_foot_text">
  145. <text class="text1">状态</text>
  146. <text class="text2" v-if="
  147. !(
  148. infoDATA.gdState.value == '5' &&
  149. infoDATA.taskType.associationType.value == 'inspect'
  150. )
  151. ">{{ infoDATA.gdState.name }}</text>
  152. <text class="text2" v-if="
  153. infoDATA.gdState.value == '5' &&
  154. infoDATA.taskType.associationType.value == 'inspect'
  155. ">待送回</text>
  156. </view>
  157. <view class="page_item_foot_text" v-if="infoDATA.gdState.value == '2'">
  158. <text class="text1">预计响应时间</text>
  159. <text class="text2">{{ infoDATA.estimeResponseTime || '无' }}</text>
  160. </view>
  161. <view class="page_item_foot_text" v-if="infoDATA.gdState.value == '5'">
  162. <text class="text1" v-if="!(infoDATA.taskType.associationType.value == 'inspect')">预计送达时间</text>
  163. <text class="text1" v-if="infoDATA.taskType.associationType.value == 'inspect'">预计送回时间</text>
  164. <text class="text2">{{ infoDATA.estimeCompleteTime || '无' }}</text>
  165. </view>
  166. <view class="page_item_foot_text" v-if="infoDATA.gdState.value == '4'">
  167. <text class="text1">预计到达时间</text>
  168. <text class="text2">{{ infoDATA.estimateArriveTime || '无' }}</text>
  169. </view>
  170. <view class="page_item_foot_text">
  171. <text class="text1">创建时间</text>
  172. <text class="text2">{{ infoDATA.startTime || '无' }}</text>
  173. </view>
  174. </view>
  175. </view>
  176. </view>
  177. <view class="foot_btn2 footerPadding" v-if="workData.length > 0">
  178. <view class="btn1" @click="allStart()" v-if="flag">一键操作</view>
  179. <view class="btn1" v-if="!flag">一键操作</view>
  180. <view class="btn1" @click="showAlert">知道了</view>
  181. </view>
  182. <view class="foot_btn1 footerPadding" v-if="!workData.length">
  183. <view class="btn3" @click="showAlert">知道了</view>
  184. </view>
  185. </view>
  186. <!-- 弹窗 -->
  187. <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
  188. @know="know" :operate="models.operate"></showModel>
  189. <!-- 填写交接人工号弹窗 -->
  190. <selectAccount v-if="hosModels.disjunctor" :disjunctor="hosModels.disjunctor" @ok="hosOk"
  191. @cancel="hosCancel">
  192. </selectAccount>
  193. </view>
  194. </template>
  195. <script>
  196. import showModel from "../../components/showModel/showModel.vue";
  197. import {
  198. post,
  199. SM,
  200. webHandle
  201. } from "../../http/http.js";
  202. export default {
  203. data() {
  204. return {
  205. hosId: null,
  206. currentCode: '', //当前小扫描的科室二维码
  207. SMFlag: true,
  208. // 填写交接人工号弹窗model
  209. hosModels: {
  210. disjunctor: false,
  211. },
  212. // 弹窗model
  213. models: {
  214. disjunctor: false,
  215. },
  216. infoDATA: {},
  217. workData: [],
  218. tabType: "", //当前选中项
  219. userId: {
  220. ids: [],
  221. },
  222. typeData: [],
  223. types: false,
  224. code: "",
  225. deptId: '',
  226. deptName: '',
  227. flag: true, //一键操作,禁止多次
  228. flagTimer: null,
  229. selectArr: [], //选中项
  230. animationData: {}, //动画
  231. };
  232. },
  233. methods: {
  234. // 填写交接人工号-确认
  235. hosOk(data) {
  236. console.log(data);
  237. const {
  238. accountName,
  239. account,
  240. accountId
  241. } = data;
  242. if (!accountName && !account) {
  243. //没有填写交接人
  244. uni.showModal({
  245. title: "提示",
  246. content: "请填写交接人工号!",
  247. showCancel: false,
  248. success: function(res) {
  249. if (res.confirm) {
  250. console.log("用户点击确定");
  251. } else if (res.cancel) {
  252. console.log("用户点击取消");
  253. }
  254. },
  255. });
  256. return;
  257. } else if ((!accountName && account) || (accountName && !account)) {
  258. //没有填写交接人
  259. uni.showModal({
  260. title: "提示",
  261. content: "请填写正确的交接人工号!",
  262. showCancel: false,
  263. success: function(res) {
  264. if (res.confirm) {
  265. console.log("用户点击确定");
  266. } else if (res.cancel) {
  267. console.log("用户点击取消");
  268. }
  269. },
  270. });
  271. return;
  272. }
  273. this.hosModels.disjunctor = false;
  274. this.orderDeptHandler(false, data);
  275. },
  276. // 填写交接人工号-取消
  277. hosCancel() {
  278. this.hosModels.disjunctor = false;
  279. this.flag = true;
  280. },
  281. // 填写交接人工号弹窗
  282. showSelectAccount() {
  283. this.hosModels = {
  284. disjunctor: true,
  285. };
  286. },
  287. // 知道了
  288. showAlert() {
  289. uni.navigateTo({
  290. url: "../receiptpage/receiptpage",
  291. });
  292. },
  293. // 标本配送-待送达-运输过程-标本数字交接,则,科室签到不需要填写交接人
  294. validateHandoverSpecimen(){
  295. return post("/simple/data/fetchDataList/taskType", {
  296. "idx": 0,
  297. "sum": 1,
  298. "taskType": {
  299. "hosId": {
  300. "id": this.hosId
  301. },
  302. "associationType": {
  303. "key": "association_types",
  304. "value": "specimen"
  305. }
  306. }
  307. });
  308. },
  309. //科室签到
  310. //trueBigScanner----判断是否大扫描
  311. //bigScanner----判断是否需要交接人
  312. //accountObj----弹窗填写的交接人信息
  313. async orderDeptHandler(bigScanner, accountObj) {
  314. console.log(this.infoDATA);
  315. uni.showLoading({
  316. title: "加载中",
  317. mask: true,
  318. });
  319. if(this.tabType === 'specimen' && this.infoDATA.specimen && this.infoDATA.specimen[0].gdState.value == 5){
  320. let result = await this.validateHandoverSpecimen();
  321. if (result.status == 200) {
  322. if(result.list.length){
  323. // 标本-运送过程-终点科室-标本数字交接
  324. if(result.list[0].carryingCourses[1].checkoutMethod.value == 3){
  325. bigScanner = false;
  326. }
  327. }else{
  328. uni.showToast({
  329. icon: "none",
  330. title: "请配置标本配送任务类型!",
  331. });
  332. uni.hideLoading();
  333. return;
  334. }
  335. }
  336. }
  337. let type = "orderSign/" + this.code;
  338. let list = {
  339. ids: this.userId.ids,
  340. trueBigScanner: ['666']
  341. };
  342. bigScanner && (list.bigScanner = ['666']);
  343. if (accountObj) {
  344. list.handover = [accountObj.accountId];
  345. }
  346. post("/workerOrder/" + type, list).then((res) => {
  347. console.log(this.tabType)
  348. uni.hideLoading();
  349. if (res.status == 200) {
  350. if (this.tabType == "inspect" || this.tabType == "patientTransport") {
  351. if (res.ids) {
  352. for (var i = 0; i < this.userId.ids.length; i++) {
  353. if (this.userId.ids[i] == res.ids[0]) {
  354. this.userId.ids.splice(i, 1);
  355. }
  356. }
  357. }
  358. uni.navigateTo({
  359. url: `../scanning_djInfo/scanning_djInfo?type=${
  360. this.tabType
  361. }&type1=${res.type}&infoData=${res.data}&status=${
  362. res.status
  363. }&msg=${res.msg}&deptCode=${this.code}&dept=${
  364. res.dept
  365. }&ids=${encodeURIComponent(
  366. JSON.stringify(this.userId.ids)
  367. )}&model=${encodeURIComponent(JSON.stringify(res))}`,
  368. });
  369. } else if (this.tabType == 'specimenPlan') {
  370. // -----------------------------
  371. console.log(this.selectArr, '选中工单')
  372. let gd = this.infoDATA.specimenPlan.find(v => v.id == this.selectArr[0]);
  373. let startDeptId = gd.startDept.id; //起点科室id
  374. let isDigitalHandover = gd.taskType.isDigitalHandover; //是否数字交接开关
  375. let signDeptId = res.deptId; //签到的科室id
  376. let gdId = gd.id;
  377. let gdState = gd.gdState.value;
  378. let endDepts = gd.endDepts.map(v => v.id).toString();
  379. uni.navigateTo({
  380. url: `../scanning_djEnd/scanning_djEnd?type=${
  381. this.tabType
  382. }&type1=${res.type}&code=${this.code}&dept=${
  383. res.dept
  384. }&ids=${encodeURIComponent(
  385. JSON.stringify(this.userId.ids)
  386. )}&model=${encodeURIComponent(JSON.stringify(res))}&accountObj=${encodeURIComponent(JSON.stringify(accountObj))}&deptId=${res.deptId}&startDeptId=${startDeptId}&isDigitalHandover=${isDigitalHandover}&signDeptId=${signDeptId}&gdId=${gdId}&gdState=${gdState}&endDepts=${endDepts}`,
  387. });
  388. } else if (this.tabType == 'specimen') {
  389. if (res.deptType && res.deptType.value === 'middleRoom') {
  390. // 如果是中转科室
  391. uni.navigateTo({
  392. url: `../checkAfterBigScreen/checkAfterBigScreen?type=${
  393. this.tabType
  394. }&type1=${res.type}&code=${this.code}&dept=${
  395. res.dept
  396. }&ids=${encodeURIComponent(
  397. JSON.stringify(this.userId.ids)
  398. )}&model=${encodeURIComponent(JSON.stringify(res))}&accountObj=${encodeURIComponent(JSON.stringify(accountObj))}&deptId=${res.deptId}`,
  399. });
  400. } else if(res.type === 'spe-dsd-4'){
  401. // 检验方式是标本数字交接
  402. uni.navigateTo({
  403. url: `/pages/specimenHandoverNew/specimenHandoverNew?type=${
  404. this.tabType
  405. }&type1=${res.type}&code=${this.code}&dept=${
  406. res.dept
  407. }&ids=${encodeURIComponent(
  408. JSON.stringify(this.userId.ids)
  409. )}&model=${encodeURIComponent(JSON.stringify(res))}&accountObj=${encodeURIComponent(JSON.stringify(accountObj))}&deptId=${res.deptId}`,
  410. });
  411. } else {
  412. uni.navigateTo({
  413. url: `../scanning_djEnd/scanning_djEnd?type=${
  414. this.tabType
  415. }&type1=${res.type}&code=${this.code}&dept=${
  416. res.dept
  417. }&ids=${encodeURIComponent(
  418. JSON.stringify(this.userId.ids)
  419. )}&model=${encodeURIComponent(JSON.stringify(res))}&accountObj=${encodeURIComponent(JSON.stringify(accountObj))}&deptId=${res.deptId}`,
  420. });
  421. }
  422. } else {
  423. uni.navigateTo({
  424. url: `../scanning_djEnd/scanning_djEnd?type=${
  425. this.tabType
  426. }&type1=${res.type}&code=${this.code}&dept=${
  427. res.dept
  428. }&ids=${encodeURIComponent(
  429. JSON.stringify(this.userId.ids)
  430. )}&model=${encodeURIComponent(JSON.stringify(res))}&accountObj=${encodeURIComponent(JSON.stringify(accountObj))}&deptId=${res.deptId}`,
  431. });
  432. }
  433. } else if (res.status == "0000") {
  434. this.showSelectAccount();
  435. } else {
  436. this.flag = true;
  437. uni.navigateTo({
  438. url: `../scanning_djEnd/scanning_djEnd?type=${this.tabType}&type1=${
  439. res.type
  440. }&code=${this.code}&dept=${res.dept}&ids=${encodeURIComponent(
  441. JSON.stringify(this.userId.ids)
  442. )}&model=${encodeURIComponent(JSON.stringify(res))}&deptId=${res.deptId}`,
  443. });
  444. }
  445. });
  446. },
  447. //一键操作
  448. allStart() {
  449. console.log(this.tabType)
  450. clearTimeout(this.flagTimer);
  451. this.flagTimer = setTimeout(() => {
  452. this.flag = false;
  453. let list = {};
  454. let type = "";
  455. console.log(this.userId)
  456. if (this.userId.ids.length > 0) {
  457. if (this.tabType == "blood") {
  458. uni.showLoading({
  459. title: "加载中",
  460. mask: true,
  461. });
  462. // 判断是否签到批量核对
  463. post('/simple/data/fetchDataList/taskTypeConfig', {
  464. idx: 0,
  465. sum: 1,
  466. taskTypeConfig: {
  467. "taskTypeDTO": {
  468. "hosId": {
  469. "id": this.hosId
  470. },
  471. "ordinaryField": {
  472. "key": "ordinary_field",
  473. "value": "blood"
  474. }
  475. }
  476. },
  477. }).then(res => {
  478. if(res.status == 200){
  479. let list = res.list || [];
  480. if(list.length > 0){
  481. let signTypeList = list[0].signTypeList || [];
  482. let signType = signTypeList.find( v => v.value == 4 );
  483. if(signType){
  484. uni.hideLoading();
  485. uni.navigateTo({
  486. url: `/pages/newBlood/endOrderSignBlood/endOrderSignBlood?orderIds=${this.userId.ids.toString()}&deptName=${this.deptName}&deptId=${this.deptId}`,
  487. });
  488. }else{
  489. // 万能交接服务的血制品
  490. let postData = {
  491. "idx": 0,
  492. "sum": 1,
  493. "taskTypeConfig": {
  494. "taskTypeDTO": {
  495. "hosId": {
  496. "id": this.hosId
  497. },
  498. "ordinaryField": {
  499. "key": "ordinary_field",
  500. "value": "blood"
  501. }
  502. }
  503. }
  504. };
  505. post("/simple/data/fetchDataList/taskTypeConfig", postData).then((result) => {
  506. uni.hideLoading();
  507. if(result.status == 200){
  508. if(result.list && result.list[0] && result.list[0].checkType){
  509. if(result.list[0].checkType.value == 1){
  510. // 起点终点科室按照血制品类型进行核对
  511. uni.navigateTo({
  512. url: `../signIn_blood/signIn_blood?deptName=${this.deptName}&orderId=${this.userId.ids[0]}`,
  513. });
  514. }else if(result.list[0].checkType.value == 2){
  515. // 终点科室无需扫码进行核对
  516. uni.navigateTo({
  517. url: `../check_blood/check_blood?orderId=${this.userId.ids[0]}`,
  518. });
  519. }
  520. }else{
  521. uni.showToast({
  522. icon: "none",
  523. title: "请前往血制品配置页面配置核对方式!",
  524. });
  525. }
  526. }else{
  527. uni.showToast({
  528. icon: "none",
  529. title: result.msg || "接口获取数据失败!",
  530. });
  531. }
  532. })
  533. }
  534. }else{
  535. uni.showToast({
  536. icon: "none",
  537. title: "请配置血制品任务类型!",
  538. });
  539. }
  540. }else{
  541. uni.hideLoading();
  542. uni.showToast({
  543. icon: "none",
  544. title: res.msg || "接口获取数据失败!",
  545. });
  546. }
  547. })
  548. }else if (this.tabType == "clothingGet") {
  549. uni.navigateTo({
  550. url: `../quiltWashing/quiltWashingGetEndCheck/quiltWashingGetEndCheck?orderIds=${this.userId.ids.toString()}&endDeptName=${this.deptName}`
  551. })
  552. } else if (this.tabType == "clothingSend") {
  553. let postData = {
  554. ids: this.userId.ids,
  555. type: 'clothingSend',
  556. };
  557. uni.showLoading({
  558. title: "加载中",
  559. mask: true,
  560. });
  561. post("/transflow/bigScan", postData).then((res) => {
  562. uni.hideLoading();
  563. if (res.status == 200) {
  564. uni.navigateTo({
  565. url: "../receiptpage/receiptpage",
  566. });
  567. } else {
  568. uni.showToast({
  569. icon: "none",
  570. title: res.msg || "接口获取数据失败!",
  571. });
  572. }
  573. });
  574. } else if (
  575. this.tabType == "drugsBag" ||
  576. this.tabType == "jPBag" ||
  577. this.tabType == "other" ||
  578. this.tabType == "specimen" ||
  579. this.tabType == "specimenPlan"
  580. ) {
  581. this.orderDeptHandler(true);
  582. } else {
  583. if (!this.SMFlag) {
  584. return;
  585. }
  586. this.SMFlag = false;
  587. SM()
  588. .then((ress1) => {
  589. uni.showLoading({
  590. title: "加载中",
  591. mask: true,
  592. });
  593. //检验二维码的有效性
  594. post("/dept/scanning", {
  595. content: ress1,
  596. }).then((result) => {
  597. this.SMFlag = true;
  598. this.currentCode = result.code;
  599. if (result.state == 200 || result.state == 201) {
  600. let ress = result.code;
  601. if (ress) {
  602. if (this.tabType == "patientTransport") {
  603. type = "handleTrans";
  604. let data = {
  605. ids: this.userId.ids,
  606. deptCode: this.code,
  607. code: ress,
  608. };
  609. list = data;
  610. }
  611. if (this.tabType == "inspect") {
  612. type = "handleIns";
  613. let data = {
  614. ids: this.userId.ids,
  615. deptCode: this.code,
  616. code: ress,
  617. };
  618. list = data;
  619. }
  620. post("/workerOrder/" + type, list).then((res) => {
  621. uni.hideLoading();
  622. if (res.status == 200) {
  623. if (
  624. this.tabType == "inspect" ||
  625. this.tabType == "patientTransport"
  626. ) {
  627. if (res.ids) {
  628. for (var i = 0; i < this.userId.ids.length; i++) {
  629. if (this.userId.ids[i] == res.ids[0]) {
  630. this.userId.ids.splice(i, 1);
  631. }
  632. }
  633. }
  634. uni.navigateTo({
  635. url: `../scanning_djInfo/scanning_djInfo?type=${
  636. this.tabType
  637. }&type1=${res.type}&infoData=${res.data}&status=${
  638. res.status
  639. }&msg=${res.msg}&deptCode=${this.code}&dept=${
  640. res.dept
  641. }&ids=${encodeURIComponent(
  642. JSON.stringify(this.userId.ids)
  643. )}&model=${encodeURIComponent(
  644. JSON.stringify(res)
  645. )}`,
  646. });
  647. } else {
  648. uni.navigateTo({
  649. url: `../scanning_djEnd/scanning_djEnd?type=${
  650. this.tabType
  651. }&type1=${res.type}&dept=${
  652. res.dept
  653. }&ids=${encodeURIComponent(
  654. JSON.stringify(this.userId.ids)
  655. )}&model=${encodeURIComponent(
  656. JSON.stringify(res)
  657. )}&code=${this.code}`,
  658. });
  659. }
  660. } else {
  661. uni.navigateTo({
  662. url: `../scanning_djEnd/scanning_djEnd?type=${
  663. this.tabType
  664. }&type1=${res.type}&dept=${
  665. res.dept
  666. }&ids=${encodeURIComponent(
  667. JSON.stringify(this.userId.ids)
  668. )}&model=${encodeURIComponent(
  669. JSON.stringify(res)
  670. )}&code=${this.code}&qrcode=${this.currentCode}`,
  671. });
  672. }
  673. });
  674. }
  675. } else {
  676. this.flag = true;
  677. uni.hideLoading();
  678. uni.showToast({
  679. icon: "none",
  680. title: result.info || "接口获取数据失败!",
  681. });
  682. }
  683. });
  684. })
  685. .catch((err) => {
  686. this.SMFlag = true;
  687. });
  688. }
  689. } else {
  690. this.flag = true;
  691. this.models = {
  692. disjunctor: true,
  693. title: "提示",
  694. content: "请选择工单!",
  695. icon: "warn",
  696. operate: {
  697. know: "知道了",
  698. },
  699. };
  700. }
  701. }, 500);
  702. },
  703. typePD(data, list) {
  704. if (list) {
  705. if (data.length >= 2) {
  706. for (var i = 0; i < data.length; i++) {
  707. if (data[i].gdState.value != list.gdState.value) {
  708. this.typeData.splice(i, 1);
  709. this.types = true;
  710. }
  711. }
  712. } else {
  713. this.types = false;
  714. }
  715. } else if (data.length == 1) {
  716. this.types = false;
  717. } else {
  718. this.types = false;
  719. for (var i = 0; i < data.length; i++) {
  720. if (data[0].gdState.value != data[i].gdState.value) {
  721. this.typeData.splice(i, 1);
  722. this.types = true;
  723. }
  724. }
  725. }
  726. },
  727. act(type) {
  728. this.Dall();
  729. this.tabType = type;
  730. this.workData = this.infoDATA[type] || [];
  731. this.all();
  732. },
  733. // 已选择的项中是否包含该id
  734. hasSelect(id) {
  735. return this.selectArr.includes(id);
  736. },
  737. //取消
  738. ac(data, i) {
  739. console.log(data, i, this.selectArr, this.userId.ids, this.typeData);
  740. // id放入数组
  741. this.selectArr = this.selectArr.filter((item) => item != data.id);
  742. for (var i = 0; i < this.userId.ids.length; i++) {
  743. if (this.userId.ids[i] == data.id) {
  744. this.typeData.splice(i, 1);
  745. this.userId.ids.splice(i, 1);
  746. }
  747. }
  748. },
  749. //选中
  750. ac1(data, i) {
  751. console.log(data, i, this.userId.ids, '选中');
  752. if (this.tabType == 'specimenPlan' && this.typeData.length > 0) {
  753. this.typeData = [data];
  754. } else {
  755. this.typeData.push(data);
  756. }
  757. this.types = false;
  758. for (var i = 0; i < this.typeData.length; i++) {
  759. if (this.typeData[0].gdState.value != this.typeData[i].gdState.value) {
  760. this.models = {
  761. disjunctor: true,
  762. title: "提示",
  763. content: "请选择不同状态的工单!",
  764. icon: "warn",
  765. operate: {
  766. know: "知道了",
  767. },
  768. };
  769. this.typeData.splice(i, 1);
  770. this.types = true;
  771. }
  772. }
  773. if (!this.types) {
  774. if (this.tabType == 'specimenPlan' && this.typeData.length > 0) {
  775. this.userId.ids = [data.id];
  776. this.selectArr = [data.id];
  777. } else {
  778. this.userId.ids.push(data.id);
  779. this.selectArr.push(data.id);
  780. }
  781. }
  782. },
  783. //全选
  784. all() {
  785. let id = [];
  786. this.typeData = JSON.parse(JSON.stringify(this.workData));
  787. this.typePD(this.workData);
  788. if (this.types) {
  789. this.models = {
  790. disjunctor: true,
  791. title: "提示",
  792. content: "请选择不同状态的工单!",
  793. icon: "warn",
  794. operate: {
  795. know: "知道了",
  796. },
  797. };
  798. this.typeData = [];
  799. } else {
  800. for (var i = 0; i < this.workData.length; i++) {
  801. id.push(this.workData[i].id);
  802. this.selectArr.push(this.workData[i].id);
  803. }
  804. this.userId.ids = id;
  805. }
  806. },
  807. //全不选
  808. Dall() {
  809. this.selectArr = [];
  810. this.typeData = [];
  811. this.userId.ids = [];
  812. },
  813. texiao() {
  814. setTimeout(() => {
  815. this.animation.height(0).opacity(0).step();
  816. this.animationData = this.animation.export();
  817. }, 15000);
  818. },
  819. // 知道了
  820. know() {
  821. this.models.disjunctor = false;
  822. },
  823. },
  824. onLoad(options) {
  825. console.log(options, 'options');
  826. this.infoDATA = JSON.parse(options.infoDATA); //扫描科室码返回的信息
  827. console.log(this.infoDATA);
  828. this.code = options.code; //扫描科室码返回的二维码信息
  829. this.deptName = options.deptName; //扫描科室码返回的科室名称
  830. this.deptId = options.deptId; //扫描科室码返回的科室ID
  831. let arr = [];
  832. for (let key in this.infoDATA) {
  833. if(key === 'ordinary'){
  834. // 如果是万能交接服务,key值要从关联业务区分
  835. this.infoDATA['ordinary'].forEach(v => {
  836. arr.push(v.taskType.ordinaryField.value);
  837. if(this.infoDATA[v.taskType.ordinaryField.value]){
  838. this.infoDATA[v.taskType.ordinaryField.value].push(v);
  839. }else{
  840. this.infoDATA[v.taskType.ordinaryField.value] = [v];
  841. }
  842. })
  843. delete this.infoDATA['ordinary'];
  844. }else{
  845. arr.push(key);
  846. }
  847. }
  848. console.log(this.infoDATA);
  849. this.workData = this.infoDATA[arr[0]] || [];
  850. this.tabType = arr[0];
  851. this.all();
  852. // #ifdef APP-PLUS
  853. webHandle("no", "app");
  854. // #endif
  855. // #ifdef H5
  856. webHandle("no", "wx");
  857. // #endif
  858. },
  859. onShow() {
  860. this.SMFlag = true;
  861. this.flag = true;
  862. // 创建动画
  863. this.animation = uni.createAnimation({
  864. duration: 500,
  865. timingFunction: "ease",
  866. delay: 2000,
  867. });
  868. setTimeout(() => {
  869. this.texiao();
  870. }, 500);
  871. },
  872. onHide() {
  873. this.animationData = {};
  874. },
  875. onUnload() {
  876. // 页面关闭后清空数据
  877. this.animationData = {};
  878. },
  879. created(){
  880. this.hosId = uni.getStorageSync('userData').user.currentHospital.id;
  881. }
  882. };
  883. </script>
  884. <style lang="less">
  885. ::-webkit-scrollbar {
  886. width: 0;
  887. }
  888. ::-webkit-scrollbar-track {
  889. background-color: none;
  890. }
  891. ::-webkit-scrollbar-thumb {
  892. background-color: none;
  893. }
  894. ::-webkit-scrollbar-thumb:hover {
  895. background-color: none;
  896. }
  897. ::-webkit-scrollbar-thumb:active {
  898. background-color: none;
  899. }
  900. .Scanning_all {
  901. .title {
  902. font-size: 36rpx;
  903. margin-top: 20rpx;
  904. margin-bottom: 20rpx;
  905. font-weight: 700;
  906. position: relative;
  907. height: 40rpx;
  908. .span1 {
  909. position: absolute;
  910. left: 0;
  911. font-weight: 700;
  912. }
  913. .span2 {
  914. position: absolute;
  915. right: 20%;
  916. color: rgb(73, 184, 86);
  917. }
  918. .span3 {
  919. position: absolute;
  920. right: 0;
  921. color: rgb(73, 184, 86);
  922. }
  923. }
  924. .tabs {
  925. height: 90rpx;
  926. width: 100%;
  927. overflow-x: auto;
  928. overflow-y: hidden;
  929. position: relative;
  930. background: #fff;
  931. .acts {
  932. background: #ccc;
  933. height: 50rpx !important;
  934. width: 80% !important;
  935. border-radius: 20rpx;
  936. }
  937. .tab {
  938. display: flex;
  939. align-items: center;
  940. flex-wrap: nowrap;
  941. height: 90rpx;
  942. position: absolute;
  943. width: auto;
  944. padding-top: 6rpx;
  945. view {
  946. display: inline-block;
  947. width: 300rpx;
  948. line-height: 48rpx;
  949. font-size: 32rpx;
  950. height: 100%;
  951. text-align: center;
  952. }
  953. }
  954. }
  955. .Scanning {
  956. padding: 0 20rpx;
  957. height: calc(100% - 100rpx);
  958. // seimin
  959. .Scanning_top {
  960. height: 400rpx;
  961. opacity: 1;
  962. .Scanning_top_icon {
  963. width: 140rpx;
  964. height: 140rpx;
  965. margin: 0 auto;
  966. margin-top: 36rpx;
  967. border-radius: 50%;
  968. line-height: 140rpx;
  969. .cubeic-ok {
  970. font-size: 140rpx;
  971. color: #35b34a;
  972. }
  973. .cubeic-close {
  974. font-size: 140rpx;
  975. color: #ff3b53;
  976. }
  977. }
  978. .Scanning_top_text {
  979. .text1 {
  980. margin-top: 40rpx;
  981. font-size: 48rpx;
  982. text-align: center;
  983. }
  984. }
  985. .Scanning_cont {
  986. font-size: 32rpx;
  987. margin-top: 30rpx;
  988. text-align: center;
  989. .text1 {
  990. margin-top: 24rpx;
  991. color: #ff3b53;
  992. }
  993. }
  994. }
  995. .page_items {
  996. margin-bottom: 110rpx;
  997. .zwsj {
  998. margin-top: 180rpx;
  999. text-align: center;
  1000. .zwsj-img {
  1001. width: 560rpx;
  1002. }
  1003. .zwsj_txt {
  1004. font-size: 36rpx;
  1005. font-weight: 700;
  1006. margin-top: 20rpx;
  1007. text-align: center;
  1008. }
  1009. }
  1010. .page_item {
  1011. margin-top: 16rpx;
  1012. min-height: 356rpx;
  1013. background: #fff;
  1014. border-radius: 8rpx;
  1015. overflow: hidden;
  1016. padding: 0 16rpx;
  1017. border: 2rpx solid #e5e9ed;
  1018. .L {
  1019. width: 40rpx;
  1020. height: 40rpx;
  1021. border-radius: 50%;
  1022. background: #f9fafb;
  1023. position: relative;
  1024. left: -50rpx;
  1025. top: 66rpx;
  1026. }
  1027. .R {
  1028. width: 40rpx;
  1029. height: 40rpx;
  1030. border-radius: 50%;
  1031. background: #f9fafb;
  1032. position: relative;
  1033. float: right;
  1034. right: -50rpx;
  1035. top: 26rpx;
  1036. }
  1037. .starting {
  1038. width: 50rpx;
  1039. height: 50rpx;
  1040. color: #fff;
  1041. background: #49b856;
  1042. display: inline-block;
  1043. border-radius: 50%;
  1044. text-align: center;
  1045. line-height: 46rpx;
  1046. font-size: 32rpx;
  1047. margin-right: 6rpx;
  1048. }
  1049. .End {
  1050. width: 50rpx;
  1051. height: 50rpx;
  1052. color: #fff;
  1053. background: #39b199;
  1054. display: inline-block;
  1055. border-radius: 50%;
  1056. text-align: center;
  1057. line-height: 46rpx;
  1058. font-size: 32rpx;
  1059. margin-right: 6rpx;
  1060. }
  1061. .page_item_top {
  1062. height: 86rpx;
  1063. border-bottom: 2rpx dashed #e5e9ed;
  1064. padding: 0 16rpx;
  1065. .page_item_top_L {
  1066. height: 100%;
  1067. float: left;
  1068. line-height: 88rpx;
  1069. display: flex;
  1070. align-items: center;
  1071. .ac {
  1072. width: 32rpx;
  1073. height: 32rpx;
  1074. border: 2rpx solid #ccc;
  1075. display: inline-block;
  1076. position: relative;
  1077. .ac-span {
  1078. position: absolute;
  1079. left: 50%;
  1080. top: 50%;
  1081. width: 24rpx;
  1082. height: 24rpx;
  1083. background: #39b199;
  1084. transform: translate(-50%, -50%);
  1085. }
  1086. }
  1087. .ac1 {
  1088. width: 32rpx;
  1089. height: 32rpx;
  1090. border: 2rpx solid #ccc;
  1091. display: inline-block;
  1092. position: relative;
  1093. }
  1094. .emergencys {
  1095. background: #ff3b53 !important;
  1096. width: 124rpx !important;
  1097. }
  1098. .emergency {
  1099. background: #ff3b53 !important;
  1100. }
  1101. .emergency1 {
  1102. background: #49b856 !important;
  1103. }
  1104. .page_item_cont_start {
  1105. text-align: center;
  1106. height: 44rpx;
  1107. width: 104rpx;
  1108. line-height: 44rpx;
  1109. border-radius: 8rpx;
  1110. background: #49b856;
  1111. color: #fff;
  1112. display: inline-block;
  1113. .page_item_cont_start_txt {
  1114. font-size: 28rpx;
  1115. display: flex;
  1116. align-items: center;
  1117. justify-content: center;
  1118. .cubeic-star {
  1119. font-size: 28rpx;
  1120. }
  1121. }
  1122. }
  1123. .L_time {
  1124. color: #6cc076;
  1125. font-size: 32rpx;
  1126. }
  1127. .L_text {
  1128. font-size: 32rpx;
  1129. display: inline-block;
  1130. font-weight: 700;
  1131. margin-right: 8rpx;
  1132. }
  1133. }
  1134. .page_item_top_R {
  1135. height: 60rpx;
  1136. float: right;
  1137. padding-top: 20rpx;
  1138. font-size: 32rpx;
  1139. position: absolute;
  1140. right: 50rpx;
  1141. .L_iocn {
  1142. display: inline-block;
  1143. height: 52rpx;
  1144. line-height: 48rpx;
  1145. color: rgb(7, 134, 60);
  1146. font-size: 36rpx;
  1147. font-weight: 700;
  1148. }
  1149. }
  1150. }
  1151. .page_item_cont {
  1152. min-height: 180rpx;
  1153. padding: 0 16rpx;
  1154. text-align: left;
  1155. position: relative;
  1156. .text_big {
  1157. font-size: 32rpx;
  1158. position: absolute;
  1159. right: 16rpx;
  1160. font-weight: 700;
  1161. margin-top: 10rpx;
  1162. }
  1163. .text_big2 {
  1164. font-size: 32rpx;
  1165. position: absolute;
  1166. right: 16rpx;
  1167. font-weight: 700;
  1168. }
  1169. .line {
  1170. height: 20rpx;
  1171. width: 2rpx;
  1172. border-left: 2rpx solid #e5e9ed;
  1173. position: absolute;
  1174. top: 82rpx;
  1175. left: 40rpx;
  1176. }
  1177. .lines {
  1178. height: 40%;
  1179. width: 2rpx;
  1180. border-left: 2rpx solid #e5e9ed;
  1181. position: absolute;
  1182. top: 23%;
  1183. left: 36rpx;
  1184. }
  1185. .page_item_cont_T {
  1186. padding-top: 28rpx;
  1187. font-size: 28rpx;
  1188. .page_item_cont_title {
  1189. height: 100%;
  1190. font-size: 32rpx;
  1191. }
  1192. }
  1193. .page_item_cont_B {
  1194. padding-top: 28rpx;
  1195. margin-bottom: 28rpx;
  1196. .page_item_cont_title {
  1197. height: 60rpx;
  1198. font-size: 32rpx;
  1199. }
  1200. .page_item_cont_title1 {
  1201. height: 60rpx;
  1202. line-height: 60rpx;
  1203. font-size: 32rpx;
  1204. padding-left: 64rpx;
  1205. }
  1206. }
  1207. }
  1208. .page_item_foot {
  1209. border-top: 2rpx dashed #e5e9ed;
  1210. border-bottom: 2rpx dashed #e5e9ed;
  1211. padding: 28rpx 16rpx;
  1212. text-align: left;
  1213. .page_item_foot_text {
  1214. height: 48rpx;
  1215. font-size: 32rpx;
  1216. line-height: 48rpx;
  1217. margin-bottom: 20rpx;
  1218. .text1 {
  1219. color: rgb(102, 102, 102);
  1220. }
  1221. .text2 {
  1222. float: right;
  1223. font-weight: 700;
  1224. }
  1225. }
  1226. }
  1227. #infos {
  1228. display: none;
  1229. }
  1230. .page_item_infos {
  1231. padding-bottom: 20rpx;
  1232. border-bottom: 2rpx dashed #e5e9ed;
  1233. .page_item_info2 {
  1234. text-align: left;
  1235. line-height: 60rpx;
  1236. font-size: 32rpx;
  1237. padding-left: 16rpx;
  1238. .page_item_foot_text {
  1239. height: 48rpx;
  1240. font-size: 32rpx;
  1241. line-height: 48rpx;
  1242. margin-bottom: 20rpx;
  1243. .text1 {
  1244. color: rgb(102, 102, 102);
  1245. }
  1246. .text2 {
  1247. float: right;
  1248. font-weight: 700;
  1249. }
  1250. }
  1251. }
  1252. }
  1253. }
  1254. }
  1255. .foot_btn2 {
  1256. position: fixed;
  1257. bottom: 0;
  1258. right: 20rpx;
  1259. left: 20rpx;
  1260. line-height: 66rpx;
  1261. height: 100rpx;
  1262. border-top: 2rpx solid #e5e9ed;
  1263. background: #f9fafb;
  1264. display: flex;
  1265. .btn1,
  1266. .btn2 {
  1267. height: 66rpx;
  1268. flex: 1;
  1269. margin: 0 2%;
  1270. background-image: linear-gradient(to right, #72c172, #3bb197);
  1271. color: #fff;
  1272. border-radius: 8rpx;
  1273. font-size: 32rpx;
  1274. margin-top: 16rpx;
  1275. text-align: center;
  1276. }
  1277. }
  1278. .foot_btn1 {
  1279. position: fixed;
  1280. bottom: 0;
  1281. right: 20rpx;
  1282. left: 20rpx;
  1283. line-height: 66rpx;
  1284. height: 100rpx;
  1285. border-top: 2rpx solid #e5e9ed;
  1286. background: #f9fafb;
  1287. text-align: center;
  1288. .btn3 {
  1289. height: 66rpx;
  1290. width: 100%;
  1291. background-image: linear-gradient(to right, #72c172, #3bb197);
  1292. color: #fff;
  1293. border-radius: 8rpx;
  1294. font-size: 32rpx;
  1295. margin-top: 16rpx;
  1296. }
  1297. }
  1298. }
  1299. }
  1300. </style>