xjc преди 4 години
родител
ревизия
c7805ace3c
променени са 5 файла, в които са добавени 126 реда и са изтрити 10 реда
  1. 8 0
      src/api.js
  2. 1 1
      src/views/message/InnerSurvey.vue
  3. 44 0
      src/views/message/MessageAnalyse.vue
  4. 54 5
      src/views/message/modelForm.vue
  5. 19 4
      src/views/message/templateList.vue

+ 8 - 0
src/api.js

@@ -181,6 +181,14 @@ export default {
 			params: params, responseType: "blob"
 		});
 	},
+	downloadAnalyseAll:params => {
+		return axios.get(`${baseURL}/api/admin/message/survey/result/download/all`, {
+			params: params, responseType: "blob"
+		});
+	},
+	downloadAnalyseItem:params => {
+		return axios.post(`${baseURL}/api/admin/message/survey/result/download/item`,params,{responseType:"blob"});
+	},
 	// 通知管理
 	addNotice: params => {
 		return axios.post(`${baseURL}/api/admin/message/notice`, params);

+ 1 - 1
src/views/message/InnerSurvey.vue

@@ -516,7 +516,7 @@ export default {
           this.$router.push({path:'/message/innerSurvey/analyse',query:{id:row.id,type:row.type}})
     },
     downloadExcel(){
-      this.$api.downloadSurveyResult({message_id:this.cur_message_id,type:this.cur_post_type}).then((res)=>{
+      this.$api.downloadAnalyseAll({message_id:this.cur_message_id,type:this.cur_post_type}).then((res)=>{
           var elink = document.createElement('a');
           let blob=new Blob([res.data], {type: 'application/vnd.ms-excel,charset=UTF-8'});
           let objUrl=URL.createObjectURL(blob);

+ 44 - 0
src/views/message/MessageAnalyse.vue

@@ -20,6 +20,10 @@
     .title-type{
       margin-left:10px;
     }
+    .title-download{
+      color:#409EFF;
+      cursor: pointer;
+    }
   }
   .item-content{
     // margin-left:60px;
@@ -38,11 +42,15 @@
   <section>
     <p><span>信息管理></span>问卷统计</p>
     <div class="content">
+      <div class="download-all" style="display:inline-block;float:right;">
+        <el-button type="primary" icon="el-icon-download" size="mini" @click="downloadAll">导出excel</el-button>
+      </div>
       <div class='item' v-for='(item,index) in results' :key='index'>
         <div class='item-title'>
           <span class='title-num'>第{{index+1}}题:</span>
           <span class='title-header'>{{item.label}}</span>
           <span class='title-type'>{{item.type|getType}}</span>
+          <span class="title-download" @click="downloadItem(item)">导出Excel</span>
         </div>
         <div class='item-content' v-if='item.type=="input"||item.type=="textarea"'>
           【答案】:<span v-for="(item1,index) in item.result" :key="index">{{item1}}{{index==item.result.length-1?'':"、"}}</span>
@@ -96,6 +104,42 @@ export default {
   },
   
   methods: {
+    downloadAll(){
+      let message_id = this.$route.query.id
+      let type = this.$route.query.type
+      this.$api.downloadAnalyseAll({message_id:message_id,type:type}).then((res)=>{
+          var elink = document.createElement('a');
+          let blob=new Blob([res.data], {type: 'application/vnd.ms-excel,charset=UTF-8'});
+          let objUrl=URL.createObjectURL(blob);
+          let file_name=decodeURIComponent(res.headers['content-disposition'].split('=')[1]);
+          console.log(file_name)
+          elink.download = file_name;
+          elink.style.display = 'none';                
+          elink.href = objUrl;
+          document.body.appendChild(elink);
+          elink.click();
+          document.body.removeChild(elink);      
+          this.download_loading = false;
+      })
+    },
+    downloadItem(item){
+      let message_id = this.$route.query.id
+      let type = this.$route.query.type
+      this.$api.downloadAnalyseItem({message_id:message_id,type:type,item:item.label}).then((res)=>{
+          var elink = document.createElement('a');
+          let blob=new Blob([res.data], {type: 'application/vnd.ms-excel,charset=UTF-8'});
+          let objUrl=URL.createObjectURL(blob);
+          let file_name=decodeURIComponent(res.headers['content-disposition'].split('=')[1]);
+          console.log(file_name)
+          elink.download = file_name;
+          elink.style.display = 'none';                
+          elink.href = objUrl;
+          document.body.appendChild(elink);
+          elink.click();
+          document.body.removeChild(elink);      
+          this.download_loading = false;
+      })
+    },
     getData() {
       let message_id = this.$route.query.id
       let type = this.$route.query.type

+ 54 - 5
src/views/message/modelForm.vue

@@ -222,7 +222,7 @@
                         </section>
                         <section v-if="item.type=='radio'">
                             <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input>
-                            <el-radio-group v-model="radio">
+                            <el-radio-group>
                                 <el-radio :label="iitem.label" v-for="(iitem,index) in item.items" :key="index">
                                     <el-input :readonly="item.edit" v-model="iitem.label" :class="item.edit?'edit_label':''"></el-input>
                                     <template v-if="!item.edit">
@@ -238,7 +238,7 @@
                         </section>
                         <section v-if="item.type=='checkbox'">
                             <el-input :readonly="item.edit" v-model="item.label" :class="item.edit?'edit_label':''"></el-input>
-                            <el-radio-group v-model="radio">
+                            <el-radio-group>
                                 <el-checkbox :label="iitem.label" v-for="(iitem,index) in item.items" :key="index">
                                     <el-input :readonly="item.edit" v-model="iitem.label" :class="item.edit?'edit_label':''"></el-input>
                                     <template v-if="!item.edit">
@@ -333,7 +333,7 @@
                             </el-upload>
                         </el-form-item>  
                         <el-form-item  v-if="this.widgetList.length">
-                            <el-button size="medium" type="primary" @click="dialogVisible = false">提交</el-button>
+                            <el-button size="medium" type="primary" @click="dialogVisible = false" style="width:100%;margin-top:20px;">提交</el-button>
                         </el-form-item>
                     </el-form>
                 </div>
@@ -387,12 +387,61 @@ components: {vuedraggable},
     }
   },
   methods:{
+        unique(arr){
+            var x = new Set(arr);
+            return [...x];
+        },
         save(){
             let id = this.$route.query.id;
+            let widgets = Array.from(this.widgetList);
+            let flag = 0;
+            let labels = []
+            widgets.forEach((item,index)=>{
+                labels.push(item.label)
+            })
+            if(labels.length!=this.unique(labels).length){
+                flag = 1
+                this.$alert("题干不能相同请仔细检查数据!","数据错误",{
+                    confirmButtonText:"确定",
+                    type:"error"
+                })
+                return false
+            }
+            widgets.forEach((item,index)=>{
+                if(item.label==""){
+                    flag = 2
+                }
+                if(item.type=="radio"||item.type=="checkbox"){
+                    let item_labels = []
+                    item.items.forEach((obj,index)=>{
+                        item_labels.push(obj.label)
+                    })
+                    if(item_labels.length!=this.unique(item_labels).length){
+                        flag = 3
+                    }
+                    
+                }
+            })
+            if(flag==2){
+                this.$alert("题干不能为空请仔细检查数据!","数据错误",{
+                    confirmButtonText:"确定",
+                    type:"error"
+                })
+                return false
+            }
+            if(flag==3){
+                this.$alert("选择题选项不能相同请仔细检查数据!","数据错误",{
+                    confirmButtonText:"确定",
+                    type:"error"
+                })
+                return false
+            }
+
             let params = {
                     name:this.title,
-                    widget:JSON.stringify(this.widgetList)
+                    widget:JSON.stringify(widgets)
                 }
+            console.log(widgets,22222222222)
             if(id){
                 params.id = id;
                 this.$api.editTemplate(params).then(res=>{
@@ -508,7 +557,7 @@ components: {vuedraggable},
             }
         },
         del(id){
-                this.$confirm('确定删除吗', '提示', {
+                this.$confirm('确定删除吗?', '提示', {
                         type: 'warning'
                     }).then(() => {
                     this.$api.deleteEnterprise({id:id}).then((res)=>{

+ 19 - 4
src/views/message/templateList.vue

@@ -58,13 +58,13 @@
         <el-dialog
         :title="dialogTitle" :close-on-click-modal='false'
         :visible.sync="dialogVisible">
-        <el-form size="small" class="preview" :inline='false' label-width="80px">
-                <el-form-item label="模板名称">
+        <el-form ref="form1" size="small" class="preview" :inline='false' label-width="80px" :rules="rules" :model="form1">
+                <el-form-item label="模板名称" prop="name">
                     <el-input v-model="form1.name" placeholder="请输入模板名称"></el-input>
                 </el-form-item>
         </el-form>
         <span slot="footer" class="dialog-footer">
-            <el-button size="small" type="primary" @click="$router.push({path:'/message/template/add',query:{title:form1.name,id:form1.id}})">确 定</el-button>
+            <el-button size="small" type="primary" @click="addTtitle">确 定</el-button>
         </span>
         </el-dialog>
     </section>
@@ -88,9 +88,17 @@ export default {
       dialogTitle:"",
       defaultProps:{},
       data: [],
+      rules:{name: [{ required: true, message: "请输入标题", trigger: "blur" }]}
     }
   },
   methods:{
+        addTtitle(){
+            this.$refs["form1"].validate((valid) => {
+                if(valid){
+                    this.$router.push({path:'/message/template/add',query:{title:this.form1.name,id:this.form1.id}})
+                }
+            })
+        },
         search(){
             let parm = this.form
             this.getData()
@@ -110,7 +118,7 @@ export default {
             this.dialogVisible = true;
         },
         del(id){
-                this.$confirm('确定删除吗', '提示', {
+                this.$confirm('删除模板与模板相关联的消息会被一起删除,确定删除吗', '提示', {
                         type: 'warning'
                     }).then(() => {
                     this.$api.delTemplate({id:id}).then((res)=>{
@@ -122,6 +130,13 @@ export default {
                     })
                 })
         },
+        gopage(size){
+            if(size){
+                this.form.page_size=size
+            }
+            this.form.page=this.$refs.pageButton.page
+            this.getData()
+        },
   },
   created(){
       this.getData()