From e68eebdf0a7cd3162eb0fac83b39c446bd665b12 Mon Sep 17 00:00:00 2001
From: ZhangXianQiang <1135831638@qq.com>
Date: 星期五, 24 五月 2024 09:09:24 +0800
Subject: [PATCH] Merge branch 'master' into dev-zhang

---
 src/api/user.js                                  |    2 
 src/views/exam/question/list.vue                 |   47 +--
 src/api/UserConditionExamine.js                  |    9 
 src/api/question.js                              |    4 
 src/views/exam/question/edit/multiple-choice.vue |    8 
 src/views/user/student/list.vue                  |   75 ++++-
 src/api/dashboard.js                             |    2 
 src/router.js                                    |   48 ++-
 src/views/answer/dataStatistics.vue              |  257 +++++++++++++++++++
 src/utils/request.js                             |   16 +
 src/views/exam/paper/list.vue                    |    2 
 src/views/exam/question/edit/single-choice.vue   |    8 
 src/views/exam/question/edit/true-false.vue      |   13 
 src/components/UploadC.vue                       |    3 
 src/views/questionAnswer/edit.vue                |   37 ++
 src/views/user/departmentExamine/list.vue        |   27 +
 src/views/exam/question/edit/short-answer.vue    |    8 
 src/views/exam/question/edit/gap-filling.vue     |    8 
 src/views/questionAnswer/list.vue                |   10 
 src/views/user/UserConditionExamine/list.vue     |  180 +++++++++++++
 20 files changed, 651 insertions(+), 113 deletions(-)

diff --git a/src/api/UserConditionExamine.js b/src/api/UserConditionExamine.js
new file mode 100644
index 0000000..759eafb
--- /dev/null
+++ b/src/api/UserConditionExamine.js
@@ -0,0 +1,9 @@
+import { get,post } from '@/utils/request'
+
+export default {
+  list: query => post('/api/admin/userCondition/examine/list', query),
+  save: query => post('/api/admin/userCondition/examine/save', query),
+  audit: query => post('/api/admin/userCondition/examine/audit', query),
+  delete: id => post('/api/admin/userCondition/examine/delete/' + id),
+  getDeptList: id => post('/api/admin/userCondition/list'),
+}
diff --git a/src/api/dashboard.js b/src/api/dashboard.js
index bbd6429..6a9614e 100644
--- a/src/api/dashboard.js
+++ b/src/api/dashboard.js
@@ -3,6 +3,8 @@
 export default {
   index: () => post('/api/admin/dashboard/index'),
   getData: query => post('/api/admin/examPaperAnswer/statistic', query),
+  data: query => post('/api/admin/examPaperAnswer/data', query),
+  queryCondition: query => get('/api/admin/exam/paper/queryCondition', query),
   examPaperList: query => get('/api/admin/exam/paper/list', query),
   page: query => post('/api/admin/examPaperAnswer/page', query)
 }
diff --git a/src/api/question.js b/src/api/question.js
index 7d983a9..27a3121 100644
--- a/src/api/question.js
+++ b/src/api/question.js
@@ -1,4 +1,4 @@
-import { post, download } from '@/utils/request'
+import { post, download, downloadPost } from '@/utils/request'
 
 export default {
   pageList: query => post('/api/admin/question/page', query),
@@ -6,5 +6,5 @@
   select: id => post('/api/admin/question/select/' + id),
   deleteQuestion: id => post('/api/admin/question/delete/' + id),
   downloadImportTemplate: () => download('/api/admin/question/download/question/import/temp'),
-  exportQuestion: query => download('/api/admin/question/question/export', query)
+  exportQuestion: query => downloadPost('/api/admin/question/question/export', query)
 }
diff --git a/src/api/user.js b/src/api/user.js
index 14bc64c..0716aeb 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -19,5 +19,5 @@
   selectByUserName: query => post('/api/admin/user/selectByUserName', query),
   addMeetin:query => post('/api/admin/video/add', query),
   delMeetin:query => post('/api/admin/video/clear', query),
-  setStatus:query => post('/api/admin/user/setStatus', query)
+  setStatus:query => post('/api/admin/userCondition/examine/save', query)
 }
diff --git a/src/components/UploadC.vue b/src/components/UploadC.vue
index 3a8df6e..0e8fe0d 100644
--- a/src/components/UploadC.vue
+++ b/src/components/UploadC.vue
@@ -43,8 +43,9 @@
       uploadUrl: "http://localhost:8085/api/upload/upload",
       fileTypeList: {
         'video': ['mp4', 'avi'],
-        'img': ['jgp', 'png', 'jpeg'],
+        'img': ['jpg', 'png', 'jpeg'],
         'pdf': ['pdf'],
+        'file': ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'png', 'jpg', 'jpeg', 'pdf'],
       }
     };
   },
diff --git a/src/router.js b/src/router.js
index 81a3245..0027693 100644
--- a/src/router.js
+++ b/src/router.js
@@ -78,6 +78,12 @@
         meta: { title: '璋冨姩瀹℃牳', noCache: true }
       },
       {
+        path: 'UserConditionExamine/list',
+        component: () => import('@/views/user/UserConditionExamine/list'),
+        name: 'UserConditionExamineList',
+        meta: { title: '鐘舵�佸鏍�', noCache: true }
+      },
+      {
         path: 'tag/list',
         component: () => import('@/views/user/tag/list'),
         name: 'TagAdminPageList',
@@ -308,7 +314,13 @@
         path: 'sheetStatistics',
         component: () => import('@/views/answer/sheetStatistics.vue'),
         name: 'AnswerPageList',
-        meta: { title: '绛斿嵎缁熻', noCache: true }
+        meta: { title: '浜烘暟鍒嗗竷', noCache: true }
+      },
+      {
+        path: 'dataStatistics',
+        component: () => import('@/views/answer/dataStatistics.vue'),
+        name: 'AnswerPageList',
+        meta: { title: '鍒嗘暟缁熻', noCache: true }
       },
       {
         path: 'achievementStatistics',
@@ -484,6 +496,12 @@
         name: 'departmentExamineList',
         meta: { title: '璋冨姩瀹℃牳', noCache: true }
       },
