detail.vue 34 KB

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