This commit is contained in:
zhouwentao 2025-02-18 16:30:29 +08:00
parent 88b4f5e155
commit 623acf2423
22 changed files with 3931 additions and 72 deletions

View File

@ -9,4 +9,6 @@ VITE_APP_TOKEN_KEY = 'your_token_key'
VITE_UPLOAD_URL = '/'
# app title
VITE_APP_TITLE = '艺体志愿宝'
VITE_APP_TITLE = ''
VITE_PROGRAM_TYPE = '艺体志愿宝'

View File

@ -9,4 +9,5 @@ VITE_APP_TOKEN_KEY = 'your_token_key'
VITE_UPLOAD_URL = '/'
# app title
VITE_APP_TITLE = '艺体志愿宝'
VITE_APP_TITLE = ''
VITE_PROGRAM_TYPE = '艺体志愿宝'

3816
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -20,6 +20,7 @@
"mitt": "^3.0.1",
"sass": "^1.75.0",
"swiper": "^7.4.1",
"vite-vue": "file:",
"vue": "^3.2.37",
"vue-i18n": "^9.2.2",
"vue-router": "^4.0.13",

View File

@ -12,8 +12,8 @@
<el-col :span="12">
<el-form-item label="考生科目" prop="cognitioPolyclinic">
<el-radio-group v-model="form.cognitioPolyclinic">
<el-radio label="文科">文科</el-radio>
<el-radio label="理科">理科</el-radio>
<el-radio label="文科">历史组</el-radio>
<el-radio label="理科">物理组</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -175,6 +175,11 @@ const submitForm = () => {
onMounted(()=>{
try {
const programType = import.meta.env.VITE_PROGRAM_TYPE;
if(programType === '体育志愿宝'){
state.professionalCategoryList = StaticConstant.professionalCategoryList.filter(item => item.value === '体育类')
}
reloadScore()
} catch (error) {
getScore()

View File

@ -121,7 +121,8 @@ const submitForm = (formEl: any) => {
method: 'post',
data: {
username: loginForm.phone,
password: loginForm.pass
password: loginForm.pass,
programType: import.meta.env.VITE_PROGRAM_TYPE
},
/*showLoading: false,//是否显示加载图标*/
}).then((response) => {

View File

@ -2,19 +2,29 @@
<div class="" style="background-color: #ffffff;height:500px;">
<el-form :model="form" :rules="rules" ref="formRef" label-width="80px" v-if="state.userFlag==='1'">
<div class="flexWrap" style="line-height: 30px;height: 30px;padding: 5px;">
<div class="flex-item-6">
<div class="flex-item-4">
<span class="fw-6 font-size-20">模拟报志愿</span>
</div>
<div class="flex-item-4">
<div class="flex-item-6">
<div style="line-height: 30px;">
<el-radio-group v-model="form.cognitioPolyclinic" size="small" style="margin: 0 0 0 auto;float: left;">
<el-radio-button label="文科" value="文科" />
<el-radio-button label="理科" value="理科" />
<el-radio-button label="历史组" value="文科" />
<el-radio-button label="物理组" value="理科" />
</el-radio-group>
</div>
</div>
</div>
<div class="flexWrap mt-10" style="line-height: 30px;height: 300px;padding: 5px 10px;">
<div class="flexWrap mt-10" style="line-height: 30px;height: 350px;padding: 5px 10px;">
<div class="flex-item-10">
<el-form-item label="选考科目" prop="professionalCategory">
<!-- <el-select v-model="form.professionalCategory" placeholder="请选择专业类别" @change="handleProfessionalCateGoryChange">
<el-option v-for="(item,index) in state.professionalCategoryList" :key="index" :label="item.label" :value="item.value"/>
</el-select> -->
<el-select v-model="form.subjectList" multiple @change="handleSubjectListSelectChange" collapse-tags collapse-tags-tooltip>
<el-option v-for="(item,index) in state.subjectArray" :key="index" :label="item" :value="item" :disabled="form.subjectList.length>1 && !form.subjectList.includes(item)"></el-option>
</el-select>
</el-form-item>
</div>
<div class="flex-item-10">
<el-form-item label="专业类别" prop="professionalCategory">
<el-select v-model="form.professionalCategory" placeholder="请选择专业类别" @change="handleProfessionalCateGoryChange">
@ -23,16 +33,16 @@
</el-form-item>
</div>
<div class="flex-item-10">
<div v-if="state.subjectsList && state.subjectsList.length>0">
<el-form-item label="专业选课" prop="subjects">
<el-select v-model="form.subjects" multiple @change="handleSubjectsSelectChange" collapse-tags collapse-tags-tooltip>
<el-option v-for="(item,index) in state.subjectsList" :key="index" :label="item.label" :value="item.value" :disabled="item.exclude && form.subjects.includes(item.exclude)"></el-option>
<div v-if="state.proSubjectsList && state.proSubjectsList.length>0">
<el-form-item label="专业选课" prop="proSubjects">
<el-select v-model="form.proSubjects" multiple @change="handleSubjectsSelectChange" collapse-tags collapse-tags-tooltip>
<el-option v-for="(item,index) in state.proSubjectsList" :key="index" :label="item.label" :value="item.value" :disabled="item.exclude && form.proSubjects.includes(item.exclude)"></el-option>
</el-select>
</el-form-item>
</div>
</div>
<div class="flex-item-10" v-if="form.subjects && form.subjects.length>0">
<div v-for="(item,index) in form.subjects" :key="index">
<div class="flex-item-10" v-if="form.proSubjects && form.proSubjects.length>0">
<div v-for="(item,index) in form.proSubjects" :key="index">
<!--音乐-->
<el-form-item label="音表声乐" :prop="convertSubjectToField(item)" v-if="item ==='音乐表演声乐'">
<el-input type="number" min="0" max="300" v-model="form.yybysy" @input="validateInput(item)" :placeholder="'请输入'+item"></el-input>
@ -112,7 +122,8 @@ const state= reactive({
{name: "河南", code: "河南"},
],
professionalCategoryList:StaticConstant.professionalCategoryList,
subjectsList:[] as Array<SubjectsEntity>,//
proSubjectsList:[] as Array<SubjectsEntity>,//
subjectArray:['地理','政治','化学','生物'] as Array<string>,//
})
const form = reactive({
province: '河南',//
@ -122,7 +133,8 @@ const form = reactive({
professionalScore: '',//
chineseScore: '',//
englishScore: '',//
subjects:[] as Array<string>,//
proSubjects:[] as Array<string>,//
subjectList:[] as Array<string>,//
yybysy:'',//
yybyqy:'',//
yyjy:'',//
@ -144,7 +156,7 @@ const submitForm = () => {
//
let submitForm = {
...form,
professionalCategoryChildren: form.subjects.join(',')
professionalCategoryChildren: form.proSubjects.join(',')
}
console.log('Form submitted:', submitForm);
axiosInstance({
@ -188,6 +200,12 @@ onMounted(()=>{
}else{
state.userFlag = '1'
}
const programType = import.meta.env.VITE_PROGRAM_TYPE;
if(programType === '体育志愿宝'){
state.professionalCategoryList = StaticConstant.professionalCategoryList.filter(item => item.value === '体育类')
}
reloadScore()
} catch (error) {
getScore()
@ -205,9 +223,10 @@ function reloadScore(){
form.professionalScore = scoreInfo.professionalScore
form.chineseScore = scoreInfo.chineseScore
form.englishScore = scoreInfo.englishScore
form.subjectList = scoreInfo.subjectList
handleProfessionalCateGoryChange()
if(scoreInfo.professionalCategoryChildren){
form.subjects = scoreInfo.professionalCategoryChildren.split(',')
form.proSubjects = scoreInfo.professionalCategoryChildren.split(',')
}
form.yybysy = scoreInfo.yybysy
form.yybyqy = scoreInfo.yybyqy
@ -223,24 +242,36 @@ function reloadScore(){
//
const handleProfessionalCateGoryChange=()=>{
form.subjects = []
state.subjectsList = []
form.proSubjects = []
state.proSubjectsList = []
//
state.professionalCategoryList.forEach(item=>{
if(item.value === form.professionalCategory && item.children){
//
state.subjectsList = item.children as Array<SubjectsEntity>
state.proSubjectsList = item.children as Array<SubjectsEntity>
}
})
reloadRules()
}
//
const handleSubjectListSelectChange=(value:string[])=>{
console.log(value)
// if (value.includes('a')) {
// form.proSubjects = value.filter((item) => item !== 'b');
// } else if (value.includes('b')) {
// form.proSubjects = value.filter((item) => item !== 'a');
// }
reloadRules()
}
//
const handleSubjectsSelectChange=(value:string[])=>{
if (value.includes('a')) {
form.subjects = value.filter((item) => item !== 'b');
form.proSubjects = value.filter((item) => item !== 'b');
} else if (value.includes('b')) {
form.subjects = value.filter((item) => item !== 'a');
form.proSubjects = value.filter((item) => item !== 'a');
}
reloadRules()
}
@ -254,8 +285,8 @@ const dynamicProfessionalCategoryLabel=()=>{
}
//
const convertSubjectToField = (subjects: string) => {
switch (subjects) {
const convertSubjectToField = (proSubjects: string) => {
switch (proSubjects) {
case '音乐表演声乐':
return 'yybysy';
case '音乐表演器乐':
@ -270,24 +301,24 @@ const convertSubjectToField = (subjects: string) => {
return 'xjysby';
}
}
const validateInput = (subjects:any)=>{
if(subjects === '音乐表演声乐'){
const validateInput = (proSubjects:any)=>{
if(proSubjects === '音乐表演声乐'){
form.yybysy = form.yybysy.replace(/\D/g, '')
}else if(subjects === '音乐表演器乐'){
}else if(proSubjects === '音乐表演器乐'){
form.yybyqy = form.yybyqy.replace(/\D/g, '')
}else if(subjects === '音乐教育'){
}else if(proSubjects === '音乐教育'){
form.yyjy = form.yyjy.replace(/\D/g, '')
}else if(subjects === '服装表演'){
}else if(proSubjects === '服装表演'){
form.fzby = form.fzby.replace(/\D/g, '')
}else if(subjects === '戏剧影视导演'){
}else if(proSubjects === '戏剧影视导演'){
form.xjysdy = form.xjysdy.replace(/\D/g, '')
}else if(subjects === '戏剧影视表演'){
}else if(proSubjects === '戏剧影视表演'){
form.xjysby = form.xjysby.replace(/\D/g, '')
}
}
function reloadRules(){
if(state.subjectsList){
if(state.proSubjectsList){
let ru = {
province: [{ required: true, message: '请选择省份', trigger: 'change' }],
professionalCategory: [{ required: true, message: '请选择专业类别', trigger: 'change' }],
@ -296,10 +327,10 @@ function reloadRules(){
culturalScore: [{ required: true, message: '请输入文化成绩', trigger: 'blur' }],
chineseScore: [{ required: true, message: '请输入语文成绩', trigger: 'blur' }],
englishScore: [{ required: true, message: '请输入英语成绩', trigger: 'blur' }],
subjects: [{ required: true, message: '请选择专业选课', trigger: 'change' }],
proSubjects: [{ required: true, message: '请选择专业选课', trigger: 'change' }],
}
if(form.subjects && form.subjects.length>0){
form.subjects.forEach(item=>{
if(form.proSubjects && form.proSubjects.length>0){
form.proSubjects.forEach(item=>{
ru[convertSubjectToField(item)] = [{ required: true, message: '请输入'+item, trigger: 'change' }]
})
}

View File

@ -16,7 +16,7 @@ import 'element-plus/theme-chalk/el-affix.css'//全局 固钉
import ElTableInfiniteScroll from "el-table-infinite-scroll";
import App from "./App.vue";
import App from './App.vue';
// 引入Vue-Router
import Router from "./router";
// 引入Vue-i18n
@ -26,8 +26,16 @@ import zhCn from "element-plus/dist/locale/zh-cn.mjs";
import en from "element-plus/dist/locale/en.mjs";
// 导入请求拦截器
import axiosInstance from '@/utils/http'//导入请求拦截器request
// 读取命令行的配置
//const args = process.argv.slice(2);
const app = createApp(App);
// 注册programType 参数到全局配置中
// app.config.globalProperties.programType = process.argv.slice(2).find(arg => arg.startsWith('--programType='))
// ?.split('=')[1] || '艺体志愿宝';
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
@ -50,3 +58,17 @@ app.component('SvgIcon', SvgIcon);
//app.provide('$echarts', echarts);
app.mount("#app");
//2.封装函数,求任意数组中的最小值并返回这个最小值
function arrayMix(arr =[]){
// console.log(arr)
//arr=[12345]
//2.函数内部把数组最小值求出来,并且返回 min
let min = arr[0]
for(let i=0;i >arr.length; i++){
if(min > arr[i]){min = arr[i]
}
}
return min
}

View File

@ -23,7 +23,7 @@ import ApiConstant from '@/utils/ApiConstant';
import axiosInstance from '@/utils/http';
import { useRoute } from 'vue-router';
const { query, params } = useRoute();
document.title = '招生章程|艺体志愿宝';
document.title = '招生章程|' + import.meta.env.VITE_PROGRAM_TYPE;
//
let articleId = params.articleId
const state = reactive({
@ -49,7 +49,7 @@ function getArticleDetail(){
}).then((data) => {
if(data.result){
state.richTextContent = data.result.content
document.title = data.result.title+'|艺体志愿宝';
document.title = data.result.title+'|' + import.meta.env.VITE_PROGRAM_TYPE;
}else{
state.flag = false
}

View File

@ -25,7 +25,7 @@
</template>
<div class="score-item" v-if="state.scoreInfo && state.scoreInfo.professionalCategory">
<p class="flexWrap">地区{{ state.scoreInfo.province }}</p>
<p class="flexWrap">选科{{ state.scoreInfo.cognitioPolyclinic }}</p>
<p class="flexWrap">选科{{ state.scoreInfo.cognitioPolyclinic==='文科'?'历史组':'物理组' }}</p>
<p class="flexWrap">文化{{ state.scoreInfo.culturalScore }}</p>
<p class="flexWrap">{{ state.scoreInfo.professionalCategory==='音乐类'?'主项':'统考' }}{{ state.scoreInfo.professionalScore }}</p>
<span v-if="state.scoreInfo.professionalCategory==='音乐类'">
@ -697,7 +697,7 @@
<script setup lang="ts">
document.title = '模拟报志愿|艺体志愿宝';
document.title = '模拟报志愿|' + import.meta.env.VITE_PROGRAM_TYPE;
import {inject,onMounted,reactive} from 'vue';
import {checkLevel, isNull} from '@/utils/tool';
import {getScore,getRulesEnrollrobabilityMenuList} from '@/axios/api';

View File

@ -14,7 +14,7 @@ import ApiConstant from "@/utils/ApiConstant";
import { getScore } from '@/axios/api';
import SystemHelp from '@/components/SystemHelp.vue';
document.title = '河南艺体考生专属VIP|艺体志愿宝';
document.title = '河南艺体考生专属VIP|' + import.meta.env.VITE_PROGRAM_TYPE;
//
const {proxy} = getCurrentInstance() as ComponentInternalInstance;
const modules = [Navigation, Pagination, Scrollbar, A11y, Autoplay];

View File

@ -22,7 +22,10 @@ import "swiper/css";
import SystemHelp from '@/components/SystemHelp.vue';
import ImagesConstant from '@/utils/ImagesConstant';
import { onMounted } from 'vue';
document.title = '河南艺体考生专属VIP|艺体志愿宝';
const state = reactive({
programType: import.meta.env.VITE_PROGRAM_TYPE,
})
document.title = '河南艺体考生专属VIP|' + import.meta.env.VITE_PROGRAM_TYPE;
const router = useRouter()
//
const modules = [Navigation, Pagination, Scrollbar, A11y, Autoplay];

View File

@ -166,7 +166,7 @@ import ApiConstant from '@/utils/ApiConstant';
import StaticConstant from '@/utils/StaticConstant';
import axiosInstance from '@/utils/http';
const { query, params } = useRoute();
document.title = '专业介绍|艺体志愿宝';
document.title = '专业介绍|' + import.meta.env.VITE_PROGRAM_TYPE;
//
let majorCode = params.majorCode
const state = reactive({

View File

@ -92,7 +92,7 @@ import ApiConstant from '@/utils/ApiConstant';
import ImagesConstant from '@/utils/ImagesConstant';
import StaticConstant from '@/utils/StaticConstant';
import axiosInstance from '@/utils/http';
document.title = '查专业|艺体志愿宝';
document.title = '查专业|' + import.meta.env.VITE_PROGRAM_TYPE;
const state = reactive({
selectForm: {
educationalLevel: '1',///

View File

@ -11,7 +11,7 @@
<div class="flexWrap">
<div class="flex-item-1">文理分科</div>
<div class="flex-item-9 tags">
<div class="" style="color: black;">{{ state.scoreInfo.cognitioPolyclinic }}</div>
<div class="" style="color: black;">{{ state.scoreInfo.cognitioPolyclinic==='文科'?'历史组':'物理组' }}</div>
</div>
</div>
<div class="flexWrap">

View File

@ -6,7 +6,7 @@ import apiConstant from "@/utils/ApiConstant";
import { AxiosResponse } from "axios";
import { Search } from '@element-plus/icons-vue';
import LeftNav from "@/components/LeftNav.vue";
document.title = '轻松查排名|艺体志愿宝';
document.title = '轻松查排名|' + import.meta.env.VITE_PROGRAM_TYPE;
const state = reactive({
dataList: null as any,
categoryList: ['文科', '理科'] as any,

View File

@ -6,7 +6,7 @@ import apiConstant from "@/utils/ApiConstant";
import {AxiosResponse} from "axios";
import {ScoreControlLineEntity} from "@/types";
document.title = '省控线|艺体志愿宝';
document.title = '省控线|' + import.meta.env.VITE_PROGRAM_TYPE;
const state = reactive({
scoreResult:{
size:0,
@ -92,8 +92,8 @@ const handlePage = (page: number) => {
<el-form-item label="文理分科">
<el-radio-group v-model="state.category" @change="scoreControlLineList">
<el-radio label="" name="state">全部</el-radio>
<el-radio label="文科" name="category">文科</el-radio>
<el-radio label="理科" name="category">理科</el-radio>
<el-radio label="文科" name="category">历史组</el-radio>
<el-radio label="理科" name="category">物理组</el-radio>
</el-radio-group>
</el-form-item>
</el-col>

View File

@ -68,7 +68,7 @@ import { SchoolEntity } from "@/types";
import { Search } from '@element-plus/icons-vue';
import LeftNav from "@/components/LeftNav.vue";
import StaticConstant from '@/utils/StaticConstant';
document.title = '找大学|艺体志愿宝';
document.title = '找大学|' + import.meta.env.VITE_PROGRAM_TYPE;
//tabs
const state = reactive({
selectForm: {

View File

@ -34,7 +34,7 @@
</template>
<script lang="ts" setup>
import { ref, getCurrentInstance, ComponentInternalInstance, reactive } from 'vue'
document.title = '河南艺体考生专属VIP|艺体志愿宝';
document.title = '河南艺体考生专属VIP|' + import.meta.env.VITE_PROGRAM_TYPE;
import { ElMessage, type FormInstance, type FormRules } from 'element-plus'
import { checkPhoneAvailable, getScore } from '@/axios/api';
import { passwordChanger, registerUser } from '@/axios/UserApi';

View File

@ -32,8 +32,8 @@
<div class="margin-5"></div>
</template>
<script lang="ts" setup>
import { ref, getCurrentInstance, ComponentInternalInstance, reactive } from 'vue'
document.title = '河南艺体考生专属VIP|艺体志愿宝';
import { ref, getCurrentInstance, ComponentInternalInstance, reactive } from 'vue';
document.title = '河南艺体考生专属VIP|' + import.meta.env.VITE_PROGRAM_TYPE;
import { ElMessage, type FormInstance, type FormRules } from 'element-plus'
import { checkPhoneAvailable, getScore } from '@/axios/api';
import { registerUser } from '@/axios/UserApi';
@ -98,8 +98,7 @@ const submitForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.validate(async (valid) => {
if (valid) {
console.log(ruleForm)
const data =await registerUser({phone:ruleForm.phone,password:ruleForm.pass})
const data =await registerUser({phone:ruleForm.phone,password:ruleForm.pass,programType: import.meta.env.VITE_PROGRAM_TYPE})
console.log(data)
if(data.success){
//

View File

@ -353,7 +353,7 @@ import SchoolNpee from "@/components/npee/schoolNpee.vue";
const router = useRouter();
const { query, params } = useRoute(); //2.routerqueryparams
document.title = '院校介绍|艺体志愿宝';
document.title = '院校介绍|' + import.meta.env.VITE_PROGRAM_TYPE;
//
let schoolCode = params.schoolCode
@ -422,7 +422,7 @@ function getSchoolInfo() {
if (dataResult != null && dataResult != undefined) {
console.log(dataResult)
state.schoolInfo = dataResult
document.title = dataResult.schoolName + '介绍|艺体志愿宝';
document.title = dataResult.schoolName + '介绍|' + import.meta.env.VITE_PROGRAM_TYPE;
//
if (dataResult.schoolWebsiteAddress) {
let websiteAddressList = dataResult.schoolWebsiteAddress.split(',');

View File

@ -172,7 +172,7 @@ import { Search } from '@element-plus/icons-vue';
import LeftNav from "@/components/LeftNav.vue";
import StaticConstant from '@/utils/StaticConstant';
import { getTestCultural } from '@/axios/major/MajorApi';
document.title = '找大学|艺体志愿宝';
document.title = '找大学|' + import.meta.env.VITE_PROGRAM_TYPE;
//tabs
const state = reactive({
selectForm: {