+      {
+        path: 'UserConditionExamine/list',
+        component: () => import('@/views/user/UserConditionExamine/list'),
+        name: 'UserConditionExamineList',
+        meta: { title: '鐘舵�佸鏍�', noCache: true }
+      },
     ]
   },
   {
@@ -496,19 +514,19 @@
     },
     alwaysShow: true,
     children: [
-      {
-        path: 'paper/list',
-        component: () => import('@/views/exam/paper/list'),
-        name: 'ExamPaperPageList',
-        meta: { title: '璇曞嵎鍒楄〃', noCache: true }
-      },
-      {
-        path: 'paper/edit',
-        component: () => import('@/views/exam/paper/edit'),
-        name: 'ExamPaperEdit',
-        meta: { title: '璇曞嵎缂栬緫', noCache: true, activeMenu: '/exam/paper/list' },
-        hidden: true
-      },
+      // {
+      //   path: 'paper/list',
+      //   component: () => import('@/views/exam/paper/list'),
+      //   name: 'ExamPaperPageList',
+      //   meta: { title: '璇曞嵎鍒楄〃', noCache: true }
+      // },
+      // {
+      //   path: 'paper/edit',
+      //   component: () => import('@/views/exam/paper/edit'),
+      //   name: 'ExamPaperEdit',
+      //   meta: { title: '璇曞嵎缂栬緫', noCache: true, activeMenu: '/exam/paper/list' },
+      //   hidden: true
+      // },
       {
         path: 'personalRandomTemplate/list',
         component: () => import('@/views/exam/personalRandomTemplate/list'),
@@ -558,7 +576,7 @@
         path: 'sheetStatistics',
         component: () => import('@/views/answer/sheetStatistics.vue'),
         name: 'AnswerPageList',
-        meta: { title: '绛斿嵎缁熻', noCache: true }
+        meta: { title: '浜烘暟鍒嗗竷', noCache: true }
       },
     ]
   },
diff --git a/src/utils/request.js b/src/utils/request.js
index 9c397ae..3e174b7 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -119,6 +119,19 @@
   return request(false, query)
 }
 
