Browse Source

feat: "课题进展"

master
xuesinan 4 years ago
parent
commit
c1af8af7ae
  1. 6
      src/apis/index.js
  2. 132
      src/components/tall/task/CheckSubjectProgress.vue
  3. 136
      src/components/tall/task/SubSubjectProgress.vue

6
src/apis/index.js

@ -132,3 +132,9 @@ export const examineUnlock = params => http.post(`${experiment}/experiment/exami
// 查找数据追溯解锁信息
export const retrospectUnlock = params => http.post(`${experiment}/experiment/retrospectUnlock`, params);
// 课题进度
export const getExperimentProgress = params => http.post(`${experiment}/experiment/getExperimentProgress`, params);
// 子课题进度
export const getProgress = params => http.post(`${experiment}/subExperiment/getProgress`, params);

132
src/components/tall/task/CheckSubjectProgress.vue

@ -3,31 +3,32 @@
<div class="wrap overflow-hidden">
<a-card title="任务目标">
<div class="flex flex-wrap justify-center">
<div class="achievements border-right text-center">
<p class="num">1/6</p>
<div class="achievements border border-right border-bottom text-center">
<p class="num">{{ infoOne.thesis }}/{{ infoOne.totalThesis }}</p>
<p class="name">论文</p>
</div>
<div class="achievements border-bottom text-center">
<p class="num">1/6</p>
<div class="achievements border border-bottom text-center">
<p class="num">{{ infoOne.patent }}/{{ infoOne.totalPatent }}</p>
<p class="name">专利</p>
</div>
<div class="achievements border-top text-center">
<p class="num">1/6</p>
<div class="achievements border border-right text-center">
<p class="num">{{ infoOne.theSoft }}/{{ infoOne.totalTheSoft }}</p>
<p class="name">软著</p>
</div>
<div class="achievements border-left text-center">
<p class="num">1/6</p>
<div class="achievements border text-center">
<p class="num">{{ infoOne.meeting }}/{{ infoOne.totalMeeting }}</p>
<p class="name">会议</p>
</div>
</div>
</a-card>
</div>
<div class="wrap overflow-hidden">
<a-card title="概览">
<div class="topic">
<p>脑卒中远程康复与健康监护系统</p>
<p>{{ infoOne.name }}</p>
<a-progress
:percent="30"
:percent="infoOne.masterSchedule"
:strokeWidth="22"
:show-info="false"
:stroke-color="'#1890FF'"
@ -36,69 +37,37 @@
</div>
<div class="sub-topic flex justify-between flex-wrap">
<div class="topic">
<p>穿戴式运动捕获单元</p>
<a-progress
:percent="30"
:strokeWidth="22"
:show-info="false"
:stroke-color="colorList[0].color"
:trail-color="colorList[0].bgColor"
/>
</div>
<div class="topic">
<p>穿戴式康复数据手套</p>
<div class="topic" v-for="(item, index) in infoSec" :key="index">
<p>{{ item.name }}</p>
<a-progress
:percent="30"
:percent="item.masterSchedule"
:strokeWidth="22"
:show-info="false"
:stroke-color="colorList[1].color"
:trail-color="colorList[1].bgColor"
:stroke-color="colorList[index % 4].color"
:trail-color="colorList[index % 4].bgColor"
/>
</div>
</div>
</a-card>
</div>
<div class="wrap overflow-hidden">
<a-card title="穿戴式运动捕获单元">
<div class="flex flex-wrap justify-center">
<div class="achievements border-right text-center">
<p class="num">1/6</p>
<p class="name">论文</p>
</div>
<div class="achievements border-bottom text-center">
<p class="num">1/6</p>
<p class="name">专利</p>
</div>
<div class="achievements border-top text-center">
<p class="num">1/6</p>
<p class="name">软著</p>
</div>
<div class="achievements border-left text-center">
<p class="num">1/6</p>
<p class="name">会议</p>
</div>
</div>
</a-card>
</div>
<div class="wrap overflow-hidden">
<a-card title="穿戴式康复数据手套">
<div class="wrap overflow-hidden" v-for="(item, index) in infoSec" :key="index">
<a-card :title="item.name">
<div class="flex flex-wrap justify-center">
<div class="achievements border-right text-center">
<p class="num">1/6</p>
<div class="achievements border border-right border-bottom text-center">
<p class="num">{{ item.thesis }}/{{ item.totalThesis }}</p>
<p class="name">论文</p>
</div>
<div class="achievements border-bottom text-center">
<p class="num">1/6</p>
<div class="achievements border border-bottom text-center">
<p class="num">{{ item.patent }}/{{ item.totalPatent }}</p>
<p class="name">专利</p>
</div>
<div class="achievements border-top text-center">
<p class="num">1/6</p>
<div class="achievements border border-right text-center">
<p class="num">{{ item.theSoft }}/{{ item.totalTheSoft }}</p>
<p class="name">软著</p>
</div>
<div class="achievements border-left text-center">
<p class="num">1/6</p>
<div class="achievements border text-center">
<p class="num">{{ item.meeting }}/{{ item.totalMeeting }}</p>
<p class="name">会议</p>
</div>
</div>
@ -108,17 +77,40 @@
</template>
<script setup>
// import { computed, watch, ref } from 'vue';
import { ref } from 'vue';
import { ref, computed } from 'vue';
import { getExperimentProgress } from 'apis';
import { useStore } from 'vuex';
// import { useStore } from 'vuex';
const store = useStore();
const sessionProject = sessionStorage.getItem('project');
const projectId = computed(() => store.getters['projects/projectId']);
const infoOne = ref({});
const infoSec = ref([]);
// const store = useStore();
if (sessionProject) {
const project = JSON.parse(sessionProject);
store.commit('projects/setProject', project);
}
const colorList = ref([
{ color: '#FF9191', bgColor: 'rgba(255, 145, 145, 0.2)' },
{ color: '#FF934B', bgColor: 'rgba(255, 147, 75, 0.2)' },
{ color: '#B991FF', bgColor: 'rgba(185, 145, 255, 0.2)' },
{ color: '#91C1FF', bgColor: 'rgba(145, 193, 255, 0.2)' },
]);
progress();
async function progress() {
try {
const params = { param: { projectId: projectId.value } };
const data = await getExperimentProgress(params);
infoOne.value = data.target;
infoSec.value = data.subTargetList;
} catch (error) {
console.log('error', error);
}
}
</script>
<style scoped>
@ -160,22 +152,20 @@ const colorList = ref([
margin: 0;
}
.border {
border-color: #fff;
}
.border-right {
border-right: 1px solid #cccccc;
margin-right: -1px;
border-right-color: #cccccc;
}
.border-left {
border-left: 1px solid #cccccc;
border-left-color: #cccccc;
}
.border-top {
border-top: 1px solid #cccccc;
margin-top: -1px;
border-top-color: #cccccc;
}
.border-bottom {
border-bottom: 1px solid #cccccc;
border-bottom-color: #cccccc;
}
.achievements {

136
src/components/tall/task/SubSubjectProgress.vue

@ -3,20 +3,20 @@
<div class="wrap overflow-hidden">
<a-card title="任务目标">
<div class="flex flex-wrap justify-center">
<div class="achievements border-right text-center">
<p class="num">1/6</p>
<div class="achievements border border-right border-bottom text-center">
<p class="num">{{ infoOne.thesis }}/{{ infoOne.totalThesis }}</p>
<p class="name">论文</p>
</div>
<div class="achievements border-bottom text-center">
<p class="num">1/6</p>
<div class="achievements border border-bottom text-center">
<p class="num">{{ infoOne.patent }}/{{ infoOne.totalPatent }}</p>
<p class="name">专利</p>
</div>
<div class="achievements border-top text-center">
<p class="num">1/6</p>
<div class="achievements border border-right text-center">
<p class="num">{{ infoOne.theSoft }}/{{ infoOne.totalTheSoft }}</p>
<p class="name">软著</p>
</div>
<div class="achievements border-left text-center">
<p class="num">1/6</p>
<div class="achievements border text-center">
<p class="num">{{ infoOne.meeting }}/{{ infoOne.totalMeeting }}</p>
<p class="name">会议</p>
</div>
</div>
@ -25,9 +25,9 @@
<div class="wrap overflow-hidden">
<a-card title="概览">
<div class="topic">
<p>脑卒中远程康复与健康监护系统</p>
<p>{{ infoOne.name }}</p>
<a-progress
:percent="30"
:percent="infoOne.masterSchedule"
:strokeWidth="22"
:show-info="false"
:stroke-color="'#1890FF'"
@ -36,70 +36,37 @@
</div>
<div class="sub-topic flex justify-between flex-wrap">
<div class="topic">
<p>穿戴式运动捕获单元</p>
<div class="topic" v-for="(item, index) in infoSec" :key="index">
<p>{{ item.name }}</p>
<a-progress
:percent="30"
:percent="item.masterSchedule"
:strokeWidth="22"
:show-info="false"
:stroke-color="colorList[0].color"
:trail-color="colorList[0].bgColor"
:stroke-color="colorList[index % 4].color"
:trail-color="colorList[index % 4].bgColor"
/>
</div>
<div class="topic">
<p>穿戴式康复数据手套</p>
<a-progress
:percent="30"
:strokeWidth="22"
:show-info="false"
:stroke-color="colorList[1].color"
:trail-color="colorList[1].bgColor"
/>
</div>
</div>
</a-card>
</div>
<div class="wrap overflow-hidden">
<a-card title="穿戴式运动捕获单元">
<div class="flex flex-wrap justify-center">
<div class="achievements border-right text-center">
<p class="num">1/6</p>
<p class="name">论文</p>
</div>
<div class="achievements border-bottom text-center">
<p class="num">1/6</p>
<p class="name">专利</p>
</div>
<div class="achievements border-top text-center">
<p class="num">1/6</p>
<p class="name">软著</p>
</div>
<div class="achievements border-left text-center">
<p class="num">1/6</p>
<p class="name">会议</p>
</div>
</div>
</a-card>
</div>
<div class="wrap overflow-hidden">
<a-card title="穿戴式康复数据手套">
<div class="wrap overflow-hidden" v-for="(item, index) in infoSec" :key="index">
<a-card :title="item.name">
<div class="flex flex-wrap justify-center">
<div class="achievements border-right text-center">
<p class="num">1/6</p>
<p class="name">论文</p>
<div class="achievements border border-right border-bottom text-center">
<p class="num">{{ item.report }}</p>
<p class="name">实验报告</p>
</div>
<div class="achievements border-bottom text-center">
<p class="num">1/6</p>
<p class="name">专利</p>
<div class="achievements border border-bottom text-center">
<p class="num">{{ item.course }}</p>
<p class="name">实验过程</p>
</div>
<div class="achievements border-top text-center">
<p class="num">1/6</p>
<p class="name">软著</p>
<div class="achievements border border-right text-center">
<p class="num">{{ item.information }}</p>
<p class="name">实验数据</p>
</div>
<div class="achievements border-left text-center">
<p class="num">1/6</p>
<p class="name">会议</p>
<div class="achievements border text-center">
<p class="num">{{ item.result }}</p>
<p class="name">实验结果</p>
</div>
</div>
</a-card>
@ -108,17 +75,40 @@
</template>
<script setup>
// import { computed, watch, ref } from 'vue';
import { ref } from 'vue';
import { ref, computed } from 'vue';
import { useStore } from 'vuex';
import { getProgress } from 'apis';
// import { useStore } from 'vuex';
const store = useStore();
const sessionProject = sessionStorage.getItem('project');
const projectId = computed(() => store.getters['projects/projectId']);
const infoOne = ref({});
const infoSec = ref([]);
// const store = useStore();
if (sessionProject) {
const project = JSON.parse(sessionProject);
store.commit('projects/setProject', project);
}
const colorList = ref([
{ color: '#FF9191', bgColor: 'rgba(255, 145, 145, 0.2)' },
{ color: '#FF934B', bgColor: 'rgba(255, 147, 75, 0.2)' },
{ color: '#B991FF', bgColor: 'rgba(185, 145, 255, 0.2)' },
{ color: '#91C1FF', bgColor: 'rgba(145, 193, 255, 0.2)' },
]);
progress();
async function progress() {
try {
const params = { param: { projectId: projectId.value } };
const data = await getProgress(params);
infoOne.value = data.target;
infoSec.value = data.subTargetList;
} catch (error) {
console.log('error', error);
}
}
</script>
<style scoped>
@ -160,22 +150,24 @@ const colorList = ref([
margin: 0;
}
.border {
border-color: #fff;
}
.border-right {
border-right: 1px solid #cccccc;
margin-right: -1px;
border-right-color: #cccccc;
}
.border-left {
border-left: 1px solid #cccccc;
border-left-color: #cccccc;
}
.border-top {
border-top: 1px solid #cccccc;
margin-top: -1px;
border-top-color: #cccccc;
}
.border-bottom {
border-bottom: 1px solid #cccccc;
border-bottom-color: #cccccc;
}
.achievements {

Loading…
Cancel
Save