bed.vue 58 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243
  1. <template>
  2. <div class="content-box">
  3. <div class="left">
  4. <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
  5. <span class="cameratxt">床位信息管理</span>
  6. </div>
  7. <div class="scroll">
  8. <div class="middle">
  9. <div class="filter">
  10. <div class="condition">
  11. <span>校区名称 :</span>
  12. <el-select
  13. clearable
  14. @change="schoolChange"
  15. v-model="searchInput.schoolId"
  16. placeholder="请选择校区名称"
  17. >
  18. <el-option
  19. v-for="i in schoolData"
  20. :key="i.id"
  21. :label="i.school"
  22. :value="i.id"
  23. />
  24. </el-select>
  25. </div>
  26. <div class="condition">
  27. <span>楼栋名称 :</span>
  28. <el-select
  29. clearable
  30. v-model="searchInput.buildId"
  31. placeholder="请选择楼栋名称"
  32. @change="buildChange"
  33. >
  34. <el-option
  35. v-for="i in buildData"
  36. :key="i.id"
  37. :label="i.build"
  38. :value="i.id"
  39. />
  40. </el-select>
  41. </div>
  42. <div class="condition">
  43. <span>寝室号 :</span>
  44. <el-select
  45. v-model="searchInput.dormitoryId"
  46. placeholder="请选择寝室号"
  47. clearable
  48. >
  49. <el-option
  50. v-for="i in dormitoryData"
  51. :key="i.id"
  52. :label="i.dormitory"
  53. :value="i.id"
  54. />
  55. </el-select>
  56. </div>
  57. <div class="condition">
  58. <span>床位性别 :</span>
  59. <el-select
  60. clearable
  61. v-model="searchInput.sex"
  62. placeholder="请选择床位性别"
  63. >
  64. <el-option label="男" value="男" />
  65. <el-option label="女" value="女" />
  66. </el-select>
  67. </div>
  68. <div class="condition">
  69. <span>所属学院 :</span>
  70. <el-select
  71. @change="collegeChange"
  72. v-model="searchInput.collegeId"
  73. placeholder="请选择所属学院"
  74. clearable
  75. >
  76. <el-option
  77. v-for="i in collegeData"
  78. :key="i.id"
  79. :label="i.name"
  80. :value="i.id"
  81. />
  82. </el-select>
  83. </div>
  84. <div class="condition">
  85. <span>专业 :</span>
  86. <el-select
  87. @change="majorChange"
  88. clearable
  89. v-model="searchInput.majorId"
  90. placeholder="请选择专业"
  91. >
  92. <el-option
  93. v-for="i in majorData"
  94. :key="i.id"
  95. :label="i.name"
  96. :value="i.id"
  97. />
  98. </el-select>
  99. </div>
  100. <div class="condition">
  101. <span>所属班级 :</span>
  102. <el-select
  103. clearable
  104. v-model="searchInput.classstrId"
  105. placeholder="请选择所属班级"
  106. >
  107. <el-option
  108. v-for="i in classstrData"
  109. :key="i.id"
  110. :label="i.name"
  111. :value="i.id"
  112. />
  113. </el-select>
  114. </div>
  115. <div class="condition">
  116. <span>是否入住 :</span>
  117. <el-select
  118. v-model="searchInput.isCheck"
  119. placeholder="请选择入住情况"
  120. >
  121. <el-option label="是" value="1" />
  122. <el-option label="否" value="0" />
  123. </el-select>
  124. </div>
  125. <div class="condition">
  126. <span>是否保留 :</span>
  127. <el-select
  128. clearable
  129. v-model="searchInput.retentionState"
  130. placeholder="请选择是否保留"
  131. >
  132. <el-option label="是" value="2" />
  133. <el-option label="否" value="1" />
  134. </el-select>
  135. </div>
  136. <el-button
  137. style="margin-left: 20px"
  138. color="rgba(38, 151, 255, 1)"
  139. type="primary"
  140. class="search"
  141. @click="searchBtn"
  142. ><span>查询</span></el-button
  143. >
  144. <el-button @click="resetBtn" plain color="rgba(43, 153, 255, 1)"
  145. >重置</el-button
  146. >
  147. </div>
  148. <!-- 按钮列表 -->
  149. <div class="gongneng">
  150. <el-button
  151. v-if="store.BtnRole('bedManagementSetting1')"
  152. type="primary"
  153. color="rgba(38, 151, 255, 1)"
  154. @click="buildImportBtn"
  155. >导入</el-button
  156. >
  157. <el-button
  158. v-if="store.BtnRole('bedManagementSetting2')"
  159. type="primary"
  160. style="margin-left: 0"
  161. color="rgba(48, 201, 191, 1)"
  162. @click="buildExportbtn"
  163. >导出</el-button
  164. >
  165. <el-button
  166. v-if="store.BtnRole('bedManagementSetting3')"
  167. type="primary"
  168. style="margin-left: 0"
  169. color="rgba(38, 151, 255, 1)"
  170. @click="addlist"
  171. >新增</el-button
  172. >
  173. <el-button
  174. v-if="store.BtnRole('bedManagementSetting4')"
  175. type="primary"
  176. style="margin-left: 0"
  177. color="rgba(38, 151, 255, 1)"
  178. @click="batchRetainS('批量保留', 2)"
  179. >批量保留</el-button
  180. >
  181. <el-button
  182. v-if="store.BtnRole('bedManagementSetting5')"
  183. type="primary"
  184. style="margin-left: 0"
  185. color="rgba(38, 151, 255, 1)"
  186. @click="batchRetainS('批量开放', 1)"
  187. >批量开放</el-button
  188. >
  189. </div>
  190. </div>
  191. <div class="footer" v-loading="loading">
  192. <el-table
  193. :row-class-name="tableRowClassName"
  194. :data="tableData.list"
  195. @selection-change="handleSelectionChange"
  196. style="width: 100%"
  197. :header-cell-style="{
  198. background: 'rgba(240, 243, 247, 1)',
  199. height: '50px',
  200. border: 0,
  201. }"
  202. >
  203. <el-table-column
  204. fixed="left"
  205. type="selection"
  206. align="center"
  207. width="55"
  208. />
  209. <el-table-column
  210. align="center"
  211. prop="school"
  212. width="120"
  213. label="校区名称"
  214. />
  215. <el-table-column
  216. align="center"
  217. prop="build"
  218. width="140"
  219. label="楼栋名称"
  220. />
  221. <el-table-column
  222. align="center"
  223. prop="dormitory"
  224. width="120"
  225. label="寝室号"
  226. />
  227. <el-table-column align="center" prop="number" label="床位号" />
  228. <el-table-column
  229. align="center"
  230. prop="sex"
  231. width="100"
  232. label="床位性别"
  233. />
  234. <el-table-column
  235. align="center"
  236. prop="college"
  237. width="130"
  238. label="所属学院"
  239. />
  240. <el-table-column align="center" prop="major" width="180" label="专业">
  241. </el-table-column>
  242. <el-table-column
  243. align="center"
  244. prop="classstr"
  245. width="180"
  246. label="所属班级"
  247. />
  248. <el-table-column
  249. align="center"
  250. prop="instructor"
  251. width="120"
  252. label="辅导员"
  253. />
  254. <el-table-column
  255. align="center"
  256. prop="isCheck"
  257. width="100"
  258. label="是否入住"
  259. >
  260. <template #default="{ row }">
  261. <span>{{ row.isCheck == 0 ? "否" : "是" }}</span>
  262. </template>
  263. </el-table-column>
  264. <el-table-column align="center" prop="name" label="姓名" />
  265. <el-table-column
  266. align="center"
  267. prop="cardNum"
  268. width="140"
  269. label="录取号"
  270. />
  271. <el-table-column
  272. align="center"
  273. prop="retentionState"
  274. width="100"
  275. label="是否保留"
  276. >
  277. <template #default="{ row }">
  278. <span v-if="row.retentionState == 2">是</span>
  279. <span v-if="row.retentionState == 1">否</span>
  280. </template>
  281. </el-table-column>
  282. <el-table-column
  283. align="center"
  284. show-overflow-tooltip
  285. prop="remark"
  286. width="200"
  287. label="备注"
  288. />
  289. <el-table-column
  290. align="center"
  291. label="操作"
  292. fixed="right"
  293. width="400"
  294. >
  295. <template #default="{ row }">
  296. <div class="options">
  297. <span
  298. class="open"
  299. v-if="
  300. row.retentionState == 1 &&
  301. store.BtnRole('bedManagementSetting6')
  302. "
  303. @click="retainS(row, 2)"
  304. >保留</span
  305. >
  306. <span
  307. class="open"
  308. v-if="
  309. row.retentionState == 2 &&
  310. store.BtnRole('bedManagementSetting7')
  311. "
  312. @click="retainS(row, 1)"
  313. >开放</span
  314. >
  315. <span
  316. v-if="
  317. row.isCheck == 0 &&
  318. row.retentionState == 1 &&
  319. store.BtnRole('bedManagementSetting8')
  320. "
  321. class="open"
  322. @click="checkClick(row)"
  323. >入住</span
  324. >
  325. <span
  326. v-if="
  327. row.isCheck == 1 &&
  328. row.retentionState == 1 &&
  329. store.BtnRole('bedManagementSetting9')
  330. "
  331. class="open"
  332. @click="outDormitory(row)"
  333. >退宿</span
  334. >
  335. <span
  336. v-if="
  337. row.isCheck == 1 &&
  338. row.retentionState == 1 &&
  339. store.BtnRole('bedManagementSetting10')
  340. "
  341. class="open"
  342. @click="changeBedClick(row, '换床')"
  343. >换床</span
  344. >
  345. <span
  346. v-if="
  347. row.isCheck == 1 &&
  348. row.retentionState == 1 &&
  349. store.BtnRole('bedManagementSetting11')
  350. "
  351. class="open"
  352. @click="changeBedClick(row, '床位对调')"
  353. >床位对调</span
  354. >
  355. <span
  356. class="edit"
  357. v-if="store.BtnRole('bedManagementSetting14')"
  358. @click="updateS(row)"
  359. >编辑</span
  360. >
  361. <span
  362. class="delete"
  363. v-if="store.BtnRole('bedManagementSetting12')"
  364. @click="deleteS(row)"
  365. >删除</span
  366. >
  367. </div>
  368. </template>
  369. </el-table-column>
  370. </el-table>
  371. <!-- 分页组件 -->
  372. <div class="pageSize">
  373. <span></span>
  374. <el-pagination
  375. background
  376. :current-page="currentPage"
  377. :page-size="pageSize"
  378. :page-sizes="[10, 20, 30, 40]"
  379. layout="total,sizes, prev, pager, next, jumper, slot"
  380. :total="total"
  381. @size-change="handleSizeChange"
  382. @update:current-page="handleCurrentChange"
  383. />
  384. </div>
  385. </div>
  386. </div>
  387. <!-- 添加账号弹窗 -->
  388. <el-dialog
  389. class="addStaff"
  390. v-model="addDialogVisible"
  391. :close-on-click-modal="false"
  392. :close-on-press-escape="false"
  393. :title="dialongTitle"
  394. align-center
  395. width="560"
  396. :before-close="cancelAdd"
  397. destroy-on-close
  398. draggable
  399. >
  400. <el-form
  401. ref="ruleFormRef"
  402. :model="ruleForm"
  403. :rules="rules"
  404. label-width="100px"
  405. class="demo-ruleForm"
  406. :size="formSize"
  407. label-position="right"
  408. status-icon
  409. >
  410. <el-form-item label="校区名称 :" prop="school">
  411. <el-select
  412. :disabled="dialongTitle == '编辑床位信息'"
  413. @change="schoolFormChange"
  414. v-model="ruleForm.school"
  415. placeholder="请选择校区名称"
  416. clearable
  417. >
  418. <el-option
  419. v-for="i in schoolData"
  420. :key="i.id"
  421. :label="i.school"
  422. :value="`${i.school},${i.id}`"
  423. />
  424. </el-select>
  425. </el-form-item>
  426. <el-form-item label="楼栋名称 :" prop="build">
  427. <el-select
  428. clearable
  429. :disabled="dialongTitle == '编辑床位信息'"
  430. @change="buildFormChange"
  431. v-model="ruleForm.build"
  432. placeholder="请选择楼栋名称"
  433. >
  434. <el-option
  435. v-for="i in buildFormData"
  436. :key="i.id"
  437. :label="i.build"
  438. :value="`${i.build},${i.id}`"
  439. />
  440. </el-select>
  441. </el-form-item>
  442. <el-form-item label="寝室号 :" prop="dormitory">
  443. <el-select
  444. clearable
  445. :disabled="dialongTitle == '编辑床位信息'"
  446. v-model="ruleForm.dormitory"
  447. @change="dormitoryFormChange"
  448. placeholder="请选择寝室号"
  449. >
  450. <el-option
  451. v-for="i in dormitoryFormData"
  452. :key="i.id"
  453. :label="i.dormitory"
  454. :value="`${i.dormitory},${i.id}`"
  455. />
  456. </el-select>
  457. </el-form-item>
  458. <el-form-item label="床位性别 :" prop="sex">
  459. <el-select
  460. disabled
  461. clearable
  462. v-model="ruleForm.sex"
  463. placeholder="请选择床位性别"
  464. >
  465. <el-option label="男" value="男" />
  466. <el-option label="女" value="女" />
  467. </el-select>
  468. </el-form-item>
  469. <el-form-item label="床位号 :" prop="number">
  470. <el-input
  471. v-model.trim="ruleForm.number"
  472. placeholder="请输入床位号"
  473. clearable
  474. />
  475. </el-form-item>
  476. <el-form-item label="所属学院 :" prop="college">
  477. <el-select
  478. @change="collegeFormChange"
  479. v-model="ruleForm.college"
  480. clearable
  481. disabled
  482. placeholder="请选择所属学院"
  483. >
  484. <el-option
  485. v-for="i in collegeData"
  486. :key="i.id"
  487. :label="i.name"
  488. :value="`${i.name},${i.id}`"
  489. />
  490. </el-select>
  491. </el-form-item>
  492. <el-form-item label="专业 :" prop="">
  493. <el-select
  494. @change="majorFormChange"
  495. v-model="ruleForm.major"
  496. clearable
  497. :disabled="!store.BtnRole('bedManagementSetting15')"
  498. placeholder="请选择专业"
  499. >
  500. <el-option
  501. v-for="i in majorFormData"
  502. :key="i.id"
  503. :label="i.name"
  504. :value="`${i.name},${i.id}`"
  505. />
  506. </el-select>
  507. </el-form-item>
  508. <el-form-item label="所属班级 :" prop="">
  509. <el-select
  510. clearable
  511. :disabled="!store.BtnRole('bedManagementSetting16')"
  512. v-model="ruleForm.classstr"
  513. placeholder="请选择所属班级"
  514. >
  515. <el-option
  516. v-for="i in classstrFormData"
  517. :key="i.id"
  518. :label="i.name"
  519. :value="`${i.name},${i.id}`"
  520. />
  521. </el-select>
  522. </el-form-item>
  523. <el-form-item v-if="dialongTitle == '编辑床位信息'" label="是否入住 :">
  524. <el-switch
  525. disabled
  526. :active-value="1"
  527. :inactive-value="0"
  528. v-model="ruleForm.isCheck"
  529. />
  530. </el-form-item>
  531. <el-form-item label="录取号 :">
  532. <el-input
  533. v-model.trim="ruleForm.cardNum"
  534. placeholder="请输入录取号"
  535. clearable
  536. />
  537. </el-form-item>
  538. <el-form-item label="姓名 :">
  539. <el-input
  540. v-model.trim="ruleForm.name"
  541. placeholder="请输入姓名"
  542. clearable
  543. />
  544. </el-form-item>
  545. <el-form-item label="辅导员 :" prop="">
  546. <el-input
  547. v-model.trim="ruleForm.instructor"
  548. placeholder="请输入辅导员"
  549. clearable
  550. :disabled="!store.BtnRole('bedManagementSetting17')"
  551. />
  552. </el-form-item>
  553. <el-form-item label="备注 :">
  554. <el-input
  555. v-model.trim="ruleForm.remark"
  556. placeholder="请输入备注"
  557. clearable
  558. />
  559. </el-form-item>
  560. <el-form-item class="options">
  561. <el-button @click="cancelAdd">取消</el-button>
  562. <el-button
  563. color="rgba(0, 97, 255, 1)"
  564. class="queding"
  565. type="primary"
  566. @click="submitAdd(ruleFormRef)"
  567. >
  568. 确定
  569. </el-button>
  570. </el-form-item>
  571. </el-form>
  572. </el-dialog>
  573. <!-- 入住 -->
  574. <el-dialog
  575. class="addStaff"
  576. v-model="checkDialogVisible"
  577. :close-on-click-modal="false"
  578. :close-on-press-escape="false"
  579. title="入住"
  580. align-center
  581. width="560"
  582. :before-close="cancelCheck"
  583. destroy-on-close
  584. draggable
  585. >
  586. <el-form
  587. ref="checkRef"
  588. :model="ruleFormCheck"
  589. :rules="rulesCheck"
  590. label-width="100px"
  591. class="demo-ruleForm"
  592. :size="formSize"
  593. label-position="right"
  594. status-icon
  595. >
  596. <el-form-item label="录取号 :" prop="admissNum">
  597. <el-input
  598. clearable
  599. v-model.trim="ruleFormCheck.admissNum"
  600. class="w-50 m-2"
  601. placeholder="请输入录取号"
  602. />
  603. </el-form-item>
  604. <el-form-item label="姓名 :" prop="name">
  605. <el-input
  606. clearable
  607. v-model.number="ruleFormCheck.name"
  608. class="w-50 m-2"
  609. placeholder="请输入姓名"
  610. />
  611. </el-form-item>
  612. <el-form-item class="options">
  613. <el-button @click="cancelCheck">取消</el-button>
  614. <el-button
  615. color="rgba(0, 97, 255, 1)"
  616. class="queding"
  617. type="primary"
  618. @click="submitCheck(checkRef)"
  619. >
  620. 确定
  621. </el-button>
  622. </el-form-item>
  623. </el-form>
  624. </el-dialog>
  625. <!-- 换床 -->
  626. <el-dialog
  627. class="addStaff"
  628. v-model="changeBedVisible"
  629. :close-on-click-modal="false"
  630. :close-on-press-escape="false"
  631. :title="changeBedTitle"
  632. align-center
  633. width="560"
  634. :before-close="cancelChangeBed"
  635. destroy-on-close
  636. draggable
  637. >
  638. <el-form
  639. ref="changeBedRef"
  640. :model="ruleFormChangeBed"
  641. :rules="rulesChangeBed"
  642. label-width="100px"
  643. class="demo-ruleForm"
  644. :size="formSize"
  645. label-position="right"
  646. status-icon
  647. >
  648. <!-- <el-form-item label="校区 " prop="school">
  649. <el-select
  650. clearable
  651. @change="schoolChange"
  652. v-model="ruleFormChangeBed.school"
  653. placeholder="请选择校区名称"
  654. >
  655. <el-option
  656. v-for="i in schoolData"
  657. :key="i.id"
  658. :label="i.school"
  659. :value="`${i.school},${i.id}`"
  660. />
  661. </el-select>
  662. </el-form-item> -->
  663. <el-form-item label="楼栋 " prop="buildId">
  664. <el-select
  665. clearable
  666. v-model="ruleFormChangeBed.buildId"
  667. placeholder="请选择楼栋名称"
  668. @change="buildChangeBed"
  669. >
  670. <el-option
  671. v-for="i in changeBedBuildData"
  672. :key="i.buildId"
  673. :label="i.build"
  674. :value="i.buildId"
  675. />
  676. </el-select>
  677. </el-form-item>
  678. <el-form-item label="寝室号" prop="dormitoryId">
  679. <el-select
  680. v-model="ruleFormChangeBed.dormitoryId"
  681. placeholder="请选择寝室号"
  682. clearable
  683. @change="dormitoryChangeBed"
  684. >
  685. <el-option
  686. v-for="i in changeBedDormitoryData"
  687. :key="i.dormitoryId"
  688. :label="i.dormitory"
  689. :value="i.dormitoryId"
  690. />
  691. </el-select>
  692. </el-form-item>
  693. <el-form-item label="床位号" prop="changeBedId">
  694. <el-select
  695. v-model="ruleFormChangeBed.changeBedId"
  696. placeholder="请选择床位号"
  697. clearable
  698. >
  699. <el-option
  700. v-for="i in changeBedBedData"
  701. :key="i.bedId"
  702. :label="i.number"
  703. :value="i.bedId"
  704. />
  705. </el-select>
  706. </el-form-item>
  707. <el-form-item class="options">
  708. <el-button @click="cancelChangeBed">取消</el-button>
  709. <el-button
  710. color="rgba(0, 97, 255, 1)"
  711. class="queding"
  712. type="primary"
  713. @click="submitChangeBed(changeBedRef)"
  714. >
  715. 确定
  716. </el-button>
  717. </el-form-item>
  718. </el-form>
  719. </el-dialog>
  720. <!-- 项目导入 -->
  721. <el-dialog
  722. class="projectImport"
  723. v-model="buildImportVisible"
  724. :close-on-click-modal="false"
  725. :close-on-press-escape="false"
  726. title="床位信息导入"
  727. align-center
  728. width="600"
  729. :before-close="cancelProjectImport"
  730. >
  731. <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
  732. <p class="down">
  733. <span>床位信息导入模板下载</span
  734. ><span @click="templateDown">模板下载</span>
  735. </p>
  736. <el-upload
  737. class="avatar-uploader"
  738. action="#"
  739. :auto-upload="false"
  740. :on-remove="projectImportRemove"
  741. :on-change="projectImportChange"
  742. :before-upload="beforeAvatarProImport"
  743. ref="buildRef"
  744. :limit="1"
  745. :on-exceed="projectImportExceed"
  746. >
  747. <template #trigger>
  748. <el-button class="queding" type="primary">
  749. &nbsp;&nbsp;导入文件&nbsp;&nbsp;
  750. </el-button>
  751. </template>
  752. </el-upload>
  753. <div class="options">
  754. <el-button
  755. color="rgba(9, 101, 98, 1)"
  756. class="queding"
  757. type="primary"
  758. @click="projectImportConfirm(buildRef)"
  759. >
  760. &nbsp;&nbsp;确认导入&nbsp;&nbsp;
  761. </el-button>
  762. <el-button @click="cancelProjectImport"
  763. >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
  764. >
  765. </div>
  766. </el-dialog>
  767. </div>
  768. </template>
  769. <script setup>
  770. import {
  771. ref,
  772. watch,
  773. reactive,
  774. nextTick,
  775. onBeforeMount,
  776. onUnmounted,
  777. } from "vue";
  778. import { useRouter } from "vue-router";
  779. import { ElMessage, ElMessageBox } from "element-plus";
  780. import { dayjs } from "element-plus";
  781. import lodash from "lodash";
  782. import { https } from "@/utils/request"; // 绝对路径
  783. import { storeToRefs } from "pinia";
  784. import { useCounterStore } from "@/stores/index";
  785. const router = useRouter();
  786. const store = useCounterStore();
  787. // 为避免解构时失去响应性
  788. const { name, age, isCollapse, realAge, collegeRole } = storeToRefs(store);
  789. // 表格数据
  790. const loading = ref(false);
  791. const tableData = reactive({
  792. list: [],
  793. });
  794. const dialongTitle = ref("新增账号"); // 弹窗标题
  795. const searchInput = reactive({
  796. schoolId: null,
  797. buildId: null,
  798. dormitoryId: null,
  799. sex: null,
  800. isCheck: null,
  801. majorId: null,
  802. collegeId: null,
  803. classstrId: null,
  804. retentionState: null, // 1:开放,2:保留
  805. }); // 搜索按钮数据
  806. const currentPage = ref(1); // 当前页
  807. const pageSize = ref(10);
  808. const total = ref(); // 当前总数
  809. const selectIds = ref([]);
  810. const addDialogVisible = ref(false); // 控制添加账号弹窗
  811. // 表单数据
  812. const formSize = ref("default");
  813. const ruleFormRef = ref();
  814. const ruleForm = reactive({
  815. school: "男", //校区名称
  816. build: "1", //楼栋名称
  817. dormitory: "", //宿舍名称
  818. sex: "", //床位性别
  819. college: "",
  820. major: "",
  821. classstr: "",
  822. number: "", //床位号
  823. isCheck: "",
  824. cardNum: "",
  825. name: "",
  826. instructor: "",
  827. remark: "",
  828. retentionState: "",
  829. id: "",
  830. });
  831. // 表单验证
  832. const rules = reactive({
  833. school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
  834. build: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
  835. dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
  836. sex: [{ required: true, message: "床位性别不能为空", trigger: "blur" }],
  837. college: [{ required: true, message: "所属学院不能为空", trigger: "blur" }],
  838. major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
  839. classstr: [{ required: true, message: "所属班级不能为空", trigger: "blur" }],
  840. instructor: [{ required: true, message: "辅导员不能为空", trigger: "blur" }],
  841. number: [{ required: true, message: "床位号不能为空", trigger: "blur" }],
  842. });
  843. // 入住
  844. const checkRef = ref();
  845. const checkDialogVisible = ref();
  846. const ruleFormCheck = reactive({
  847. admissNum: "",
  848. name: "",
  849. id: "",
  850. });
  851. // 表单验证
  852. const rulesCheck = reactive({
  853. admissNum: [{ required: true, message: "录取号不能为空", trigger: "blur" }],
  854. name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
  855. });
  856. const checkClick = (row) => {
  857. checkDialogVisible.value = true;
  858. ruleFormCheck.id = row.id;
  859. };
  860. const submitCheck = lodash.debounce(async (formEl) => {
  861. if (!formEl) return;
  862. await formEl.validate(async (valid, fields) => {
  863. if (valid) {
  864. let data = {
  865. admissNum: ruleFormCheck.admissNum,
  866. name: ruleFormCheck.name,
  867. bedId: ruleFormCheck.id,
  868. };
  869. console.log(data);
  870. data.id = ruleForm.id;
  871. let res = await https.post(
  872. "/welcome/api/welcomeBed/checkIn",
  873. "data",
  874. data
  875. );
  876. if (res.code == 200) {
  877. checkDialogVisible.value = false;
  878. getList();
  879. ElMessage({
  880. type: "success",
  881. showClose: true,
  882. message: res.message,
  883. center: true,
  884. });
  885. } else {
  886. ElMessage({
  887. type: "error",
  888. showClose: true,
  889. message: res.message,
  890. center: true,
  891. });
  892. }
  893. } else {
  894. console.log("error submit!", fields);
  895. loading.value = false;
  896. }
  897. });
  898. }, 1000);
  899. const cancelCheck = () => {
  900. checkDialogVisible.value = false;
  901. };
  902. // 换床
  903. const changeBedRef = ref();
  904. const changeBedTitle = ref();
  905. const changeBedVisible = ref();
  906. const changeBedBuildData = ref();
  907. const changeBedDormitoryData = ref();
  908. const changeBedBedData = ref();
  909. const ruleFormChangeBed = reactive({
  910. schoolId: "", //校区名称
  911. collegeId: "",
  912. sex: "",
  913. buildId: "", //楼栋名称
  914. dormitoryId: "",
  915. changeBedId: "",
  916. id: "",
  917. });
  918. // 表单验证
  919. const rulesChangeBed = reactive({
  920. // school: [{ required: true, message: "校区名称不能为空", trigger: "blur" }],
  921. buildId: [{ required: true, message: "楼栋名称不能为空", trigger: "blur" }],
  922. dormitoryId: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
  923. changeBedId: [{ required: true, message: "床位号不能为空", trigger: "blur" }],
  924. });
  925. const changeBedClick = (row, title) => {
  926. console.log(row, "换床");
  927. ruleFormChangeBed.id = row.id;
  928. changeBedVisible.value = true;
  929. changeBedTitle.value = title;
  930. ruleFormChangeBed.buildId = null;
  931. changeBedBuildData.value = null;
  932. ruleFormChangeBed.dormitoryId = null;
  933. changeBedDormitoryData.value = null;
  934. ruleFormChangeBed.changeBedId = null;
  935. changeBedBedData.value = null;
  936. ruleFormChangeBed.schoolId = row.schoolId;
  937. ruleFormChangeBed.collegeId = row.collegeId;
  938. ruleFormChangeBed.sex = row.sex;
  939. changeBedBuildList();
  940. };
  941. // 获取楼栋数据
  942. const changeBedBuildList = async () => {
  943. let params = {
  944. schoolId: ruleFormChangeBed.schoolId,
  945. collegeId: ruleFormChangeBed.collegeId,
  946. sex: ruleFormChangeBed.sex,
  947. };
  948. let res = null;
  949. if (changeBedTitle.value == "换床") {
  950. res = await https.get(
  951. "/welcome/api/welcomeBed/changeBuildGroup",
  952. "params",
  953. params
  954. );
  955. } else if (changeBedTitle.value == "床位对调") {
  956. res = await https.get(
  957. "/welcome/api/welcomeBed/replaceBuildGroup",
  958. "params",
  959. params
  960. );
  961. }
  962. console.log(res, "楼栋数据");
  963. if (res.code == 200) {
  964. changeBedBuildData.value = res.data;
  965. } else {
  966. ElMessage({
  967. type: "error",
  968. showClose: true,
  969. message: res.message,
  970. center: true,
  971. });
  972. }
  973. };
  974. // 获取寝室号数据
  975. const changeBedDormitoryList = async () => {
  976. let params = {
  977. schoolId: ruleFormChangeBed.schoolId,
  978. collegeId: ruleFormChangeBed.collegeId,
  979. sex: ruleFormChangeBed.sex,
  980. buildId: ruleFormChangeBed.buildId,
  981. };
  982. let res = null;
  983. if (changeBedTitle.value == "换床") {
  984. res = await https.get(
  985. "/welcome/api/welcomeBed/changeDormitoryGroup",
  986. "params",
  987. params
  988. );
  989. } else if (changeBedTitle.value == "床位对调") {
  990. res = await https.get(
  991. "/welcome/api/welcomeBed/replaceDormitoryGroup",
  992. "params",
  993. params
  994. );
  995. }
  996. console.log(res, "寝室号数据");
  997. if (res.code == 200) {
  998. changeBedDormitoryData.value = res.data;
  999. } else {
  1000. ElMessage({
  1001. type: "error",
  1002. showClose: true,
  1003. message: res.message,
  1004. center: true,
  1005. });
  1006. }
  1007. };
  1008. // 获取床位号数据
  1009. const changeBedBedList = async () => {
  1010. let params = {
  1011. schoolId: ruleFormChangeBed.schoolId,
  1012. collegeId: ruleFormChangeBed.collegeId,
  1013. sex: ruleFormChangeBed.sex,
  1014. buildId: ruleFormChangeBed.buildId,
  1015. dormitoryId: ruleFormChangeBed.dormitoryId,
  1016. };
  1017. let res = "";
  1018. if (changeBedTitle.value == "换床") {
  1019. res = await https.get(
  1020. "/welcome/api/welcomeBed/changeBedGroup",
  1021. "params",
  1022. params
  1023. );
  1024. } else if (changeBedTitle.value == "床位对调") {
  1025. res = await https.get(
  1026. "/welcome/api/welcomeBed/replaceBedGroup",
  1027. "params",
  1028. params
  1029. );
  1030. }
  1031. console.log(res, "床位号数据");
  1032. if (res.code == 200) {
  1033. changeBedBedData.value = res.data;
  1034. } else {
  1035. ElMessage({
  1036. type: "error",
  1037. showClose: true,
  1038. message: res.message,
  1039. center: true,
  1040. });
  1041. }
  1042. };
  1043. // 切换楼栋
  1044. const buildChangeBed = () => {
  1045. ruleFormChangeBed.dormitoryId = null;
  1046. changeBedDormitoryData.value = null;
  1047. ruleFormChangeBed.changeBedId = null;
  1048. changeBedBedData.value = null;
  1049. changeBedDormitoryList();
  1050. };
  1051. // 切换寝室号
  1052. const dormitoryChangeBed = () => {
  1053. ruleFormChangeBed.changeBedId = null;
  1054. changeBedBedData.value = null;
  1055. changeBedBedList();
  1056. };
  1057. const submitChangeBed = lodash.debounce(async (formEl) => {
  1058. if (!formEl) return;
  1059. await formEl.validate(async (valid, fields) => {
  1060. if (valid) {
  1061. let data = {
  1062. sourceBedId: ruleFormChangeBed.id, //源床位id
  1063. changeBedId: ruleFormChangeBed.changeBedId, //交换的床位id
  1064. };
  1065. let res = null;
  1066. if (changeBedTitle.value == "换床") {
  1067. res = await https.post(
  1068. "/welcome/api/welcomeBed/changeBed",
  1069. "data",
  1070. data
  1071. );
  1072. } else if (changeBedTitle.value == "床位对调") {
  1073. res = await https.post(
  1074. "/welcome/api/welcomeBed/replaceBed",
  1075. "data",
  1076. data
  1077. );
  1078. }
  1079. if (res.code == 200) {
  1080. changeBedVisible.value = false;
  1081. getList();
  1082. ElMessage({
  1083. type: "success",
  1084. showClose: true,
  1085. message: res.message,
  1086. center: true,
  1087. });
  1088. } else {
  1089. ElMessage({
  1090. type: "error",
  1091. showClose: true,
  1092. message: res.message,
  1093. center: true,
  1094. });
  1095. }
  1096. } else {
  1097. console.log("error submit!", fields);
  1098. loading.value = false;
  1099. }
  1100. });
  1101. }, 1000);
  1102. const cancelChangeBed = () => {
  1103. changeBedVisible.value = false;
  1104. };
  1105. // 导入
  1106. const buildImportVisible = ref(false);
  1107. const buildRef = ref();
  1108. const buildFile = ref();
  1109. // 校区数据
  1110. const schoolData = ref([]);
  1111. // 楼栋数据
  1112. const buildData = ref([]);
  1113. const buildFormData = ref([]);
  1114. // 寝室号数据
  1115. const dormitoryData = ref([]);
  1116. const dormitoryFormData = ref([]);
  1117. // 学院
  1118. const collegeData = ref([]);
  1119. // 专业
  1120. const majorData = ref([]);
  1121. const majorFormData = ref([]);
  1122. // 班级
  1123. const classstrData = ref([]);
  1124. const classstrFormData = ref([]);
  1125. const schoolList = async () => {
  1126. let res = await https.get("/welcome/api/welcome-build/schoolGroup", "params");
  1127. console.log(res, "校区数据");
  1128. if (res.code == 200) {
  1129. schoolData.value = res.data;
  1130. } else {
  1131. ElMessage({
  1132. type: "error",
  1133. showClose: true,
  1134. message: res.message,
  1135. center: true,
  1136. });
  1137. }
  1138. };
  1139. const buildList = async (flag) => {
  1140. let params = {
  1141. schoolId: flag ? flag : searchInput.schoolId,
  1142. accountId: sessionStorage.getItem("accountId"),
  1143. };
  1144. let res = await https.get(
  1145. // "/welcome/api/welcome-build/buildGroup",
  1146. "/welcome/api/welcome-dormitory/saveBedDormitoryGroup",
  1147. "params",
  1148. params
  1149. );
  1150. console.log(res, "楼栋数据");
  1151. if (res.code == 200) {
  1152. if (flag) {
  1153. buildFormData.value = res.data;
  1154. } else {
  1155. buildData.value = res.data;
  1156. }
  1157. } else {
  1158. ElMessage({
  1159. type: "error",
  1160. showClose: true,
  1161. message: res.message,
  1162. center: true,
  1163. });
  1164. }
  1165. };
  1166. const dormitoryList = async (flag) => {
  1167. let params = null;
  1168. if (flag) {
  1169. params = flag;
  1170. } else {
  1171. params = {
  1172. schoolId: searchInput.schoolId,
  1173. buildId: searchInput.buildId,
  1174. };
  1175. }
  1176. let res = await https.get(
  1177. "/welcome/api/welcome-dormitory/dormitoryGroup",
  1178. "params",
  1179. params
  1180. );
  1181. console.log(res, "寝室号数据");
  1182. if (res.code == 200) {
  1183. if (flag) {
  1184. dormitoryFormData.value = res.data;
  1185. } else {
  1186. dormitoryData.value = res.data;
  1187. }
  1188. } else {
  1189. ElMessage({
  1190. type: "error",
  1191. showClose: true,
  1192. message: res.message,
  1193. center: true,
  1194. });
  1195. }
  1196. };
  1197. const collegeList = async () => {
  1198. collegeData.value = collegeRole.value;
  1199. // let res = await https.get("/welcome/api/welcomeOrg/getColleges", "params");
  1200. // console.log(res, "学院数据");
  1201. // if (res.code == 200) {
  1202. // collegeData.value = res.data;
  1203. // } else {
  1204. // ElMessage({
  1205. // type: "error",
  1206. // showClose: true,
  1207. // message: res.message,
  1208. // center: true,
  1209. // });
  1210. // }
  1211. };
  1212. const majorList = async (flag) => {
  1213. let params = {
  1214. collegeId: flag ? flag : searchInput.collegeId,
  1215. };
  1216. let res = await https.get(
  1217. "/welcome/api/welcomeOrg/getMajors",
  1218. "params",
  1219. params
  1220. );
  1221. console.log(res, "专业数据");
  1222. if (res.code == 200) {
  1223. if (flag) {
  1224. majorFormData.value = res.data;
  1225. } else {
  1226. majorData.value = res.data;
  1227. }
  1228. } else {
  1229. ElMessage({
  1230. type: "error",
  1231. showClose: true,
  1232. message: res.message,
  1233. center: true,
  1234. });
  1235. }
  1236. };
  1237. const classstrList = async (flag) => {
  1238. let params = {
  1239. majorId: flag ? flag : searchInput.majorId,
  1240. };
  1241. let res = await https.get(
  1242. "/welcome/api/welcomeOrg/getClasss",
  1243. "params",
  1244. params
  1245. );
  1246. console.log(res, "班级数据");
  1247. if (res.code == 200) {
  1248. if (flag) {
  1249. classstrFormData.value = res.data;
  1250. } else {
  1251. classstrData.value = res.data;
  1252. }
  1253. } else {
  1254. ElMessage({
  1255. type: "error",
  1256. showClose: true,
  1257. message: res.message,
  1258. center: true,
  1259. });
  1260. }
  1261. };
  1262. const schoolChange = async (val) => {
  1263. console.log(val);
  1264. searchInput.buildId = null;
  1265. searchInput.dormitoryId = null;
  1266. if (!val) {
  1267. buildData.value = null;
  1268. dormitoryData.value = null;
  1269. return;
  1270. } else {
  1271. buildData.value = null;
  1272. dormitoryData.value = null;
  1273. }
  1274. buildList();
  1275. };
  1276. const schoolFormChange = async (val) => {
  1277. console.log(val);
  1278. ruleForm.build = null;
  1279. ruleForm.dormitory = null;
  1280. ruleForm.college = null;
  1281. ruleForm.college = null;
  1282. ruleForm.major = null;
  1283. ruleForm.classstr = null;
  1284. majorFormData.value = null;
  1285. classstrFormData.value = null;
  1286. if (!val) {
  1287. buildFormData.value = null;
  1288. dormitoryFormData.value = null;
  1289. return;
  1290. } else {
  1291. buildFormData.value = null;
  1292. dormitoryFormData.value = null;
  1293. }
  1294. buildList(val.split(",")[1]);
  1295. };
  1296. const buildChange = async (val) => {
  1297. searchInput.dormitoryId = null;
  1298. if (!val) {
  1299. dormitoryData.value = null;
  1300. return;
  1301. } else {
  1302. dormitoryData.value = null;
  1303. }
  1304. dormitoryList();
  1305. };
  1306. const buildFormChange = async (val) => {
  1307. console.log(val);
  1308. ruleForm.dormitory = null;
  1309. ruleForm.college = null;
  1310. ruleForm.college = null;
  1311. ruleForm.major = null;
  1312. ruleForm.classstr = null;
  1313. majorFormData.value = null;
  1314. classstrFormData.value = null;
  1315. if (!val) {
  1316. dormitoryFormData.value = null;
  1317. return;
  1318. } else {
  1319. dormitoryFormData.value = null;
  1320. }
  1321. dormitoryList({
  1322. schoolId: ruleForm.school.split(",")[1],
  1323. buildId: val.split(",")[1],
  1324. });
  1325. // 选择楼栋时判断是性别
  1326. buildFormData.value.forEach((i) => {
  1327. if (i.id == val.split(",")[1]) {
  1328. ruleForm.sex = i.sex;
  1329. }
  1330. });
  1331. };
  1332. const dormitoryFormChange = (val) => {
  1333. // 选择寝室号 时判断是 所属学院
  1334. if (val) {
  1335. dormitoryFormData.value.forEach((i) => {
  1336. if (i.id == val.split(",")[1]) {
  1337. ruleForm.college = `${i.college},${i.collegeId}`;
  1338. collegeFormChange(ruleForm.college);
  1339. }
  1340. });
  1341. } else {
  1342. ruleForm.college = null;
  1343. ruleForm.major = null;
  1344. ruleForm.classstr = null;
  1345. majorFormData.value = null;
  1346. classstrFormData.value = null;
  1347. }
  1348. };
  1349. const collegeChange = async (val) => {
  1350. console.log(val);
  1351. searchInput.majorId = null;
  1352. searchInput.classstrId = null;
  1353. if (!val) {
  1354. majorData.value = null;
  1355. classstrData.value = null;
  1356. return;
  1357. } else {
  1358. majorData.value = null;
  1359. classstrData.value = null;
  1360. }
  1361. majorList();
  1362. };
  1363. const collegeFormChange = async (val) => {
  1364. console.log(val);
  1365. ruleForm.major = null;
  1366. ruleForm.classstr = null;
  1367. if (!val) {
  1368. majorFormData.value = null;
  1369. classstrFormData.value = null;
  1370. return;
  1371. } else {
  1372. majorFormData.value = null;
  1373. classstrFormData.value = null;
  1374. }
  1375. majorList(val.split(",")[1]);
  1376. };
  1377. const majorChange = async (val) => {
  1378. console.log(val);
  1379. searchInput.classstrId = null;
  1380. if (!val) {
  1381. classstrData.value = null;
  1382. return;
  1383. } else {
  1384. classstrData.value = null;
  1385. }
  1386. classstrList();
  1387. };
  1388. const majorFormChange = async (val) => {
  1389. console.log(val);
  1390. ruleForm.classstr = null;
  1391. if (!val) {
  1392. classstrFormData.value = null;
  1393. return;
  1394. } else {
  1395. classstrFormData.value = null;
  1396. }
  1397. classstrList(val.split(",")[1]);
  1398. };
  1399. // 获取账户列表
  1400. const getList = async () => {
  1401. loading.value = true;
  1402. let params = {
  1403. accountId: sessionStorage.getItem("accountId"),
  1404. currentPage: currentPage.value, // 当前页
  1405. pageCount: pageSize.value, // 一页数据条数
  1406. schoolId: searchInput.schoolId,
  1407. buildId: searchInput.buildId,
  1408. dormitoryId: searchInput.dormitoryId,
  1409. sex: searchInput.sex,
  1410. isCheck: searchInput.isCheck,
  1411. collegeId: searchInput.collegeId,
  1412. majorId: searchInput.majorId,
  1413. classstrId: searchInput.classstrId,
  1414. retentionState: searchInput.retentionState,
  1415. };
  1416. let res = await https.get(
  1417. "/welcome/api/welcomeBed/queryPageBeds",
  1418. "params",
  1419. params
  1420. );
  1421. console.log(res, "床位信息");
  1422. if (res.code == 200) {
  1423. tableData.list = res.data.list;
  1424. total.value = res.data.totalCount;
  1425. loading.value = false;
  1426. } else {
  1427. loading.value = false;
  1428. ElMessage({
  1429. type: "error",
  1430. showClose: true,
  1431. message: res.message,
  1432. center: true,
  1433. });
  1434. }
  1435. };
  1436. // 搜索功能
  1437. const searchBtn = lodash.debounce(async () => {
  1438. getList();
  1439. }, 300);
  1440. const resetBtn = lodash.debounce(async () => {
  1441. searchInput.schoolId = null;
  1442. searchInput.buildId = null;
  1443. buildData.value = [];
  1444. searchInput.dormitoryId = null;
  1445. dormitoryData.value = [];
  1446. searchInput.sex = null;
  1447. searchInput.isCheck = null;
  1448. searchInput.retentionState = null;
  1449. searchInput.collegeId = null;
  1450. searchInput.majorId = null;
  1451. majorData.value = [];
  1452. searchInput.classstrId = null;
  1453. classstrData.value = [];
  1454. getList();
  1455. }, 300);
  1456. // 添加账号
  1457. const addlist = () => {
  1458. dialongTitle.value = "新增床位信息";
  1459. addDialogVisible.value = true;
  1460. ruleForm.number = null;
  1461. ruleForm.school = null;
  1462. ruleForm.build = null;
  1463. buildFormData.value = null;
  1464. ruleForm.dormitory = null;
  1465. dormitoryFormData.value = null;
  1466. ruleForm.sex = null;
  1467. ruleForm.college = null;
  1468. ruleForm.major = null;
  1469. majorFormData.value = null;
  1470. ruleForm.classstr = null;
  1471. classstrFormData.value = null;
  1472. ruleForm.isCheck = null;
  1473. ruleForm.cardNum = null;
  1474. ruleForm.name = null;
  1475. ruleForm.instructor = null;
  1476. ruleForm.remark = null;
  1477. ruleForm.retentionState = 1;
  1478. ruleForm.id = null;
  1479. };
  1480. // 添加账号
  1481. const updateS = (row) => {
  1482. console.log(row);
  1483. dialongTitle.value = "编辑床位信息";
  1484. addDialogVisible.value = true;
  1485. ruleForm.number = row.number;
  1486. if (row.school && row.schoolId) {
  1487. ruleForm.school = `${row.school},${row.schoolId}`;
  1488. } else {
  1489. ruleForm.school = null;
  1490. }
  1491. if (row.build && row.buildId) {
  1492. buildList(row.schoolId).then(() => {
  1493. ruleForm.build = `${row.build},${row.buildId}`;
  1494. });
  1495. } else {
  1496. ruleForm.build = null;
  1497. }
  1498. if (row.dormitory && row.dormitoryId) {
  1499. dormitoryList({
  1500. schoolId: row.schoolId,
  1501. buildId: row.buildId,
  1502. }).then(() => {
  1503. ruleForm.dormitory = `${row.dormitory},${row.dormitoryId}`;
  1504. });
  1505. } else {
  1506. ruleForm.dormitory = null;
  1507. }
  1508. ruleForm.sex = row.sex;
  1509. if (row.college && row.collegeId) {
  1510. ruleForm.college = `${row.college},${row.collegeId}`;
  1511. } else {
  1512. ruleForm.college = null;
  1513. }
  1514. majorList(row.collegeId).then(() => {
  1515. if (row.major && row.majorId) {
  1516. ruleForm.major = `${row.major},${row.majorId}`;
  1517. } else {
  1518. ruleForm.major = null;
  1519. }
  1520. });
  1521. if (row.majorId) {
  1522. classstrList(row.majorId).then(() => {
  1523. if (row.classstr && row.classstrId) {
  1524. ruleForm.classstr = `${row.classstr},${row.classstrId}`;
  1525. } else {
  1526. ruleForm.classstr = null;
  1527. }
  1528. });
  1529. }
  1530. ruleForm.retentionState = row.retentionState;
  1531. ruleForm.isCheck = row.isCheck;
  1532. ruleForm.cardNum = row.cardNum;
  1533. ruleForm.name = row.name;
  1534. ruleForm.instructor = row.instructor;
  1535. ruleForm.remark = row.remark;
  1536. ruleForm.id = row.id;
  1537. };
  1538. // 退宿
  1539. const outDormitory = async (row) => {
  1540. ElMessageBox.confirm("确认该床位退宿?", "提示!!!", {
  1541. confirmButtonText: "确认",
  1542. cancelButtonText: "取消",
  1543. type: "warning",
  1544. })
  1545. .then(async () => {
  1546. let data = {
  1547. bedId: row.id, // 当前页
  1548. };
  1549. let res = await https.get(
  1550. "/welcome/api/welcomeBed/checkOutDormitory",
  1551. "params",
  1552. data
  1553. );
  1554. if (res.code == 200) {
  1555. ElMessage({
  1556. type: "success",
  1557. showClose: true,
  1558. message: res.message,
  1559. center: true,
  1560. });
  1561. loading.value = false;
  1562. getList();
  1563. } else {
  1564. loading.value = false;
  1565. ElMessage({
  1566. type: "error",
  1567. showClose: true,
  1568. message: res.message,
  1569. center: true,
  1570. });
  1571. }
  1572. })
  1573. .catch(() => {});
  1574. };
  1575. const deleteS = async (row) => {
  1576. ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
  1577. confirmButtonText: "确认",
  1578. cancelButtonText: "取消",
  1579. type: "warning",
  1580. })
  1581. .then(async () => {
  1582. loading.value = true;
  1583. let data = {
  1584. id: row.id, // 当前页
  1585. };
  1586. let res = await https.get(
  1587. "/welcome/api/welcomeBed/deleteBedInfo",
  1588. "params",
  1589. data
  1590. );
  1591. if (res.code == 200) {
  1592. ElMessage({
  1593. type: "success",
  1594. showClose: true,
  1595. message: res.message,
  1596. center: true,
  1597. });
  1598. loading.value = false;
  1599. getList();
  1600. } else {
  1601. loading.value = false;
  1602. ElMessage({
  1603. type: "error",
  1604. showClose: true,
  1605. message: res.message,
  1606. center: true,
  1607. });
  1608. }
  1609. })
  1610. .catch(() => {
  1611. loading.value = false;
  1612. });
  1613. };
  1614. // 保留
  1615. const retainS = async (row, flag) => {
  1616. let data = {
  1617. bedIds: [row.id], // 当前页
  1618. retentionState: flag, //保留状态 1:开放,0保留
  1619. };
  1620. let res = await https.post(
  1621. "/welcome/api/welcomeBed/batchOperationBed",
  1622. "data",
  1623. data
  1624. );
  1625. if (res.code == 200) {
  1626. ElMessage({
  1627. type: "success",
  1628. showClose: true,
  1629. message: res.message,
  1630. center: true,
  1631. });
  1632. getList();
  1633. } else {
  1634. ElMessage({
  1635. type: "error",
  1636. showClose: true,
  1637. message: res.message,
  1638. center: true,
  1639. });
  1640. }
  1641. };
  1642. // 批量保留
  1643. const batchRetainS = async (title, flag) => {
  1644. if (selectIds.value.length == 0) {
  1645. ElMessage({
  1646. type: "warning",
  1647. showClose: true,
  1648. message: "至少选择一条数据",
  1649. center: true,
  1650. });
  1651. return;
  1652. }
  1653. ElMessageBox.confirm(`是否${title}数据?`, "提示!!!", {
  1654. confirmButtonText: "确认",
  1655. cancelButtonText: "取消",
  1656. type: "warning",
  1657. })
  1658. .then(async () => {
  1659. let data = {
  1660. bedIds: selectIds.value, // 当前页
  1661. retentionState: flag, //保留状态 1:保留,0不保留
  1662. };
  1663. let res = await https.post(
  1664. "/welcome/api/welcomeBed/batchOperationBed",
  1665. "data",
  1666. data
  1667. );
  1668. if (res.code == 200) {
  1669. ElMessage({
  1670. type: "success",
  1671. showClose: true,
  1672. message: res.message,
  1673. center: true,
  1674. });
  1675. getList();
  1676. } else {
  1677. ElMessage({
  1678. type: "error",
  1679. showClose: true,
  1680. message: res.message,
  1681. center: true,
  1682. });
  1683. }
  1684. })
  1685. .catch(() => {
  1686. loading.value = false;
  1687. });
  1688. };
  1689. // 确认添加员工
  1690. const submitAdd = lodash.debounce(async (formEl) => {
  1691. if (!formEl) return;
  1692. await formEl.validate(async (valid, fields) => {
  1693. if (valid) {
  1694. let data = {
  1695. school: ruleForm.school.split(",")[0],
  1696. schoolId: ruleForm.school.split(",")[1],
  1697. build: ruleForm.build.split(",")[0],
  1698. buildId: ruleForm.build.split(",")[1],
  1699. dormitory: ruleForm.dormitory.split(",")[0],
  1700. dormitoryId: ruleForm.dormitory.split(",")[1],
  1701. sex: ruleForm.sex,
  1702. // isCheck: ruleForm.isCheck == true ? 1 : 0,
  1703. cardNum: ruleForm.cardNum,
  1704. name: ruleForm.name,
  1705. instructor: ruleForm.instructor,
  1706. remark: ruleForm.remark,
  1707. number: ruleForm.number,
  1708. retentionState: ruleForm.retentionState,
  1709. grade: dayjs().year(),
  1710. };
  1711. if (ruleForm.college) {
  1712. data.college = ruleForm.college.split(",")[0];
  1713. data.collegeId = ruleForm.college.split(",")[1];
  1714. }
  1715. if (ruleForm.major) {
  1716. data.major = ruleForm.major.split(",")[0];
  1717. data.majorId = ruleForm.major.split(",")[1];
  1718. }
  1719. if (ruleForm.classstr) {
  1720. data.classstr = ruleForm.classstr.split(",")[0];
  1721. data.classstrId = ruleForm.classstr.split(",")[1];
  1722. }
  1723. if (ruleForm.id) {
  1724. data.id = ruleForm.id;
  1725. let res = await https.post(
  1726. "/welcome/api/welcomeBed/updateBedInfo",
  1727. "data",
  1728. data
  1729. );
  1730. if (res.code == 200) {
  1731. addDialogVisible.value = false;
  1732. getList();
  1733. ElMessage({
  1734. type: "success",
  1735. showClose: true,
  1736. message: res.message,
  1737. center: true,
  1738. });
  1739. } else {
  1740. ElMessage({
  1741. type: "error",
  1742. showClose: true,
  1743. message: res.message,
  1744. center: true,
  1745. });
  1746. }
  1747. } else {
  1748. let res = await https.post(
  1749. "/welcome/api/welcomeBed/insertBedInfo",
  1750. "data",
  1751. data
  1752. );
  1753. if (res.code == 200) {
  1754. addDialogVisible.value = false;
  1755. getList();
  1756. ElMessage({
  1757. type: "success",
  1758. showClose: true,
  1759. message: res.message,
  1760. center: true,
  1761. });
  1762. } else {
  1763. ElMessage({
  1764. type: "error",
  1765. showClose: true,
  1766. message: res.message,
  1767. center: true,
  1768. });
  1769. }
  1770. }
  1771. } else {
  1772. console.log("error submit!", fields);
  1773. loading.value = false;
  1774. }
  1775. });
  1776. }, 1000);
  1777. const cancelAdd = () => {
  1778. addDialogVisible.value = false;
  1779. ruleForm.number = null;
  1780. ruleForm.school = null;
  1781. ruleForm.build = null;
  1782. buildFormData.value = null;
  1783. ruleForm.dormitory = null;
  1784. dormitoryFormData.value = null;
  1785. ruleForm.sex = null;
  1786. ruleForm.college = null;
  1787. ruleForm.major = null;
  1788. majorFormData.value = null;
  1789. ruleForm.classstr = null;
  1790. classstrFormData.value = null;
  1791. ruleForm.isCheck = null;
  1792. ruleForm.cardNum = null;
  1793. ruleForm.name = null;
  1794. ruleForm.instructor = null;
  1795. ruleForm.remark = null;
  1796. ruleForm.id = null;
  1797. // ruleFormRef.value.resetFields();
  1798. };
  1799. // 多选框功能
  1800. const handleSelectionChange = (val) => {
  1801. console.log(val);
  1802. selectIds.value = val.map((i) => i.id);
  1803. };
  1804. // 表格斑马纹颜色修改
  1805. const tableRowClassName = ({ row, rowIndex }) => {
  1806. if (rowIndex % 2 === 0) {
  1807. return "even";
  1808. } else if (rowIndex % 2 !== 0) {
  1809. return "odd";
  1810. }
  1811. return "";
  1812. };
  1813. // 每页显示条数
  1814. const handleSizeChange = (value) => {
  1815. console.log(value, "每页显示条数");
  1816. pageSize.value = value;
  1817. getList();
  1818. };
  1819. // 分页
  1820. const handleCurrentChange = (value) => {
  1821. // console.log(value);
  1822. currentPage.value = value;
  1823. getList();
  1824. };
  1825. // 楼栋导出
  1826. const buildExportbtn = async () => {
  1827. let params = {
  1828. accountId: sessionStorage.getItem("accountId"),
  1829. schoolId: searchInput.schoolId,
  1830. buildId: searchInput.buildId,
  1831. dormitoryId: searchInput.dormitoryId,
  1832. sex: searchInput.sex,
  1833. isCheck: searchInput.isCheck,
  1834. collegeId: searchInput.collegeId,
  1835. majorId: searchInput.majorId,
  1836. classstrId: searchInput.classstrId,
  1837. retentionState: searchInput.retentionState,
  1838. };
  1839. let res = await https.getBlob(
  1840. "/welcome/api/welcomeBed/welcomeBedExport",
  1841. "params",
  1842. params
  1843. );
  1844. console.log(res, "床位信息管理导出");
  1845. let name = `床位信息管理`;
  1846. var content = res;
  1847. var datas = new Blob([content]);
  1848. var downloadUrl = window.URL.createObjectURL(datas);
  1849. var anchor = document.createElement("a");
  1850. anchor.href = downloadUrl;
  1851. anchor.download = name + ".xlsx";
  1852. anchor.click();
  1853. window.URL.revokeObjectURL(datas);
  1854. ElMessage({
  1855. type: "success",
  1856. showClose: true,
  1857. message: "导出成功",
  1858. center: true,
  1859. });
  1860. };
  1861. // 楼栋导入 (--------------------------------------------------)
  1862. const buildImportBtn = () => {
  1863. buildImportVisible.value = true;
  1864. };
  1865. // 模板下载
  1866. const templateDown = async () => {
  1867. let res = await https.get(
  1868. "/welcome/api/welcomeBed/downloadBedExcel",
  1869. "params"
  1870. );
  1871. console.log(res, "模板下载");
  1872. if (res.code == 200) {
  1873. window.location.href = res.data;
  1874. } else {
  1875. ElMessage({
  1876. type: "error",
  1877. showClose: true,
  1878. message: res.message,
  1879. center: true,
  1880. });
  1881. }
  1882. };
  1883. // 移出照片
  1884. const projectImportRemove = (uploadFile, uploadFiles) => {
  1885. console.log(uploadFile, uploadFiles);
  1886. buildFile.value = "";
  1887. };
  1888. // 限制上传图片的大小
  1889. // const beforeAvatarProImport = (rawFile) => {
  1890. // console.log(rawFile, 33333);
  1891. // if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
  1892. // ElMessage.error("图片格式必须为JPG/PNG格式!");
  1893. // return false;
  1894. // } else if (rawFile.size / 1024 > 150) {
  1895. // ElMessage.error("图片的大小不能超过150kb!");
  1896. // return false;
  1897. // }
  1898. // return true;
  1899. // };
  1900. // 添加照片时往fileList列表中添加图片信息
  1901. const projectImportChange = async (file, fileLists) => {
  1902. console.log(file, "1111");
  1903. buildFile.value = file.raw;
  1904. };
  1905. const projectImportExceed = (files) => {
  1906. buildRef.value.clearFiles();
  1907. const file = files[0];
  1908. file.uid = genFileId();
  1909. buildRef.value.handleStart(file);
  1910. };
  1911. // 导入项目
  1912. const projectImportConfirm = async () => {
  1913. let data = new FormData();
  1914. data.set("file", buildFile.value);
  1915. let res = await https.post(
  1916. "/welcome/api/welcomeBed/importBedExcel",
  1917. "data",
  1918. data
  1919. );
  1920. console.log(res, "导入项目");
  1921. if (res.code == 200) {
  1922. buildImportVisible.value = false;
  1923. getList();
  1924. ElMessage({
  1925. type: "success",
  1926. showClose: true,
  1927. message: res.message,
  1928. center: true,
  1929. });
  1930. } else {
  1931. ElMessage({
  1932. type: "error",
  1933. showClose: true,
  1934. message: res.message,
  1935. center: true,
  1936. });
  1937. }
  1938. };
  1939. const cancelProjectImport = () => {
  1940. buildImportVisible.value = false;
  1941. };
  1942. onBeforeMount(() => {
  1943. getList();
  1944. schoolList();
  1945. collegeList();
  1946. });
  1947. onUnmounted(() => {
  1948. // document.removeEventListener("keyup", Enters);
  1949. });
  1950. </script>
  1951. <style scoped lang="scss">
  1952. .content-box {
  1953. width: calc(100% - 40px);
  1954. height: calc(100% - 105px);
  1955. margin: 20px auto;
  1956. background-color: #fff;
  1957. color: #000;
  1958. display: flex;
  1959. flex-direction: column;
  1960. .svg {
  1961. width: 22px;
  1962. height: 22px;
  1963. }
  1964. .left {
  1965. width: calc(100% - 60px);
  1966. height: 60px;
  1967. margin: 0 auto;
  1968. display: flex;
  1969. align-items: center;
  1970. border-bottom: 1px solid #ccc;
  1971. color: #000;
  1972. font-size: 18px;
  1973. font-weight: 600;
  1974. .camera {
  1975. margin-right: 15px;
  1976. color: #4392f7;
  1977. }
  1978. }
  1979. .scroll {
  1980. width: calc(100% - 60px);
  1981. height: calc(100% - 61px);
  1982. margin: 0 auto;
  1983. display: flex;
  1984. flex-direction: column;
  1985. .middle {
  1986. width: calc(100%);
  1987. color: #000;
  1988. .filter {
  1989. display: flex;
  1990. flex-wrap: wrap;
  1991. align-items: center;
  1992. .search {
  1993. margin-left: 0 !important;
  1994. color: #fff;
  1995. }
  1996. .condition {
  1997. display: flex;
  1998. align-items: center;
  1999. margin: 10px 30px 10px 0;
  2000. :deep(.el-input .el-input__inner) {
  2001. font-size: 14px;
  2002. }
  2003. .el-select {
  2004. width: 220px;
  2005. }
  2006. span {
  2007. margin: 0 10px 0 0;
  2008. }
  2009. }
  2010. }
  2011. .gongneng {
  2012. margin: 10px 0;
  2013. .el-button {
  2014. color: #fff;
  2015. margin-right: 15px;
  2016. }
  2017. }
  2018. }
  2019. .footer {
  2020. width: calc(100%);
  2021. flex: 1;
  2022. margin: 0 auto;
  2023. overflow: auto;
  2024. .el-table--fit {
  2025. height: calc(100% - 60px);
  2026. :deep(.el-table__header-wrapper) {
  2027. background-color: #000;
  2028. font-size: 15px;
  2029. color: #000;
  2030. .cell {
  2031. color: #000;
  2032. }
  2033. }
  2034. :deep(.el-table__row) {
  2035. height: 50px;
  2036. font-size: 15px;
  2037. color: #000;
  2038. }
  2039. :deep(.el-table__row td) {
  2040. padding: 0;
  2041. border: 0;
  2042. }
  2043. .el-button--primary {
  2044. margin-left: 5px;
  2045. }
  2046. :deep(.el-table__body .even) {
  2047. background-color: #fff;
  2048. }
  2049. :deep(.el-table__body .odd) {
  2050. background-color: rgba(240, 243, 247, 1);
  2051. }
  2052. :deep(.options) {
  2053. display: flex;
  2054. justify-content: center;
  2055. align-items: center;
  2056. .open {
  2057. color: #2697ff;
  2058. cursor: pointer;
  2059. margin: 0 15px 0 0;
  2060. }
  2061. .edit {
  2062. margin: 0 15px 0 0;
  2063. color: rgba(0, 186, 173, 1);
  2064. cursor: pointer;
  2065. }
  2066. .delete {
  2067. color: rgba(212, 48, 48, 1);
  2068. cursor: pointer;
  2069. }
  2070. }
  2071. }
  2072. .pageSize {
  2073. display: flex;
  2074. align-items: center;
  2075. justify-content: space-between;
  2076. margin: 0 30px;
  2077. height: 60px;
  2078. span {
  2079. color: #000;
  2080. }
  2081. .el-pagination {
  2082. // width: 1600px;
  2083. :deep(.el-pagination__total) {
  2084. color: #000;
  2085. }
  2086. :deep(.el-pagination__goto) {
  2087. color: #000;
  2088. }
  2089. :deep(.el-pagination__classifier) {
  2090. color: #000;
  2091. }
  2092. :deep(.el-input__wrapper) {
  2093. border: 1px solid rgba(0, 0, 0, 1);
  2094. border-radius: 5px;
  2095. box-shadow: none;
  2096. }
  2097. :deep(.el-pager li) {
  2098. margin: 0 5px;
  2099. border: 1px solid rgba(0, 0, 0, 1);
  2100. border-radius: 5px;
  2101. background-color: transparent;
  2102. }
  2103. :deep(.el-pager li.is-active) {
  2104. // background-color: rgba(0, 97, 255, 0.8);
  2105. border: 1px solid rgba(0, 97, 255, 1);
  2106. color: rgba(0, 97, 255, 1);
  2107. }
  2108. :deep(.btn-prev) {
  2109. margin-right: 5px;
  2110. border: 1px solid rgba(0, 0, 0, 1);
  2111. border-radius: 5px;
  2112. background-color: transparent;
  2113. }
  2114. :deep(.btn-next) {
  2115. margin-left: 5px;
  2116. border: 1px solid rgba(0, 0, 0, 1);
  2117. border-radius: 5px;
  2118. background-color: transparent;
  2119. }
  2120. }
  2121. }
  2122. }
  2123. }
  2124. // 添加员工弹窗样式
  2125. :deep(.addStaff) {
  2126. .el-dialog__body {
  2127. padding: 20px 20px 10px 20px;
  2128. .el-input {
  2129. width: 400px;
  2130. .el-input__suffix-inner {
  2131. color: rgba(61, 81, 232, 1);
  2132. }
  2133. }
  2134. .el-select {
  2135. width: 400px;
  2136. }
  2137. .el-tree {
  2138. width: 400px;
  2139. }
  2140. }
  2141. }
  2142. // 导入
  2143. :deep(.projectImport) {
  2144. .el-dialog__body {
  2145. padding: 20px 30px 0 30px;
  2146. .title {
  2147. color: red;
  2148. }
  2149. .down {
  2150. span:nth-child(1) {
  2151. color: rgba(127, 127, 127, 1);
  2152. }
  2153. span:nth-child(2) {
  2154. margin-left: 25px;
  2155. color: rgba(2, 167, 240, 1);
  2156. cursor: pointer;
  2157. }
  2158. }
  2159. .options {
  2160. margin: 50px 0 30px 0;
  2161. display: flex;
  2162. flex-direction: row-reverse;
  2163. .queding {
  2164. margin-left: 20px;
  2165. background: linear-gradient(
  2166. 90deg,
  2167. rgba(38, 151, 255, 1) 0%,
  2168. rgba(102, 181, 255, 1) 100%
  2169. );
  2170. border: none;
  2171. }
  2172. .quxiao {
  2173. border: 1px solid rgba(43, 151, 252, 1);
  2174. color: rgba(43, 151, 252, 1);
  2175. }
  2176. }
  2177. }
  2178. }
  2179. }
  2180. </style>