detail.vue 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090
  1. <template>
  2. <view>
  3. <scroll-view scroll-y="true" class="detail_top" :style="datailData.status == 0 ? 'height:68vh;' : 'height:90vh;'" v-if="datailData != null">
  4. <view class="detail_topbox">
  5. <view class="detail_topbox_1">
  6. <text v-if="datailData.purpose==1">教学借单</text>
  7. <text v-else-if="datailData.purpose==0">科研借单</text>
  8. <text
  9. style="background-color: #d9ecff;margin: 0rpx 10rpx;padding: 4rpx 10rpx; color: #007cff; font-size: 23rpx; ">借单号:{{datailData.encoding}}</text>
  10. <block>
  11. <text class="detail_zt">{{status[datailData.status]}}</text>
  12. </block>
  13. </view>
  14. <view class="detail_topbox_2">
  15. <view class="">
  16. <text class="detail_tou">借取人:</text><text style="width: 30%;"
  17. class="detail_tou2">{{datailData.username}}</text>
  18. <block v-if="datailData.status==0|| datailData.status==1">
  19. <view class="detail_tou">仪器总数:</view>{{yiqisum}}{{'&nbsp;'}}
  20. </block>
  21. <block v-else>
  22. <view class="detail_tou">仪器总数:</view>{{datailData.asset.length}}{{'&nbsp;'}}
  23. </block>
  24. </view>
  25. <uv-line></uv-line>
  26. <view class="" v-if="datailData.purpose==0">
  27. <view class="detail_tou">项目编号:</view>{{datailData.project_number}}{{'&nbsp;'}}
  28. </view>
  29. <uv-line v-if="datailData.purpose==0"></uv-line>
  30. <view class="">
  31. <view class="detail_tou">申请时间:</view>{{datailData.create_time}}{{'&nbsp;'}}
  32. </view>
  33. <uv-line></uv-line>
  34. <uni-collapse accordion v-model="accordionVal" @change="change">
  35. <block v-if="datailData.borrow_reason!=null">
  36. <uni-collapse-item
  37. :title="'借取用途:&nbsp;&nbsp;&nbsp;' +datailData.borrow_reason.slice(0, 13)+'.....'"
  38. v-if="datailData.borrow_reason.length > 13 ">
  39. <view class="content">
  40. <text class="text">{{datailData.borrow_reason}}</text>
  41. </view>
  42. </uni-collapse-item>
  43. <block v-else>
  44. <view class="">
  45. <view class="detail_tou">借取用途:</view>{{datailData.borrow_reason}}{{'&nbsp;'}}
  46. </view>
  47. <uv-line></uv-line>
  48. </block>
  49. </block>
  50. <block v-if="datailData.remarks!=null">
  51. <uni-collapse-item :title="'借取人备注:&nbsp;&nbsp;&nbsp;'+ datailData.remarks.slice(0, 13)+'.....'"
  52. v-if="datailData.remarks.length > 13">
  53. <view class="content">
  54. <text class="text">{{datailData.remarks}}{{'&nbsp;'}}</text>
  55. </view>
  56. </uni-collapse-item>
  57. <block v-else>
  58. <view class="">
  59. <view class="detail_tou">借取人备注: {{datailData.remarks}}</view>
  60. </view>
  61. <uv-line></uv-line>
  62. </block>
  63. </block>
  64. <view class="" v-if="datailData.status !== 0">
  65. <view class="detail_tou">实验室审批人:</view>{{datailData.approval_person}}{{'&nbsp;'}}
  66. </view>
  67. <view class="" v-else>
  68. <view class="detail_tou">仪器管理员:</view>{{datailData.approval_person}}{{'&nbsp;'}}
  69. </view>
  70. <uv-line></uv-line>
  71. <view class="" v-if="datailData.purpose == 0 ">
  72. <view class="detail_tou">学院审批人:</view>{{datailData.college_leader}}{{'&nbsp;'}}
  73. </view>
  74. <uv-line></uv-line>
  75. <block v-if="datailData.annotation!=null">
  76. <uni-collapse-item
  77. :title="'批注:&nbsp;&nbsp;&nbsp;'+ datailData.annotation.slice(0, 13)+'.....'"
  78. v-if="datailData.annotation.length > 13">
  79. <view class="content">
  80. <text class="text">{{datailData.annotation}}{{'&nbsp;'}}</text>
  81. </view>
  82. </uni-collapse-item>
  83. <block v-else>
  84. <view class="">
  85. <view class="detail_tou">批注:</view>{{datailData.annotation}}{{'&nbsp;'}}
  86. </view>
  87. </block>
  88. </block>
  89. <view class="" v-if="datailData.status == 0">
  90. <view class="detail_tou">电子签名:</view>
  91. <view class="" style="float: left;">
  92. <image style="width: 200px; height: 200px; background-color: #eeeeee;" :src="'https://yxy.glut.cc/' + datailData.sign"></image>
  93. </view>
  94. </view>
  95. <uv-line></uv-line>
  96. </uni-collapse>
  97. <view style="margin-top: 20rpx;" v-if="userInfo.userInfo.group == 1|| userInfo.userInfo.group == 2">
  98. <view class="detail_tou" style="color: #2d8cf0;font-weight: bold;">留存拍照</view>
  99. <view class="" style="float: left;">
  100. <uv-upload :fileList="fileList1" name="1" multiple :maxCount="3" @afterRead="afterRead"
  101. @delete="deletePic"></uv-upload>
  102. </view>
  103. </view>
  104. </view>
  105. </view>
  106. <view class="biaoge_box">
  107. <view style="background-color: #f4f5f9; width: 100%;height: 20rpx;">
  108. </view>
  109. <block v-if="datailData.status==0|| datailData.status==1 ||datailData.status==6 ||datailData.status==7">
  110. <uni-table border stripe emptyText="暂无更多数据">
  111. <!-- 表头行 -->
  112. <uni-tr>
  113. <uni-th align="left" width=180>仪器名称</uni-th>
  114. <uni-th align="left" width=100>数量</uni-th>
  115. </uni-tr>
  116. <!-- 表格数据行 -->
  117. <uni-tr v-for="(item, index) in datailData.asset" :key="index">
  118. <uni-td>{{item.model}}</uni-td>
  119. <uni-td>{{item.num}}</uni-td>
  120. </uni-tr>
  121. </uni-table>
  122. </block>
  123. <block v-else>
  124. <view class="unfold" v-if="unfold!='true'">
  125. <image @click="unfold='true'" src="../../static/img/unfold.png" mode="widthFix"
  126. style="width: 35rpx;"></image>
  127. </view>
  128. <uni-table border stripe emptyText="暂无更多数据">
  129. <!-- 表头行 -->
  130. <uni-tr>
  131. <uni-th align="left" width=70>状态</uni-th>
  132. <uni-th align="left" width=130>仪器名称</uni-th>
  133. <uni-th align="left" width=100>仪器编号</uni-th>
  134. <block v-if="datailData.purpose==1">
  135. <uni-th align="left" width=70>借取人</uni-th>
  136. </block>
  137. <block v-if="unfold">
  138. <uni-th align="left" width=100>借出处理人</uni-th>
  139. <uni-th align="left" width=100>归还处理人</uni-th>
  140. <uni-th align="left" width=160>领取时间</uni-th>
  141. <uni-th align="left" width=160>归还时间</uni-th>
  142. </block>
  143. </uni-tr>
  144. <!-- 表格数据行 -->
  145. <uni-tr v-for="(item, index) in datailData.asset" :key="index">
  146. <uni-td>
  147. <text class="uni_zt" v-if="item.status==-1">待借出</text>
  148. <text style="color: #2d8cf0;" class="uni_zt" v-else-if="item.status==0">使用中</text>
  149. <text class="uni_zt" v-else-if="item.status==1">损坏</text>
  150. <text style="color: #19be6b;" class="uni_zt" v-else-if="item.status==2">归还</text>
  151. <text style="color: #808695;" class="uni_zt" v-else-if="item.status==3">已替换</text>
  152. </uni-td>
  153. <uni-td>{{item.asset_name}}</uni-td>
  154. <uni-td>{{item.asset_id}}</uni-td>
  155. <block v-if="datailData.purpose==1">
  156. <uni-td>{{item.student_name}}</uni-td>
  157. </block>
  158. <block v-if="unfold">
  159. <uni-td>{{item.lend_processor}}</uni-td>
  160. <uni-td>{{item.restitution_processor}}</uni-td>
  161. <uni-td>{{item.collection_time}}</uni-td>
  162. <uni-td>{{item.restitution_time}}</uni-td>
  163. </block>
  164. </uni-tr>
  165. <!-- 占位 -->
  166. <view class="" style="height: 200rpx; width: 100%;">
  167. </view>
  168. </uni-table>
  169. </block>
  170. <block>
  171. <uni-table border stripe emptyText="暂无更多数据" >
  172. <block v-if="datailData?.accessories != null">
  173. <!-- 表头行 -->
  174. <uni-tr>
  175. <uni-th align="left" width=180>配件名称</uni-th>
  176. <uni-th align="left" width=100>数量</uni-th>
  177. </uni-tr>
  178. <!-- 表格数据行 -->
  179. <uni-tr v-if="datailData.accessories?.w_battery !== null && datailData.accessories?.w_battery !== 0">
  180. <uni-td>无人机电池</uni-td>
  181. <uni-td>{{ datailData.accessories.w_battery }}</uni-td>
  182. </uni-tr>
  183. <uni-tr v-if="datailData.accessories?.w_remote_control !== null &&datailData.accessories?.w_remote_control !== 0">
  184. <uni-td>无人机遥控器</uni-td>
  185. <uni-td>{{ datailData.accessories.w_remote_control }}</uni-td>
  186. </uni-tr>
  187. <uni-tr v-if="datailData.accessories?.w_remote_control_battery !== null &&datailData.accessories?.w_remote_control_battery !== 0">
  188. <uni-td>无人机遥控器电池</uni-td>
  189. <uni-td>{{ datailData.accessories.w_remote_control_battery }}</uni-td>
  190. </uni-tr>
  191. <uni-tr v-if="datailData.accessories?.w_charge_housekeeper !== null &&datailData.accessories?.w_charge_housekeeper !== 0">
  192. <uni-td>无人机充电管家</uni-td>
  193. <uni-td>{{ datailData.accessories.w_charge_housekeeper }}</uni-td>
  194. </uni-tr>
  195. <uni-tr v-if="datailData.accessories?.w_propeller !== null &&datailData.accessories?.w_propeller !== 0">
  196. <uni-td>螺旋桨</uni-td>
  197. <uni-td>{{ datailData.accessories.w_propeller }}</uni-td>
  198. </uni-tr>
  199. <uni-tr v-if="datailData.accessories?.w_sd !== null &&datailData.accessories?.w_sd !== 0">
  200. <uni-td>SD卡</uni-td>
  201. <uni-td>{{ datailData.accessories.w_sd }}</uni-td>
  202. </uni-tr>
  203. <uni-tr v-if="datailData.accessories?.q_battery !== null &&datailData.accessories?.q_battery !== 0">
  204. <uni-td>全站仪主机电池</uni-td>
  205. <uni-td>{{ datailData.accessories.q_battery }}</uni-td>
  206. </uni-tr>
  207. <uni-tr v-if="datailData.accessories?.q_charge_housekeeper !== null &&datailData.accessories?.q_charge_housekeeper !== 0">
  208. <uni-td>全站仪主机充电器</uni-td>
  209. <uni-td>{{ datailData.accessories.q_charge_housekeeper }}</uni-td>
  210. </uni-tr>
  211. <uni-tr v-if="datailData.accessories?.q_tripod !== null &&datailData.accessories?.q_tripod !== 0">
  212. <uni-td>全站仪三脚架</uni-td>
  213. <uni-td>{{ datailData.accessories.q_tripod }}</uni-td>
  214. </uni-tr>
  215. <uni-tr v-if="datailData.accessories?.q_prism !== null &&datailData.accessories?.q_prism !== 0">
  216. <uni-td>全站仪棱镜</uni-td>
  217. <uni-td>{{ datailData.accessories.q_prism }}</uni-td>
  218. </uni-tr>
  219. <uni-tr v-if="datailData.accessories?.q_center_bar !== null &&datailData.accessories?.q_center_bar !== 0">
  220. <uni-td>对中杆</uni-td>
  221. <uni-td>{{ datailData.accessories.q_center_bar }}</uni-td>
  222. </uni-tr>
  223. <uni-tr v-if="datailData.accessories?.q_data_line !== null &&datailData.accessories?.q_data_line !== 0">
  224. <uni-td>数据线</uni-td>
  225. <uni-td>{{ datailData.accessories.q_data_line }}</uni-td>
  226. </uni-tr>
  227. <uni-tr v-if="datailData.accessories?.s_battery !== null &&datailData.accessories?.s_battery !== 0">
  228. <uni-td>水准仪主机电池</uni-td>
  229. <uni-td>{{ datailData.accessories.s_battery }}</uni-td>
  230. </uni-tr>
  231. <uni-tr v-if="datailData.accessories?.s_charge_housekeeper !== null &&datailData.accessories?.s_charge_housekeeper !== 0">
  232. <uni-td>水准仪充电器</uni-td>
  233. <uni-td>{{ datailData.accessories.s_charge_housekeeper }}</uni-td>
  234. </uni-tr>
  235. <uni-tr v-if="datailData.accessories?.s_tripod !== null &&datailData.accessories?.s_tripod !== 0">
  236. <uni-td>水准仪三脚架</uni-td>
  237. <uni-td>{{ datailData.accessories.s_tripod }}</uni-td>
  238. </uni-tr>
  239. <uni-tr v-if="datailData.accessories?.s_level_gauge !== null &&datailData.accessories?.s_level_gauge !== 0">
  240. <uni-td>水准尺</uni-td>
  241. <uni-td>{{ datailData.accessories.s_level_gauge }}</uni-td>
  242. </uni-tr>
  243. <uni-tr v-if="datailData.accessories?.s_ruler_pad !== null &&datailData.accessories?.s_ruler_pad !== 0">
  244. <uni-td>水准尺尺垫</uni-td>
  245. <uni-td>{{ datailData.accessories.s_ruler_pad }}</uni-td>
  246. </uni-tr>
  247. <uni-tr v-if="datailData.accessories?.s_data_line !== null &&datailData.accessories?.s_data_line !== 0">
  248. <uni-td>水准仪电源线</uni-td>
  249. <uni-td>{{ datailData.accessories.s_data_line }}</uni-td>
  250. </uni-tr>
  251. <uni-tr v-if="datailData.accessories?.s_adjustment_wrench !== null &&datailData.accessories?.s_adjustment_wrench !== 0">
  252. <uni-td>水准仪调节扳手</uni-td>
  253. <uni-td>{{ datailData.accessories.s_adjustment_wrench }}</uni-td>
  254. </uni-tr>
  255. <uni-tr v-if="datailData.accessories?.s_rain_proof_cloth !== null &&datailData.accessories?.s_rain_proof_cloth !== 0">
  256. <uni-td>防雨布</uni-td>
  257. <uni-td>{{ datailData.accessories.s_rain_proof_cloth }}</uni-td>
  258. </uni-tr>
  259. <uni-tr v-if="datailData.accessories?.r_battery !== null &&datailData.accessories?.r_battery !== 0">
  260. <uni-td>RTK主机电池</uni-td>
  261. <uni-td>{{ datailData.accessories.r_battery }}</uni-td>
  262. </uni-tr>
  263. <uni-tr v-if="datailData.accessories?.r_charge_housekeeper !== null &&datailData.accessories?.r_charge_housekeeper !== 0">
  264. <uni-td>RTK充电器</uni-td>
  265. <uni-td>{{ datailData.accessories.r_charge_housekeeper }}</uni-td>
  266. </uni-tr>
  267. <uni-tr v-if="datailData.accessories?.r_charging_head !== null &&datailData.accessories?.r_charging_head !== 0">
  268. <uni-td>手簿</uni-td>
  269. <uni-td>{{ datailData.accessories.r_charging_head }}</uni-td>
  270. </uni-tr>
  271. <uni-tr v-if="datailData.accessories?.r_hand_book_holder !== null &&datailData.accessories?.r_hand_book_holder !== 0">
  272. <uni-td>手簿夹</uni-td>
  273. <uni-td>{{ datailData.accessories.r_hand_book_holder }}</uni-td>
  274. </uni-tr>
  275. <uni-tr v-if="datailData.accessories?.r_hand_book_pen !== null &&datailData.accessories?.r_hand_book_pen !== 0">
  276. <uni-td>手簿笔</uni-td>
  277. <uni-td>{{ datailData.accessories.r_hand_book_pen }}</uni-td>
  278. </uni-tr>
  279. <uni-tr v-if="datailData.accessories?.r_charging_head !== null &&datailData.accessories?.r_charging_head !== 0">
  280. <uni-td>手簿充电头</uni-td>
  281. <uni-td>{{ datailData.accessories.r_charging_head }}</uni-td>
  282. </uni-tr>
  283. <uni-tr v-if="datailData.accessories?.r_flashlight !== null &&datailData.accessories?.r_flashlight !== 0">
  284. <uni-td>手电</uni-td>
  285. <uni-td>{{ datailData.accessories.r_flashlight }}</uni-td>
  286. </uni-tr>
  287. <uni-tr v-if="datailData.accessories?.r_connection_head !== null &&datailData.accessories?.r_connection_head !== 0">
  288. <uni-td>连接头</uni-td>
  289. <uni-td>{{ datailData.accessories.r_connection_head }}</uni-td>
  290. </uni-tr>
  291. <uni-tr v-if="datailData.accessories?.r_height_measuring_plate !== null &&datailData.accessories?.r_height_measuring_plate !== 0">
  292. <uni-td>测高片</uni-td>
  293. <uni-td>{{ datailData.accessories.r_height_measuring_plate }}</uni-td>
  294. </uni-tr>
  295. <uni-tr v-if="datailData.accessories?.r_long_antenna !== null &&datailData.accessories?.r_long_antenna !== 0">
  296. <uni-td>长天线</uni-td>
  297. <uni-td>{{ datailData.accessories.r_long_antenna }}</uni-td>
  298. </uni-tr>
  299. <uni-tr v-if="datailData.accessories?.r_short_antenna !== null &&datailData.accessories?.r_short_antenna !== 0">
  300. <uni-td>短天线</uni-td>
  301. <uni-td>{{ datailData.accessories.r_short_antenna }}</uni-td>
  302. </uni-tr>
  303. <uni-tr v-if="datailData.accessories?.r_instruction_manual !== null &&datailData.accessories?.r_instruction_manual !== 0">
  304. <uni-td>说明书</uni-td>
  305. <uni-td>{{ datailData.accessories.r_instruction_manual }}</uni-td>
  306. </uni-tr>
  307. <uni-tr v-if="datailData.accessories?.r_cdrow !== null &&datailData.accessories?.r_cdrow !== 0">
  308. <uni-td>光盘</uni-td>
  309. <uni-td>{{ datailData.accessories.r_cdrow }}</uni-td>
  310. </uni-tr>
  311. <uni-tr v-if="datailData.accessories?.r_usb !== null &&datailData.accessories?.r_usb !== 0">
  312. <uni-td>USB线</uni-td>
  313. <uni-td>{{ datailData.accessories.r_usb }}</uni-td>
  314. </uni-tr>
  315. </block>
  316. </uni-table>
  317. </block>
  318. </view>
  319. <view style="width: 10vw;height: 10vh;">
  320. </view>
  321. </scroll-view>
  322. </view>
  323. <view class="detail_bottom" v-if="userInfo.userInfo.group != 4">
  324. <block>
  325. <view class="detail_topbox">
  326. <!-- 待审批状态 -->
  327. <block
  328. v-if="(datailData.status==0 && userInfo.userInfo.group!=3)||(datailData.status==6 && userInfo.userInfo.group==3)">
  329. <view class="">
  330. <view class="detail_topbox_1">
  331. <text>审批</text>
  332. </view>
  333. <view class="">
  334. <uni-forms ref="baseForm" :modelValue="baseFormData">
  335. <uni-forms-item label="批注">
  336. <uni-easyinput v-model="remark" type="textarea" placeholder="请输入驳回理由" />
  337. </uni-forms-item>
  338. </uni-forms>
  339. <view class="button-group">
  340. <button @click="overrule" type="warn" style="background-color: #ff9900;">驳回</button>
  341. <button @click="pass" type="primary" style="background-color: #2d8cf0;">审批通过</button>
  342. </view>
  343. </view>
  344. </view>
  345. </block>
  346. <!-- 待使用 -->
  347. <view class="" v-if="userInfo.userInfo.group != 3">
  348. <view class="" v-if="datailData.status==2 ">
  349. <!-- <view class="detail_topbox_1">
  350. <text>操作</text>
  351. </view> -->
  352. <view class="jiechu">
  353. <!-- 科研借单 -->
  354. <button v-if="datailData.purpose==0" @click="jiechuscan" type="primary"
  355. style="background-color: #2d8cf0; margin-bottom: 20rpx;">借出扫码</button>
  356. <!-- 教学借单 -->
  357. <block v-else-if="datailData.purpose==1">
  358. <button @click="jiechuscan2" type="primary"
  359. style="background-color: #2d8cf0; margin-bottom: 20rpx;">扫仪器借出</button>
  360. <view style="color: #808695;">
  361. 提示:教学借单需先扫一台仪器,再扫一次学生
  362. </view>
  363. </block>
  364. </view>
  365. </view>
  366. <!-- 借出状态 -->
  367. <view class="" v-else-if="datailData.status==3 || datailData.status==5">
  368. <view class="jiechu">
  369. <view class="button-group">
  370. <button @click="replaceScan" type="primary"
  371. style="background-color: #19be6b;width: 50%;border-radius: 5px 0 0 5px; ">替换扫码</button>
  372. <button type="warn" @click="damageScan"
  373. style="background-color: #ff9900;width: 50%;border-radius: 0px 5px 5px 0px; ">损坏扫码</button>
  374. </view>
  375. <button v-if="datailData.purpose==0" @click="returnScan" type="primary"
  376. style="background-color: #2d8cf0; ">归还扫码</button>
  377. <button v-else-if="datailData.purpose==1" @click="returnScan2" type="primary"
  378. style="background-color: #2d8cf0; ">归还扫码</button>
  379. </view>
  380. </view>
  381. </view>
  382. </view>
  383. </block>
  384. </view>
  385. <view class="">
  386. <uni-popup ref="popup" type="bottom">
  387. <view class="tihuan_box">
  388. <view class="" style="text-align: center; margin-bottom: 20rpx; font-size: 35rpx; font-weight: bold;">
  389. 仪器替换理由
  390. </view>
  391. <uni-forms-item label="备注">
  392. <uni-easyinput type="textarea" v-model="replaceNote" placeholder="请输入备注" />
  393. </uni-forms-item>
  394. <button @click="replaceReturnScan" type="primary"
  395. style="background-color: #2d8cf0; margin-bottom: 30rpx;">归还</button>
  396. <button @click="replaceDamageScan" type="primary" style="background-color: #ff9900; ">损坏</button>
  397. </view>
  398. </uni-popup>
  399. <uni-popup ref="stupopup" type="bottom">
  400. <view class="tihuan_box" style="height: 200rpx;">
  401. <view class=""
  402. style="text-align: center; margin-bottom: 20rpx; font-size: 35rpx; font-weight: bold;margin-bottom: 30rpx;">
  403. 请扫学生码
  404. </view>
  405. <button @click="stuScan" type="primary"
  406. style="background-color: #2d8cf0; margin-bottom: 30rpx;">扫学生码</button>
  407. </view>
  408. </uni-popup>
  409. </view>
  410. </template>
  411. <script setup>
  412. import {
  413. ref
  414. } from 'vue'
  415. import {
  416. onLoad,
  417. uploadFile
  418. } from '@dcloudio/uni-app'
  419. import {
  420. requestApi
  421. } from '@/api/request.js'
  422. // 重要路径修改
  423. const baseUrl = 'https://yxy.glut.cc/'
  424. let unfold = ref(false)
  425. let data_scan = ref(null)
  426. let data_scan2 = ref(null)
  427. let stu_scan = ref(null)
  428. let return_data = ref(null)
  429. let return_data2 = ref(null)
  430. let damage_data = ref(null)
  431. let replace_data = ref(null)
  432. const status = ref(['待审批', '已驳回', '待使用', '使用中', '已归还', '已逾期', '领导审批中', '领导驳回'])
  433. const remark = ref(null)
  434. var analyze = ref(null)
  435. // var datailData = ref(null)
  436. let userInfo = wx.getStorageSync('userInfos')
  437. const yiqisum = ref(null)
  438. const xiangqinData = ref(null)
  439. const popup = ref(null); //替换弹窗
  440. const stupopup = ref(null);
  441. const replaceNote = ref(null)
  442. let replaceReturn_data = ref(null)
  443. // 存储图片
  444. const fileList1 = ref([
  445. ])
  446. let datailData = ref({
  447. accessories: {
  448. w_battery: 0,
  449. w_remote_control: 0,
  450. w_remote_control_battery: 0,
  451. w_charge_housekeeper: 0,
  452. w_propeller: 0,
  453. w_sd: 0,
  454. q_battery: 0,
  455. q_charge_housekeeper: 0,
  456. q_tripod: 0,
  457. q_prism: 0,
  458. q_center_bar: 0,
  459. q_data_line: 0,
  460. s_battery: 0,
  461. s_charge_housekeeper: 0,
  462. s_tripod: 0,
  463. s_level_gauge: 0,
  464. s_ruler_pad: 0,
  465. s_data_line: 0,
  466. s_adjustment_wrench: 0,
  467. s_rain_proof_cloth: 0,
  468. r_battery: 0,
  469. r_charge_housekeeper: 0,
  470. r_charging_head: 0,
  471. r_hand_book_holder: 0,
  472. r_hand_book_pen: 0,
  473. r_flashlight: 0,
  474. r_connection_head: 0,
  475. r_height_measuring_plate: 0,
  476. r_long_antenna: 0,
  477. r_short_antenna: 0,
  478. r_instruction_manual: 0,
  479. r_cdrow: 0,
  480. r_usb: 0
  481. }
  482. });
  483. // 数据
  484. onLoad(async (event) => {
  485. wx.showLoading({
  486. title: '加载中',
  487. mask: false,
  488. })
  489. // console.log(event)
  490. analyze = JSON.parse(event.data)
  491. // console.log(analyze)
  492. xiangqinData.value = await requestApi('admin/borrow.BorrowApp/edit?id=' +
  493. analyze + '&server=1')
  494. datailData.value = xiangqinData.value.data.row
  495. wx.hideLoading()
  496. const updatedArray = datailData.value.borrowImg.map(item => ({
  497. ...item,
  498. url: `${baseUrl}${item.url}`,
  499. url2: `${item.url}`,
  500. }));
  501. // console.log('f', updatedArray)
  502. fileList1.value.push(...updatedArray);
  503. // console.log('r', fileList1.value)
  504. const price = ref(datailData.value.asset)
  505. yiqisum.value = price.value.reduce((sum, e) => sum + Number(e.num || 0), 0)
  506. // console.log(yiqisum.value)
  507. })
  508. // 审批通过
  509. async function pass() {
  510. if (userInfo.userInfo.group != 3 && datailData.value.purpose == 0) {
  511. datailData.value.status = 6
  512. } else {
  513. datailData.value.status = 2
  514. }
  515. datailData.value.annotation = remark.value
  516. console.log(datailData.value)
  517. wx.showToast({
  518. title: '审批完成',
  519. icon: 'success',
  520. // duration: 2000
  521. })
  522. const passData = await requestApi(
  523. 'admin/borrow.BorrowApp/edit?server=1', {
  524. data: datailData.value
  525. },
  526. 'POST'
  527. )
  528. wx.hideLoading()
  529. jiazhai()
  530. console.log(xiangqinData.value)
  531. wx.hideLoading()
  532. }
  533. // 审批驳回
  534. async function overrule() {
  535. if (userInfo.userInfo.group != 3) {
  536. datailData.value.status = 1
  537. } else {
  538. datailData.value.status = 7
  539. }
  540. datailData.value.annotation = remark.value
  541. console.log('datailData.value', datailData.value)
  542. wx.showLoading({
  543. title: '加载中',
  544. })
  545. const overruleData = await requestApi(
  546. 'admin/borrow.BorrowApp/edit?server=1', {
  547. data: datailData.value
  548. },
  549. 'POST'
  550. )
  551. console.log('overruleData', overruleData)
  552. jiazhai()
  553. if (overruleData.code == 0) {
  554. wx.showModal({
  555. title: '提示',
  556. content: overruleData.msg,
  557. showCancel: false
  558. })
  559. }
  560. console.log('data', xiangqinData.value)
  561. setTimeout(function() {
  562. wx.hideLoading()
  563. }, 1000)
  564. }
  565. // 科研借出扫码
  566. function jiechuscan() {
  567. wx.scanCode({
  568. // 只允许相机
  569. // onlyFromCamera: true,
  570. async success(res) {
  571. // console.log(res)
  572. wx.showLoading({
  573. title: '加载中',
  574. })
  575. data_scan.value = res
  576. console.log(data_scan.value.result)
  577. const keyanBorrow = await requestApi(
  578. 'admin/borrow.BorrowUseing/scientificBind?server=1&asset_id=' + data_scan.value
  579. .result + '&borrow_id=' + datailData.value.id + '&server=1',
  580. )
  581. console.log('keyanBorrow', keyanBorrow)
  582. jiazhai()
  583. wx.showToast({
  584. title: keyanBorrow.msg,
  585. icon:'none',
  586. duration: 1000
  587. })
  588. console.log('科研借出', xiangqinData.value)
  589. }
  590. })
  591. }
  592. // 科研归还扫码
  593. function returnScan() {
  594. wx.scanCode({
  595. // 只允许相机
  596. // onlyFromCamera: true,
  597. async success(res) {
  598. // console.log(res)
  599. wx.showLoading({
  600. title: '加载中',
  601. })
  602. return_data.value = res
  603. console.log(return_data.value.result)
  604. const returndata = await requestApi(
  605. 'admin/borrow.BorrowUseing/scientificComplete?server=1&asset_id=' + return_data.value
  606. .result+ '&borrow_id=' + datailData.value.id,
  607. )
  608. console.log(returndata)
  609. jiazhai()
  610. wx.showToast({
  611. title: returndata.msg,
  612. icon:'none',
  613. duration: 1000
  614. })
  615. console.log('科研借出', xiangqinData.value)
  616. wx.hideLoading()
  617. }
  618. })
  619. }
  620. // 损坏扫码
  621. function damageScan() {
  622. wx.scanCode({
  623. // 只允许相机
  624. // onlyFromCamera: true,
  625. async success(res) {
  626. // console.log(res)
  627. wx.showLoading({
  628. title: '加载中',
  629. })
  630. damage_data.value = res
  631. console.log(damage_data.value.result)
  632. const damagedata = await requestApi(
  633. 'admin/borrow.BorrowUseing/assetDamage?server=1&asset_id=' + damage_data.value.result+ '&borrow_id=' + datailData.value.id,
  634. )
  635. console.log(damagedata)
  636. jiazhai()
  637. wx.showToast({
  638. title: damagedata.msg,
  639. icon:'none',
  640. duration: 1000
  641. })
  642. console.log('科研借出', xiangqinData.value)
  643. wx.hideLoading()
  644. }
  645. })
  646. }
  647. // 替换扫码
  648. function replaceScan() {
  649. wx.scanCode({
  650. // 只允许相机
  651. // onlyFromCamera: true,
  652. async success(res) {
  653. // console.log(res)
  654. replace_data.value = res
  655. console.log(replace_data.value.result)
  656. popup.value.open('top');
  657. }
  658. })
  659. }
  660. // 替换里的归还扫码
  661. function replaceReturnScan() {
  662. wx.scanCode({
  663. // 只允许相机
  664. // onlyFromCamera: true,
  665. async success(res) {
  666. // console.log(res)
  667. replaceReturn_data.value = res
  668. console.log(replaceReturn_data.value.result)
  669. const replacedata = await requestApi(
  670. 'admin/borrow.BorrowUseing/assetChange?server=1&old_asset_id=' + replace_data.value
  671. .result + '&new_asset_id=' + replaceReturn_data.value.result + '&borrow_id=' +
  672. datailData.value.id + '&isDamage=' + 0
  673. )
  674. console.log(replacedata)
  675. popup.value.close('top');
  676. jiazhai()
  677. console.log(xiangqinData.value)
  678. wx.showToast({
  679. title: replacedata.msg,
  680. icon:'none',
  681. duration: 1000
  682. })
  683. setTimeout(function() {
  684. wx.hideLoading()
  685. }, 1500)
  686. }
  687. })
  688. }
  689. // 替换里的损坏扫码
  690. function replaceDamageScan() {
  691. wx.scanCode({
  692. // 只允许相机
  693. // onlyFromCamera: true,
  694. async success(res) {
  695. // console.log(res)
  696. replaceReturn_data.value = res
  697. console.log(replaceReturn_data.value.result)
  698. const replacedata = await requestApi(
  699. 'admin/borrow.BorrowUseing/assetChange?server=1&old_asset_id=' + replace_data.value
  700. .result + '&new_asset_id=' + replaceReturn_data.value.result + '&borrow_id=' +
  701. datailData.value.id + '&isDamage=' + 1
  702. )
  703. console.log(replacedata)
  704. popup.value.close('top');
  705. xiangqinData.value = await requestApi('admin/borrow.BorrowApplication/edit?id=' +
  706. analyze + '&server=1')
  707. datailData.value = xiangqinData.value.data.row
  708. jiazhai()
  709. console.log(xiangqinData.value)
  710. wx.showToast({
  711. title: replacedata.msg,
  712. icon:'none',
  713. duration: 1000
  714. })
  715. setTimeout(function() {
  716. wx.hideLoading()
  717. }, 1500)
  718. }
  719. })
  720. }
  721. // 教学借出扫码
  722. function jiechuscan2() {
  723. wx.scanCode({
  724. // 只允许相机
  725. // onlyFromCamera: true,
  726. async success(res) {
  727. // console.log(res)
  728. data_scan2.value = res
  729. console.log(data_scan2.value.result)
  730. stupopup.value.open('top');
  731. // console.log(event)
  732. // console.log(analyze)
  733. }
  734. })
  735. }
  736. // 教学借单扫学生
  737. async function stuScan() {
  738. wx.scanCode({
  739. // 只允许相机
  740. // onlyFromCamera: true,
  741. async success(res) {
  742. wx.showLoading({
  743. title: '加载中',
  744. })
  745. // console.log(res)
  746. stu_scan.value = res
  747. console.log(stu_scan.value.result)
  748. stupopup.value.open('top');
  749. const keyanBorrow2 = await requestApi(
  750. 'admin/borrow.BorrowUseing/courseBind?server=1&asset_id=' + data_scan2.value
  751. .result + '&borrow_id=' + datailData.value.id + '&student_phone=' + stu_scan.value
  752. .result + '&server=1',
  753. )
  754. console.log(keyanBorrow2)
  755. stupopup.value.close('top');
  756. wx.showLoading({
  757. title: keyanBorrow2.msg,
  758. mask: false,
  759. })
  760. jiazhai()
  761. setTimeout(function() {
  762. wx.hideLoading()
  763. }, 1500)
  764. }
  765. })
  766. }
  767. // 教学归还扫码
  768. function returnScan2() {
  769. wx.scanCode({
  770. // 只允许相机
  771. // onlyFromCamera: true,
  772. async success(res) {
  773. // console.log(res)
  774. return_data2.value = res
  775. console.log(return_data2.value.result)
  776. const returndata = await requestApi(
  777. 'admin/borrow.BorrowUseing/courseComplete?server=1&asset_id=' + return_data2.value
  778. .result + '&borrow_id=' + datailData.value.id,
  779. )
  780. console.log(returndata)
  781. jiazhai()
  782. }
  783. })
  784. }
  785. // 删除图片的函数
  786. const deletePic = async (event) => {
  787. wx.showLoading({
  788. title: '加载中',
  789. mask: false,
  790. })
  791. // TODO: 如果需要,这里先发送删除请求到后端,确保文件从服务器上也被删除
  792. console.log('e', fileList1.value[event.index].url2)
  793. const returndata = await requestApi(
  794. 'admin/borrow.BorrowUseing/delImg?server=1', {
  795. borrow_id: datailData.value.id,
  796. url: fileList1.value[event.index].url2,
  797. },
  798. 'POST'
  799. )
  800. console.log(returndata)
  801. wx.showToast({
  802. title: returndata.msg,
  803. icon: 'none',
  804. duration: 2000
  805. })
  806. fileList1.value.splice(event.index, 1);
  807. };
  808. const afterRead = async (event) => {
  809. let lists = [].concat(event.file);
  810. let fileListLen = fileList1.value.length
  811. lists.forEach((item, index) => {
  812. fileList1.value.push({
  813. ...item,
  814. status: 'uploading',
  815. message: '上传中'
  816. });
  817. uploadFilePromise(item.url).then(result => {
  818. console.log('www', result)
  819. fileList1.value[fileList1.value.length - lists.length + index] = {
  820. ...item,
  821. status: 'success',
  822. message: '',
  823. url: baseUrl + result, // 假设result就是图片的URL
  824. url2: result
  825. };
  826. fileListLen++
  827. }).catch(error => {
  828. fileList1.value[fileList1.value.length - lists.length + index] = {
  829. ...item,
  830. status: 'fail',
  831. message: '上传失败',
  832. };
  833. console.error('上传失败:', error);
  834. });
  835. });
  836. };
  837. function encryptToken() {
  838. const a = wx.getStorageSync('userInfos')
  839. let userInfo;
  840. if (a === '' || a === null || a === undefined || !"userInfo" in a) {
  841. return '';
  842. } else {
  843. userInfo = a.userInfo;
  844. }
  845. console.log(userInfo)
  846. if (userInfo === '' || userInfo === null || userInfo === undefined || !"token" in userInfo) {
  847. return '';
  848. } else {
  849. // const auth = Base64.encode(user_Token + ':')
  850. const Batoken = userInfo.token
  851. return Batoken
  852. }
  853. }
  854. const uploadFilePromise = (filePath) => {
  855. return new Promise((resolve, reject) => {
  856. uni.uploadFile({
  857. header: {
  858. Batoken: encryptToken()
  859. },
  860. url: baseUrl + 'admin/ajax/upload?server=1',
  861. filePath: filePath,
  862. name: 'file',
  863. formData: {
  864. user: 'test'
  865. },
  866. success: (res) => {
  867. setTimeout(() => {
  868. // console.log(res)
  869. var responseObject = JSON.parse(res.data);
  870. // console.log(responseObject)
  871. var fileUrl = responseObject.data.file.url;
  872. // 传图片接口
  873. const returndata = requestApi(
  874. 'admin/borrow.BorrowUseing/uniUpload?server=1', {
  875. borrow_id: datailData.value.id,
  876. url: fileUrl
  877. },
  878. 'POST'
  879. )
  880. console.log(returndata)
  881. console.log(fileUrl, 123)
  882. console.log('w', fileList1.value)
  883. resolve(fileUrl);
  884. }, 1000);
  885. },
  886. fail: (err) => {
  887. reject(err);
  888. }
  889. });
  890. });
  891. };
  892. async function jiazhai(){
  893. xiangqinData.value = await requestApi('admin/borrow.BorrowApp/edit?id=' +
  894. analyze + '&server=1')
  895. datailData.value = xiangqinData.value.data.row
  896. console.log('我更新了')
  897. }
  898. // console.log(data_scan.value)
  899. </script>
  900. <style lang="less">
  901. page {
  902. background-color: rgb(244, 245, 249);
  903. }
  904. .zp-swiper-super.data-v-bd8ff6a5 {
  905. background-color: rgb(244, 245, 249);
  906. }
  907. .detail_bottom {
  908. background-color: #fff;
  909. width: 100%;
  910. }
  911. .uni-table-td {
  912. padding: 10rpx 20rpx !important;
  913. }
  914. .detail_top {
  915. background-color: #fff;
  916. }
  917. .detail_tou2 {
  918. float: left;
  919. }
  920. .detail_bottom {
  921. margin-top: 25rpx;
  922. position: fixed;
  923. bottom: 0;
  924. padding-bottom: 20rpx;
  925. }
  926. .uni-collapse-item__title-box {
  927. padding: 0 !important;
  928. line-height: 80rpx !important;
  929. height: 80rpx !important;
  930. font-size: 32rpx !important;
  931. }
  932. .detail_topbox {
  933. padding: 5rpx 25rpx 0 25rpx;
  934. }
  935. .detail_topbox_21 {
  936. height: 55rpx;
  937. }
  938. .detail_zt {
  939. float: right;
  940. color: #F89898;
  941. }
  942. .detail_topbox_1 {
  943. font-size: 38rpx;
  944. margin-bottom: 20rpx;
  945. }
  946. .uni-table-scroll {
  947. width: 99.5% !important;
  948. overflow-x: auto;
  949. }
  950. .tihuan_box {
  951. width: 84%;
  952. height: 500rpx;
  953. padding: 30rpx;
  954. background-color: #fff;
  955. margin: 30% auto;
  956. border-radius: 20rpx;
  957. }
  958. .unfold {
  959. position: relative;
  960. z-index: 999;
  961. top: 30rpx;
  962. left: 94%;
  963. width: 35rpx;
  964. height: 0px;
  965. }
  966. .detail_topbox_2 {
  967. line-height: 80rpx;
  968. color: #464749;
  969. font-size: 32rpx;
  970. }
  971. .uni-collapse-item__title-text {
  972. font-size: 32rpx !important;
  973. }
  974. .detail_topbox_2>view {
  975. width: 100%;
  976. // height: 50rpx;
  977. }
  978. .detail_tou {
  979. width: 29%;
  980. float: left;
  981. }
  982. .button-group {
  983. margin-top: 20rpx;
  984. display: flex;
  985. justify-content: space-around;
  986. margin-bottom: 20rpx;
  987. }
  988. .uni_zt {
  989. color: #F89898;
  990. }
  991. .biaoge_box {
  992. width: 100%;
  993. overflow-y: auto
  994. }
  995. .uni-table {
  996. position: none;
  997. }
  998. .jiechu {
  999. margin: 40rpx 0 30rpx 0;
  1000. }
  1001. </style>