+const downloadPost = function (url, params) {
+  const query = {
+    baseURL: process.env.VUE_APP_URL,
+    url: url,
+    method: 'post',
+    withCredentials: true,
+    timeout: 300000,
+    data: params,
+    responseType: 'blob' // 鍏抽敭
+  }
+  return request(false, query)
+}
+
 export const down = function (url, params) {
   const query = {
     baseURL: process.env.VUE_APP_URL,
@@ -137,5 +150,6 @@
   postWithOutLoadTip,
   get,
   form,
-  download
+  download,
+  downloadPost
 }
diff --git a/src/views/answer/dataStatistics.vue b/src/views/answer/dataStatistics.vue
new file mode 100644
index 0000000..997726f
--- /dev/null
+++ b/src/views/answer/dataStatistics.vue
@@ -0,0 +1,257 @@
+<template>
+  <div style="padding: 10px" ref="pageContent">
+    <el-form :model="queryParam" ref="queryForm" :inline="true" style="display: flex">
+      <el-form-item label="璇曞嵎锛�">
+        <el-select v-model="queryParam.id" filterable placeholder="璇曞嵎">
+          <el-option v-for="item in examPaperList" :key="item.id" :value="item.id" :label="item.name" @change="getType(item.type)" />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="submitForm">鏌ヨ</el-button>
+      </el-form-item>
+
+    </el-form>
+    <el-row :gutter="20">
+      <el-col :xl="12" class="echarts-row">
+        <el-card>
+          <div class="card-chart-container">
+            <div id="ageChart" ref="ageChart" class="chart-style" v-loading="chartLoading1" />
+          </div>
+        </el-card>
+      </el-col>
+
+      <el-col :xl="12" class="echarts-row">
+        <el-card>
+          <div class="card-chart-container">
+            <div id="scoreChart" ref="scoreChart" class="chart-style" v-loading="chartLoading2" />
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <el-row :gutter="20">
+      <el-col :xl="24">
+        <el-card>
+          <div class="card-chart-container">
+            <div id="peopleChart" ref="peopleChart" class="chart-style" v-loading="chartLoading3" />
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+import { mapGetters, mapState } from 'vuex';
+import dashboardApi from '@/api/dashboard';
+
+const colorList = ['#3498DB', '#E74C3C', '#F1C40F', '#95A5A6', '#8E44AD', '#F39C12', '#D35400'];
+
+
+const ageLabel = {
+  'age0To19': '0-19宀�',
+  'age20To29': '20-29宀�',
+  'age30To39': '30-39宀�',
+  'age40To49': '40-49宀�',
+  'ageOver50': '澶т簬50宀�',
+};
+const scoreLabel = {
+  'score0To59': '灏忎簬60鍒�',
+  'score60To69': '60-69鍒�',
+  'score70To79': '70-79鍒�',
+  'score80To89': '80-89鍒�',
+  'score90To100': '90-100鍒�'
+};
+const pieLabel = {
+  'totalAttended': '鍙備笌鑰冭瘯',
+  'totalAbsent': '鏈弬涓庤�冭瘯'
+};
+let ageChart = null;
+let scroeChart = null;
+let peopleChart = null;
+let observer = null;
+export default {
+  data() {
+    return {
+      examPaperList: [],
+      chartLoading1: false,
+      chartLoading2: false,
+      chartLoading3: false,
+      queryParam: {
+        id: '',
+        type: 1
+      },
+      admin: true
+    };
+  },
+  mounted() {
+    if (sessionStorage.getItem('deptAdmin') == 1) {
+      this.admin = false;
+    }
+    ageChart = echarts.init(this.$refs.ageChart);
+    scroeChart = echarts.init(this.$refs.scoreChart);
+    peopleChart = echarts.init(this.$refs.peopleChart);
+    dashboardApi.queryCondition().then(res => {
+      this.examPaperList = res.response;
+      this.queryParam.id = this.examPaperList[0].id
+      this.queryParam.type = this.examPaperList[0].paperType
+      this.getChartData();
+      this.observe();
+    });
+  },
+  methods: {
+    getType(type) {
+      this.queryParam.type = type;
+      this.getChartData();
+    },
+    getChartData() {
+      this.chartLoading1 = true;
+      this.chartLoading2 = true;
+      this.chartLoading3 = true;
+      dashboardApi.data(this.queryParam).then(re => {
+        const { age, score, examPeopleNum } = re.response;
+
+        const ageOption = this.barOption('骞撮緞娈电粺璁�', age, ageLabel);
+        const scoreOption = this.barOption('鍒嗘暟娈电粺璁�', score, scoreLabel);
+        const peopleOption = this.pieOption('鑰冭瘯浜烘暟', examPeopleNum, pieLabel);
+
+        ageChart.setOption(ageOption, true);
+        scroeChart.setOption(scoreOption, true);
+        peopleChart.setOption(peopleOption, true);
+
+        this.chartLoading1 = false;
+        this.chartLoading2 = false;
+        this.chartLoading3 = false;
+      });
+    },
+    barOption(title, data, labelList) {
+      const dataKeys = data.map(item => labelList[Object.keys(item)[0]]);
+      const dataValues = data.map(item => Object.values(item)[0]);
+      return {
+        title: {
+          text: title,
+          x: 'left'
+        },
+        color: colorList,
+        tooltip: {
+          trigger: 'item'
+        },
+        grid: {
+          left: 10,
+          right: 10,
+          bottom: 20,
+          top: 40,
+          containLabel: true
+        },
+        xAxis: {
+          type: 'category',
+          data: dataKeys
+        },
+        yAxis: {
+          type: 'value'
+        },
+        series: [
+          {
+            type: 'bar',
+            label: {
+              show: true,
+              fontSize: 16
+            },
+            barMaxWidth: '40%',
+            data: dataValues,
+          }
+        ]
+
+      };
+
+    },
+    pieOption(title, data, labelList) {
+      const pieData = data.map(item => {
+        return {
+          name: labelList[Object.keys(item)[0]],
+          value: Object.values(item)[0]
+        };
+      });
+      return {
+        title: {
+          text: title,
+          x: 'left'
+        },
+        color: ['#E74C3C', '#3498DB',  '#F1C40F', '#95A5A6', '#8E44AD', '#F39C12', '#D35400'],
+        tooltip: {
+          trigger: 'item'
+        },
+        legend: {
+          orient: 'horizontal',
+        },
+        series: [
+          {
+            type: 'pie',
+            radius: '50%',
+            data: pieData,
+            emphasis: {
+              itemStyle: {
+                shadowBlur: 10,
+                shadowOffsetX: 0,
+                shadowColor: 'rgba(0, 0, 0, 0.5)'
+              }
+            }
+          }
+        ]
+
+      };
+
+    },
+    submitForm() {
+      this.getChartData();
+    },
+
+    // 鐩戝惉鍙樺寲
+    observe() {
+      if (!observer) {
+        observer = new ResizeObserver(entries => {
+          this.handleResize();
+        });
+      }
+      observer.observe(this.$refs.pageContent);
+    },
+    // 绐楀彛鍙樻崲
+    handleResize() {
+      if (ageChart) {
+        ageChart.resize();
+      }
+      if (scroeChart) {
+        scroeChart.resize();
+      }
+      if (peopleChart) {
+        peopleChart.resize();
+      }
+    }
+  },
+  beforeDestroy() {
+    observer.unobserve(this.$refs.pageContent);
+  },
+  computed: {
+    ...mapGetters('enumItem', ['enumFormat']),
+    ...mapState('enumItem', {
+      levelEnum: state => state.user.levelEnum
+    })
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.echarts-row {
+  margin-bottom: 20px;
+}
+
+.card-chart-container {
+  width: 100%;
+  height: 400px;
+}
+
+
+.chart-style {
+  width: 100%;
+  height: 100%;
+}
+</style>
diff --git a/src/views/exam/paper/list.vue b/src/views/exam/paper/list.vue
index a4d2e75..cad549d 100644
--- a/src/views/exam/paper/list.vue
+++ b/src/views/exam/paper/list.vue
@@ -9,7 +9,7 @@
       </el-form-item>
       <el-form-item label="璇剧洰锛�" >
         <el-select v-model="queryParam.subjectId"  clearable>
-          <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name+' '"></el-option>
+          <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name+' '"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
diff --git a/src/views/exam/question/edit/gap-filling.vue b/src/views/exam/question/edit/gap-filling.vue
index 5e2160e..2f92735 100644
--- a/src/views/exam/question/edit/gap-filling.vue
+++ b/src/views/exam/question/edit/gap-filling.vue
@@ -1,8 +1,8 @@
 <template>
   <div class="app-container">
     <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading"  :rules="rules">
-      <el-form-item label="閮ㄩ棬锛�" prop="gradeLevel" style="display: none">
-        <el-select v-model="form.gradeLevel" placeholder="閮ㄩ棬" @change="levelChange">
+      <el-form-item label="鎵�灞為儴闂細" prop="deptIds">
+        <el-select v-model="form.deptIds" placeholder="鎵�灞為儴闂�" multiple filterable>
           <el-option v-for="item in depart" :key="item.id" :value="item.id" :label="item.name"></el-option>
         </el-select>
       </el-form-item>
@@ -72,7 +72,7 @@
         id: null,
         questionType: 4,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
         ],
@@ -236,7 +236,7 @@
         id: null,
         questionType: 4,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
         ],
diff --git a/src/views/exam/question/edit/multiple-choice.vue b/src/views/exam/question/edit/multiple-choice.vue
index 8f859e9..8b156c8 100644
--- a/src/views/exam/question/edit/multiple-choice.vue
+++ b/src/views/exam/question/edit/multiple-choice.vue
@@ -1,8 +1,8 @@
 <template>
   <div class="app-container">
     <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading"  :rules="rules">
-      <el-form-item label="閮ㄩ棬锛�" prop="gradeLevel"  style="display: none">
-        <el-select v-model="form.gradeLevel" placeholder="閮ㄩ棬"  @change="levelChange">
+      <el-form-item label="鎵�灞為儴闂細" prop="deptIds">
+        <el-select v-model="form.deptIds" placeholder="鎵�灞為儴闂�" multiple filterable>
           <el-option v-for="item in depart" :key="item.id" :value="item.id" :label="item.name"></el-option>
         </el-select>
       </el-form-item>
@@ -79,7 +79,7 @@
         id: null,
         questionType: 2,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
           { id: null, prefix: 'A', content: '' },
@@ -228,7 +228,7 @@
         id: null,
         questionType: 2,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
           { id: null, prefix: 'A', content: '' },
diff --git a/src/views/exam/question/edit/short-answer.vue b/src/views/exam/question/edit/short-answer.vue
index 9df5928..553bc26 100644
--- a/src/views/exam/question/edit/short-answer.vue
+++ b/src/views/exam/question/edit/short-answer.vue
@@ -1,8 +1,8 @@
 <template>
   <div class="app-container">
     <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
-      <el-form-item label="閮ㄩ棬锛�" prop="gradeLevel"  style="display: none">
-        <el-select v-model="form.gradeLevel"   placeholder="閮ㄩ棬"  @change="levelChange">
+      <el-form-item label="鎵�灞為儴闂細" prop="deptIds">
+        <el-select v-model="form.deptIds" placeholder="鎵�灞為儴闂�" multiple filterable>
           <el-option v-for="item in depart" :key="item.id" :value="item.id" :label="item.name"></el-option>
         </el-select>
       </el-form-item>
@@ -69,7 +69,7 @@
         id: null,
         questionType: 5,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [],
         analyze: '',
@@ -189,7 +189,7 @@
         id: null,
         questionType: 5,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [],
         analyze: '',
diff --git a/src/views/exam/question/edit/single-choice.vue b/src/views/exam/question/edit/single-choice.vue
index 4042019..dae935f 100644
--- a/src/views/exam/question/edit/single-choice.vue
+++ b/src/views/exam/question/edit/single-choice.vue
@@ -1,8 +1,8 @@
 <template>
   <div class="app-container">
     <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
-      <el-form-item label="閮ㄩ棬锛�" prop="gradeLevel" style="display: none">
-        <el-select v-model="form.gradeLevel" placeholder="閮ㄩ棬"  @change="levelChange" clearable>
+      <el-form-item label="鎵�灞為儴闂細" prop="deptIds">
+        <el-select v-model="form.deptIds" placeholder="鎵�灞為儴闂�" multiple filterable>
           <el-option v-for="item in depart" :key="item.id" :value="item.id" :label="item.name"></el-option>
         </el-select>
       </el-form-item>
@@ -79,7 +79,7 @@
         id: null,
         questionType: 1,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
           { prefix: 'A', content: '' },
@@ -219,7 +219,7 @@
         id: null,
         questionType: 1,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
           { prefix: 'A', content: '' },
diff --git a/src/views/exam/question/edit/true-false.vue b/src/views/exam/question/edit/true-false.vue
index 7756919..585a402 100644
--- a/src/views/exam/question/edit/true-false.vue
+++ b/src/views/exam/question/edit/true-false.vue
@@ -1,14 +1,13 @@
 <template>
   <div class="app-container">
     <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading"  :rules="rules">
-      <el-form-item label="閮ㄩ棬锛�" prop="gradeLevel" style="display: none">
-        <el-select v-model="form.gradeLevel" placeholder="閮ㄩ棬"  @change="levelChange">
+      <el-form-item label="鎵�灞為儴闂細" prop="deptIds">
+        <el-select v-model="form.deptIds" placeholder="鎵�灞為儴闂�" multiple filterable>
           <el-option v-for="item in depart" :key="item.id" :value="item.id" :label="item.name"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="璇剧洰锛�" prop="subjectIds" required>
-        <el-select v-model="form.subjectIds" placeholder="璇剧洰"  multiple
-                   collapse-tags>
+        <el-select v-model="form.subjectIds" placeholder="璇剧洰"  multiple collapse-tags>
           <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name+' '"></el-option>
         </el-select>
       </el-form-item>
@@ -74,11 +73,10 @@
       },
       depart:[],
       form: {
-
         id: null,
         questionType: 3,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
           { id: null, prefix: 'A', content: '鏄�' },
@@ -202,7 +200,7 @@
         id: null,
         questionType: 3,
         gradeLevel: null,
-
+        deptIds: [],
         title: '',
         items: [
           { id: null, prefix: 'A', content: '鏄�' },
@@ -216,7 +214,6 @@
       this.form.id = lastId
     },
     levelChange () {
-
       this.subjectFilter = this.subjects.filter(data => data.level === this.form.gradeLevel)
     },
     showQuestion () {
diff --git a/src/views/exam/question/list.vue b/src/views/exam/question/list.vue
index bb4d189..c333b0b 100644
--- a/src/views/exam/question/list.vue
+++ b/src/views/exam/question/list.vue
@@ -33,22 +33,13 @@
           <el-form
             label-position="top"
           >
-            <el-form-item label="棰樺瀷锛�">
-              <el-select v-model="exportForm.questionType" clearable>
-                <el-option v-for="item in questionType" :key="item.key" :value="item.key" :label="item.value"></el-option>
+            <el-form-item label="璇剧洰锛�">
+              <el-select v-model="exportForm.subjectIds" clearable filterable multiple>
+                <el-option v-for="item in subjectIdList" :key="item.id" :value="item.id" :label="item.name"></el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="鍒涘缓鏃堕棿锛�">
-              <el-date-picker
-                v-model="timeRange"
-                type="daterange"
-                range-separator="鑷�"
-                start-placeholder="寮�濮嬫棩鏈�"
-                end-placeholder="缁撴潫鏃ユ湡">
-              </el-date-picker>
-            <el-form-item style="text-align: center;margin-top: 5px">
+            <el-form-item>
               <el-button type="primary" @click="exportQuestion">瀵煎嚭</el-button>
-            </el-form-item>
             </el-form-item>
           </el-form>
           <el-button slot="reference" class="op-item" type="success">瀵煎嚭</el-button>
@@ -72,6 +63,7 @@
     </el-form>
     <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
       <el-table-column prop="subjectId" label="璇剧洰" :formatter="subjectIdFormatte" width="120px"/>
+      <el-table-column prop="deptNames" label="鎵�灞為儴闂�" width="150px"/>
       <el-table-column prop="questionType" label="棰樺瀷" :formatter="questionTypeFormatter" width="70px"/>
       <el-table-column prop="shortTitle" label="棰樺共" show-overflow-tooltip/>
       <el-table-column prop="score" label="鍒嗘暟" width="60px"/>
@@ -98,17 +90,16 @@
 import Pagination from '@/components/Pagination'
 import QuestionShow from './components/Show'
 import questionApi from '@/api/question'
+import SubjectApi from '@/api/subject'
 import { downloadExcel } from '@/utils/download'
-
 export default {
   components: { Pagination, QuestionShow },
   data () {
     return {
+      subjectIdList: [],
       timeRange: [],
       exportForm: {
-        questionType: null,
-        start: null,
-        end: null
+        subjectIds: [],
       },
       upLoadUrl: '/api/admin/question/import',
       fileList: [],
@@ -136,16 +127,13 @@
   created () {
     this.initSubject()
     this.search()
+    this.getSubjectIds()
     this.queryParam.subjectId = null
     this.subjectFilter = this.subjects
   },
   methods: {
     // 瀵煎嚭棰樼洰
     exportQuestion () {
-      if (this.timeRange && this.timeRange.length > 1) {
-        this.exportForm.startStr = this.timeRange[0]
-        this.exportForm.endStr = this.timeRange[1]
-      }
       questionApi.exportQuestion(this.exportForm).then(res => {
         downloadExcel(res, '棰樼洰瀵煎嚭')
       })
@@ -175,17 +163,6 @@
         this.$message.warning('鏂囦欢鏍煎紡涓嶅锛屼粎闄恱ls鍜寈lsx')
         return false
       }
-      // console.log(file)
-      // const isJPG = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
-      // // const isLt2M = file.size / 1024 / 1024 < 2;
-      //
-      // if (!isJPG) {
-      //   this.$message.error('涓婁紶鏂囦欢鍙兘鏄疎xcel!');
-      // }
-      // // if (!isLt2M) {
-      // //   this.$message.error('涓婁紶澶村儚鍥剧墖澶у皬涓嶈兘瓒呰繃 2MB!');
-      // // }
-      // return isJPG ;
     },
     submitForm () {
       this.queryParam.pageIndex = 1
@@ -217,6 +194,11 @@
         _this.questionShow.question = re.response
         _this.questionShow.loading = false
       })
+    },
+    getSubjectIds() {
+       SubjectApi.list().then(res => {
+         this.subjectIdList = res.response
+      });
     },
     editQuestion (row) {
       let url = this.enumFormat(this.editUrlEnum, row.questionType)
@@ -250,7 +232,6 @@
     ...mapActions('exam', { initSubject: 'initSubject' })
   },
   computed: {
-
     headers: function () {
       // console.log(store.getters.Admin-Token)
       // const tenantId = store.getters.userInfo.tenantId
diff --git a/src/views/questionAnswer/edit.vue b/src/views/questionAnswer/edit.vue
index 222ffd2..e8325f5 100644
--- a/src/views/questionAnswer/edit.vue
+++ b/src/views/questionAnswer/edit.vue
@@ -3,10 +3,13 @@
 
     <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
       <el-form-item label="闂锛�"  prop="question">
-        <el-input v-model="form.question"></el-input>
+        <el-input v-model="form.question" maxlength="48"></el-input>
       </el-form-item>
       <el-form-item label="绛旀锛�"  prop="answer">
-        <el-input v-model="form.answer"></el-input>
+        <el-input v-model="form.answer" maxlength="1000"></el-input>
+      </el-form-item>
+      <el-form-item label="闄勪欢锛�"  prop="attachment">
+        <upload :fileUrl="form.contentUrl" :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile"/>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="submitForm">鎻愪氦</el-button>
@@ -19,14 +22,27 @@
 <script>
 import { mapGetters, mapState, mapActions } from 'vuex'
 import questionAnswerApi from '@/api/questionAnswer'
+import Upload from '@/components/UploadC'
 
 export default {
+  components: { Upload },
+  computed: {
+    fileContentUrl: () => {
+      return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : [];
+    }
+  },
   data () {
     return {
       form: {
         id: null,
         question: '',
-        answer: ''
+        answer: '',
+        contentType: 'file',
+        subject: '',
+        belongType: 2,
+        contentUrl: [],
+        attachment: '',
+        temp: []
       },
       formLoading: false,
       rules: {
@@ -45,17 +61,30 @@
     if (id && parseInt(id) !== 0) {
       _this.formLoading = true
       questionAnswerApi.query(id).then(re => {
-        _this.form = re.response
+        _this.form.id = re.response.id
+        _this.form.question = re.response.question
+        _this.form.answer = re.response.answer
+        _this.form.attachment = re.response.attachment ? re.response.attachment : ''
+        _this.form.contentUrl = re.response.attachment ? JSON.parse(re.response.attachment) : []
         _this.formLoading = false
       })
     }
   },
   methods: {
+    removeAttachmentFile(fileList, fileName) {
+      this.form.attachment = JSON.stringify(fileList.filter(item => item.name !== fileName));
+      this.form.contentUrl = fileList.filter(item => item.name !== fileName);
+    },
+    getUploadAttachmentUrl(uploadData) {
+      this.form.attachment = JSON.stringify(uploadData);
+      this.form.contentUrl = uploadData;
+    },
     submitForm () {
       let _this = this
       this.$refs.form.validate((valid) => {
         if (valid) {
           this.formLoading = true
+          
           questionAnswerApi.save(this.form).then(data => {
             if (data.code === 1) {
               _this.$message.success(data.message)
diff --git a/src/views/questionAnswer/list.vue b/src/views/questionAnswer/list.vue
index 0910646..5309804 100644
--- a/src/views/questionAnswer/list.vue
+++ b/src/views/questionAnswer/list.vue
@@ -17,6 +17,13 @@
     <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
       <el-table-column prop="question" label="闂" />
       <el-table-column prop="answer" label="鍥炵瓟" />
+      <el-table-column prop="attachment" label="闄勪欢" show-overflow-tooltip>
+        <template slot-scope="scope">
+          <div v-for="item in getUrl(scope.row.attachment)" :key="item.url">
+            <el-link :underline="false" type="primary" :href="'/api/upload/download?url=' + item.url +'&fileName=' + item.name" >{{ item.name }}</el-link>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="鐘舵��" prop="status" width="70px">
         <template slot-scope="{row}">
           <el-tag :type="row.status !== '鍚敤' ? 'danger' : 'success'">
@@ -67,6 +74,9 @@
     this.search()
   },
   methods: {
+    getUrl(urlJson) {
+      return urlJson ? JSON.parse(urlJson) : [];
+    },
     search() {
       this.listLoading = true
       questionAnswerApi.pageList(this.queryParam).then(data => {
diff --git a/src/views/user/UserConditionExamine/list.vue b/src/views/user/UserConditionExamine/list.vue
new file mode 100644
index 0000000..72fc162
--- /dev/null
+++ b/src/views/user/UserConditionExamine/list.vue
@@ -0,0 +1,180 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParam" ref="queryForm" :inline="true">
+      <el-form-item label="鐢ㄦ埛鍚嶏細">
+        <el-input v-model="queryParam.userName"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <div style="display: flex">
+          <el-button type="primary" @click="search()">鏌ヨ</el-button>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
+      <el-table-column prop="userName" label="鐢ㄦ埛" />
+      <el-table-column prop="targetCondition" label="鐢宠鐘舵��" />
+      <el-table-column prop="sourceCondition" label="褰撳墠鐘舵��" />
+      <el-table-column prop="reason" label="璋冨姩鍘熷洜"  show-overflow-tooltip/>
+      <el-table-column prop="attachment" label="闄勪欢" show-overflow-tooltip>
+        <template slot-scope="scope">
+          <div v-for="item in getUrl(scope.row.attachment)" :key="item.url">
+            <el-link :underline="false" type="primary" :href="'/api/upload/download?url=' + item.url +'&fileName=' + item.name" >{{ item.name }}</el-link>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="result" label="瀹℃牳缁撴灉" width="90px" align="center">
+        <template slot-scope="{row}">
+          <el-tag :type="row.result === '瀹℃牳閫氳繃' ? 'success' : row.result === '瀹℃牳椹冲洖' ? 'danger' : 'info'">{{row.result}}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="remark" label="瀹℃牳鎰忚" show-overflow-tooltip />
+      <el-table-column prop="createUserName" label="鍒涘缓浜�" />
+      <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="160px" />
+      <el-table-column label="鎿嶄綔" align="center" v-if="!deptAdmin()">
+        <template slot-scope="{row}">
+          <el-button v-if="row.result === '寰呭鏍�'" type="primary" size="mini" @click="transposition(row)" class="link-left">瀹℃牳</el-button>
+          <el-popconfirm title="纭鍒犻櫎" @confirm="deleteUser(row)">
+            <el-button slot="reference" size="mini" type="danger" class="link-left">鍒犻櫎</el-button>
+          </el-popconfirm>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
+      @pagination="search" />
+
+    <!-- 瀹℃牳寮圭獥 -->
+    <el-dialog :visible.sync="statusVisible" append-to-body :show-close="false" center width="400px">
+      <el-radio-group v-model="user.result">
+        <el-radio label="瀹℃牳閫氳繃">閫氳繃</el-radio>
+        <el-radio label="瀹℃牳椹冲洖">椹冲洖</el-radio>
+      </el-radio-group>
+      <el-input type="textarea" maxlength="100" show-word-limit :autosize="{ minRows: 4 }" :rows="2"
+        v-model="user.remark" placeholder="璇疯緭鍏ュ鏍告剰瑙�" style="margin-top: 30px;"></el-input>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="statusConfirm">纭� 瀹�</el-button>
+        <el-button @click="statusVisible = false">鍙� 娑�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import UserConditionExamineApi from '@/api/UserConditionExamine'
+import Pagination from '@/components/Pagination'
+import { mapGetters, mapState } from 'vuex'
+
+export default {
+  components: { Pagination },
+  data() {
+    return {
+      user: {},
+      statusVisible: false,
+      fileList: [],
+      queryParam: {
+        userName: '',
+        role: 1,
+        pageIndex: 1,
+        pageSize: 10
+      },
+      listLoading: true,
+      tableData: [],
+      total: 0,
+    }
+  },
+  created() {
+    this.search()
+  },
+  methods: {
+    getUrl(urlJson) {
+      return urlJson ? JSON.parse(urlJson) : [];
+    },
+    deptAdmin() {
+      return sessionStorage.getItem('deptAdmin') === '1'
+    },
+    transposition(user) {
+      this.statusVisible = true;
+      this.user = { ...user };
+    },
+    statusConfirm() {
+      if (this.user.result === "寰呭鏍�") {
+        this.$message.error("璇烽�夋嫨瀹℃牳缁撴灉")
+        return
+      }
+      UserConditionExamineApi.audit(this.user).then(res => {
+        if (res.code === 1) {
+          this.$message.success("鎿嶄綔鎴愬姛")
+          this.statusVisible = false;
+          this.search()
+        } else {
+          this.$message.error("鎿嶄綔澶辫触")
+        }
+      })
+    },
+    search() {
+      this.listLoading = true
+      UserConditionExamineApi.list(this.queryParam).then(data => {
+        const re = data.response
+        this.tableData = re.list
+        this.total = re.total
+        this.queryParam.pageIndex = re.pageNum
+        this.listLoading = false
+      })
+    },
+    changeStatus(row) {
+      let _this = this
+      userApi.changeStatus(row.id).then(re => {
+        if (re.code === 1) {
+          row.status = re.response
+          _this.$message.success(re.message)
+        } else {
+          _this.$message.error(re.message)
+        }
+      })
+    },
+    deleteUser(row) {
+      let _this = this
+      UserConditionExamineApi.delete(row.id).then(re => {
+        if (re.code === 1) {
+          _this.search()
+          _this.$message.success(re.message)
+        } else {
+          _this.$message.error(re.message)
+        }
+      })
+    },
+    levelFormatter(row, column, cellValue, index) {
+      return this.enumFormat(this.levelEnum, cellValue)
+    },
+    sexFormatter(row, column, cellValue, index) {
+      return this.enumFormat(this.sexEnum, cellValue)
+    },
+    statusFormatter(status) {
+      return this.enumFormat(this.statusEnum, status)
+    },
+    statusTagFormatter(status) {
+      return this.enumFormat(this.statusTag, status)
+    },
+    statusBtnFormatter(status) {
+      return this.enumFormat(this.statusBtn, status)
+    }
+  },
+  computed: {
+    ...mapGetters('enumItem', [
+      'enumFormat'
+    ]),
+    ...mapState('enumItem', {
+      sexEnum: state => state.user.sexEnum,
+      statusEnum: state => state.user.statusEnum,
+      statusTag: state => state.user.statusTag,
+      statusBtn: state => state.user.statusBtn,
+      levelEnum: state => state.user.levelEnum
+    })
+  }
+}
+</script>
+<style lang="scss" scoped>
+.upload-demo {
+  margin-left: 5px;
+}
+</style>
diff --git a/src/views/user/departmentExamine/list.vue b/src/views/user/departmentExamine/list.vue
index 511e447..4d7b64b 100644
--- a/src/views/user/departmentExamine/list.vue
+++ b/src/views/user/departmentExamine/list.vue
@@ -12,9 +12,17 @@
     </el-form>
 
     <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
-      <el-table-column prop="userName" label="鐢ㄦ埛鍚�" />
-      <el-table-column prop="departmentName" label="閮ㄩ棬鍚嶇О" />
-      <el-table-column prop="nowDepartmentName" label="鍘熼儴闂ㄥ悕绉�" />
+      <el-table-column prop="userName" label="鐢ㄦ埛" />
+      <el-table-column prop="departmentName" label="璋冨姩閮ㄩ棬" />
+      <el-table-column prop="nowDepartmentName" label="鍘熼儴闂�" />
+      <el-table-column prop="reason" label="璋冨姩鍘熷洜"  show-overflow-tooltip/>
+      <el-table-column prop="attachment" label="闄勪欢" show-overflow-tooltip>
+        <template slot-scope="scope">
+          <div v-for="item in getUrl(scope.row.attachment)" :key="item.url">
+            <el-link :underline="false" type="primary" :href="'/api/upload/download?url=' + item.url +'&fileName=' + item.name" >{{ item.name }}</el-link>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column prop="result" label="瀹℃牳缁撴灉" width="90px" align="center">
         <template slot-scope="{row}">
           <el-tag :type="row.result === '瀹℃牳閫氳繃' ? 'success' : row.result === '瀹℃牳椹冲洖' ? 'danger' : 'info'">{{row.result}}</el-tag>
@@ -23,7 +31,7 @@
       <el-table-column prop="remark" label="瀹℃牳鎰忚" show-overflow-tooltip />
       <el-table-column prop="createUserName" label="鍒涘缓浜�" />
       <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="160px" />
-      <el-table-column label="鎿嶄綔" align="center" v-if="isDeptAdmin()">
+      <el-table-column label="鎿嶄綔" align="center" v-if="!deptAdmin()">
         <template slot-scope="{row}">
           <el-button v-if="row.result === '寰呭鏍�'" type="primary" size="mini" @click="transposition(row)" class="link-left">瀹℃牳</el-button>
           <el-popconfirm title="纭鍒犻櫎" @confirm="deleteUser(row)">
@@ -78,16 +86,19 @@
     this.search()
   },
   methods: {
-    isDeptAdmin() {
-      return sessionStorage.getItem('deptAdmin') !== '1'
+    getUrl(urlJson) {
+      return urlJson ? JSON.parse(urlJson) : [];
+    },
+    deptAdmin() {
+      return sessionStorage.getItem('deptAdmin') === '1'
     },
     transposition(user) {
       this.statusVisible = true;
       this.user = { ...user };
     },
     statusConfirm() {
-      if (this.user.result === null) {
-        this.$message.error("璇烽�夋嫨鐘舵��")
+      if (this.user.result === "寰呭鏍�") {
+        this.$message.error("璇烽�夋嫨瀹℃牳缁撴灉")
         return
       }
       departmentExamineApi.audit(this.user).then(res => {
diff --git a/src/views/user/student/list.vue b/src/views/user/student/list.vue
index dd4f531..38fcd86 100644
--- a/src/views/user/student/list.vue
+++ b/src/views/user/student/list.vue
@@ -20,7 +20,6 @@
            :file-list="fileList"
            :before-upload="beforeAvatarUpload">
            <el-button type="primary">瀵煎叆</el-button>
-           <!--          <div slot="tip" class="el-upload__tip">鍙兘涓婁紶Excel鏂囦欢</div>-->
          </el-upload>
        </div>
       </el-form-item>
@@ -40,7 +39,6 @@
           <el-tag :type="row.condition == '姝e父' || row.condition == null  ? 'success' : 'warning'">{{ row.condition ? row.condition : '姝e父' }}</el-tag>
         </template>
       </el-table-column>
-      <el-table-column prop="conditionDetail" label="鍏蜂綋鎯呭喌" :show-overflow-tooltip="true"/>
       <el-table-column prop="sex" label="鎬у埆" width="60px;" :formatter="sexFormatter"/>
       <el-table-column prop="phone" label="鎵嬫満鍙�" width="120"/>
       <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="160px"/>
@@ -51,9 +49,9 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column width="400px" label="鎿嶄綔" fixed="right" align="center">
+      <el-table-column :width="deptAdmin() ? '310px' : '400px'" label="鎿嶄綔" fixed="right" align="center">
         <template slot-scope="{row}">
-          <el-button size="mini"  @click="changeStatus(row)" class="link-left">
+          <el-button size="mini" v-if="!deptAdmin()" @click="changeStatus(row)" class="link-left">
             {{ statusBtnFormatter(row.status) }}
           </el-button>
           <router-link :to="{path:'/user/student/edit', query:{id:row.id}}" class="link-left">
@@ -64,7 +62,9 @@
           </router-link>
           <el-button  size="mini" @click="status(row)" class="link-left">鐘舵��</el-button>
           <el-button type="primary" size="mini" @click="transposition(row)" class="link-left">璋冨姩</el-button>
-          <el-button  size="mini" type="danger" @click="deleteUser(row)" class="link-left">鍒犻櫎</el-button>
+          <el-popconfirm title="纭鍒犻櫎鍚�" @confirm="deleteUser(row)">
+            <el-button v-if="!deptAdmin()" slot="reference" size="mini" type="danger" class="link-left">鍒犻櫎</el-button>
+          </el-popconfirm>
         </template>
       </el-table-column>
     </el-table>
@@ -72,14 +72,15 @@
                 @pagination="search"/>
 
     <!-- 鐘舵�佸脊绐� -->
-    <el-dialog :visible.sync="statusVisible" append-to-body :close-on-click-modal="false" :show-close="false" center width="400px">
-      <el-radio-group v-model="user.condition">
+    <el-dialog :visible.sync="statusVisible" append-to-body :show-close="false" center width="400px">
+      <el-radio-group v-model="conditionExamine.targetCondition">
         <el-radio label="姝e父">姝e父</el-radio>
         <el-radio label="鐥呭亣">鐥呭亣</el-radio>
         <el-radio label="鍑哄樊">鍑哄樊</el-radio>
         <el-radio label="鍏朵粬">鍏朵粬</el-radio>
       </el-radio-group>
-      <el-input type="textarea" maxlength="100" show-word-limit :autosize="{ minRows: 4}" :rows="2" v-model="user.conditionDetail" placeholder="璇疯緭鍏ヨ缁嗘儏鍐�" style="margin-top: 30px;"></el-input>
+      <el-input type="textarea" maxlength="100" show-word-limit :autosize="{ minRows: 4}" :rows="2" v-model="conditionExamine.reason" placeholder="璇疯緭鍏ヨ缁嗘儏鍐�" style="margin-top: 30px;"></el-input>
+      <upload :fileUrl="conditionExamine.contentUrl" :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getConditionUploadAttachmentUrl" @removeFile="removeConditionAttachmentFile" style="margin-top: 30px;"/>
       <span slot="footer" class="dialog-footer">
         <el-button type="primary" @click="statusConfirm">纭� 瀹�</el-button>
         <el-button @click="statusVisible = false">鍙� 娑�</el-button>
@@ -99,6 +100,8 @@
           :value="item.id">
         </el-option>
       </el-select>
+      <el-input type="textarea" maxlength="100" show-word-limit :autosize="{ minRows: 4}" :rows="2" v-model="examine.reason" placeholder="璇疯緭鍏ユ儏鍐佃鏄�" style="margin-top: 30px;"></el-input>
+      <upload :fileUrl="examine.contentUrl" :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile" style="margin-top: 30px;"/>
       <span slot="footer" class="dialog-footer">
         <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
         <el-button type="primary" @click="submitExamine">纭� 瀹�</el-button>
@@ -112,9 +115,15 @@
 import Pagination from '@/components/Pagination'
 import userApi from '@/api/user'
 import departmentExamineApi from '@/api/departmentExamine'
+import Upload from '@/components/UploadC'
 
 export default {
-  components: { Pagination },
+  components: { Pagination, Upload },
+  computed: {
+    fileContentUrl: () => {
+      return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : [];
+    }
+  },
   data () {
     return {
       user:{},
@@ -135,6 +144,17 @@
         departmentId: [],
         departmentIds: '',
         nowDepartmentIds: '',
+        contentUrl: [],
+        attachment: ''
+      },
+      conditionExamine: {
+        userId: '',
+        targetCondition: '',
+        sourceCondition: '',
+        reason: '',
+        result: 0,
+        contentUrl: [],
+        attachment: ''
       },
       title: '閮ㄩ棬璋冨姩',
       dialogVisible: false,
@@ -145,6 +165,25 @@
     this.search()
   },
   methods: {
+    deptAdmin() {
+      return sessionStorage.getItem('deptAdmin') === '1'
+    },
+    removeAttachmentFile(fileList, fileName) {
+      this.examine.attachment = JSON.stringify(fileList.filter(item => item.name !== fileName));
+      this.examine.contentUrl = fileList.filter(item => item.name !== fileName);
+    },
+    getUploadAttachmentUrl(uploadData) {
+      this.examine.attachment = JSON.stringify(uploadData);
+      this.examine.contentUrl = uploadData;
+    },
+    removeConditionAttachmentFile(fileList, fileName) {
+      this.conditionExamine.attachment = JSON.stringify(fileList.filter(item => item.name !== fileName));
+      this.conditionExamine.contentUrl = fileList.filter(item => item.name !== fileName);
+    },
+    getConditionUploadAttachmentUrl(uploadData) {
+      this.conditionExamine.attachment = JSON.stringify(uploadData);
+      this.conditionExamine.contentUrl = uploadData;
+    },
     submitExamine() {
       this.examine.departmentIds = this.examine.departmentId.join(',')
       departmentExamineApi.save(this.examine).then(res => {
@@ -172,14 +211,15 @@
     },
     status(user) {
       this.statusVisible = true;
-      this.user = { ...user };
+      this.conditionExamine.sourceCondition = user.condition ? user.condition : '0';
+      this.conditionExamine.userId = user.id
     },
     statusConfirm() {
-      if (this.user.condition === null) {
+      if (this.conditionExamine.targetCondition === null) {
         this.$message.error("璇烽�夋嫨鐘舵��")
         return
       }
-      userApi.setStatus(this.user).then(res => {
+      userApi.setStatus(this.conditionExamine).then(res => {
         if (res.code === 1) {
           this.$message.success("鎿嶄綔鎴愬姛")
           this.statusVisible = false;
@@ -208,17 +248,6 @@
         this.$message.warning('鏂囦欢鏍煎紡涓嶅锛屼粎闄恱ls鍜寈lsx')
         return false
       }
-      // console.log(file)
-      // const isJPG = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
-      // // const isLt2M = file.size / 1024 / 1024 < 2;
-      //
-      // if (!isJPG) {
-      //   this.$message.error('涓婁紶鏂囦欢鍙兘鏄疎xcel!');
-      // }
-      // // if (!isLt2M) {
-      // //   this.$message.error('涓婁紶澶村儚鍥剧墖澶у皬涓嶈兘瓒呰繃 2MB!');
-      // // }
-      // return isJPG ;
     },
     search () {
       this.listLoading = true

--
Gitblit v1.8.0