Browse Source

修改用户端需求

plg 3 months ago
parent
commit
3a349e3094

+ 10 - 1
src/api/login.ts

@@ -9,7 +9,7 @@ const userLoginUrl = '/system/login'
 
 const homeUrl = ''
 const updatePasUrl = '/system/updatePassword'
-
+const getPositionUrl = '/param/findAllByType'
 //首页API
 export const homeApi = (val: any) => {
     return http<any>(
@@ -56,5 +56,14 @@ export const updatePasApi = (val: any) => {
             method: 'get',
             url: `${updatePasUrl}?oldPassword=${val.oldPassword}&password=${val.password}&userNo=${val.id}`,
 
+        })
+}
+
+export const getPositionApi = () => {
+    return http<any>(
+        {
+            method: 'get',
+            url: `${getPositionUrl}?type=1`,
+
         })
 }

+ 10 - 0
src/api/record.ts

@@ -3,6 +3,8 @@ import { http } from '@/utils/http'
 // 形状知觉测试结果保存
 const saveEggRecord = '/record/saveEggRecord'
 
+//查询未读的测试记录URL
+const unreadUrl = '/plan/countUnreadPlanNum'
 //首页API
 export const saveEggRecordApi = (val: any) => {
   return http<any>({
@@ -11,3 +13,11 @@ export const saveEggRecordApi = (val: any) => {
     data: val
   })
 }
+
+//查询未读的测试记录
+export const unreadApi = () => {
+  return http<any>({
+    method: 'get',
+    url: unreadUrl
+  })
+}

BIN
src/assets/kepu/task_active.png


BIN
src/assets/kepu/task_active1.png


+ 2 - 2
src/components/CpdmMessage.vue

@@ -65,7 +65,7 @@ const pubMsg = async () => {
         isLock.value = false
         pub_visible.value = false
         //开始跳转到页面测试记录页面
-        router.push({ name: 'testRecord' })
+        router.push({ name: 'popularizationScience' })
     } else {
         ElMessage({
             message: res.msg,
@@ -76,7 +76,7 @@ const pubMsg = async () => {
 }
 //点击关闭弹出框
 const colseMessage = () => {
-    router.push({ name: 'testRecord' })
+    router.push({ name: 'popularizationScience' })
 }
 defineExpose({ open })
 </script>

+ 7 - 1
src/components/CpmdHeader.vue

@@ -101,7 +101,13 @@ const formatterName = (val: string) => {
                     </div>
                     <span>测试计划</span>
                 </el-menu-item>
-                <el-menu-item index="5">测试记录</el-menu-item>
+                <el-menu-item index="5">
+                    <div class="badge_custom" v-show="userInfo.unreadNum != 0">
+                        {{ userInfo.unreadNum }}
+                    </div>
+                    <span>测试记录</span>
+
+                </el-menu-item>
                 <el-menu-item index="2">更多测试</el-menu-item>
                 <el-menu-item index="3">留言社区</el-menu-item>
             </el-menu>

+ 10 - 1
src/stores/modules/userInfo.ts

@@ -8,6 +8,8 @@ const userInfoStore = defineStore(
     //定义正在进行中的计划
     const planCurrentNum = ref<number>(0)
 
+    //定义已完成但是未读的测试记录
+    const unreadNum = ref<number>(0)
     //定义token
     const token = ref<string>('')
     //定义用户信息
@@ -26,6 +28,12 @@ const userInfoStore = defineStore(
     const savePlanCurrentNum = (val: number) => {
       planCurrentNum.value = val
     }
+
+    //保存已完成的测试记录-但是未读的
+    const saveUnreadNum = (val: number) => {
+      unreadNum.value = val;
+    }
+
     //保存token信息
     const saveToken = (val: string) => {
       token.value = val
@@ -44,8 +52,9 @@ const userInfoStore = defineStore(
       token.value = ''
       isPass.value = false
       planCurrentNum.value = 0
+      unreadNum.value = 0
     }
-    return { planCurrentNum, clearUserInfo, savePlanCurrentNum, token, saveToken, userInfo, saveUserInfo, isPass, saveIspass }
+    return { planCurrentNum, clearUserInfo, savePlanCurrentNum, token, saveToken, userInfo, saveUserInfo, isPass, saveIspass, unreadNum, saveUnreadNum }
   },
   { persist: true }
 )

+ 6 - 2
src/utils/http.ts

@@ -21,12 +21,16 @@ const menuStatus = menuStatusStore()
 //少锋本地wifi
 // const base_url = 'http://172.28.50.2:8089'
 //少锋本地
-// const base_url = 'http://10.113.248.4:8089/'
+const base_url = 'http://10.113.248.4:8089/'
 //30
-const base_url = 'http://43.143.198.30:8089/'
+// const base_url = 'http://43.143.198.30:8089/'
 //红朵
 // const base_url = 'http://129.211.221.44:8089'
 
+//锦泓服务器
+// const base_url = 'http://146.56.226.174:8089'
+
+
 //设置axios 默认访问路径
 axios.defaults.baseURL = base_url
 //设置超时时间

+ 39 - 1
src/utils/test.ts

@@ -1,2 +1,40 @@
 
-export const isHaveManage = false
+
+//获取未读测试记录的条数
+//先判断是否登录
+//获取用户信息
+import { userPlanApi } from '@/api/home'
+import { unreadApi } from '@/api/record'
+import { userInfoStore } from '@/stores'
+const userInfo = userInfoStore()
+
+//获取已完成的测试但是未读
+export const getUnread = async () => {
+    //判断是否登录
+    if (userInfo.token) {
+        //如果已经登陆了
+        //开始调用
+        //调用接口
+        let res: any = await unreadApi()
+        let num = res.data
+        //将缓存里的数据改变为当前的
+        userInfo.saveUnreadNum(num)
+    }
+}
+
+//获取待测试的测试计划
+export const planNumGet = async () => {
+    //如果在就是登录了
+    if (userInfo.token) {
+        let userNo = ''
+        //登录的话
+        //判断当前是否有后台管理
+
+        userNo = userInfo.userInfo.userNo
+
+        //调用根据用户查询计划的API
+        let res: any = await userPlanApi(userNo)
+        userInfo.savePlanCurrentNum(res.data.length)
+
+    }
+}

+ 3 - 20
src/views/HomeView.vue

@@ -4,7 +4,7 @@ import CpmdQuestionnaire from '@/components/CpmdQuestionnaire.vue'
 import { onMounted, onUnmounted, ref } from 'vue'
 import { menuStatusStore, userInfoStore } from '@/stores'
 import { useRouter } from 'vue-router'
-import { isHaveManage } from '../utils/test'
+import { getUnread, planNumGet } from '../utils/test'
 import { queryIsQuestionApi, userPlanApi } from '@/api/home';
 const userInfo = userInfoStore()
 const router = useRouter()
@@ -71,6 +71,7 @@ onMounted(() => {
   setHeight()
   window.addEventListener('resize', setHeight);
   forStatus()
+  getUnread()
   planNumGet()
   queryIsQuestion()
   //查询是否需要填写问卷调查
@@ -141,27 +142,9 @@ const brightStatusLevel = () => {
 
 //获取计划剩余多少个正在进行的
 //isHaveManage//
+//
 //先判断是否登录
-const planNumGet = async () => {
-  //如果在就是登录了
-  if (userInfo.token) {
-    let userNo = ''
-    //登录的话
-    //判断当前是否有后台管理
-
-    userNo = userInfo.userInfo.userNo
-
-    //调用根据用户查询计划的API
-    let res: any = await userPlanApi(userNo)
-    if (res.data.length > 0) {
-      taskCircleFlag.value = true
-    } else {
-      taskCircleFlag.value = false
-    }
-    userInfo.savePlanCurrentNum(res.data.length)
 
-  }
-}
 </script>
 
 <template>

+ 2 - 13
src/views/PopularizationScience.vue

@@ -173,21 +173,10 @@ const timeFormat = () => {
 // const add0 = (m: number) => {
 //     return m < 10 ? '0' + m : m
 // }
-const planNumGet = async () => {
-    if (userInfo.token) {
-        let userNo = ''
-        //登录的话
-        //判断当前是否有后台管理
-
-        userNo = userInfo.userInfo.userNo;
-        //调用根据用户查询计划的API
-        let res: any = await userPlanApi(userNo)
-        userInfo.savePlanCurrentNum(res.data.length)
-    }
-}
+
 //刚进入页面就将高度设置为页面需要的
 onMounted(() => {
-    planNumGet()
+
     //进到界面开始轮询
 })
 //界面销毁函数

+ 48 - 12
src/views/Register.vue

@@ -3,7 +3,7 @@
 //引入MD5
 import { md5 } from 'js-md5'
 
-import { userGroupApi, userRegisterApi } from '@/api/login';
+import { getPositionApi, userGroupApi, userRegisterApi } from '@/api/login';
 import CpmdHeader from '@/components/CpmdHeader.vue';
 import { ElMessage } from 'element-plus';
 
@@ -27,6 +27,8 @@ const groupName = ref<string>('')
 //定义用户姓名
 const name = ref('')
 
+const position = ref('')
+
 //选择性别
 const sex = ref('')
 
@@ -37,7 +39,7 @@ const groupData = ref([])
 const ppData = ref<any>([])
 
 
-
+const listPosition = ref<any>([])
 
 
 
@@ -47,7 +49,15 @@ const id = ref<string>('')
 //刚进入页面就将高度设置为页面需要的
 onMounted(() => {
     userGroupFun()
+    getPosition()
 })
+
+//调用查询接口职务的接口
+const getPosition = async () => {
+    let res: any = await getPositionApi()
+    listPosition.value = res.data
+}
+
 //跳转到注册页面的方法
 const router = useRouter()
 const loginFun = () => {
@@ -71,6 +81,14 @@ const registerFun = async () => {
         isLock.value = false
         return
     }
+    if (position.value == '') {
+        ElMessage({
+            message: '请选择职务',
+            type: 'warning'
+        })
+        isLock.value = false
+        return
+    }
     if (account.value == '') {
         ElMessage({
             message: '请填写账号',
@@ -146,17 +164,18 @@ const registerFun = async () => {
 
     queryOrgName()
     //开始组织参数
-    let prams = {
+    let params = {
         orgNo: group.value,
         orgName: groupName.value,
         userNo: account.value,
         userName: name.value,
         gender: sex.value,
         password: md5(password.value),
+        position: parseInt(position.value),
         roleType: '1'
     }
     //如果都通过开始调用方法注册的方法
-    const res: any = await userRegisterApi(prams)
+    const res: any = await userRegisterApi(params)
     isLock.value = false
     if (res.code == 200) {
         ElMessage({
@@ -281,20 +300,36 @@ onUnmounted(() => {
                                 style="width:100%" />
                         </div>
                     </div>
-                    <div style="margin-top:20px">
-                        <div class="user_account">账号(学号):</div>
-                        <div class="input_cus"> <el-input v-model="account" style="width: 100%" placeholder="请输入账号" />
+                    <div style="margin-top:20px;display: flex;">
+                        <div style="flex: 1;">
+                            <div class="user_account">职务:</div>
+                            <div class="input_cus">
+
+                                <el-select v-model="position" placeholder="请选择职务" size="large" style="width: 90%;">
+                                    <el-option v-for="item in listPosition" :key="item.paramValue"
+                                        :label="item.paramName" :value="item.paramValue" />
+                                </el-select>
+                            </div>
                         </div>
+                        <div style="flex: 1;display: flex;flex-direction: column;justify-content: end;">
+                            <div class="user_account" style="width: 90%;margin-left: 10%">账号(学号):</div>
+                            <div class="input_cus"> <el-input v-model="account" style="width: 90%;margin-left: 10%"
+                                    placeholder="请输入账号" />
+                            </div>
+                        </div>
+
                     </div>
                     <div style="margin-top:20px;display: flex;">
-                        <div>
+                        <div style="flex: 1;">
                             <div class="user_account">姓名:</div>
-                            <div class="input_cus"> <el-input v-model="name" style="width: 90%" placeholder="请输入姓名" />
+                            <div class="input_cus"> <el-input v-model="name" style="width: 90%;" placeholder="请输入姓名" />
                             </div>
                         </div>
-                        <div>
-                            <div class="user_account">性别:</div>
-                            <div class="input_cus"> <el-radio-group size="large" v-model="sex">
+
+                        <div style="flex: 1;">
+                            <div class="user_account" style="width: 90%;margin-left:10%">性别:</div>
+                            <div class="input_cus" style="width: 90%;margin-left:10%"> <el-radio-group size="large"
+                                    v-model="sex">
                                     <el-radio value="1" size="large">男</el-radio>
                                     <el-radio value="0" size="large">女</el-radio>
                                 </el-radio-group>
@@ -379,6 +414,7 @@ onUnmounted(() => {
     border-radius: 60px;
     border: 2px solid #B2F2D2;
     padding-left: 20px;
+    height: 40px;
 }
 
 :deep(.el-select__input) {

+ 4 - 3
src/views/Report.vue

@@ -10,6 +10,7 @@ const userInfo = userInfoStore()
 import { useRoute, useRouter } from 'vue-router'
 import { queryReportApi } from '@/api/plan';
 import { ElMessage } from 'element-plus';
+import { getUnread } from '@/utils/test';
 
 //雷达图
 const echarts_ld = ref<any>()
@@ -137,7 +138,7 @@ const option = reactive({
 
 //持久化设置 菜单状态
 //刚进入页面就将高度设置为页面需要的
-onMounted(() => {
+onMounted(async () => {
     const params = route.params
     //当等于0时则跳转到测试计划页面
     //当等于1时则跳转到上一页
@@ -150,13 +151,13 @@ onMounted(() => {
         planId: planId.value,
         flag: goFlag.value
     }
-    queryReport(pa)
+    await queryReport(pa)
     //调用方法
     //进行量表信息查询
 
     //进到界面开始轮询
 
-
+    await getUnread()
 
 
 })

+ 0 - 2
src/views/Scale.vue

@@ -460,7 +460,6 @@ const radioFun = () => {
     let difference = currentTime - timeNum.value;
     timeNum.value = currentTime;
     listTime.value.push(difference)
-    console.log(listTime.value)
     if (countTime.value == 5) {
         //当计数器等于5时
         //设置计数器为0;
@@ -473,7 +472,6 @@ const radioFun = () => {
             for (let i = 0; i < listTime.value.length; i++) {
                 timeTotal += listTime.value[i]
             }
-            console.log(timeTotal)
             if (timeTotal < 1000 * 5) {
                 //需要弹出框
                 cpdmTip.value.open({ type: 1, message: '请认真答题' })

+ 8 - 12
src/views/TestRecord.vue

@@ -68,6 +68,7 @@ const initData = async () => {
         userNo: userInfo.userInfo.userNo
     }
     let res: any = await getDataApi(params)
+    debugger;
     if (res.code == 200) {
         //在这里需要将已经测试完成的测试计划下的---的题目都标记出来
         // list.value.push(...res.data)
@@ -121,23 +122,12 @@ const initData = async () => {
 //如果等于的话--显示nomore
 //如果总条数大于 当前页面的总条数就显示loading
 
-const planNumGet = async () => {
-    if (userInfo.token) {
-        let userNo = ''
-        //登录的话
-        //判断当前是否有后台管理
 
-        userNo = userInfo.userInfo.userNo;
-        //调用根据用户查询计划的API
-        let res: any = await userPlanApi(userNo)
-        userInfo.savePlanCurrentNum(res.data.length)
-    }
-}
 //刚进入页面就将高度设置为页面需要的
 onMounted(() => {
     initData()
     //进到界面开始轮询
-    planNumGet()
+
 })
 //界面销毁函数
 
@@ -181,6 +171,12 @@ onUnmounted(() => {
                             <div class="test_record">
                                 <img src="../assets/kepu/task_1.png" />
                                 <span>{{ item.planName }}</span>
+                                <span
+                                    style="font-size: 14px;line-height: 24px; font-weight: 100;background-color: #ededed;padding:0px 14px;border-radius: 20px;"
+                                    v-show="item.isRead == 0">未读</span>
+                                <span
+                                    style="font-size: 14px;line-height: 24px; font-weight: 100;background-color: #48D68E;color:#ffffff;padding:0px 14px;border-radius: 20px;"
+                                    v-show="item.isRead == 1">已读</span>
                             </div>
                             <div class="test_time">
                                 <span>测试时间:{{ item.taskStartTime }}~{{ item.taskEndTime }}</span>

+ 6 - 1
src/views/shapeIntuition_random.vue

@@ -57,9 +57,10 @@ import { preloader } from "@/utils/utils";
 // import screenfull from "screenfull";
 import { userInfoStore } from '@/stores';
 import { saveEggRecordApi } from '@/api/record'
+import { planNumGet } from '../utils/test'
 import { format as myFormat } from 'date-fns';
 import { userPlanDetailApi } from '@/api/home';
-import CpdmMessage from '@/components/CpdmMessageV2.vue';
+import CpdmMessage from '@/components/CpdmMessage.vue';
 import { getCurrentTimeApi } from '@/api/plan';
 const userInfo = userInfoStore()
 
@@ -111,6 +112,7 @@ export default {
       beginTime: '',
       getCurrentTimeApi: getCurrentTimeApi,
       userPlanDetailApi: userPlanDetailApi,
+      planNumGet: planNumGet,
       correctTxt: '正确',
       showCorrectTxt: false,
       showMouseLeft: false,
@@ -370,7 +372,10 @@ export default {
           } else {
             //当测试完了以后--需要弹出确认的弹出框
             //把弹出框的内容   及用户信息 进行处理 进行发布
+            //这是测试完了--测试完成后调用测试记录
+
             this.$refs.cpdmMe.open()
+            planNumGet()
             // this.$router.push({ name: 'testRecord' })
           }
           //如果后边没有--则测试跳转到报告页