xjc 4 年之前
父节点
当前提交
5024d95e06
共有 3 个文件被更改,包括 214 次插入29 次删除
  1. 6 0
      src/api.js
  2. 1 1
      src/views/Home.vue
  3. 207 28
      src/views/message/Message.vue

+ 6 - 0
src/api.js

@@ -156,6 +156,12 @@ export default {
 	delMessageInfo:params => {
 		return axios.delete(`${baseURL}/api/admin/message`, {params:params});
 	},
+	uploadFile: params => {
+		return axios.post(`${baseURL}/api/admin/uploadfile`, params);
+	},
+	saveSurveyResult:params => {
+		return axios.post(`${baseURL}/api/admin/message/survey/result`, params);
+	},
 	// 会议相关
 	getCityList:params => {
 		return axios.get(`${baseURL}/api/admin/common/city`, {params:params});

+ 1 - 1
src/views/Home.vue

@@ -6,7 +6,7 @@
 	<el-container>
 		<el-header>
 			<div class="header">
-				<img class="logo" src="../assets/logo.png" alt="">
+				<!-- <img class="logo" src="../assets/logo.png" alt=""> -->
 				期刊微信公众号管理系统
 			</div>	
 			<div class="nav">

+ 207 - 28
src/views/message/Message.vue

@@ -10,6 +10,59 @@
     .el-cascader{
         width:100%;
     }
+    a{
+        text-decoration: none;
+        color:#409EFF;
+    }
+    // 右边
+    .item-main{
+        // margin:34px;
+        // height:600px;
+        // background: #FFFFFF;
+        border: 1px solid #DDDDDD;
+        box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
+        border-radius: 20px; 
+        .el-form.over_y{
+            max-height:calc( 100vh - 340px);
+        }
+        /deep/.el-form-item__label{
+            float: none;
+        }
+    }
+    // label样式
+    .edit_label {
+        /deep/.el-input__inner{
+            background:#F5FAFF;
+            border:0px;
+            padding:0px;
+        }
+    }
+    /deep/.opicon{
+        font-weight: bold;
+        padding:5px;
+        color:#3895FE;
+    }
+    .tpl_title{
+        font-size: 18px;
+        margin-bottom:20px;
+    }
+    .tpl_form{
+        margin:20px;
+        border:1px solid #ccc;
+        border-radius: 20px;
+        /deep/.el-form-item{
+            background:none;
+        }
+        /deep/.el-form-item__content{
+            width:100%;
+        }
+    }
+    .survey_logo{
+        position: relative;
+        top:15px;
+        left: 20px;
+    }
+    
 </style>
 <template>
     <section>
@@ -40,6 +93,32 @@
                     label="标题">
                     </el-table-column>
                     <el-table-column
+                    prop="name"  
+                    label="附件">
+                        <template slot-scope="scope">
+                            <a :href="scope.row.fileurl" target="_blank"><span>{{scope.row.filename}}</span></a>
+                        </template>
+                    </el-table-column>
+                    <el-table-column
+                    prop="cname"  
+                    label="是否问卷">
+                        <template slot-scope="scope">
+                            <a @click="showSurvey(scope.row)" target="_blank"><span>查看问卷</span></a>
+                            <a v-if="scope.row.template_qrcode" :href="scope.row.template_qrcode" target="_blank"><span> | 生成二维码</span></a>
+                        </template>
+                    </el-table-column>
+                    <el-table-column
+                    prop="cname"  
+                    label="问卷统计">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.receiver_ids">共统计:
+                                <a target="_blank"><span>{{scope.row.receiver_ids.length}}</span></a>人<br>
+                            </span>
+                            已完成:<a :href="scope.row.fileurl" target="_blank"><span>生成二维码</span></a>人<br>
+                            <span v-if="scope.row.receiver_ids">未完成:<a :href="scope.row.fileurl" target="_blank"><span>生成二维码</span></a>人<br></span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column
                     prop="cname"  
                     label="发送者">
                     </el-table-column>
@@ -66,8 +145,8 @@
         <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 size="small" class="preview" :inline='false' label-width="80px" :model="form1" ref="form1" :rules="rules">
+                <el-form-item label="标题" prop="name">
                     <el-input v-model="form1.name" placeholder="请输入标题"></el-input>
                 </el-form-item>
                 <el-form-item label="接收人">
@@ -92,7 +171,7 @@
                     </el-cascader>
                 </el-form-item>
                 <el-form-item label="问卷模板">
-                    <el-select placeholder="请选择问卷模板" v-model="form1.template_id">
+                    <el-select placeholder="请选择问卷模板" v-model="form1.template_id" clearable>
                         <el-option
                             v-for="(item, index) in templateList"
                             :key="index"
@@ -101,11 +180,60 @@
                         ></el-option>
                     </el-select>
                 </el-form-item>
+                <el-form-item label="附件">
+                     <input @change="upload('fileurl')" id='fileurl' type="file">
+                     <a :href="form1.fileurl" target="_blank"><span>{{form1.filename}}</span></a>
+                </el-form-item>
         </el-form>
         <span slot="footer" class="dialog-footer">
             <el-button size="small" type="primary" @click="save">确 定</el-button>
         </span>
         </el-dialog>
+        <!-- 问卷调查表单 -->
+        <el-dialog
+        :title="dialogTitle" :close-on-click-modal='false'
+        :visible.sync="dialogVisible1">
+            <div class='item-main'>
+                    <img src="../../assets/survey_logo.png" alt="" class="survey_logo">
+                    <h5 align='center' class="tpl_title">{{title}}</h5>
+                    <el-form ref="form" :model="form2" class="tpl_form over_y">
+                        <el-form-item v-for="(item,index) in widgetList" :key="index" :label="item.label">
+                            <el-input v-if="item.type=='input'" v-model="form2[item.label]" :placeholder="item.placeholder"></el-input>
+                            <el-input v-if="item.type=='textarea'" type="textarea" v-model="form2[item.label]" :placeholder="item.placeholder"></el-input>
+                            <el-radio-group v-if="item.type=='radio'" v-model="form2[item.label]">
+                                <el-radio :label="iitem.label" v-for="(iitem,index) in item.items" :key="index">{{iitem.label}}</el-radio>
+                            </el-radio-group>
+                            <el-radio-group v-if="item.type=='checkbox'" v-model="form2[item.label]">
+                                <el-checkbox :label="iitem.label" v-for="(iitem,index) in item.items" :key="index">{{iitem.label}}</el-checkbox>
+                            </el-radio-group>
+                            <el-upload
+                                v-if="item.type=='image'"
+                                action="https://jsonplaceholder.typicode.com/posts/"
+                                list-type="picture-card"
+                                :on-preview="handlePictureCardPreview"
+                                :on-remove="handleRemove">
+                                <i class="el-icon-plus"></i>
+                            </el-upload>
+                            <el-upload
+                                v-if="item.type=='file'"
+                                class="upload-demo"
+                                ref="upload"
+                                action="https://jsonplaceholder.typicode.com/posts/"
+                                :on-preview="handlePreview"
+                                :on-remove="handleRemove"
+                                :file-list="fileList"
+                                :auto-upload="false">
+                                <!-- <el-button slot="trigger" size="small" type="primary">选取文件</el-button> -->
+                                <el-button style="margin-left: 10px;" size="small" type="primary" plain @click="submitUpload">添加文件</el-button>
+                                <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
+                            </el-upload>
+                        </el-form-item>  
+                        <el-form-item  v-if="this.widgetList.length">
+                            <el-button size="medium" type="primary" @click="saveResult" style="width:100%;">提交</el-button>
+                        </el-form-item>
+                    </el-form>
+                </div>
+        </el-dialog>
     </section>
 </template>
 <script>
@@ -116,18 +244,26 @@ export default {
   },
   data(){
     return{
+      widgetList:[],
       form:{name:'',page:1,page_size:20},
       form1:{},
+      form2:{},
       total:1,
       list:[{name:'2333'}],
       loading:false,
       input:'',
       dialogVisible:false,
+      dialogVisible1:false,
       dialogTitle:"",
       defaultProps:{},
       data: [],
       templateList:[],
       userList:[],
+      rules: {
+          name: [
+            { required: true, message: '请输入标题', trigger: 'blur' }
+          ]
+      },
       props: { multiple: true },
         options: [{
           value: 1,
@@ -179,6 +315,30 @@ export default {
     }
   },
   methods:{
+        showSurvey(row){
+            this.title = row.name
+            this.message_id = row.id
+            this.$api.getTemplate({id:row.template_id}).then(res=>{
+                if(res.data.code==0){
+                    this.widgetList = res.data.data.widget;
+                    this.dialogVisible1 = true;
+                }
+            })
+        },
+        upload(type){
+            var file=document.getElementById(type).files;
+            var data=new FormData();
+                data.append("file",file[0])
+            this.$api.uploadFile(data).then(res=>{
+                if(res.data.code==0){
+                        this.$set(this.form1,type,res.data.data.url)
+                        this.$set(this.form1,"filename",res.data.data.name)
+                        this.$message({message: '上传成功!',type: 'success'});
+                    }else{
+                        this.$message.error(res.data.message);
+                    }
+            })
+        },
         handleChange(value){
             console.log(value)
         },
@@ -243,36 +403,55 @@ export default {
             this.form1.receiver_id = receiver_ids
             this.dialogVisible = true;
         },
+        saveResult(){
+            let parm = {
+                message_id:this.message_id,
+                result:this.form2
+            }
+            this.$api.saveSurveyResult(parm).then(res=>{
+                if(res.data.code==0){
+                    this.$message({
+                        type:"success",
+                        message:"保存成功!"
+                    })
+                }else{
+                    this.$message.error("保存失败!");
+                }
+            })
+        },
         save(){
-            let parm = this.form1
-            let id = this.form1.id
-            parm.receiver_id = JSON.stringify(parm.receiver_id)
-            if(id){
-                this.$api.editMessage(parm).then(res=>{
-                    if(res.data.code==0){
-                        this.$message({
-                            type:"success",
-                            message:"保存成功!"
+            this.$refs["form1"].validate((valid)=>{
+                if(valid){
+                    let parm = this.form1
+                    let id = this.form1.id
+                    parm.receiver_id = JSON.stringify(parm.receiver_id)
+                    if(id){
+                        this.$api.editMessage(parm).then(res=>{
+                            if(res.data.code==0){
+                                this.$message({
+                                    type:"success",
+                                    message:"保存成功!"
+                                })
+                            }else{
+                                this.$message.error("保存失败!");
+                            }
                         })
                     }else{
-                        this.$message.error("保存失败!");
-                    }
-                })
-            }else{
-                this.$api.addMessage(parm).then(res=>{
-                    if(res.data.code==0){
-                        this.$message({
-                            type:"success",
-                            message:"保存成功!"
+                        this.$api.addMessage(parm).then(res=>{
+                            if(res.data.code==0){
+                                this.$message({
+                                    type:"success",
+                                    message:"保存成功!"
+                                })
+                            }else{
+                                this.$message.error("保存失败!");
+                            }
                         })
-                    }else{
-                        this.$message.error("保存失败!");
                     }
-                })
-            }
-            this.getData()
-            this.dialogVisible = false
-            
+                    this.getData()
+                    this.dialogVisible = false
+                }
+            })
         }
   },
   created(){