CollegesLine.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <div class="major-line-container">
  3. <div v-if="!universityCode" class="fx-row ai-cen mb10">
  4. <span class="mr10 pf f24 bold">院校名称</span>
  5. <el-button type="primary" round @click="dialongParams.visible=true">
  6. {{ universityRes.name || '添加院校' }}
  7. </el-button>
  8. </div>
  9. <div class="fx-row ai-cen picker-group">
  10. <el-select v-model="form.year" placeholder="年份">
  11. <el-option v-for="item in year" :key="item" :label="item" :value="item" />
  12. </el-select>
  13. <el-select v-model="form.type" placeholder="科类">
  14. <el-option v-for="item in types" :key="item" :label="item" :value="item" />
  15. </el-select>
  16. <el-select v-model="form.level" placeholder="批次">
  17. <el-option v-for="item in levels" :key="item" :label="item" :value="item" />
  18. </el-select>
  19. <el-select v-model="form.universityNameText" placeholder="院校/专业组" style="min-width: 350px">
  20. <el-option v-for="item in universityNameTexts" :key="item" :label="item" :value="item" />
  21. </el-select>
  22. </div>
  23. <el-divider v-if="!universityCode" />
  24. <!--数据列表-->
  25. <div :class="universityCode?['mt20']:''">
  26. <el-table v-loading="loading" :data="rows" border>
  27. <el-table-column prop="code" label="院校" align="center">
  28. <template slot-scope="scope">
  29. <div>
  30. <span v-if="disabledNameLink">{{ scope.row.universityName }}</span>
  31. <el-link v-else :underline="false" @click="goDetails(scope.row)">【{{ scope.row.universityName }}】</el-link>
  32. </div>
  33. <div v-if="scope.row.specialProject" class="f-primary">({{ scope.row.specialProject }})</div>
  34. </template>
  35. </el-table-column>
  36. <el-table-column prop="location" width="80" label="所在地" align="center" />
  37. <el-table-column prop="collegeCode" label="院校代码" align="center" />
  38. <el-table-column prop="marjorName" label="专业名称" align="center">
  39. <template slot-scope="scope">
  40. <div>{{ scope.row.marjorBelongs ? `[${scope.row.marjorBelongs}]` : '' }}{{ scope.row.marjorName }}</div>
  41. <div style="color:#9DA0B4;font-size:12px">{{ scope.row.marjorDirection }}</div>
  42. </template>
  43. </el-table-column>
  44. <!--<el-table-column prop="seatRealTop" label="专业最高分位次" align="center"></el-table-column>-->
  45. <!--<el-table-column prop="seatRealAverage" label="专业平均分位次" align="center"></el-table-column>-->
  46. <el-table-column prop="level" label="批次/段" align="center" />
  47. <el-table-column v-if="isNewGaokao" prop="course" label="选考科目" align="center" />
  48. <el-table-column v-if="!isNewGaokao" prop="type" label="科类" align="center" />
  49. <el-table-column prop="score" label="最低分" align="center" :formatter="emptyCellFormatter" />
  50. <el-table-column prop="seat" label="最低分位次" align="center" :formatter="emptyCellFormatter" />
  51. <el-table-column prop="scoreRealAverage" width="90" label="平均分" align="center" :formatter="emptyCellFormatter" />
  52. <el-table-column prop="scoreRealTop" width="90" label="最高分" align="center" :formatter="emptyCellFormatter" />
  53. <el-table-column width="80" prop="numReal" label="录取人数" align="center" :formatter="emptyCellFormatter" />
  54. </el-table>
  55. <vip-guide-more v-if="!isBind&&examRecordTotal>1" />
  56. <pagination
  57. class="mt10"
  58. :total="examRecordTotal"
  59. :auto-scroll="false"
  60. :page.sync="pageForm.pageNum"
  61. :limit.sync="pageForm.pageSize"
  62. @pagination="getMajorList"
  63. />
  64. </div>
  65. <el-dialog :visible.sync="dialongParams.visible" width="80%">
  66. <select-university @changeUniversity="changeUniversity" />
  67. </el-dialog>
  68. </div>
  69. </template>
  70. <script>
  71. import {
  72. getMajorUniversityNameText,
  73. selectMarjorList,
  74. selectMarjorlLevels,
  75. selectMarjorTypes,
  76. selectMarjorYears
  77. } from '@/api/webApi/shiftLine'
  78. import SelectUniversity from '@/views/career/components/SelectUniversity'
  79. import transferMixin from '@/components/mx-transfer-mixin'
  80. import { mapGetters } from 'vuex'
  81. import VipGuideMore from '@/components/VipGuideMore/index'
  82. import GlobalVoluntaryDataMixin from '@/views/career/GlobalVoluntaryDataMixin'
  83. export default {
  84. name: 'CollegesLine',
  85. components: { VipGuideMore, SelectUniversity },
  86. mixins: [transferMixin, GlobalVoluntaryDataMixin],
  87. props: {
  88. // 外部固定学校,则本页面不用选择学校。如学校详情页
  89. universityCode: {
  90. type: String,
  91. default: ''
  92. },
  93. disabledNameLink: {
  94. type: Boolean,
  95. default: false
  96. }
  97. },
  98. data() {
  99. return {
  100. loading: false,
  101. examRecordTotal: 0,
  102. year: [],
  103. types: [],
  104. levels: [],
  105. universityNameTexts: [],
  106. universityRes: {},
  107. form: {
  108. year: '',
  109. level: '',
  110. type: '',
  111. universityCode: '',
  112. universityNameText: ''
  113. },
  114. pageForm: {
  115. pageSize: 20,
  116. pageNum: 1
  117. },
  118. dialongParams: { visible: false },
  119. rows: []
  120. }
  121. },
  122. computed: {
  123. ...mapGetters(['isBind'])
  124. },
  125. watch: {
  126. 'form.year': function() {
  127. this.form.type = ''
  128. this.form.level = ''
  129. this.ensureVoluntaryData({ year: this.form.year })
  130. this.getMajorTypes()
  131. this.getMajorLevels()
  132. },
  133. 'form.type': function() {
  134. this.form.universityNameText = ''
  135. this.getUniversityNameTexts()
  136. },
  137. 'form.level': function() {
  138. this.form.universityNameText = ''
  139. this.getUniversityNameTexts()
  140. },
  141. 'form.universityCode': function() {
  142. this.form.universityNameText = ''
  143. this.getUniversityNameTexts()
  144. },
  145. 'form.universityNameText': function(val) {
  146. this.rows = []
  147. this.total = 0
  148. this.pageForm.pageNum = 1
  149. this.getMajorList()
  150. }
  151. },
  152. created() {
  153. this.getMajorYears()
  154. },
  155. methods: {
  156. checkFormFields(props) {
  157. return props.every(prop => !!this.form[prop])
  158. },
  159. emptyCellFormatter(row, prop) {
  160. return row[prop.property] || '-'
  161. },
  162. goDetails(item) {
  163. if (this.disabledNameLink) return
  164. this.transferTo('/career/plan/UniversityDetail', { code: item.universityCode })
  165. },
  166. getMajorList() {
  167. const params = {
  168. ...this.pageForm,
  169. year: this.form.year,
  170. level: this.form.level,
  171. type: this.form.type,
  172. code: this.form.universityCode || this.universityCode,
  173. universityNameText: this.form.universityNameText
  174. }
  175. this.loading = true
  176. selectMarjorList(params).then(res => {
  177. this.rows = res.rows
  178. this.examRecordTotal = res.total
  179. this.loading = false
  180. }).catch(() => {
  181. this.loading = false
  182. })
  183. },
  184. changeUniversity(data) {
  185. this.dialongParams.visible = false
  186. this.universityRes = data
  187. this.form.universityCode = data.code
  188. },
  189. getMajorYears() {
  190. selectMarjorYears().then(res => {
  191. this.form.year = res.rows[0]
  192. this.year = res.rows
  193. })
  194. },
  195. getMajorTypes() {
  196. selectMarjorTypes({ year: this.form.year }).then(res => {
  197. this.form.type = res.rows[0]
  198. this.types = res.rows
  199. })
  200. },
  201. getMajorLevels() {
  202. selectMarjorlLevels({ year: this.form.year }).then(res => {
  203. this.form.level = res.rows[0]
  204. this.levels = res.rows
  205. })
  206. },
  207. getUniversityNameTexts() {
  208. if (!this.checkFormFields(['year', 'type', 'level'])) return
  209. if (!this.checkFormFields(['universityCode']) && !this.universityCode) {
  210. this.$alert('请先选择院校').then(() => this.dialongParams.visible = true)
  211. return
  212. }
  213. getMajorUniversityNameText({
  214. universityCode: this.form.universityCode || this.universityCode,
  215. year: this.form.year,
  216. type: this.form.type,
  217. level: this.form.level
  218. }).then(res => {
  219. this.universityNameTexts = res.data
  220. this.form.universityNameText = res.data.first()
  221. })
  222. }
  223. }
  224. }
  225. </script>
  226. <style lang="scss">
  227. .btn {
  228. .el-button--medium {
  229. padding: 15px 50px;
  230. }
  231. }
  232. #universityText {
  233. .el-badge {
  234. .el-button {
  235. padding: 15px 90px;
  236. }
  237. }
  238. }
  239. .major-line-container {
  240. .el-divider--vertical {
  241. width: 5px;
  242. }
  243. .el-select + .el-select {
  244. margin-left: 20px;
  245. }
  246. }
  247. </style>