studentInfo.vue 93 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271
  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. @change="collegeChange"
  14. v-model="searchInput.college"
  15. placeholder="请选择院系"
  16. clearable
  17. >
  18. <el-option
  19. v-for="i in collegeData"
  20. :key="i.id"
  21. :label="i.name"
  22. :value="i.id"
  23. />
  24. </el-select>
  25. </div>
  26. <div class="condition">
  27. <span>专业 :</span>
  28. <el-select
  29. clearable
  30. @change="majorChange"
  31. v-model="searchInput.major"
  32. placeholder="请选择专业"
  33. >
  34. <el-option
  35. v-for="i in majorData"
  36. :key="i.id"
  37. :label="i.name"
  38. :value="i.id"
  39. />
  40. </el-select>
  41. </div>
  42. <div class="condition">
  43. <span>班级 :</span>
  44. <el-select
  45. clearable
  46. v-model="searchInput.classstr"
  47. placeholder="请选择专业"
  48. >
  49. <el-option
  50. v-for="i in classstrData"
  51. :key="i.id"
  52. :label="i.name"
  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.trafficMethod"
  62. placeholder="请选择交通方式"
  63. >
  64. <el-option label="火车" value="火车" />
  65. <el-option label="飞机" value="飞机" />
  66. <el-option label="汽车" value="汽车" />
  67. <el-option label="自驾" value="自驾" />
  68. <el-option label="其他" value="其他" />
  69. </el-select>
  70. </div>
  71. <div class="condition">
  72. <span>姓名 :</span>
  73. <el-input
  74. clearable
  75. v-model.trim="searchInput.name"
  76. class="w-50 m-2"
  77. placeholder="请输入姓名"
  78. style="width: 180px"
  79. @clear="searchBtn"
  80. />
  81. </div>
  82. <el-button
  83. style="margin-left: 20px"
  84. color="rgba(38, 151, 255, 1)"
  85. type="primary"
  86. class="search"
  87. @click="searchBtn"
  88. ><span>查询</span></el-button
  89. >
  90. <el-button plain color="rgba(43, 153, 255, 1)" @click="resetBtn"
  91. >重置</el-button
  92. >
  93. </div>
  94. <!-- 按钮列表 -->
  95. <div class="gongneng">
  96. <el-button
  97. v-if="store.BtnRole('studentManagementSetting1')"
  98. type="primary"
  99. color="rgba(38, 151, 255, 1)"
  100. @click="buildImportBtn"
  101. >导入</el-button
  102. >
  103. <el-button
  104. v-if="store.BtnRole('studentManagementSetting2')"
  105. type="primary"
  106. style="margin-left: 0"
  107. color="rgba(48, 201, 191, 1)"
  108. @click="buildExportbtn"
  109. >导出</el-button
  110. >
  111. <el-button
  112. v-if="store.BtnRole('studentManagementSetting3')"
  113. type="primary"
  114. style="margin-left: 0"
  115. color="rgba(38, 151, 255, 1)"
  116. @click="addlist"
  117. >新增学生</el-button
  118. >
  119. </div>
  120. </div>
  121. <div class="footer" v-loading="loading">
  122. <el-table
  123. :row-class-name="tableRowClassName"
  124. :data="tableData.list"
  125. style="width: 100%"
  126. :header-cell-style="{
  127. background: 'rgba(240, 243, 247, 1)',
  128. height: '50px',
  129. border: 0,
  130. }"
  131. >
  132. <el-table-column
  133. width="160"
  134. align="center"
  135. prop="admissNum"
  136. label="录取号"
  137. />
  138. <el-table-column
  139. width="120"
  140. align="center"
  141. prop="name"
  142. label="姓名"
  143. />
  144. <el-table-column
  145. width="190"
  146. align="center"
  147. prop="cardId"
  148. label="身份证号"
  149. />
  150. <el-table-column
  151. width="160"
  152. align="center"
  153. prop="college"
  154. label="院系"
  155. >
  156. <template #default="{ row }">
  157. <span>{{ row.college }}</span>
  158. </template>
  159. </el-table-column>
  160. <el-table-column
  161. width="190"
  162. align="center"
  163. prop="major"
  164. label="专业"
  165. />
  166. <el-table-column
  167. width="220"
  168. align="center"
  169. prop="classstr"
  170. label="班级"
  171. />
  172. <el-table-column
  173. width="100"
  174. align="center"
  175. prop="trafficMethod"
  176. label="交通方式"
  177. >
  178. <template #default="{ row }">
  179. <span v-if="row.fillStatus == '已填报'" style="color: #2279ec">{{
  180. row.trafficMethod
  181. }}</span>
  182. <span v-else>{{ row.trafficMethod }}</span>
  183. </template>
  184. </el-table-column>
  185. <el-table-column
  186. width="160"
  187. align="center"
  188. prop="arrive"
  189. label="到站地点"
  190. >
  191. <template #default="{ row }">
  192. <span v-if="row.fillStatus == '已填报'" style="color: #2279ec">{{
  193. row.arrive
  194. }}</span>
  195. <span v-else>{{ row.arrive }}</span>
  196. </template>
  197. </el-table-column>
  198. <el-table-column
  199. width="120"
  200. align="center"
  201. prop="accompanyNum"
  202. label="陪同人数"
  203. >
  204. <template #default="{ row }">
  205. <span v-if="row.fillStatus == '已填报'" style="color: #2279ec">{{
  206. row.accompanyNum
  207. }}</span>
  208. <span v-else>{{ row.accompanyNum }}</span>
  209. </template>
  210. </el-table-column>
  211. <el-table-column
  212. width="120"
  213. align="center"
  214. prop="dormitory"
  215. label="填报状态"
  216. >
  217. <template #default="{ row }">
  218. <span v-if="row.fillStatus == '已填报'" style="color: #2279ec"
  219. >已填报</span
  220. >
  221. <span v-else>未填报</span>
  222. </template>
  223. </el-table-column>
  224. <el-table-column
  225. width="120"
  226. align="center"
  227. prop="dormitory"
  228. label="应缴金额"
  229. >
  230. <template #default="{ row }">
  231. <span v-if="row.fillStatus == '已填报'" style="color: #2279ec">{{
  232. row.amountPayable
  233. }}</span>
  234. <span v-else>{{ row.amountPayable }}</span>
  235. </template>
  236. </el-table-column>
  237. <el-table-column
  238. width="120"
  239. align="center"
  240. prop="dormitory"
  241. label="实付金额"
  242. >
  243. <template #default="{ row }">
  244. <span v-if="row.fillStatus == '已填报'" style="color: #2279ec">{{
  245. row.payAmount
  246. }}</span>
  247. <span v-else>{{ row.payAmount }}</span>
  248. </template>
  249. </el-table-column>
  250. <el-table-column
  251. width="180"
  252. align="center"
  253. prop="dormitory"
  254. label="宿舍信息"
  255. >
  256. <template #default="{ row }">
  257. <span v-if="row.fillStatus == '已填报'" style="color: #2279ec">{{
  258. row.dormitory
  259. }}</span>
  260. <span v-else>{{ row.dormitory }}</span>
  261. </template>
  262. </el-table-column>
  263. <el-table-column
  264. align="center"
  265. label="操作"
  266. fixed="right"
  267. min-width="180"
  268. >
  269. <template #default="{ row }">
  270. <div class="options">
  271. <span
  272. class="info"
  273. v-if="store.BtnRole('studentManagementSetting4')"
  274. @click="infoStudent(row)"
  275. >详情</span
  276. >
  277. <span
  278. class="edit"
  279. v-if="store.BtnRole('studentManagementSetting5')"
  280. @click="updateS(row)"
  281. >编辑</span
  282. >
  283. <span
  284. class="delete"
  285. v-if="store.BtnRole('studentManagementSetting6')"
  286. @click="deleteS(row)"
  287. >删除</span
  288. >
  289. </div>
  290. </template>
  291. </el-table-column>
  292. </el-table>
  293. <!-- 分页组件 -->
  294. <div class="pageSize">
  295. <span></span>
  296. <el-pagination
  297. background
  298. :current-page="currentPage"
  299. :page-size="pageSize"
  300. :page-sizes="[10, 20, 30, 40]"
  301. layout="total,sizes, prev, pager, next, jumper, slot"
  302. :total="total"
  303. @size-change="handleSizeChange"
  304. @update:current-page="handleCurrentChange"
  305. />
  306. </div>
  307. </div>
  308. </div>
  309. <!-- 添加账号弹窗 -->
  310. <el-dialog
  311. class="addStaff"
  312. v-model="addDialogVisible"
  313. :close-on-click-modal="false"
  314. :close-on-press-escape="false"
  315. :title="dialongTitle"
  316. align-center
  317. width="1000"
  318. :before-close="cancelAdd"
  319. destroy-on-close
  320. draggable
  321. >
  322. <el-form
  323. ref="ruleFormRef"
  324. :model="ruleForm"
  325. :rules="rules"
  326. label-width="100px"
  327. class="demo-ruleForm"
  328. :size="formSize"
  329. label-position="right"
  330. status-icon
  331. >
  332. <div class="photo">
  333. <!-- 照片 -->
  334. <div class="photo_left">
  335. <span>照片</span>
  336. <el-form-item label="" prop="">
  337. <el-upload
  338. class="avatar-uploader"
  339. action="#"
  340. :auto-upload="false"
  341. :on-remove="pictureRemove"
  342. :on-change="pictureImportChange"
  343. :before-upload="beforeAvatarPicture"
  344. ref="pictureRef"
  345. >
  346. <template #tip>
  347. <div class="el-upload__tip">上传的图片应小于500kb</div>
  348. </template>
  349. <img :src="ruleForm.picture" class="avatar" />
  350. <!-- <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon> -->
  351. </el-upload>
  352. </el-form-item>
  353. </div>
  354. <!-- 中间 -->
  355. <div class="photo_middle">
  356. <el-form-item label="校区 :" prop="school">
  357. <el-select
  358. clearable
  359. :disabled="ruleForm.fillStatus == '已填报'"
  360. @change="schoolChange"
  361. v-model="ruleForm.school"
  362. placeholder="请选择校区名称"
  363. >
  364. <el-option
  365. v-for="i in schoolData"
  366. :key="i.id"
  367. :label="i.school"
  368. :value="`${i.school},${i.id}`"
  369. />
  370. </el-select>
  371. </el-form-item>
  372. <el-form-item label="录取号 :" prop="admissNum">
  373. <el-input
  374. v-model.trim="ruleForm.admissNum"
  375. placeholder="请输入录取号"
  376. clearable
  377. />
  378. </el-form-item>
  379. <el-form-item label="身份证号 :" prop="cardId">
  380. <el-input
  381. :disabled="dialongTitle != '新增学生信息'"
  382. v-model.trim="ruleForm.cardId"
  383. placeholder="请输入身份证号"
  384. clearable
  385. />
  386. </el-form-item>
  387. <el-form-item label="出生年月 :" prop="birthday">
  388. <el-date-picker
  389. v-model="ruleForm.birthday"
  390. type="date"
  391. format="YYYY-MM-DD"
  392. value-format="YYYY-MM-DD"
  393. placeholder="请选择出生年月"
  394. :size="size"
  395. />
  396. </el-form-item>
  397. <el-form-item label="民族 :" prop="nationality">
  398. <el-input
  399. v-model.trim="ruleForm.nationality"
  400. placeholder="请输入民族"
  401. clearable
  402. />
  403. </el-form-item>
  404. <el-form-item label="考生号 :" prop="examNum">
  405. <el-input
  406. v-model.trim="ruleForm.examNum"
  407. placeholder="请输入考生号"
  408. clearable
  409. />
  410. </el-form-item>
  411. <el-form-item label="毕业中学 :" prop="graduationSchool">
  412. <el-input
  413. v-model.trim="ruleForm.graduationSchool"
  414. placeholder="请输入毕业中学"
  415. clearable
  416. />
  417. </el-form-item>
  418. <el-form-item label="政治面貌 :" prop="politicalStatu">
  419. <el-input
  420. v-model.trim="ruleForm.politicalStatu"
  421. placeholder="请输入政治面貌"
  422. clearable
  423. />
  424. </el-form-item>
  425. </div>
  426. <!-- 右边 -->
  427. <div class="photo_footer">
  428. <el-form-item label="姓名 :" prop="name">
  429. <el-input
  430. v-model.trim="ruleForm.name"
  431. placeholder="请输入姓名"
  432. clearable
  433. />
  434. </el-form-item>
  435. <el-form-item label="性别 :" prop="sex">
  436. <el-select v-model="ruleForm.sex" placeholder="请选择性别">
  437. <el-option label="男" value="男" />
  438. <el-option label="女" value="女" />
  439. </el-select>
  440. </el-form-item>
  441. <el-form-item label="院系 :" prop="college">
  442. <el-select
  443. @change="collegeFormChange"
  444. v-model="ruleForm.college"
  445. placeholder="请选择院系"
  446. clearable
  447. >
  448. <el-option
  449. v-for="i in collegeData"
  450. :key="i.id"
  451. :label="i.name"
  452. :value="`${i.name},${i.id}`"
  453. />
  454. </el-select>
  455. </el-form-item>
  456. <el-form-item label="专业 :" prop="major">
  457. <el-select
  458. @change="majorFormChange"
  459. clearable
  460. v-model="ruleForm.major"
  461. placeholder="请选择专业"
  462. >
  463. <el-option
  464. v-for="i in majorFormData"
  465. :key="i.id"
  466. :label="i.name"
  467. :value="`${i.name},${i.id}`"
  468. />
  469. </el-select>
  470. </el-form-item>
  471. <el-form-item label="所属班级 :" prop="classstr">
  472. <el-select
  473. clearable
  474. v-model="ruleForm.classstr"
  475. placeholder="请选择所属班级"
  476. >
  477. <el-option
  478. v-for="i in classstrFormData"
  479. :key="i.id"
  480. :label="i.name"
  481. :value="`${i.name},${i.id}`"
  482. />
  483. </el-select>
  484. </el-form-item>
  485. <el-form-item label="学制 :" prop="eduSystem">
  486. <el-input
  487. v-model.trim="ruleForm.eduSystem"
  488. placeholder="请输入学制"
  489. clearable
  490. />
  491. </el-form-item>
  492. <el-form-item label="层次 :" prop="batchValue">
  493. <el-select
  494. clearable
  495. v-model="ruleForm.batchValue"
  496. placeholder="请选择层次"
  497. >
  498. <el-option label="本科" value="本科" />
  499. <el-option label="专升本" value="专升本" />
  500. <el-option label="专科" value="专科" />
  501. </el-select>
  502. </el-form-item>
  503. </div>
  504. </div>
  505. <!-- 填报明细 -->
  506. <div class="info_title">
  507. <SvgIcon name="filling_details" color="#fff" size="22"></SvgIcon>
  508. <h4>&nbsp;&nbsp;填报明细</h4>
  509. </div>
  510. <div class="filling_details">
  511. <el-form-item label="手机号码 :" prop="">
  512. <el-input
  513. v-model.trim="ruleForm.phone"
  514. placeholder="请输入手机号码"
  515. clearable
  516. style="width: 200px"
  517. />
  518. </el-form-item>
  519. <div class="native">
  520. <el-form-item label="籍贯 :" prop="">
  521. <el-select
  522. clearable
  523. @change="oprovinceChange"
  524. v-model="ruleForm.oprovince"
  525. placeholder="请选择籍贯省"
  526. >
  527. <el-option
  528. v-for="i in provinceData"
  529. :key="i.id"
  530. :label="i.name"
  531. :value="`${i.name},${i.id}`"
  532. />
  533. </el-select>
  534. </el-form-item>
  535. <el-form-item label="" prop="">
  536. <el-select
  537. clearable
  538. @change="ocityChange"
  539. v-model="ruleForm.ocity"
  540. placeholder="请选择籍贯市"
  541. >
  542. <el-option
  543. v-for="i in ocityData"
  544. :key="i.id"
  545. :label="i.name"
  546. :value="`${i.name},${i.id}`"
  547. />
  548. </el-select>
  549. </el-form-item>
  550. <el-form-item label="" prop="">
  551. <el-select
  552. clearable
  553. v-model="ruleForm.odistrict"
  554. placeholder="请选择籍贯县"
  555. >
  556. <el-option
  557. v-for="i in odistrictData"
  558. :key="i.id"
  559. :label="i.name"
  560. :value="`${i.name},${i.id}`"
  561. />
  562. </el-select>
  563. </el-form-item>
  564. </div>
  565. <div class="native family">
  566. <el-form-item label="家庭住址 :" prop="">
  567. <el-select
  568. clearable
  569. @change="provinceChange"
  570. v-model="ruleForm.province"
  571. placeholder="请选择省"
  572. >
  573. <el-option
  574. v-for="i in provinceData"
  575. :key="i.id"
  576. :label="i.name"
  577. :value="`${i.name},${i.id}`"
  578. />
  579. </el-select>
  580. </el-form-item>
  581. <el-form-item label="" prop="">
  582. <el-select
  583. clearable
  584. @change="cityChange"
  585. v-model="ruleForm.city"
  586. placeholder="请选择市"
  587. >
  588. <el-option
  589. v-for="i in cityData"
  590. :key="i.id"
  591. :label="i.name"
  592. :value="`${i.name},${i.id}`"
  593. />
  594. </el-select>
  595. </el-form-item>
  596. <el-form-item label="" prop="">
  597. <el-select
  598. clearable
  599. v-model="ruleForm.district"
  600. placeholder="请选择县"
  601. >
  602. <el-option
  603. v-for="i in districtData"
  604. :key="i.id"
  605. :label="i.name"
  606. :value="`${i.name},${i.id}`"
  607. />
  608. </el-select>
  609. </el-form-item>
  610. <el-form-item label="" prop="">
  611. <el-input
  612. v-model.trim="ruleForm.address"
  613. placeholder="请输入详情地址"
  614. clearable
  615. style="width: 260px"
  616. />
  617. </el-form-item>
  618. </div>
  619. <div class="native"></div>
  620. <el-form-item label="按时报到 :" prop="">
  621. <el-switch
  622. :active-value="1"
  623. :inactive-value="0"
  624. v-model="ruleForm.registerOntime"
  625. />
  626. </el-form-item>
  627. <el-form-item class="email" label="邮编 :" prop="">
  628. <el-input
  629. v-model.trim="ruleForm.zipCode"
  630. placeholder="请输入邮编"
  631. clearable
  632. style="width: 270px"
  633. />
  634. </el-form-item>
  635. <div class="traffic">
  636. <el-form-item label="交通方式 :" prop="">
  637. <el-select
  638. v-model="ruleForm.trafficMethod"
  639. placeholder="请选择交通方式"
  640. >
  641. <el-option label="火车" value="火车" />
  642. <el-option label="飞机" value="飞机" />
  643. <el-option label="汽车" value="汽车" />
  644. <el-option label="自驾" value="自驾" />
  645. <el-option label="其他" value="其他" />
  646. </el-select>
  647. </el-form-item>
  648. <el-form-item label="到站地点 :" prop="">
  649. <el-select
  650. v-if="ruleForm.trafficMethod == '自驾'"
  651. v-model="ruleForm.arrive"
  652. placeholder="请选择到站地点"
  653. >
  654. <el-option label="黄家湖校区" value="黄家湖校区" />
  655. <el-option label="墨轩湖校区" value="墨轩湖校区" />
  656. </el-select>
  657. <el-select
  658. v-else-if="ruleForm.trafficMethod == '飞机'"
  659. v-model="ruleForm.arrive"
  660. placeholder="请选择到站地点"
  661. >
  662. <el-option label="昌北机场" value="昌北机场" />
  663. </el-select>
  664. <el-select
  665. v-else-if="ruleForm.trafficMethod == '火车'"
  666. v-model="ruleForm.arrive"
  667. placeholder="请选择到站地点"
  668. >
  669. <el-option label="南昌火车站" value="南昌火车站" />
  670. <el-option label="南昌西站" value="南昌西站" />
  671. <el-option label="南昌东站" value="南昌东站" />
  672. </el-select>
  673. <el-select
  674. v-else-if="ruleForm.trafficMethod == '汽车'"
  675. v-model="ruleForm.arrive"
  676. placeholder="请选择到站地点"
  677. >
  678. <el-option label="南昌长途汽车西站" value="南昌长途汽车西站" />
  679. <el-option label="靖安汽车站" value="靖安汽车站" />
  680. </el-select>
  681. <el-select
  682. v-else
  683. v-model="ruleForm.arrive"
  684. placeholder="请选择到站地点"
  685. >
  686. <el-option label="南昌火车站" value="南昌火车站" />
  687. <el-option label="南昌西站" value="南昌西站" />
  688. <el-option label="南昌东站" value="南昌东站" />
  689. <el-option label="昌北机场" value="昌北机场" />
  690. <el-option label="南昌长途汽车西站" value="南昌长途汽车西站" />
  691. <el-option label="靖安汽车站" value="靖安汽车站" />
  692. <el-option label="黄家湖校区" value="黄家湖校区" />
  693. <el-option label="墨轩湖校区" value="墨轩湖校区" />
  694. </el-select>
  695. </el-form-item>
  696. </div>
  697. <el-form-item label="到站日期 :" prop="">
  698. <el-date-picker
  699. v-model="ruleForm.arrvieDate"
  700. type="date"
  701. format="YYYY-MM-DD"
  702. value-format="YYYY-MM-DD"
  703. placeholder="请选择到站日期"
  704. :size="size"
  705. />
  706. </el-form-item>
  707. <el-form-item label="到站时间段 :" prop="">
  708. <el-radio-group
  709. @change="arriveTimeChange"
  710. v-model="ruleForm.arriveTime"
  711. >
  712. <el-radio
  713. v-for="i in arriveData"
  714. :key="i.id"
  715. :value="`${i.timeStr},${i.id}`"
  716. >{{ i.timeStr }}</el-radio
  717. >
  718. </el-radio-group>
  719. </el-form-item>
  720. </div>
  721. <div class="info_title">
  722. <SvgIcon name="family" color="#fff" size="22"></SvgIcon>
  723. <h4>&nbsp;&nbsp;家庭成员&nbsp;&nbsp;</h4>
  724. <img @click="familysAdd" src="@/assets/img/add_1.png" alt="" />
  725. </div>
  726. <el-form-item class="elFormTable" label="" prop="">
  727. <el-table
  728. :row-class-name="tableRowClassName"
  729. :data="ruleForm.familys"
  730. style="width: 100%"
  731. :header-cell-style="{
  732. background: 'rgba(240, 243, 247, 1)',
  733. height: '40px',
  734. border: 0,
  735. }"
  736. >
  737. <el-table-column align="center" prop="familyShip" label="称谓" />
  738. <el-table-column align="center" prop="name" label="姓名" />
  739. <el-table-column align="center" prop="workUnit" label="工作单位" />
  740. <el-table-column align="center" prop="phone" label="联系电话" />
  741. <el-table-column align="center" label="操作" width="120">
  742. <template #default="scope">
  743. <span
  744. class="delete"
  745. style="color: #d43030; cursor: pointer"
  746. @click="familysDel(scope)"
  747. >删除</span
  748. >
  749. </template>
  750. </el-table-column>
  751. </el-table>
  752. </el-form-item>
  753. <!-- <div class="info_title">
  754. <SvgIcon name="entourage" color="#fff" size="22"></SvgIcon>
  755. <h4>&nbsp;&nbsp;陪同人员信息&nbsp;&nbsp;</h4>
  756. <img @click="accompanysAdd" src="@/assets/img/add_1.png" alt="" />
  757. </div>
  758. <el-form-item class="elFormTable" label="" prop="accompanys">
  759. <el-table
  760. :row-class-name="tableRowClassName"
  761. :data="ruleForm.accompanys"
  762. style="width: 100%"
  763. :header-cell-style="{
  764. background: 'rgba(240, 243, 247, 1)',
  765. height: '40px',
  766. border: 0,
  767. }"
  768. >
  769. <el-table-column
  770. width="120"
  771. align="center"
  772. label="序号"
  773. type="index"
  774. index="1"
  775. />
  776. <el-table-column align="center" prop="name" label="姓名" />
  777. <el-table-column align="center" prop="phone" label="联系电话" />
  778. <el-table-column align="center" label="操作" width="120">
  779. <template #default="scope">
  780. <span
  781. class="delete"
  782. style="color: #d43030; cursor: pointer"
  783. @click="accompanysDel(scope)"
  784. >删除</span
  785. >
  786. </template>
  787. </el-table-column>
  788. </el-table>
  789. </el-form-item> -->
  790. <!-- <div class="info_title">
  791. <SvgIcon name="dorm" color="#fff" size="22"></SvgIcon>
  792. <h4>&nbsp;&nbsp;宿舍信息</h4>
  793. </div>
  794. <div class="dorm_info" style="display: flex; flex-wrap: wrap">
  795. <el-form-item label="校区 " prop="school">
  796. <el-select
  797. clearable
  798. @change="schoolChange"
  799. v-model="ruleForm.school"
  800. placeholder="请选择校区名称"
  801. >
  802. <el-option
  803. v-for="i in schoolData"
  804. :key="i.id"
  805. :label="i.school"
  806. :value="`${i.school},${i.id}`"
  807. />
  808. </el-select>
  809. </el-form-item>
  810. <el-form-item label="楼栋 " prop="build">
  811. <el-select
  812. clearable
  813. v-model="ruleForm.build"
  814. placeholder="请选择楼栋名称"
  815. @change="buildChange"
  816. >
  817. <el-option
  818. v-for="i in buildData"
  819. :key="i.id"
  820. :label="i.build"
  821. :value="`${i.build},${i.id}`"
  822. />
  823. </el-select>
  824. </el-form-item>
  825. <el-form-item label="寝室号" prop="dormitory">
  826. <el-select
  827. v-model="ruleForm.dormitory"
  828. placeholder="请选择寝室号"
  829. clearable
  830. @change="dormitoryChange"
  831. >
  832. <el-option
  833. v-for="i in dormitoryData"
  834. :key="i.id"
  835. :label="i.dormitory"
  836. :value="`${i.dormitory},${i.id}`"
  837. />
  838. </el-select>
  839. </el-form-item>
  840. <el-form-item label="床位号" prop="bed">
  841. <el-select
  842. v-model="ruleForm.bed"
  843. placeholder="请选择床位号"
  844. clearable
  845. >
  846. <el-option
  847. v-for="i in bedData"
  848. :key="i.id"
  849. :label="i.name"
  850. :value="`${i.name},${i.id}`"
  851. />
  852. </el-select>
  853. </el-form-item>
  854. </div> -->
  855. <!-- <div class="info_title">
  856. <SvgIcon name="pay" color="#000" size="22"></SvgIcon>
  857. <h4>&nbsp;&nbsp;缴费信息</h4>
  858. </div>
  859. <div class="photo_middle" style="display: flex;">
  860. <el-form-item label="应缴金额 :" prop="admissNum">
  861. <el-input
  862. v-model.trim="ruleForm.admissNum"
  863. placeholder="请输入应缴金额"
  864. clearable
  865. />
  866. </el-form-item>
  867. <el-form-item label="实付金额 :" prop="cardId">
  868. <el-input
  869. v-model.trim="ruleForm.cardId"
  870. placeholder="请输入实付金额"
  871. clearable
  872. />
  873. </el-form-item>
  874. </div> -->
  875. <!-- <div class="info_title">
  876. <SvgIcon name="car" color="#000" size="22"></SvgIcon>
  877. <h4>&nbsp;&nbsp;车辆信息</h4>
  878. </div>
  879. <div class="photo_middle" style="display: flex;">
  880. <el-form-item label="是否自驾 :" prop="admissNum">
  881. <el-switch
  882. :active-value="1"
  883. :inactive-value="0"
  884. v-model="ruleForm.registerOntime"
  885. />
  886. </el-form-item>
  887. <el-form-item label="车牌号码 :" prop="cardId">
  888. <el-input
  889. v-model.trim="ruleForm.cardId"
  890. placeholder="请输入车牌号码"
  891. clearable
  892. />
  893. </el-form-item>
  894. </div> -->
  895. <el-form-item class="options">
  896. <el-button @click="cancelAdd">取消</el-button>
  897. <el-button
  898. color="rgba(0, 97, 255, 1)"
  899. class="queding"
  900. type="primary"
  901. @click="submitAdd(ruleFormRef)"
  902. >
  903. 确定
  904. </el-button>
  905. </el-form-item>
  906. </el-form>
  907. </el-dialog>
  908. <el-dialog
  909. class="infoStudent"
  910. v-model="infoDialogVisible"
  911. :close-on-click-modal="false"
  912. :close-on-press-escape="false"
  913. title="学生信息详情"
  914. align-center
  915. width="1000"
  916. :before-close="cancelInfo"
  917. destroy-on-close
  918. draggable
  919. >
  920. <div class="el-form">
  921. <div class="photo">
  922. <!-- 照片 -->
  923. <div class="photo_left">
  924. <div class="el-form-item">
  925. <img :src="ruleForm.picture" class="avatar" />
  926. </div>
  927. </div>
  928. <!-- 中间 -->
  929. <div class="photo_middle">
  930. <div class="el-form-item">
  931. <span class="title">校区 :</span>
  932. <span class="title_content">{{
  933. ruleForm.school ? ruleForm.school : ""
  934. }}</span>
  935. </div>
  936. <div class="el-form-item">
  937. <span class="title">录取号 :</span>
  938. <span class="title_content">{{ ruleForm.admissNum }}</span>
  939. </div>
  940. <div class="el-form-item">
  941. <span class="title">身份证号 :</span>
  942. <span class="title_content">{{ ruleForm.cardId }}</span>
  943. </div>
  944. <div class="el-form-item">
  945. <span class="title">出生年月 :</span>
  946. <span class="title_content">{{ ruleForm.birthday }}</span>
  947. </div>
  948. <div class="el-form-item">
  949. <span class="title">民族 :</span>
  950. <span class="title_content">{{ ruleForm.nationality }}</span>
  951. </div>
  952. <div class="el-form-item">
  953. <span class="title">考生号 :</span>
  954. <span class="title_content">{{ ruleForm.examNum }}</span>
  955. </div>
  956. <div class="el-form-item" prop="graduationSchool">
  957. <span class="title">毕业中学 :</span>
  958. <span class="title_content">{{ ruleForm.graduationSchool }}</span>
  959. </div>
  960. <div class="el-form-item">
  961. <span class="title">政治面貌 :</span>
  962. <span class="title_content">{{ ruleForm.politicalStatu }}</span>
  963. </div>
  964. </div>
  965. <!-- 右边 -->
  966. <div class="photo_footer">
  967. <div class="el-form-item">
  968. <span class="title">姓名 :</span>
  969. <span class="title_content">{{ ruleForm.name }}</span>
  970. </div>
  971. <div class="el-form-item">
  972. <span class="title">性别 :</span>
  973. <span class="title_content">{{ ruleForm.sex }}</span>
  974. </div>
  975. <div class="el-form-item">
  976. <span class="title">院系 :</span>
  977. <span class="title_content">{{
  978. ruleForm.college ? ruleForm.college : ""
  979. }}</span>
  980. </div>
  981. <div class="el-form-item">
  982. <span class="title">专业 :</span>
  983. <span class="title_content">{{
  984. ruleForm.major ? ruleForm.major : ""
  985. }}</span>
  986. </div>
  987. <div class="el-form-item">
  988. <span class="title">所属班级 :</span>
  989. <span class="title_content">{{
  990. ruleForm.classstr ? ruleForm.classstr : ""
  991. }}</span>
  992. </div>
  993. <div class="el-form-item">
  994. <span class="title">学制 :</span>
  995. <span class="title_content">{{ ruleForm.eduSystem }}</span>
  996. </div>
  997. <div class="el-form-item">
  998. <span class="title">层次 :</span>
  999. <span class="title_content">{{ ruleForm.batchValue }}</span>
  1000. </div>
  1001. </div>
  1002. </div>
  1003. <!-- 填报明细 -->
  1004. <div class="info_title">
  1005. <SvgIcon name="filling_details" color="#fff" size="22"></SvgIcon>
  1006. <h4>&nbsp;&nbsp;填报明细</h4>
  1007. </div>
  1008. <div class="filling_details">
  1009. <div class="info_content">
  1010. <div class="el-form-item">
  1011. <span class="title">手机号码 :</span>
  1012. <span class="title_content">{{ ruleForm.phone }}</span>
  1013. </div>
  1014. <div class="el-form-item">
  1015. <span class="title">籍贯 :</span>
  1016. <span class="title_content">{{
  1017. ruleForm.oprovince ? ruleForm.oprovince : ""
  1018. }}</span>
  1019. <span class="title_content">{{
  1020. ruleForm.ocity ? ruleForm.ocity : ""
  1021. }}</span>
  1022. <span class="title_content">{{
  1023. ruleForm.odistrict ? ruleForm.odistrict : ""
  1024. }}</span>
  1025. </div>
  1026. <div class="el-form-item">
  1027. <span class="title">家庭住址 :</span>
  1028. <span class="title_content">{{
  1029. ruleForm.province ? ruleForm.province : ""
  1030. }}</span>
  1031. <span class="title_content">{{
  1032. ruleForm.city ? ruleForm.city : ""
  1033. }}</span>
  1034. <span class="title_content">{{
  1035. ruleForm.district ? ruleForm.district : ""
  1036. }}</span>
  1037. <span class="title_content">{{
  1038. ruleForm.address ? ruleForm.address : ""
  1039. }}</span>
  1040. </div>
  1041. </div>
  1042. <div class="native family">
  1043. <div class="info_content">
  1044. <div class="el-form-item">
  1045. <span class="title">按时报到 :</span>
  1046. <span class="title_content">{{
  1047. ruleForm.registerOntime == 1 ? "是" : "否"
  1048. }}</span>
  1049. </div>
  1050. <div class="el-form-item">
  1051. <span class="title">邮编 :</span>
  1052. <span class="title_content">{{ ruleForm.zipCode }}</span>
  1053. </div>
  1054. <div class="el-form-item">
  1055. <span class="title">交通方式 :</span>
  1056. <span class="title_content">{{ ruleForm.trafficMethod }}</span>
  1057. </div>
  1058. <div class="el-form-item">
  1059. <span class="title">到站地点 :</span>
  1060. <span class="title_content">{{ ruleForm.arrive }}</span>
  1061. </div>
  1062. </div>
  1063. </div>
  1064. <div class="el-form-item">
  1065. <div class="el-form-item">
  1066. <span class="title">到站日期 :</span>
  1067. <span class="title_content">{{ ruleForm.arrvieDate }}</span>
  1068. </div>
  1069. <div class="el-form-item">
  1070. <span class="title">到站时间段 :</span>
  1071. <span class="title_content">{{
  1072. ruleForm.arriveTime ? ruleForm.arriveTime.split(",")[0] : ""
  1073. }}</span>
  1074. </div>
  1075. </div>
  1076. </div>
  1077. <div class="info_title">
  1078. <SvgIcon name="family" color="#fff" size="22"></SvgIcon>
  1079. <h4>&nbsp;&nbsp;家庭成员&nbsp;&nbsp;</h4>
  1080. </div>
  1081. <div class="el-form-item elFormTable">
  1082. <el-table
  1083. :row-class-name="tableRowClassName"
  1084. :data="ruleForm.familys"
  1085. style="width: 100%"
  1086. :header-cell-style="{
  1087. background: 'rgba(240, 243, 247, 1)',
  1088. height: '40px',
  1089. border: 0,
  1090. }"
  1091. >
  1092. <el-table-column align="center" prop="familyShip" label="称谓" />
  1093. <el-table-column align="center" prop="name" label="姓名" />
  1094. <el-table-column align="center" prop="workUnit" label="工作单位" />
  1095. <el-table-column align="center" prop="phone" label="联系电话" />
  1096. </el-table>
  1097. </div>
  1098. <div class="info_title">
  1099. <SvgIcon name="entourage" color="#fff" size="22"></SvgIcon>
  1100. <h4>&nbsp;&nbsp;陪同人员信息&nbsp;&nbsp;</h4>
  1101. </div>
  1102. <div class="el-form-item elFormTable">
  1103. <el-table
  1104. :row-class-name="tableRowClassName"
  1105. :data="ruleForm.accompanys"
  1106. style="width: 100%"
  1107. :header-cell-style="{
  1108. background: 'rgba(240, 243, 247, 1)',
  1109. height: '40px',
  1110. border: 0,
  1111. }"
  1112. >
  1113. <el-table-column
  1114. width="120"
  1115. align="center"
  1116. label="序号"
  1117. type="index"
  1118. index="1"
  1119. />
  1120. <el-table-column align="center" prop="name" label="姓名" />
  1121. <el-table-column align="center" prop="phone" label="联系电话" />
  1122. </el-table>
  1123. </div>
  1124. <div class="info_title">
  1125. <SvgIcon name="dorm" color="#fff" size="22"></SvgIcon>
  1126. <h4>&nbsp;&nbsp;宿舍信息</h4>
  1127. </div>
  1128. <div class="dorm_info" style="display: flex; flex-wrap: wrap">
  1129. <div class="el-form-item">
  1130. <span class="title">楼栋 :</span>
  1131. <span class="title_content">{{
  1132. ruleForm.build ? ruleForm.build : ""
  1133. }}</span>
  1134. </div>
  1135. <div class="el-form-item">
  1136. <span class="title">寝室号 :</span>
  1137. <span class="title_content">{{
  1138. ruleForm.dormitory ? ruleForm.dormitory : ""
  1139. }}</span>
  1140. </div>
  1141. <div class="el-form-item">
  1142. <span class="title">床位号 :</span>
  1143. <span class="title_content">{{
  1144. ruleForm.bed ? ruleForm.bed : ""
  1145. }}</span>
  1146. </div>
  1147. </div>
  1148. <div class="info_title">
  1149. <SvgIcon name="pay" color="#000" size="22"></SvgIcon>
  1150. <h4>&nbsp;&nbsp;缴费信息</h4>
  1151. </div>
  1152. <div class="dorm_info" style="display: flex; flex-wrap: wrap">
  1153. <div class="el-form-item">
  1154. <span class="title">应缴金额 :</span>
  1155. <span class="title_content">{{
  1156. ruleForm.amountPayable ? ruleForm.amountPayable : ""
  1157. }}</span>
  1158. </div>
  1159. <div class="el-form-item">
  1160. <span class="title">实付金额 :</span>
  1161. <span class="title_content">{{
  1162. ruleForm.payAmount ? ruleForm.payAmount : ""
  1163. }}</span>
  1164. </div>
  1165. </div>
  1166. <div class="info_title" v-if="ruleForm.trafficMethod == '自驾'">
  1167. <SvgIcon name="car" color="#000" size="22"></SvgIcon>
  1168. <h4>&nbsp;&nbsp;车辆信息</h4>
  1169. </div>
  1170. <div
  1171. v-if="ruleForm.trafficMethod == '自驾'"
  1172. class="dorm_info"
  1173. style="display: flex; flex-wrap: wrap"
  1174. >
  1175. <div class="el-form-item">
  1176. <span class="title">是否自驾 :</span>
  1177. <span class="title_content">{{
  1178. ruleForm.trafficMethod ? ruleForm.trafficMethod : ""
  1179. }}</span>
  1180. </div>
  1181. <div class="el-form-item">
  1182. <span class="title">车牌号 :</span>
  1183. <span class="title_content">{{
  1184. ruleForm.carNumber ? ruleForm.carNumber : ""
  1185. }}</span>
  1186. </div>
  1187. </div>
  1188. </div>
  1189. </el-dialog>
  1190. <!-- 添加家庭成员 -->
  1191. <el-dialog
  1192. class="addfamilys"
  1193. v-model="addfamilysVisible"
  1194. :close-on-click-modal="false"
  1195. :close-on-press-escape="false"
  1196. :title="addfamilysTitle"
  1197. align-center
  1198. width="560"
  1199. :before-close="cancelAddfamilys"
  1200. destroy-on-close
  1201. draggable
  1202. >
  1203. <el-form
  1204. ref="addfamilysRef"
  1205. :model="addfamilysRuleForm"
  1206. :rules="addfamilysRules"
  1207. label-width="100px"
  1208. class="demo-ruleForm"
  1209. :size="formSize"
  1210. label-position="right"
  1211. status-icon
  1212. >
  1213. <el-form-item
  1214. v-if="addfamilysTitle == '添加家庭成员'"
  1215. label="称谓 :"
  1216. prop="familyShip"
  1217. >
  1218. <el-input
  1219. v-model.trim="addfamilysRuleForm.familyShip"
  1220. placeholder="请输入称谓"
  1221. clearable
  1222. />
  1223. </el-form-item>
  1224. <el-form-item label="姓名 :" prop="name">
  1225. <el-input
  1226. v-model.trim="addfamilysRuleForm.name"
  1227. placeholder="请输入姓名"
  1228. clearable
  1229. />
  1230. </el-form-item>
  1231. <el-form-item
  1232. v-if="addfamilysTitle == '添加家庭成员'"
  1233. label="工作单位 :"
  1234. prop="workUnit"
  1235. >
  1236. <el-input
  1237. v-model.trim="addfamilysRuleForm.workUnit"
  1238. placeholder="请输入工作单位"
  1239. clearable
  1240. />
  1241. </el-form-item>
  1242. <el-form-item label="联系电话 :" prop="phone">
  1243. <el-input
  1244. v-model.trim="addfamilysRuleForm.phone"
  1245. placeholder="请输入联系电话"
  1246. clearable
  1247. />
  1248. </el-form-item>
  1249. <el-form-item class="options">
  1250. <el-button @click="cancelAddfamilys">取消</el-button>
  1251. <el-button
  1252. color="rgba(0, 97, 255, 1)"
  1253. class="queding"
  1254. type="primary"
  1255. @click="submitAddfamilys(addfamilysRef)"
  1256. >
  1257. 确定
  1258. </el-button>
  1259. </el-form-item>
  1260. </el-form>
  1261. </el-dialog>
  1262. <!-- 项目导入 -->
  1263. <el-dialog
  1264. class="projectImport"
  1265. v-model="buildImportVisible"
  1266. :close-on-click-modal="false"
  1267. :close-on-press-escape="false"
  1268. title="学生信息导入"
  1269. align-center
  1270. width="600"
  1271. :before-close="cancelProjectImport"
  1272. >
  1273. <!-- <p class="title">当前只支持项目类型为“非装配式建筑项目”的项目导入</p> -->
  1274. <p class="down">
  1275. <span>学生信息导入模板下载</span
  1276. ><span @click="templateDown">模板下载</span>
  1277. </p>
  1278. <el-upload
  1279. class="avatar-uploader"
  1280. action="#"
  1281. :auto-upload="false"
  1282. :on-remove="projectImportRemove"
  1283. :on-change="projectImportChange"
  1284. :before-upload="beforeAvatarProImport"
  1285. ref="buildRef"
  1286. :limit="1"
  1287. :on-exceed="projectImportExceed"
  1288. >
  1289. <template #trigger>
  1290. <el-button class="queding" type="primary">
  1291. &nbsp;&nbsp;导入文件&nbsp;&nbsp;
  1292. </el-button>
  1293. </template>
  1294. </el-upload>
  1295. <div class="options">
  1296. <el-button
  1297. color="rgba(9, 101, 98, 1)"
  1298. class="queding"
  1299. type="primary"
  1300. @click="projectImportConfirm(buildRef)"
  1301. >
  1302. &nbsp;&nbsp;确认导入&nbsp;&nbsp;
  1303. </el-button>
  1304. <el-button @click="cancelProjectImport"
  1305. >&nbsp;&nbsp;取消导入&nbsp;&nbsp;</el-button
  1306. >
  1307. </div>
  1308. </el-dialog>
  1309. </div>
  1310. </template>
  1311. <script setup>
  1312. import {
  1313. ref,
  1314. watch,
  1315. reactive,
  1316. nextTick,
  1317. onBeforeMount,
  1318. onUnmounted,
  1319. } from "vue";
  1320. import { useRouter } from "vue-router";
  1321. import { genFileId, ElMessage, ElMessageBox } from "element-plus";
  1322. import { dayjs } from "element-plus";
  1323. import lodash from "lodash";
  1324. import { https } from "@/utils/request"; // 绝对路径
  1325. import { storeToRefs } from "pinia";
  1326. import { useCounterStore } from "@/stores/index";
  1327. const router = useRouter();
  1328. const store = useCounterStore();
  1329. // 为避免解构时失去响应性
  1330. const { name, age, isCollapse, realAge, collegeRole } = storeToRefs(store);
  1331. // 表格数据
  1332. const loading = ref(false);
  1333. const tableData = reactive({
  1334. list: [],
  1335. });
  1336. const activeIndex = ref(); // 默认跳转路由
  1337. const dialongTitle = ref("新增账号"); // 弹窗标题
  1338. const searchInput = reactive({
  1339. college: "",
  1340. major: "",
  1341. classstr: "",
  1342. trafficMethod: "",
  1343. name: "",
  1344. }); // 搜索按钮数据
  1345. const currentPage = ref(1); // 当前页
  1346. const pageSize = ref(10);
  1347. const total = ref(); // 当前总数
  1348. const selectIds = ref([]);
  1349. const addDialogVisible = ref(false); // 控制添加账号弹窗
  1350. // 表单数据
  1351. const formSize = ref("default");
  1352. const ruleFormRef = ref();
  1353. const ruleForm = reactive({
  1354. picture: "",
  1355. admissNum: "",
  1356. name: "",
  1357. cardId: "",
  1358. sex: "",
  1359. birthday: "",
  1360. school: "",
  1361. college: "",
  1362. major: "",
  1363. classstr: "",
  1364. examNum: "",
  1365. eduSystem: "",
  1366. graduationSchool: "",
  1367. batchValue: "",
  1368. politicalStatu: "",
  1369. nationality: "",
  1370. // 填报明细
  1371. phone: "",
  1372. oprovince: "",
  1373. ocity: "",
  1374. odistrict: "",
  1375. province: "",
  1376. city: "",
  1377. district: "",
  1378. address: "",
  1379. registerOntime: 0, // 按时报到
  1380. zipCode: "", // 邮编
  1381. trafficMethod: "",
  1382. carNumber: "",
  1383. arrive: "",
  1384. arrvieDate: "",
  1385. arriveTime: "",
  1386. // 家庭成员
  1387. familys: [],
  1388. // 陪同人员
  1389. accompanys: [],
  1390. // 宿舍信息
  1391. school: "",
  1392. build: "",
  1393. dormitory: "",
  1394. bed: "",
  1395. amountPayable: "", // 应缴金额
  1396. payAmount: "", // 实付金额
  1397. fillStatus: "", // 判断有无填报
  1398. id: "",
  1399. });
  1400. const pictureRef = ref();
  1401. // 表单验证
  1402. const rules = reactive({
  1403. admissNum: [{ required: true, message: "录取号不能为空", trigger: "blur" }],
  1404. cardId: [
  1405. { required: true, message: "身份证号不能为空", trigger: "blur" },
  1406. {
  1407. min: 8,
  1408. max: 20,
  1409. pattern: /^(?:\d{15}|\d{17}[\dX])$/,
  1410. message: "身份证号码格式有误,请重新输入",
  1411. trigger: "blur",
  1412. },
  1413. ],
  1414. birthday: [{ required: true, message: "出生年月不能为空", trigger: "blur" }],
  1415. examNum: [{ required: true, message: "考生号不能为空", trigger: "blur" }],
  1416. graduationSchool: [
  1417. { required: true, message: "毕业中学不能为空", trigger: "blur" },
  1418. ],
  1419. politicalStatu: [
  1420. { required: true, message: "政治面貌不能为空", trigger: "blur" },
  1421. ],
  1422. name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
  1423. sex: [{ required: true, message: "性别不能为空", trigger: "blur" }],
  1424. eduSystem: [{ required: true, message: "学制不能为空", trigger: "blur" }],
  1425. batchValue: [{ required: true, message: "层次不能为空", trigger: "blur" }],
  1426. nationality: [{ required: true, message: "民族不能为空", trigger: "blur" }],
  1427. phone: [
  1428. { required: true, message: "手机号码不能为空", trigger: "blur" },
  1429. {
  1430. min: 8,
  1431. max: 20,
  1432. pattern: /^1[3-9]\d{9}$/,
  1433. message: "手机号码格式有误,请重新输入",
  1434. trigger: "blur",
  1435. },
  1436. ],
  1437. address: [{ required: true, message: "详情地址不能为空", trigger: "blur" }],
  1438. registerOntime: [
  1439. { required: true, message: "按时报到不能为空", trigger: "blur" },
  1440. ],
  1441. zipCode: [{ required: true, message: "邮编不能为空", trigger: "blur" }],
  1442. email: [{ required: true, message: "邮编不能为空", trigger: "blur" }],
  1443. trafficMethod: [
  1444. { required: true, message: "交通方式不能为空", trigger: "blur" },
  1445. ],
  1446. arrive: [{ required: true, message: "到站地点不能为空", trigger: "blur" }],
  1447. arrvieDate: [
  1448. { required: true, message: "到站日期不能为空", trigger: "blur" },
  1449. ],
  1450. arriveTime: [
  1451. { required: true, message: "到站时间段不能为空", trigger: "blur" },
  1452. ],
  1453. familys: [{ required: true, message: "家庭成员至少填一位", trigger: "blur" }],
  1454. college: [{ required: true, message: "院系不能为空", trigger: "blur" }],
  1455. major: [{ required: true, message: "专业不能为空", trigger: "blur" }],
  1456. classstr: [{ required: true, message: "所属班级不能为空", trigger: "blur" }],
  1457. oprovince: [{ required: true, message: "籍贯省不能为空", trigger: "blur" }],
  1458. ocity: [{ required: true, message: "籍贯市不能为空", trigger: "blur" }],
  1459. odistrict: [{ required: true, message: "籍贯县不能为空", trigger: "blur" }],
  1460. province: [{ required: true, message: "省不能为空", trigger: "blur" }],
  1461. city: [{ required: true, message: "市不能为空", trigger: "blur" }],
  1462. district: [{ required: true, message: "县不能为空", trigger: "blur" }],
  1463. school: [{ required: true, message: "校区不能为空", trigger: "blur" }],
  1464. build: [{ required: true, message: "楼栋不能为空", trigger: "blur" }],
  1465. dormitory: [{ required: true, message: "寝室号不能为空", trigger: "blur" }],
  1466. bed: [{ required: true, message: "床位号不能为空", trigger: "blur" }],
  1467. });
  1468. // 家庭人员 Start
  1469. const addfamilysRef = ref();
  1470. const addfamilysVisible = ref(false);
  1471. const infoDialogVisible = ref(false); // 详情弹窗
  1472. const addfamilysTitle = ref();
  1473. const addfamilysRuleForm = reactive({
  1474. name: "",
  1475. familyShip: "",
  1476. workUnit: "",
  1477. phone: "",
  1478. });
  1479. const addfamilysRules = reactive({
  1480. name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
  1481. familyShip: [{ required: true, message: "称谓不能为空", trigger: "blur" }],
  1482. workUnit: [{ required: true, message: "工作单位不能为空", trigger: "blur" }],
  1483. phone: [
  1484. { required: true, message: "联系电话不能为空", trigger: "blur" },
  1485. {
  1486. min: 8,
  1487. max: 20,
  1488. pattern: /^1[3-9]\d{9}$/,
  1489. message: "手机号码格式有误,请重新输入",
  1490. trigger: "blur",
  1491. },
  1492. ],
  1493. });
  1494. // 家庭成员 End
  1495. // 学院
  1496. const collegeData = ref([]);
  1497. // 专业
  1498. const majorData = ref([]);
  1499. const majorFormData = ref([]);
  1500. // 班级
  1501. const classstrData = ref([]);
  1502. const classstrFormData = ref([]);
  1503. const collegeList = async () => {
  1504. collegeData.value = collegeRole.value;
  1505. // let res = await https.get("/welcome/api/welcomeOrg/getColleges", "params");
  1506. // console.log(res, "学院数据");
  1507. // if (res.code == 200) {
  1508. // collegeData.value = res.data;
  1509. // } else {
  1510. // ElMessage({
  1511. // type: "error",
  1512. // showClose: true,
  1513. // message: res.message,
  1514. // center: true,
  1515. // });
  1516. // }
  1517. };
  1518. const majorList = async (flag) => {
  1519. let params = {
  1520. collegeId: flag ? flag : searchInput.college,
  1521. };
  1522. let res = await https.get(
  1523. "/welcome/api/welcomeOrg/getMajors",
  1524. "params",
  1525. params
  1526. );
  1527. console.log(res, "专业数据");
  1528. if (res.code == 200) {
  1529. if (flag) {
  1530. majorFormData.value = res.data;
  1531. } else {
  1532. majorData.value = res.data;
  1533. }
  1534. } else {
  1535. ElMessage({
  1536. type: "error",
  1537. showClose: true,
  1538. message: res.message,
  1539. center: true,
  1540. });
  1541. }
  1542. };
  1543. const classstrList = async (flag) => {
  1544. let params = {
  1545. majorId: flag ? flag : searchInput.major,
  1546. };
  1547. let res = await https.get(
  1548. "/welcome/api/welcomeOrg/getClasss",
  1549. "params",
  1550. params
  1551. );
  1552. console.log(res, "班级数据");
  1553. if (res.code == 200) {
  1554. if (flag) {
  1555. classstrFormData.value = res.data;
  1556. } else {
  1557. classstrData.value = res.data;
  1558. }
  1559. } else {
  1560. ElMessage({
  1561. type: "error",
  1562. showClose: true,
  1563. message: res.message,
  1564. center: true,
  1565. });
  1566. }
  1567. };
  1568. const collegeChange = async (val) => {
  1569. console.log(val);
  1570. searchInput.major = null;
  1571. searchInput.classstr = null;
  1572. if (!val) {
  1573. majorData.value = null;
  1574. classstrData.value = null;
  1575. return;
  1576. } else {
  1577. majorData.value = null;
  1578. classstrData.value = null;
  1579. }
  1580. majorList();
  1581. };
  1582. const collegeFormChange = async (val) => {
  1583. console.log(val);
  1584. ruleForm.major = null;
  1585. ruleForm.classstr = null;
  1586. if (!val) {
  1587. majorFormData.value = null;
  1588. classstrFormData.value = null;
  1589. return;
  1590. } else {
  1591. majorFormData.value = null;
  1592. classstrFormData.value = null;
  1593. }
  1594. majorList(ruleForm.college.split(",")[1]);
  1595. };
  1596. const majorChange = async (val) => {
  1597. console.log(val);
  1598. searchInput.classstr = null;
  1599. if (!val) {
  1600. classstrData.value = null;
  1601. return;
  1602. } else {
  1603. classstrData.value = null;
  1604. }
  1605. classstrList();
  1606. };
  1607. const majorFormChange = async (val) => {
  1608. console.log(val);
  1609. ruleForm.classstr = null;
  1610. if (!val) {
  1611. classstrFormData.value = null;
  1612. return;
  1613. } else {
  1614. classstrFormData.value = null;
  1615. }
  1616. classstrList(ruleForm.major.split(",")[1]);
  1617. };
  1618. // 家庭住址
  1619. const provinceData = ref([]);
  1620. const ocityData = ref([]); //籍贯
  1621. const odistrictData = ref([]); //籍贯
  1622. const cityData = ref([]); // 家庭住址
  1623. const districtData = ref([]); // 家庭住址
  1624. const provinceList = async () => {
  1625. let res = await https.get(
  1626. "/welcome/api/welcomeCity/getProvinceLevel",
  1627. "params"
  1628. );
  1629. console.log(res, "省数据");
  1630. if (res.code == 200) {
  1631. provinceData.value = res.data;
  1632. } else {
  1633. ElMessage({
  1634. type: "error",
  1635. showClose: true,
  1636. message: res.message,
  1637. center: true,
  1638. });
  1639. }
  1640. };
  1641. const cityList = async (flag) => {
  1642. let params = null;
  1643. if (flag == "籍贯") {
  1644. params = {
  1645. provinceId: ruleForm.oprovince.split(",")[1],
  1646. };
  1647. } else {
  1648. params = {
  1649. provinceId: ruleForm.province.split(",")[1],
  1650. };
  1651. }
  1652. let res = await https.get(
  1653. "/welcome/api/welcomeCity/getCityLevel",
  1654. "params",
  1655. params
  1656. );
  1657. console.log(res, "市数据");
  1658. if (res.code == 200) {
  1659. if (flag == "籍贯") {
  1660. ocityData.value = res.data;
  1661. } else {
  1662. cityData.value = res.data;
  1663. }
  1664. } else {
  1665. ElMessage({
  1666. type: "error",
  1667. showClose: true,
  1668. message: res.message,
  1669. center: true,
  1670. });
  1671. }
  1672. };
  1673. const districtList = async (flag) => {
  1674. let params = null;
  1675. if (flag == "籍贯") {
  1676. params = {
  1677. cityId: ruleForm.ocity.split(",")[1],
  1678. };
  1679. } else {
  1680. params = {
  1681. cityId: ruleForm.city.split(",")[1],
  1682. };
  1683. }
  1684. let res = await https.get(
  1685. "/welcome/api/welcomeCity/getDistrictLevel",
  1686. "params",
  1687. params
  1688. );
  1689. console.log(res, "区数据");
  1690. if (res.code == 200) {
  1691. if (flag == "籍贯") {
  1692. odistrictData.value = res.data;
  1693. } else {
  1694. districtData.value = res.data;
  1695. }
  1696. } else {
  1697. ElMessage({
  1698. type: "error",
  1699. showClose: true,
  1700. message: res.message,
  1701. center: true,
  1702. });
  1703. }
  1704. };
  1705. const oprovinceChange = async (val) => {
  1706. console.log(val);
  1707. ruleForm.ocity = null;
  1708. ruleForm.odistrict = null;
  1709. if (!val) {
  1710. ocityData.value = null;
  1711. odistrictData.value = null;
  1712. return;
  1713. } else {
  1714. ocityData.value = null;
  1715. odistrictData.value = null;
  1716. }
  1717. cityList("籍贯");
  1718. };
  1719. const ocityChange = async (val) => {
  1720. console.log(val);
  1721. ruleForm.odistrict = null;
  1722. if (!val) {
  1723. odistrictData.value = null;
  1724. return;
  1725. } else {
  1726. odistrictData.value = null;
  1727. }
  1728. districtList("籍贯");
  1729. };
  1730. const provinceChange = async (val) => {
  1731. console.log(val);
  1732. ruleForm.city = null;
  1733. ruleForm.district = null;
  1734. if (!val) {
  1735. cityData.value = null;
  1736. districtData.value = null;
  1737. return;
  1738. } else {
  1739. cityData.value = null;
  1740. districtData.value = null;
  1741. }
  1742. cityList();
  1743. };
  1744. const cityChange = async (val) => {
  1745. console.log(val);
  1746. ruleForm.district = null;
  1747. if (!val) {
  1748. districtData.value = null;
  1749. return;
  1750. } else {
  1751. districtData.value = null;
  1752. }
  1753. districtList();
  1754. };
  1755. const arriveData = ref([]); // 到站时间段
  1756. const arriveList = async () => {
  1757. let res = await https.get(
  1758. "/welcome/api/welcomeArriveSetting/queryArriveTimes",
  1759. "params"
  1760. );
  1761. console.log(res, "时间段数据");
  1762. if (res.code == 200) {
  1763. arriveData.value = res.data;
  1764. } else {
  1765. ElMessage({
  1766. type: "error",
  1767. showClose: true,
  1768. message: res.message,
  1769. center: true,
  1770. });
  1771. }
  1772. };
  1773. // 宿舍信息
  1774. const schoolData = ref([]);
  1775. const buildData = ref([]);
  1776. const dormitoryData = ref([]);
  1777. const bedData = ref([]);
  1778. const schoolList = async () => {
  1779. let res = await https.get("/welcome/api/welcome-build/schoolGroup", "params");
  1780. console.log(res, "校区数据");
  1781. if (res.code == 200) {
  1782. schoolData.value = res.data;
  1783. } else {
  1784. ElMessage({
  1785. type: "error",
  1786. showClose: true,
  1787. message: res.message,
  1788. center: true,
  1789. });
  1790. }
  1791. };
  1792. const buildList = async () => {
  1793. let params = {
  1794. schoolId: ruleForm.school.split(",")[1],
  1795. };
  1796. let res = await https.get(
  1797. "/welcome/api/welcome-build/buildGroup",
  1798. "params",
  1799. params
  1800. );
  1801. console.log(res, "楼栋数据");
  1802. if (res.code == 200) {
  1803. buildData.value = res.data;
  1804. } else {
  1805. ElMessage({
  1806. type: "error",
  1807. showClose: true,
  1808. message: res.message,
  1809. center: true,
  1810. });
  1811. }
  1812. };
  1813. const dormitoryList = async () => {
  1814. let params = {
  1815. schoolId: ruleForm.school.split(",")[1],
  1816. buildId: ruleForm.build.split(",")[1],
  1817. };
  1818. let res = await https.get(
  1819. "/welcome/api/welcome-dormitory/dormitoryGroup",
  1820. "params",
  1821. params
  1822. );
  1823. console.log(res, "寝室号数据");
  1824. if (res.code == 200) {
  1825. dormitoryData.value = res.data;
  1826. } else {
  1827. ElMessage({
  1828. type: "error",
  1829. showClose: true,
  1830. message: res.message,
  1831. center: true,
  1832. });
  1833. }
  1834. };
  1835. const bedList = async () => {
  1836. let params = {
  1837. dormitoryId: ruleForm.dormitory.split(",")[1],
  1838. };
  1839. let res = await https.get(
  1840. "/welcome/api/welcomeBed/queryBedDatas",
  1841. "params",
  1842. params
  1843. );
  1844. console.log(res, "床位号数据");
  1845. if (res.code == 200) {
  1846. bedData.value = res.data;
  1847. } else {
  1848. ElMessage({
  1849. type: "error",
  1850. showClose: true,
  1851. message: res.message,
  1852. center: true,
  1853. });
  1854. }
  1855. };
  1856. const schoolChange = (val) => {
  1857. ruleForm.build = null;
  1858. ruleForm.dormitory = null;
  1859. ruleForm.bed = null;
  1860. if (!val) {
  1861. buildData.value = null;
  1862. dormitoryData.value = null;
  1863. bedData.value = null;
  1864. return;
  1865. } else {
  1866. buildData.value = null;
  1867. dormitoryData.value = null;
  1868. bedData.value = null;
  1869. }
  1870. buildList();
  1871. };
  1872. const buildChange = async (val) => {
  1873. ruleForm.dormitory = null;
  1874. ruleForm.bed = null;
  1875. if (!val) {
  1876. dormitoryData.value = null;
  1877. bedData.value = null;
  1878. return;
  1879. } else {
  1880. dormitoryData.value = null;
  1881. bedData.value = null;
  1882. }
  1883. dormitoryList();
  1884. };
  1885. const dormitoryChange = async (val) => {
  1886. ruleForm.bed = null;
  1887. if (!val) {
  1888. bedData.value = null;
  1889. return;
  1890. } else {
  1891. bedData.value = null;
  1892. }
  1893. bedList();
  1894. };
  1895. // 导入
  1896. const buildImportVisible = ref(false);
  1897. const buildRef = ref();
  1898. const buildFile = ref();
  1899. // 获取账户列表
  1900. const getList = async () => {
  1901. loading.value = true;
  1902. let params = {
  1903. currentPage: currentPage.value, // 当前页
  1904. pageCount: pageSize.value, // 一页数据条数
  1905. collegeId: searchInput.college,
  1906. majorId: searchInput.major,
  1907. classstrId: searchInput.classstr,
  1908. trafficMethod: searchInput.trafficMethod,
  1909. name: searchInput.name,
  1910. };
  1911. console.log(params);
  1912. let res = await https.get(
  1913. "/welcome/api/welcomeStudent/queryPageStudents",
  1914. "params",
  1915. params
  1916. );
  1917. console.log(res, "学生信息");
  1918. if (res.code == 200) {
  1919. tableData.list = res.data.list;
  1920. total.value = res.data.totalCount;
  1921. loading.value = false;
  1922. } else {
  1923. loading.value = false;
  1924. ElMessage({
  1925. type: "error",
  1926. showClose: true,
  1927. message: res.message,
  1928. center: true,
  1929. });
  1930. }
  1931. };
  1932. // 搜索功能
  1933. const searchBtn = lodash.debounce(async () => {
  1934. getList();
  1935. }, 300);
  1936. // 搜索功能
  1937. const resetBtn = lodash.debounce(async () => {
  1938. searchInput.college = null;
  1939. searchInput.major = null;
  1940. majorData.value = null;
  1941. searchInput.classstr = null;
  1942. classstrData.value = null;
  1943. searchInput.trafficMethod = null;
  1944. searchInput.name = null;
  1945. getList();
  1946. }, 300);
  1947. // 家庭成员添加
  1948. const familysAdd = () => {
  1949. addfamilysTitle.value = "添加家庭成员";
  1950. addfamilysVisible.value = true;
  1951. addfamilysRuleForm.name = null;
  1952. addfamilysRuleForm.familyShip = null;
  1953. addfamilysRuleForm.workUnit = null;
  1954. addfamilysRuleForm.phone = null;
  1955. };
  1956. const familysDel = (scope) => {
  1957. console.log(scope.$index);
  1958. ruleForm.familys = ruleForm.familys.filter((i, ind) => {
  1959. return scope.$index != ind;
  1960. });
  1961. };
  1962. const accompanysDel = (scope) => {
  1963. console.log(scope.$index);
  1964. ruleForm.accompanys = ruleForm.accompanys.filter((i, ind) => {
  1965. return scope.$index != ind;
  1966. });
  1967. };
  1968. const cancelAddfamilys = () => {
  1969. addfamilysVisible.value = false;
  1970. addfamilysRef.value;
  1971. };
  1972. // 陪同人员添加 (陪同人员 Start)
  1973. const accompanysAdd = () => {
  1974. addfamilysTitle.value = "添加陪同人员";
  1975. addfamilysVisible.value = true;
  1976. addfamilysRuleForm.name = null;
  1977. addfamilysRuleForm.familyShip = null;
  1978. addfamilysRuleForm.workUnit = null;
  1979. addfamilysRuleForm.phone = null;
  1980. };
  1981. const submitAddfamilys = lodash.debounce(async (formEl) => {
  1982. if (!formEl) return;
  1983. await formEl.validate(async (valid, fields) => {
  1984. if (valid) {
  1985. if (addfamilysTitle.value == "添加家庭成员") {
  1986. ruleForm.familys.push({
  1987. familyShip: addfamilysRuleForm.familyShip,
  1988. name: addfamilysRuleForm.name,
  1989. workUnit: addfamilysRuleForm.workUnit,
  1990. phone: addfamilysRuleForm.phone,
  1991. });
  1992. } else if (addfamilysTitle.value == "添加陪同人员") {
  1993. ruleForm.accompanys.push({
  1994. name: addfamilysRuleForm.name,
  1995. phone: addfamilysRuleForm.phone,
  1996. });
  1997. }
  1998. addfamilysVisible.value = false;
  1999. } else {
  2000. console.log("error submit!", fields);
  2001. loading.value = false;
  2002. }
  2003. });
  2004. }, 1000);
  2005. // 陪同人员添加 (陪同人员 End)
  2006. // 添加账号
  2007. const addlist = () => {
  2008. dialongTitle.value = "新增学生信息";
  2009. addDialogVisible.value = true;
  2010. ruleForm.school = null;
  2011. ruleForm.picture = null;
  2012. ruleForm.admissNum = null;
  2013. ruleForm.name = null;
  2014. ruleForm.cardId = null;
  2015. ruleForm.sex = null;
  2016. ruleForm.birthday = null;
  2017. ruleForm.college = null;
  2018. ruleForm.major = null;
  2019. majorFormData.value = [];
  2020. ruleForm.classstr = null;
  2021. classstrFormData.value = [];
  2022. ruleForm.examNum = null;
  2023. ruleForm.eduSystem = null;
  2024. ruleForm.graduationSchool = null;
  2025. ruleForm.batchValue = null;
  2026. ruleForm.politicalStatu = null;
  2027. ruleForm.nationality = null;
  2028. // 填报明细
  2029. ruleForm.phone = null;
  2030. ruleForm.oprovince = null;
  2031. ruleForm.ocity = null;
  2032. ocityData.value = [];
  2033. ruleForm.odistrict = null;
  2034. odistrictData.value = [];
  2035. ruleForm.province = null;
  2036. ruleForm.city = null;
  2037. cityData.value = [];
  2038. ruleForm.district = null;
  2039. districtData.value = [];
  2040. ruleForm.address = null;
  2041. ruleForm.registerOntime = 0; // 按时报到
  2042. ruleForm.zipCode = null; // 邮编
  2043. ruleForm.trafficMethod = null;
  2044. ruleForm.arrive = null;
  2045. ruleForm.arrvieDate = null;
  2046. ruleForm.arriveTime = null;
  2047. // 家庭成员
  2048. ruleForm.familys = [];
  2049. // 缴费信息
  2050. ruleForm.amountPayable = null;
  2051. ruleForm.payAmount = null;
  2052. // 车辆信息
  2053. ruleForm.carNumber = null;
  2054. ruleForm.fillStatus = null;
  2055. ruleForm.id = null;
  2056. };
  2057. // 添加账号
  2058. const updateS = async (row) => {
  2059. console.log(row);
  2060. dialongTitle.value = "编辑学生信息";
  2061. addDialogVisible.value = true;
  2062. ruleForm.id = row.id;
  2063. ruleForm.fillStatus = row.fillStatus;
  2064. let data = {
  2065. id: row.id, // 当前页
  2066. };
  2067. let res = await https.get(
  2068. "/welcome/api/welcomeStudent/queryStudentDetail",
  2069. "params",
  2070. data
  2071. );
  2072. if (res.code == 200) {
  2073. console.log(res.data, "学生信息");
  2074. let resData = res.data;
  2075. ruleForm.picture = resData.picture;
  2076. ruleForm.admissNum = resData.admissNum;
  2077. ruleForm.name = resData.name;
  2078. ruleForm.cardId = resData.cardId;
  2079. ruleForm.sex = resData.sex;
  2080. ruleForm.birthday = resData.birthday;
  2081. ruleForm.school = `${resData.school},${resData.schoolId}`;
  2082. ruleForm.college = `${resData.college},${resData.collegeId}`;
  2083. majorList(resData.collegeId).then(() => {
  2084. ruleForm.major = `${resData.major},${resData.majorId}`;
  2085. classstrList(resData.majorId).then(() => {
  2086. ruleForm.classstr = `${resData.classstr},${resData.classstrId}`;
  2087. });
  2088. });
  2089. ruleForm.examNum = resData.examNum;
  2090. ruleForm.eduSystem = resData.eduSystem;
  2091. ruleForm.graduationSchool = resData.graduationSchool;
  2092. ruleForm.batchValue = resData.batchValue;
  2093. ruleForm.politicalStatu = resData.politicalStatu;
  2094. ruleForm.nationality = resData.nationality;
  2095. // 填报明细
  2096. ruleForm.phone = resData.phone;
  2097. ruleForm.oprovince = `${resData.oprovince},${resData.oprovinceId}`;
  2098. cityList("籍贯").then(() => {
  2099. ruleForm.ocity = `${resData.ocity},${resData.ocityId}`;
  2100. districtList("籍贯").then(() => {
  2101. ruleForm.odistrict = `${resData.odistrict},${resData.odistrictId}`;
  2102. });
  2103. });
  2104. ruleForm.province = `${resData.province},${resData.provinceId}`;
  2105. cityList().then(() => {
  2106. ruleForm.city = `${resData.city},${resData.cityId}`;
  2107. districtList().then(() => {
  2108. ruleForm.district = `${resData.district},${resData.districtId}`;
  2109. });
  2110. });
  2111. ruleForm.address = resData.address;
  2112. ruleForm.registerOntime = resData.registerOntime ? 1 : 0; // 按时报到
  2113. ruleForm.zipCode = resData.zipCode; // 邮编
  2114. ruleForm.trafficMethod = resData.trafficMethod;
  2115. ruleForm.arrive = resData.arrive;
  2116. ruleForm.arrvieDate = resData.arrvieDate
  2117. ? resData.arrvieDate.split(" ")[0]
  2118. : "";
  2119. ruleForm.arriveTime = `${resData.arriveTime},${resData.arriveTimeId}`;
  2120. console.log(`${resData.arriveTime},${resData.arriveTimeId}`);
  2121. // 家庭成员
  2122. ruleForm.familys = resData.fvs;
  2123. } else {
  2124. ElMessage({
  2125. type: "error",
  2126. showClose: true,
  2127. message: res.message,
  2128. center: true,
  2129. });
  2130. }
  2131. };
  2132. const deleteS = async (row) => {
  2133. ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
  2134. confirmButtonText: "确认",
  2135. cancelButtonText: "取消",
  2136. type: "warning",
  2137. })
  2138. .then(async () => {
  2139. let data = {
  2140. id: row.id, // 当前页
  2141. };
  2142. let res = await https.get(
  2143. "/welcome/api/welcomeStudent/deleteStudentInfo",
  2144. "params",
  2145. data
  2146. );
  2147. if (res.code == 200) {
  2148. ElMessage({
  2149. type: "success",
  2150. showClose: true,
  2151. message: res.message,
  2152. center: true,
  2153. });
  2154. getList();
  2155. } else {
  2156. ElMessage({
  2157. type: "error",
  2158. showClose: true,
  2159. message: res.message,
  2160. center: true,
  2161. });
  2162. }
  2163. })
  2164. .catch(() => {
  2165. loading.value = false;
  2166. });
  2167. };
  2168. const arriveTimeChange = (val) => {
  2169. console.log(val);
  2170. };
  2171. // 详情弹窗
  2172. const infoStudent = async (row) => {
  2173. console.log(row);
  2174. infoDialogVisible.value = true;
  2175. ruleForm.picture = null;
  2176. ruleForm.admissNum = null;
  2177. ruleForm.name = null;
  2178. ruleForm.cardId = null;
  2179. ruleForm.sex = null;
  2180. ruleForm.birthday = null;
  2181. ruleForm.college = null;
  2182. ruleForm.major = null;
  2183. majorFormData.value = [];
  2184. ruleForm.classstr = null;
  2185. classstrFormData.value = [];
  2186. ruleForm.examNum = null;
  2187. ruleForm.eduSystem = null;
  2188. ruleForm.graduationSchool = null;
  2189. ruleForm.batchValue = null;
  2190. ruleForm.politicalStatu = null;
  2191. ruleForm.nationality = null;
  2192. // 填报明细
  2193. ruleForm.phone = null;
  2194. ruleForm.oprovince = null;
  2195. ruleForm.ocity = null;
  2196. ocityData.value = [];
  2197. ruleForm.odistrict = null;
  2198. odistrictData.value = [];
  2199. ruleForm.province = null;
  2200. ruleForm.city = null;
  2201. cityData.value = [];
  2202. ruleForm.district = null;
  2203. districtData.value = [];
  2204. ruleForm.address = null;
  2205. ruleForm.registerOntime = 0; // 按时报到
  2206. ruleForm.zipCode = null; // 邮编
  2207. ruleForm.trafficMethod = null;
  2208. ruleForm.arrive = null;
  2209. ruleForm.arrvieDate = null;
  2210. ruleForm.arriveTime = null;
  2211. // 家庭成员
  2212. ruleForm.familys = [];
  2213. // 陪同人员
  2214. ruleForm.accompanys = [];
  2215. // 宿舍信息
  2216. ruleForm.school = null;
  2217. ruleForm.build = null;
  2218. buildData.value = [];
  2219. ruleForm.dormitory = null;
  2220. dormitoryData.value = [];
  2221. ruleForm.bed = null;
  2222. bedData.value = [];
  2223. // 缴费信息
  2224. ruleForm.amountPayable = null;
  2225. ruleForm.payAmount = null;
  2226. // 车辆信息
  2227. ruleForm.carNumber = null;
  2228. ruleForm.id = null;
  2229. let data = {
  2230. id: row.id, // 当前页
  2231. };
  2232. let res = await https.get(
  2233. "/welcome/api/welcomeStudent/queryStudentDetail",
  2234. "params",
  2235. data
  2236. );
  2237. if (res.code == 200) {
  2238. console.log(res.data, "学生信息");
  2239. let resData = res.data;
  2240. ruleForm.picture = resData.picture;
  2241. ruleForm.admissNum = resData.admissNum;
  2242. ruleForm.name = resData.name;
  2243. ruleForm.cardId = resData.cardId;
  2244. ruleForm.sex = resData.sex;
  2245. ruleForm.birthday = resData.birthday;
  2246. ruleForm.college = resData.college;
  2247. ruleForm.major = resData.major;
  2248. ruleForm.classstr = resData.classstr;
  2249. ruleForm.examNum = resData.examNum;
  2250. ruleForm.eduSystem = resData.eduSystem;
  2251. ruleForm.graduationSchool = resData.graduationSchool;
  2252. ruleForm.batchValue = resData.batchValue;
  2253. ruleForm.politicalStatu = resData.politicalStatu;
  2254. ruleForm.nationality = resData.nationality;
  2255. // 填报明细
  2256. ruleForm.phone = resData.phone;
  2257. ruleForm.oprovince = resData.oprovince;
  2258. ruleForm.ocity = resData.ocity;
  2259. ruleForm.odistrict = resData.odistrict;
  2260. ruleForm.province = resData.province;
  2261. ruleForm.city = resData.city;
  2262. ruleForm.district = resData.district;
  2263. ruleForm.address = resData.address;
  2264. ruleForm.registerOntime = resData.registerOntime ? 1 : 0; // 按时报到
  2265. ruleForm.zipCode = resData.zipCode; // 邮编
  2266. ruleForm.trafficMethod = resData.trafficMethod;
  2267. ruleForm.arrive = resData.arrive;
  2268. ruleForm.arrvieDate =
  2269. resData.arrvieDate != null ? resData.arrvieDate.split(" ")[0] : "";
  2270. ruleForm.arriveTime = resData.arriveTime
  2271. ? `${resData.arriveTime},${resData.arriveTimeId}`
  2272. : "";
  2273. // 家庭成员
  2274. ruleForm.familys = resData.fvs;
  2275. // 陪同人员
  2276. ruleForm.accompanys = resData.avs;
  2277. // 宿舍信息
  2278. ruleForm.build = resData.build;
  2279. ruleForm.dormitory = resData.dormitory;
  2280. ruleForm.bed = resData.bed;
  2281. ruleForm.school = resData.school;
  2282. // 缴费信息
  2283. ruleForm.amountPayable = resData.amountPayable;
  2284. ruleForm.payAmount = resData.payAmount;
  2285. // 车辆信息
  2286. ruleForm.carNumber = resData.carNumber;
  2287. ruleForm.id = row.id;
  2288. } else {
  2289. ElMessage({
  2290. type: "error",
  2291. showClose: true,
  2292. message: res.message,
  2293. center: true,
  2294. });
  2295. }
  2296. };
  2297. const cancelInfo = () => {
  2298. infoDialogVisible.value = false;
  2299. };
  2300. // 照片上传
  2301. const pictureRemove = (uploadFile, uploadFiles) => {
  2302. console.log(uploadFile, uploadFiles);
  2303. ruleForm.picture = "";
  2304. };
  2305. // 限制上传图片的大小
  2306. const beforeAvatarPicture = (rawFile) => {
  2307. console.log(rawFile, 33333);
  2308. if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
  2309. ElMessage.error("图片格式必须为JPG/PNG格式!");
  2310. return false;
  2311. } else if (rawFile.size / 1024 > 500) {
  2312. ElMessage.error("图片的大小不能超过500kb!");
  2313. return false;
  2314. }
  2315. return true;
  2316. };
  2317. const pictureImportChange = async (file, fileLists) => {
  2318. console.log(file, "1111");
  2319. if (!beforeAvatarPicture(file.raw)) {
  2320. // 如果 beforeAvatarPicture 返回了 false,直接退出
  2321. return;
  2322. }
  2323. let srcImg = file.raw;
  2324. let data = new FormData();
  2325. data.set("file", srcImg);
  2326. let res = await https.post(
  2327. "/welcome/api/welcomeFile/uploadFile",
  2328. "data",
  2329. data
  2330. );
  2331. console.log(res, "导入照片");
  2332. if (res.code == 200) {
  2333. ruleForm.picture = res.data.url;
  2334. ElMessage({
  2335. type: "success",
  2336. showClose: true,
  2337. message: res.message,
  2338. center: true,
  2339. });
  2340. } else {
  2341. ElMessage({
  2342. type: "error",
  2343. showClose: true,
  2344. message: res.message,
  2345. center: true,
  2346. });
  2347. }
  2348. };
  2349. // 确认添加员工
  2350. const submitAdd = lodash.debounce(async (formEl) => {
  2351. if (!formEl) return;
  2352. await formEl.validate(async (valid, fields) => {
  2353. if (valid) {
  2354. let data = {
  2355. admissNum: ruleForm.admissNum,
  2356. name: ruleForm.name,
  2357. picture: ruleForm.picture,
  2358. cardId: ruleForm.cardId,
  2359. sex: ruleForm.sex,
  2360. birthday: ruleForm.birthday,
  2361. college: ruleForm.college.split(",")[0],
  2362. collegeId: ruleForm.college.split(",")[1],
  2363. school: ruleForm.school.split(",")[0],
  2364. schoolId: ruleForm.school.split(",")[1],
  2365. major: ruleForm.major.split(",")[0],
  2366. majorId: ruleForm.major.split(",")[1],
  2367. classstr: ruleForm.classstr.split(",")[0],
  2368. classstrId: ruleForm.classstr.split(",")[1],
  2369. examNum: ruleForm.examNum,
  2370. eduSystem: ruleForm.eduSystem,
  2371. graduationSchool: ruleForm.graduationSchool,
  2372. batchValue: ruleForm.batchValue,
  2373. politicalStatu: ruleForm.politicalStatu,
  2374. nationality: ruleForm.nationality,
  2375. phone: ruleForm.phone,
  2376. oprovince: ruleForm.oprovince.split(",")[0],
  2377. oprovinceId: ruleForm.oprovince.split(",")[1],
  2378. ocity: ruleForm.ocity.split(",")[0],
  2379. ocityId: ruleForm.ocity.split(",")[1],
  2380. odistrict: ruleForm.odistrict.split(",")[0],
  2381. odistrictId: ruleForm.odistrict.split(",")[1],
  2382. province: ruleForm.province.split(",")[0],
  2383. provinceId: ruleForm.province.split(",")[1],
  2384. city: ruleForm.city.split(",")[0],
  2385. cityId: ruleForm.city.split(",")[1],
  2386. district: ruleForm.district.split(",")[0],
  2387. districtId: ruleForm.district.split(",")[1],
  2388. address: ruleForm.address,
  2389. registerOntime: ruleForm.registerOntime,
  2390. zipCode: ruleForm.zipCode,
  2391. trafficMethod: ruleForm.trafficMethod,
  2392. arrive: ruleForm.arrive,
  2393. arrvieDate: ruleForm.arrvieDate?`${ruleForm.arrvieDate} 00:00:00`:'',
  2394. arriveTime: ruleForm.arriveTime.split(",")[0],
  2395. arriveTimeId: ruleForm.arriveTime.split(",")[1],
  2396. build: "",
  2397. buildId: "",
  2398. dormitory: "",
  2399. dormitoryId: "",
  2400. bed: "",
  2401. bedId: "",
  2402. fvs: ruleForm.familys,
  2403. avs: "",
  2404. };
  2405. console.log(data);
  2406. if (ruleForm.id) {
  2407. data.id = ruleForm.id;
  2408. let res = await https.post(
  2409. "/welcome/api/welcomeStudent/updateStudentInfo",
  2410. "data",
  2411. data
  2412. );
  2413. if (res.code == 200) {
  2414. addDialogVisible.value = false;
  2415. getList();
  2416. ElMessage({
  2417. type: "success",
  2418. showClose: true,
  2419. message: res.message,
  2420. center: true,
  2421. });
  2422. } else {
  2423. ElMessage({
  2424. type: "error",
  2425. showClose: true,
  2426. message: res.message,
  2427. center: true,
  2428. });
  2429. }
  2430. } else {
  2431. let res = await https.post(
  2432. "/welcome/api/welcomeStudent/insertStudentInfo",
  2433. "data",
  2434. data
  2435. );
  2436. if (res.code == 200) {
  2437. addDialogVisible.value = false;
  2438. getList();
  2439. ElMessage({
  2440. type: "success",
  2441. showClose: true,
  2442. message: res.message,
  2443. center: true,
  2444. });
  2445. } else {
  2446. ElMessage({
  2447. type: "error",
  2448. showClose: true,
  2449. message: res.message,
  2450. center: true,
  2451. });
  2452. }
  2453. }
  2454. } else {
  2455. console.log("error submit!", fields);
  2456. loading.value = false;
  2457. }
  2458. });
  2459. }, 1000);
  2460. const cancelAdd = () => {
  2461. addDialogVisible.value = false;
  2462. };
  2463. // 表格斑马纹颜色修改
  2464. const tableRowClassName = ({ row, rowIndex }) => {
  2465. if (rowIndex % 2 === 0) {
  2466. return "even";
  2467. } else if (rowIndex % 2 !== 0) {
  2468. return "odd";
  2469. }
  2470. return "";
  2471. };
  2472. // 每页显示条数
  2473. const handleSizeChange = (value) => {
  2474. console.log(value, "每页显示条数");
  2475. pageSize.value = value;
  2476. getList();
  2477. };
  2478. // 分页
  2479. const handleCurrentChange = (value) => {
  2480. // console.log(value);
  2481. currentPage.value = value;
  2482. getList();
  2483. };
  2484. // 楼栋导出
  2485. const buildExportbtn = async () => {
  2486. let params = {
  2487. collegeId: searchInput.college,
  2488. majorId: searchInput.major,
  2489. classstrId: searchInput.classstr,
  2490. trafficMethod: searchInput.trafficMethod,
  2491. name: searchInput.name,
  2492. };
  2493. let res = await https.getBlob(
  2494. "/welcome/api/welcomeStudent/welcomeStudentExport",
  2495. "params",
  2496. params
  2497. );
  2498. console.log(res, "学生信息导出");
  2499. let name = `学生信息管理`;
  2500. var content = res;
  2501. var datas = new Blob([content]);
  2502. var downloadUrl = window.URL.createObjectURL(datas);
  2503. var anchor = document.createElement("a");
  2504. anchor.href = downloadUrl;
  2505. anchor.download = name + ".xlsx";
  2506. anchor.click();
  2507. window.URL.revokeObjectURL(datas);
  2508. ElMessage({
  2509. type: "success",
  2510. showClose: true,
  2511. message: "导出成功",
  2512. center: true,
  2513. });
  2514. };
  2515. // 楼栋导入 (--------------------------------------------------)
  2516. const buildImportBtn = () => {
  2517. buildImportVisible.value = true;
  2518. };
  2519. // 模板下载
  2520. const templateDown = async () => {
  2521. let res = await https.get(
  2522. "/welcome/api/welcomeStudent/downloadStudentExcel",
  2523. "params"
  2524. );
  2525. console.log(res, "模板下载");
  2526. if (res.code == 200) {
  2527. window.location.href = res.data;
  2528. } else {
  2529. ElMessage({
  2530. type: "error",
  2531. showClose: true,
  2532. message: res.message,
  2533. center: true,
  2534. });
  2535. }
  2536. };
  2537. // 移出照片
  2538. const projectImportRemove = (uploadFile, uploadFiles) => {
  2539. console.log(uploadFile, uploadFiles);
  2540. buildFile.value = "";
  2541. };
  2542. // 限制上传图片的大小
  2543. // const beforeAvatarProImport = (rawFile) => {
  2544. // console.log(rawFile, 33333);
  2545. // if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
  2546. // ElMessage.error("图片格式必须为JPG/PNG格式!");
  2547. // return false;
  2548. // } else if (rawFile.size / 1024 > 150) {
  2549. // ElMessage.error("图片的大小不能超过150kb!");
  2550. // return false;
  2551. // }
  2552. // return true;
  2553. // };
  2554. // 添加照片时往fileList列表中添加图片信息
  2555. const projectImportChange = async (file, fileLists) => {
  2556. console.log(file, "1111");
  2557. buildFile.value = file.raw;
  2558. };
  2559. const projectImportExceed = (files) => {
  2560. buildRef.value.clearFiles();
  2561. const file = files[0];
  2562. file.uid = genFileId();
  2563. buildRef.value.handleStart(file);
  2564. };
  2565. // 导入项目
  2566. const projectImportConfirm = async () => {
  2567. let data = new FormData();
  2568. data.set("file", buildFile.value);
  2569. let res = await https.post(
  2570. "/welcome/api/welcomeStudent/importStudentExcel",
  2571. "data",
  2572. data
  2573. );
  2574. console.log(res, "导入项目");
  2575. if (res.code == 200) {
  2576. buildImportVisible.value = false;
  2577. getList();
  2578. ElMessage({
  2579. type: "success",
  2580. showClose: true,
  2581. message: res.message,
  2582. center: true,
  2583. });
  2584. } else {
  2585. ElMessage({
  2586. type: "error",
  2587. showClose: true,
  2588. message: res.message,
  2589. center: true,
  2590. });
  2591. }
  2592. };
  2593. const cancelProjectImport = () => {
  2594. buildImportVisible.value = false;
  2595. if (buildRef.value) {
  2596. buildRef.value.clearFiles();
  2597. buildFile.value = null;
  2598. }
  2599. };
  2600. onBeforeMount(() => {
  2601. getList();
  2602. collegeList(); // 院系
  2603. schoolList(); // 校区
  2604. provinceList(); // 省
  2605. arriveList(); // 时间段
  2606. });
  2607. onUnmounted(() => {
  2608. // document.removeEventListener("keyup", Enters);
  2609. });
  2610. </script>
  2611. <style scoped lang="scss">
  2612. .content-box {
  2613. width: calc(100% - 40px);
  2614. height: calc(100% - 105px);
  2615. margin: 20px auto;
  2616. background-color: #fff;
  2617. color: #000;
  2618. display: flex;
  2619. flex-direction: column;
  2620. .svg {
  2621. width: 22px;
  2622. height: 22px;
  2623. }
  2624. .left {
  2625. width: calc(100% - 60px);
  2626. height: 60px;
  2627. margin: 0 auto;
  2628. display: flex;
  2629. align-items: center;
  2630. border-bottom: 1px solid #ccc;
  2631. color: #000;
  2632. font-size: 18px;
  2633. font-weight: 600;
  2634. .camera {
  2635. margin-right: 15px;
  2636. color: #4392f7;
  2637. }
  2638. }
  2639. .scroll {
  2640. width: calc(100% - 60px);
  2641. height: calc(100% - 61px);
  2642. margin: 0 auto;
  2643. display: flex;
  2644. flex-direction: column;
  2645. .middle {
  2646. width: calc(100%);
  2647. color: #000;
  2648. .filter {
  2649. display: flex;
  2650. flex-wrap: wrap;
  2651. align-items: center;
  2652. .search {
  2653. margin-left: 0 !important;
  2654. color: #fff;
  2655. }
  2656. .condition {
  2657. display: flex;
  2658. align-items: center;
  2659. margin: 10px 30px 10px 0;
  2660. :deep(.el-input .el-input__inner) {
  2661. font-size: 14px;
  2662. }
  2663. .el-select {
  2664. width: 200px;
  2665. }
  2666. span {
  2667. margin: 0 10px 0 0;
  2668. }
  2669. }
  2670. }
  2671. .gongneng {
  2672. margin: 10px 0;
  2673. .el-button {
  2674. color: #fff;
  2675. margin-right: 15px;
  2676. }
  2677. }
  2678. }
  2679. .footer {
  2680. width: calc(100%);
  2681. flex: 1;
  2682. margin: 0 auto;
  2683. overflow: auto;
  2684. .el-table--fit {
  2685. height: calc(100% - 60px);
  2686. :deep(.el-table__header-wrapper) {
  2687. background-color: #000;
  2688. font-size: 15px;
  2689. color: #000;
  2690. .cell {
  2691. color: #000;
  2692. }
  2693. }
  2694. :deep(.el-table__row) {
  2695. height: 50px;
  2696. font-size: 15px;
  2697. color: #000;
  2698. }
  2699. :deep(.el-table__row td) {
  2700. padding: 0;
  2701. border: 0;
  2702. }
  2703. .el-button--primary {
  2704. margin-left: 5px;
  2705. }
  2706. :deep(.el-table__body .even) {
  2707. background-color: #fff;
  2708. }
  2709. :deep(.el-table__body .odd) {
  2710. background-color: rgba(240, 243, 247, 1);
  2711. }
  2712. :deep(.options) {
  2713. display: flex;
  2714. justify-content: center;
  2715. align-items: center;
  2716. .info {
  2717. color: rgba(0, 97, 255, 1);
  2718. cursor: pointer;
  2719. margin: 0 15px 0 0;
  2720. }
  2721. .edit {
  2722. margin: 0 15px 0 0;
  2723. color: rgba(0, 186, 173, 1);
  2724. cursor: pointer;
  2725. }
  2726. .delete {
  2727. color: rgba(212, 48, 48, 1);
  2728. cursor: pointer;
  2729. }
  2730. }
  2731. }
  2732. .pageSize {
  2733. display: flex;
  2734. align-items: center;
  2735. justify-content: space-between;
  2736. margin: 0 30px;
  2737. height: 60px;
  2738. span {
  2739. color: #000;
  2740. }
  2741. .el-pagination {
  2742. // width: 1600px;
  2743. :deep(.el-pagination__total) {
  2744. color: #000;
  2745. }
  2746. :deep(.el-pagination__goto) {
  2747. color: #000;
  2748. }
  2749. :deep(.el-pagination__classifier) {
  2750. color: #000;
  2751. }
  2752. :deep(.el-input__wrapper) {
  2753. border: 1px solid rgba(0, 0, 0, 1);
  2754. border-radius: 5px;
  2755. box-shadow: none;
  2756. }
  2757. :deep(.el-pager li) {
  2758. margin: 0 5px;
  2759. border: 1px solid rgba(0, 0, 0, 1);
  2760. border-radius: 5px;
  2761. background-color: transparent;
  2762. }
  2763. :deep(.el-pager li.is-active) {
  2764. // background-color: rgba(0, 97, 255, 0.8);
  2765. border: 1px solid rgba(0, 97, 255, 1);
  2766. color: rgba(0, 97, 255, 1);
  2767. }
  2768. :deep(.btn-prev) {
  2769. margin-right: 5px;
  2770. border: 1px solid rgba(0, 0, 0, 1);
  2771. border-radius: 5px;
  2772. background-color: transparent;
  2773. }
  2774. :deep(.btn-next) {
  2775. margin-left: 5px;
  2776. border: 1px solid rgba(0, 0, 0, 1);
  2777. border-radius: 5px;
  2778. background-color: transparent;
  2779. }
  2780. }
  2781. }
  2782. }
  2783. }
  2784. // 添加员工弹窗样式
  2785. :deep(.addStaff) {
  2786. .el-dialog__body {
  2787. height: 680px;
  2788. overflow: auto;
  2789. padding: 20px 20px 10px 20px;
  2790. .el-form {
  2791. .el-form-item__content {
  2792. display: flex;
  2793. align-items: normal;
  2794. }
  2795. // 照片
  2796. .photo {
  2797. display: flex;
  2798. .photo_left {
  2799. cursor: pointer;
  2800. position: relative;
  2801. .el-form-item__content {
  2802. margin-left: 0 !important;
  2803. .el-upload-list {
  2804. display: none;
  2805. }
  2806. .el-upload__tip {
  2807. text-align: center;
  2808. }
  2809. }
  2810. img {
  2811. width: 200px;
  2812. height: 249px;
  2813. opacity: 1;
  2814. border-radius: 7px;
  2815. }
  2816. span {
  2817. position: absolute;
  2818. top: 50%;
  2819. left: 50%;
  2820. transform: translate(-50%, -200%); /* 移动元素自身的一半尺寸 */
  2821. font-size: 30px;
  2822. color: #d4d4d4;
  2823. }
  2824. }
  2825. .photo_middle {
  2826. margin: 0 50px 0 25px;
  2827. }
  2828. .photo_footer {
  2829. .el-form-item {
  2830. .el-form-item__label {
  2831. width: 90px !important;
  2832. }
  2833. }
  2834. }
  2835. }
  2836. .info_title {
  2837. display: flex;
  2838. align-items: center;
  2839. font-size: 16px;
  2840. color: #000;
  2841. img {
  2842. width: 20px;
  2843. cursor: pointer;
  2844. }
  2845. }
  2846. // 填报明细
  2847. .filling_details {
  2848. display: flex;
  2849. flex-wrap: wrap;
  2850. .el-input {
  2851. width: 170px;
  2852. }
  2853. .el-form-item {
  2854. margin-right: 15px;
  2855. }
  2856. // 籍贯
  2857. .native {
  2858. display: flex;
  2859. .el-select {
  2860. width: 170px;
  2861. }
  2862. .el-form-item {
  2863. .el-form-item__label {
  2864. // border: 1px solid red;
  2865. width: 60px !important;
  2866. }
  2867. .el-form-item__content {
  2868. margin-left: 0 !important;
  2869. }
  2870. }
  2871. }
  2872. // 家庭住址
  2873. .family {
  2874. display: flex;
  2875. .el-form-item {
  2876. .el-form-item__label {
  2877. // border: 1px solid red;
  2878. width: 100px !important;
  2879. }
  2880. }
  2881. }
  2882. .email {
  2883. .el-form-item__label {
  2884. // border: 1px solid red;
  2885. width: 60px !important;
  2886. }
  2887. .el-form-item__content {
  2888. margin-left: 0 !important;
  2889. }
  2890. }
  2891. // 交通方式
  2892. .traffic {
  2893. display: flex;
  2894. .el-form-item {
  2895. .el-form-item__label {
  2896. // border: 1px solid red;
  2897. width: 100px !important;
  2898. }
  2899. .el-form-item__content {
  2900. margin-left: 0 !important;
  2901. }
  2902. }
  2903. }
  2904. }
  2905. // 宿舍信息
  2906. .dorm_info {
  2907. display: flex;
  2908. .el-select {
  2909. width: 180px;
  2910. }
  2911. .el-form-item {
  2912. margin-right: 15px;
  2913. .el-form-item__label {
  2914. // border: 1px solid red;
  2915. width: 70px !important;
  2916. }
  2917. }
  2918. }
  2919. .elFormTable {
  2920. .el-form-item__content {
  2921. margin-left: 0 !important;
  2922. }
  2923. }
  2924. }
  2925. .el-input {
  2926. width: 240px;
  2927. .el-input__suffix-inner {
  2928. color: rgba(61, 81, 232, 1);
  2929. }
  2930. }
  2931. .el-select {
  2932. width: 240px;
  2933. }
  2934. }
  2935. }
  2936. :deep(.infoStudent) {
  2937. .el-dialog__body {
  2938. height: 680px;
  2939. overflow: auto;
  2940. padding: 20px 20px 10px 20px;
  2941. .el-form {
  2942. .el-form-item {
  2943. display: flex;
  2944. align-items: center;
  2945. flex-wrap: wrap;
  2946. .title {
  2947. margin-right: 5px;
  2948. font-size: 16px;
  2949. font-weight: 600;
  2950. color: #000;
  2951. }
  2952. .title_content {
  2953. font-size: 16px;
  2954. font-weight: 600;
  2955. }
  2956. }
  2957. // 照片
  2958. .photo {
  2959. display: flex;
  2960. .photo_left {
  2961. position: relative;
  2962. .el-form-item__content {
  2963. margin-left: 0 !important;
  2964. .el-upload-list {
  2965. display: none;
  2966. }
  2967. .el-upload__tip {
  2968. text-align: center;
  2969. }
  2970. }
  2971. img {
  2972. width: 200px;
  2973. height: 249px;
  2974. opacity: 1;
  2975. border-radius: 7px;
  2976. }
  2977. }
  2978. .photo_middle {
  2979. margin: 0 50px 0 25px;
  2980. }
  2981. .photo_footer {
  2982. .el-form-item {
  2983. .el-form-item__label {
  2984. width: 90px !important;
  2985. }
  2986. }
  2987. }
  2988. }
  2989. .info_title {
  2990. display: flex;
  2991. align-items: center;
  2992. font-size: 16px;
  2993. color: #000;
  2994. img {
  2995. width: 20px;
  2996. cursor: pointer;
  2997. }
  2998. }
  2999. // 填报明细
  3000. .filling_details {
  3001. display: flex;
  3002. flex-direction: column;
  3003. .info_content {
  3004. display: flex;
  3005. flex-wrap: wrap;
  3006. .el-form-item {
  3007. margin-bottom: 15px;
  3008. }
  3009. }
  3010. .email {
  3011. display: flex;
  3012. flex-wrap: nowrap;
  3013. }
  3014. // .el-input {
  3015. // width: 170px;
  3016. // }
  3017. .el-form-item {
  3018. margin-right: 50px;
  3019. }
  3020. // 籍贯
  3021. .native {
  3022. display: flex;
  3023. .el-select {
  3024. width: 170px;
  3025. }
  3026. .el-form-item {
  3027. .el-form-item__label {
  3028. // border: 1px solid red;
  3029. width: 60px !important;
  3030. }
  3031. .el-form-item__content {
  3032. margin-left: 0 !important;
  3033. }
  3034. }
  3035. }
  3036. // 家庭住址
  3037. .family {
  3038. display: flex;
  3039. .el-form-item {
  3040. .el-form-item__label {
  3041. // border: 1px solid red;
  3042. width: 100px !important;
  3043. }
  3044. }
  3045. }
  3046. .email {
  3047. .el-form-item__label {
  3048. // border: 1px solid red;
  3049. width: 60px !important;
  3050. }
  3051. .el-form-item__content {
  3052. margin-left: 0 !important;
  3053. }
  3054. }
  3055. // 交通方式
  3056. .traffic {
  3057. display: flex;
  3058. .el-form-item {
  3059. .el-form-item__label {
  3060. // border: 1px solid red;
  3061. width: 100px !important;
  3062. }
  3063. .el-form-item__content {
  3064. margin-left: 0 !important;
  3065. }
  3066. }
  3067. }
  3068. }
  3069. // 宿舍信息
  3070. .dorm_info {
  3071. display: flex;
  3072. .el-select {
  3073. width: 180px;
  3074. }
  3075. .el-form-item {
  3076. margin-right: 50px;
  3077. .el-form-item__label {
  3078. // border: 1px solid red;
  3079. width: 70px !important;
  3080. }
  3081. }
  3082. }
  3083. .elFormTable {
  3084. .el-form-item__content {
  3085. margin-left: 0 !important;
  3086. }
  3087. }
  3088. }
  3089. .el-input {
  3090. width: 240px;
  3091. .el-input__suffix-inner {
  3092. color: rgba(61, 81, 232, 1);
  3093. }
  3094. }
  3095. .el-select {
  3096. width: 240px;
  3097. }
  3098. }
  3099. }
  3100. :deep(.addfamilys) {
  3101. .el-dialog__body {
  3102. // height: 260px;
  3103. overflow: auto;
  3104. padding: 20px 20px 10px 20px;
  3105. .el-form {
  3106. .el-form-item__content {
  3107. display: flex;
  3108. align-items: normal;
  3109. }
  3110. .options {
  3111. margin-top: 30px;
  3112. }
  3113. }
  3114. }
  3115. }
  3116. // 导入
  3117. :deep(.projectImport) {
  3118. .el-dialog__body {
  3119. padding: 20px 30px 0 30px;
  3120. .title {
  3121. color: red;
  3122. }
  3123. .down {
  3124. span:nth-child(1) {
  3125. color: rgba(127, 127, 127, 1);
  3126. }
  3127. span:nth-child(2) {
  3128. margin-left: 25px;
  3129. color: rgba(2, 167, 240, 1);
  3130. cursor: pointer;
  3131. }
  3132. }
  3133. .options {
  3134. margin: 50px 0 30px 0;
  3135. display: flex;
  3136. flex-direction: row-reverse;
  3137. .queding {
  3138. margin-left: 20px;
  3139. background: linear-gradient(
  3140. 90deg,
  3141. rgba(38, 151, 255, 1) 0%,
  3142. rgba(102, 181, 255, 1) 100%
  3143. );
  3144. border: none;
  3145. }
  3146. .quxiao {
  3147. border: 1px solid rgba(43, 151, 252, 1);
  3148. color: rgba(43, 151, 252, 1);
  3149. }
  3150. }
  3151. }
  3152. }
  3153. }
  3154. </style>