detail.vue 35 KB

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