studentInfo.vue 97 KB

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