ソースを参照

Merge branch 'master' of http://118.190.145.217:3000/xiaojincai/zky-admin

tanyanfei 4 年 前
コミット
137eb56cf6

+ 6 - 0
src/api.js

@@ -102,6 +102,9 @@ export default {
 	editTemplate: params => {
 		return axios.put(`${baseURL}/api/admin/message/template`, params);
 	},
+	editTemplateStatus: params => {
+		return axios.put(`${baseURL}/api/admin/message/template/status`, params);
+	},
 	// 删除表单模板
 	delTemplate: params => {
 		return axios.delete(`${baseURL}/api/admin/message/template`, { params: params });
@@ -144,6 +147,9 @@ export default {
 	editMessage: params => {
 		return axios.put(`${baseURL}/api/admin/message`, params);
 	},
+	editMessageStatus: params => {
+		return axios.put(`${baseURL}/api/admin/message/status`, params);
+	},
 	getMessageList: params => {
 		return axios.get(`${baseURL}/api/admin/message/list`, { params: params });
 	},

BIN
src/assets/survey_bg.png


+ 8 - 0
src/style/home.scss

@@ -236,6 +236,14 @@ tbody{
 .el-dialog__footer{
 	text-align: center;
 }
+
 .w-e-text{
     min-height: 500px !important;
+}
+// 停用启用样式
+.open {
+	color: rgb(19, 206, 102);
+}
+.close {
+	color: red;
 }

+ 94 - 23
src/views/message/InnerSurvey.vue

@@ -20,12 +20,23 @@ a {
 .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;
+  background: #FFFFFF;
+  width: 356px;
+  height: 575px;
+  overflow: auto;
+  // border: 1px solid #ddd;
+  // display: none;
+  position: relative;
+  top: 24px;
+  left: 4px;
+  // box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
+  // border-radius: 20px;
   .el-form.over_y {
     max-height: calc(100vh - 340px);
+    overflow: visible;
+  }
+  .tpl_form{
+    border: none;
   }
   /deep/.el-form-item__label {
     float: none;
@@ -83,6 +94,16 @@ a {
     width: 100%;
   }
 }
+.survey_dialog{
+  .el-dialog{
+    // width:25%;
+    width: 400px;
+    height: 750px;
+    margin-top: 20px !important;
+    background: url("../../assets/survey_bg.png") no-repeat;
+    background-size:100% 100%;
+  }
+}
 </style>
 <template>
   <section>
@@ -145,14 +166,18 @@ a {
             <span v-if="scope.row.receiver_ids"
               >共统计:
               <a target="_blank" @click="analyseData('total', scope.row.id)"
-                ><span>{{ scope.row.receiver_ids?scope.row.receiver_ids.length:0 }}</span></a
+                ><span>{{
+                  scope.row.receiver_ids ? scope.row.receiver_ids.length : 0
+                }}</span></a
               >人<br />
             </span>
             已填报:<a
               :href="scope.row.fileurl"
               target="_blank"
               @click="analyseData('finish', scope.row.id)"
-              ><span>{{ scope.row.finish_ids?scope.row.finish_ids.length:0 }}</span></a
+              ><span>{{
+                scope.row.finish_ids ? scope.row.finish_ids.length : 0
+              }}</span></a
             >人<br />
             <span v-if="scope.row.receiver_ids">
               未填报:<a
@@ -177,10 +202,20 @@ a {
         </el-table-column>
         <el-table-column prop="zip" width="150" label="操作">
           <template slot-scope="scope">
+            <el-button
+              :class="scope.row.status == 1 ? 'close' : 'open'"
+              type="text"
+              @click="switchStatus(scope.row)"
+              >{{ scope.row.status == 1 ? "禁用" : "启用" }}</el-button
+            >
             <el-button class="edit" type="text" @click="edit(scope.row)"
               >编辑</el-button
             >
-            <el-button class="del" @click="del(scope.row.id)" type="text"
+            <el-button
+              v-if="scope.row.status == 0"
+              class="del"
+              @click="del(scope.row.id)"
+              type="text"
               >删除</el-button
             >
           </template>
@@ -235,6 +270,7 @@ a {
           <el-select
             placeholder="请选择问卷模板"
             v-model="form1.template_id"
+            :disabled="form1.edit"
             clearable
           >
             <el-option
@@ -261,6 +297,7 @@ a {
       :title="dialogTitle"
       :close-on-click-modal="false"
       :visible.sync="dialogVisible1"
+      class="survey_dialog" width="400px" 
     >
       <div class="item-main">
         <img src="../../assets/survey_logo.png" alt="" class="survey_logo" />
@@ -339,7 +376,8 @@ a {
               type="primary"
               @click="saveResult"
               style="width: 100%"
-              >提交</el-button
+              :disabled="form2.status==0"
+              >{{this.form2.status==1?"提交":"该问卷已禁用"}}</el-button
             >
           </el-form-item>
         </el-form>
@@ -559,6 +597,21 @@ export default {
     };
   },
   methods: {
+    switchStatus(row) {
+      if (row.status == 1) {
+        this.$confirm("确定禁用吗?", "提示", {
+          type: "warning",
+        }).then(() => {
+          this.$api.editMessageStatus({ id: row.id }).then((res) => {
+            row.status = res.data.data;
+          });
+        });
+      }else{
+        this.$api.editMessageStatus({ id: row.id }).then((res) => {
+          row.status = res.data.data;
+        });
+      }
+    },
     showQrcode(row) {
       this.dialogTitle4 = "生成二维码";
       this.dialogVisible4 = true;
@@ -572,7 +625,7 @@ export default {
     },
     downloadExcel() {
       this.$api
-        .downloadAnalyseAll({
+        .downloadSurveyResult({
           message_id: this.cur_message_id,
           type: this.cur_post_type,
         })
@@ -601,7 +654,7 @@ export default {
       this.dialogVisible3 = true;
     },
     analyseData(type, message_id) {
-      this.form1 = {}
+      this.form1 = {};
       let parm = this.form1;
       parm.type = type;
       parm.message_id = message_id;
@@ -626,15 +679,22 @@ export default {
       let _this = this;
       this.title = row.name;
       this.message_id = row.id;
-      this.widgetList = []
-      this.form2 = {}
+      this.widgetList = [];
+      this.form2 = {};
+      this.form2.status = row.status
       this.$api.getMessageInfo({ id: row.id }).then((res) => {
         if (res.data.code == 0) {
           this.widgetList = res.data.data.widget;
           this.widgetList.forEach((i) => {
             if (i.type == "checkbox") {
               //   _this.form2[i.label] = [] ;
-              _this.$set(_this.form2, i.label, []);
+              if (i.result) {
+                _this.$set(_this.form2, i.label, i.result);
+              } else {
+                _this.$set(_this.form2, i.label, []);
+              }
+            } else {
+              _this.$set(_this.form2, i.label, i.result);
             }
           });
           console.log(this.form2);
@@ -665,7 +725,18 @@ export default {
       this.getData();
     },
     search1() {
-      this.analyseData("total", this.cur_message_id);
+      let parm = this.form1;
+      let type = this.cur_post_type;
+      let message_id = this.cur_message_id;
+      parm.type = type;
+      parm.message_id = message_id;
+      this.dialogTitle2 = "统计结果";
+      this.dialogVisible2 = true;
+      this.$api.getMessageSurveyAnalyse(parm).then((res) => {
+        this.analyseDataList = res.data.data.list;
+        this.cur_message_id = message_id;
+        this.cur_post_type = type;
+      });
     },
     openDiag() {
       this.form1 = {};
@@ -712,15 +783,15 @@ export default {
       });
     },
     edit(row) {
-      this.$api.getMessageInfo({id:row.id}).then((res)=>{
-          this.form1 = res.data.data;
-          let receiver_ids = this.form1.receiver_id;
-          if (typeof receiver_ids == "string") {
-            receiver_ids = JSON.parse(receiver_ids);
-          }
-          this.form1.receiver_id = receiver_ids;
-          this.dialogVisible = true;
-      })
+      this.$api.getMessageInfo({ id: row.id }).then((res) => {
+        this.form1 = res.data.data;
+        let receiver_ids = this.form1.receiver_id;
+        if (typeof receiver_ids == "string") {
+          receiver_ids = JSON.parse(receiver_ids);
+        }
+        this.form1.receiver_id = receiver_ids;
+        this.dialogVisible = true;
+      });
     },
     saveResult() {
       let result = JSON.stringify(this.form2);

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

@@ -271,7 +271,7 @@ export default {
           series: [{
               name: '访问来源',
               type: 'pie',
-              radius: '55%',
+              radius: '45%',
               center: ['50%', '50%'],
               data:dataPie.sort(function (a, b) { return a.value - b.value; }),
               roseType: 'radius',

+ 108 - 70
src/views/message/Notice.vue

@@ -64,22 +64,25 @@ a {
   top: 15px;
   left: 20px;
 }
-.result_dialog .el-dialog{
-    width: 40%;
-    margin-top:20vh!important;
+.result_dialog .el-dialog {
+  width: 40%;
+  margin-top: 20vh !important;
 }
-.result-item{
-    height: 35px;
-    .label{
-        font-weight: 600;
-    }
+.result-item {
+  height: 35px;
+  .label {
+    font-weight: 600;
+  }
 }
-.w-e-text{
+/deep/.w-e-text {
   min-height: 500px;
 }
-.fu-dialog{
-  .el-dialog{
-    width:60%;
+.w-e-text-container{
+  height: 500px;
+}
+.fu-dialog {
+  .el-dialog {
+    width: 60%;
   }
 }
 </style>
@@ -124,9 +127,9 @@ a {
         <el-table-column prop="name" 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
-            >
+            <a :href="item.url" target="_blank"
+              v-for="(item,index) in scope.row.fileurl" :key="index"
+              ><span>{{ item.name }}</span><br></a>
           </template>
         </el-table-column>
         <el-table-column prop="cname" label="消息查阅统计">
@@ -197,6 +200,7 @@ a {
             :options="options"
             :props="props"
             @change="handleChange"
+            filterable
             clearable
           >
             <template slot-scope="{ node, data }">
@@ -209,7 +213,18 @@ a {
           <fuEditor v-model="form1.content" :isClear="false" @change="changeEditor"></fuEditor>
         </el-form-item>
         <el-form-item label="附件">
-          <input @change="upload('fileurl')" id="fileurl" type="file" />
+          <!-- <input @change="upload('fileurl')" id="fileurl" type="file" /> -->
+          <el-upload
+            class="upload-demo"
+            action="/api/admin/uploadfile"
+            multiple
+            :limit="5"
+            :on-remove="handleRemove"
+            :on-success="handleUploadSuccess"
+            :file-list="fileList">
+            <el-button size="small" type="primary">点击上传</el-button>
+            <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
+          </el-upload>
           <span>
             <a :href="form1.fileurl" target="_blank"
             ><span>{{ form1.filename }}</span></a
@@ -308,25 +323,25 @@ a {
 </template>
 <script>
 import Page from "../../components/Page";
-import fuEditor from '../../components/fuEditor'
+import fuEditor from "../../components/fuEditor";
 export default {
   components: {
     Page,
-    fuEditor
+    fuEditor,
   },
   data() {
     return {
-    //   checked: [],
-      cur_message_id:null,
-      cur_post_type:null,
-      postResult:{},
-      analyseDataList:[],
+      //   checked: [],
+      fileList:[],
+      cur_message_id: null,
+      cur_post_type: null,
+      postResult: {},
+      analyseDataList: [],
       title: "",
       widgetList: [],
       form: { name: "", page: 1, page_size: 20 },
       form1: {},
-      form2: {
-      },
+      form2: {},
       total: 1,
       list: [{ name: "2333" }],
       loading: false,
@@ -334,10 +349,10 @@ export default {
       dialogVisible: false,
       dialogVisible1: false,
       dialogVisible2: false,
-      dialogVisible3:false,
+      dialogVisible3: false,
       dialogTitle: "",
-      dialogTitle2:"",
-      dialogTitle3:"",
+      dialogTitle2: "",
+      dialogTitle3: "",
       defaultProps: {},
       data: [],
       templateList: [],
@@ -345,57 +360,77 @@ export default {
       checkList: [],
       rules: {
         name: [{ required: true, message: "请输入标题", trigger: "blur" }],
-        receiver_id:[{ required: true, message: "请选择接收人", trigger: "change" }],
-        content:[{ required: true, message: "请输入消息内容", trigger: "change" }]
+        receiver_id: [
+          { required: true, message: "请选择接收人", trigger: "change" },
+        ],
+        content: [
+          { required: true, message: "请输入消息内容", trigger: "change" },
+        ],
       },
       props: { multiple: true },
       options: [],
     };
   },
   methods: {
-    clearFilename(){
-      this.form1.filename = '';
-      document.getElementById("fileurl").value = '';
+    handleRemove(file,filelist){
+      let i = this.fileList.indexOf(file)
+      this.fileList.splice(i,1)
+    },
+    handleUploadSuccess(res,file,filelist){
+        this.fileList.push(res.data)
+    },
+    clearFilename() {
+      this.form1.filename = "";
+      document.getElementById("fileurl").value = "";
     },
     changeEditor(val) {
       this.form1.content = val;
     },
-    showMessageAnalyse(){
-          this.$router.push({path:'/message/message/analyse'})
+    showMessageAnalyse() {
+      this.$router.push({ path: "/message/message/analyse" });
     },
-    downloadExcel(){
-      this.$api.downloadNoticeAnalyse({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);
-          let file_name=decodeURIComponent(res.headers['content-disposition'].split('=')[1]);
-          console.log(file_name)
+    downloadExcel() {
+      this.$api
+        .downloadNoticeAnalyse({
+          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);
+          let file_name = decodeURIComponent(
+            res.headers["content-disposition"].split("=")[1]
+          );
+          console.log(file_name);
           elink.download = file_name;
-          elink.style.display = 'none';                
+          elink.style.display = "none";
           elink.href = objUrl;
           document.body.appendChild(elink);
           elink.click();
-          document.body.removeChild(elink);      
+          document.body.removeChild(elink);
           this.download_loading = false;
-      })
+        });
     },
-    showPostResult(row){
-        this.postResult = row.post_result
-        this.dialogTitle3 = "填报结果"
-        this.dialogVisible3 = true
+    showPostResult(row) {
+      this.postResult = row.post_result;
+      this.dialogTitle3 = "填报结果";
+      this.dialogVisible3 = true;
     },
-    analyseData(type,message_id) {
-      this.form1 = {}
-      let parm = this.form1
-      parm.type = type
-      parm.id = message_id
-      this.dialogTitle2 = "统计结果"
+    analyseData(type, message_id) {
+      this.form1 = {};
+      let parm = this.form1;
+      parm.type = type;
+      parm.id = message_id;
+      this.dialogTitle2 = "统计结果";
       this.dialogVisible2 = true;
-      this.$api.getNoticeAnalyse(parm).then((res)=>{
-          this.analyseDataList = res.data.data.list
-          this.cur_message_id = message_id
-          this.cur_post_type = type
-      })
+      this.$api.getNoticeAnalyse(parm).then((res) => {
+        this.analyseDataList = res.data.data.list;
+        this.cur_message_id = message_id;
+        this.cur_post_type = type;
+      });
     },
     handleSuccess(res, file) {
       this.form2[res.data.type] = res.data.url;
@@ -407,7 +442,7 @@ export default {
       this.form2[label] = i;
     },
     showSurvey(row) {
-        let _this = this;
+      let _this = this;
       this.title = row.name;
       this.message_id = row.id;
       this.$api.getMessageInfo({ id: row.id }).then((res) => {
@@ -415,12 +450,12 @@ export default {
           this.widgetList = res.data.data.widget;
           this.widgetList.forEach((i) => {
             if (i.type == "checkbox") {
-            //   _this.form2[i.label] = [] ;
-              _this.$set(_this.form2,i.label,[])
-            } 
+              //   _this.form2[i.label] = [] ;
+              _this.$set(_this.form2, i.label, []);
+            }
           });
-        console.log(this.form2)
-        //   debugger
+          console.log(this.form2);
+          //   debugger
           this.dialogVisible1 = true;
         }
       });
@@ -447,10 +482,11 @@ export default {
       this.getData();
     },
     search1() {
-      this.analyseData(this.cur_post_type,this.cur_message_id);
+      this.analyseData(this.cur_post_type, this.cur_message_id);
     },
     openDiag() {
       this.form1 = {};
+      this.fileList = []
       this.dialogVisible = true;
       this.dialogTitle = "发送消息";
     },
@@ -490,9 +526,10 @@ export default {
       });
     },
     edit(row) {
-      this.$api.getNoticeInfo({id:row.id}).then((res)=>{
+      this.$api.getNoticeInfo({ id: row.id }).then((res) => {
         this.form1 = res.data.data;
-        this.dialogTitle = "编辑消息"
+        this.fileList = res.data.data.fileurl
+        this.dialogTitle = "编辑消息";
         let receiver_ids = this.form1.receiver_id;
         if (typeof receiver_ids == "string") {
           receiver_ids = JSON.parse(receiver_ids);
@@ -502,7 +539,7 @@ export default {
         // });
         this.form1.receiver_id = receiver_ids;
         this.dialogVisible = true;
-        })
+      });
     },
     saveResult() {
       let result = JSON.stringify(this.form2);
@@ -528,6 +565,7 @@ export default {
         if (valid) {
           let parm = this.form1;
           let id = this.form1.id;
+          parm.fileurl = JSON.stringify(this.fileList)
           parm.receiver_id = JSON.stringify(parm.receiver_id);
           if (id) {
             this.$api.editNotice(parm).then((res) => {

+ 50 - 15
src/views/message/OutSurvey.vue

@@ -135,9 +135,7 @@ a {
             <a @click="showSurvey(scope.row)" target="_blank"
               ><span>查看问卷</span></a
             >
-            <a
-              v-if="scope.row.template_qrcode"
-              @click="showQrcode(scope.row)"
+            <a v-if="scope.row.template_qrcode" @click="showQrcode(scope.row)"
               ><span> | 生成二维码</span></a
             >
           </template>
@@ -167,10 +165,20 @@ a {
         </el-table-column>
         <el-table-column prop="zip" width="150" label="操作">
           <template slot-scope="scope">
+            <el-button
+              :class="scope.row.status == 1 ? 'close' : 'open'"
+              type="text"
+              @click="switchStatus(scope.row)"
+              >{{ scope.row.status == 1 ? "禁用" : "启用" }}</el-button
+            >
             <el-button class="edit" type="text" @click="edit(scope.row)"
               >编辑</el-button
             >
-            <el-button class="del" @click="del(scope.row.id)" type="text"
+            <el-button
+              v-if="scope.row.status == 0"
+              class="del"
+              @click="del(scope.row.id)"
+              type="text"
               >删除</el-button
             >
           </template>
@@ -211,6 +219,7 @@ a {
           <el-select
             placeholder="请选择问卷模板"
             v-model="form1.template_id"
+            :disabled="form1.edit"
             clearable
           >
             <el-option
@@ -454,7 +463,7 @@ export default {
       list: [{ name: "2333" }],
       loading: false,
       input: "",
-      dialogVisible:false,
+      dialogVisible: false,
       dialogVisible1: false,
       dialogVisible2: false,
       dialogVisible3: false,
@@ -536,6 +545,21 @@ export default {
   },
   // computed() {},
   methods: {
+    switchStatus(row) {
+      if (row.status == 1) {
+        this.$confirm("确定禁用吗?", "提示", {
+          type: "warning",
+        }).then(() => {
+          this.$api.editMessageStatus({ id: row.id }).then((res) => {
+            row.status = res.data.data;
+          });
+        });
+      }else{
+        this.$api.editMessageStatus({ id: row.id }).then((res) => {
+          row.status = res.data.data;
+        });
+      }
+    },
     showQrcode(row) {
       this.dialogTitle4 = "生成二维码";
       this.dialogVisible4 = true;
@@ -578,7 +602,7 @@ export default {
       this.dialogVisible3 = true;
     },
     analyseData(type, message_id) {
-      this.form1 = {}
+      this.form1 = {};
       let parm = this.form1;
       parm.type = type;
       parm.message_id = message_id;
@@ -604,8 +628,8 @@ export default {
       let _this = this;
       this.title = row.name;
       this.message_id = row.id;
-      this.widgetList = []
-      this.form2 = {}
+      this.widgetList = [];
+      this.form2 = {};
       this.$api.getMessageInfo({ id: row.id }).then((res) => {
         if (res.data.code == 0) {
           this.widgetList = res.data.data.widget;
@@ -643,8 +667,19 @@ export default {
       this.getData();
     },
     search1() {
-      let parm = this.form;
-      this.analyseData("total", this.cur_message_id);
+      let parm = this.form1;
+      let type = this.cur_post_type;
+      let message_id = this.cur_message_id;
+      parm.type = type;
+      parm.message_id = message_id;
+      this.dialogTitle2 = "统计结果";
+      this.dialogVisible2 = true;
+      this.$api.getMessageSurveyAnalyseOut(parm).then((res) => {
+        this.analyseDataList = res.data.data.list;
+        this.analyseHeadList = res.data.data.headers;
+        this.cur_message_id = message_id;
+        this.cur_post_type = type;
+      });
     },
     openDiag() {
       this.form1 = {};
@@ -691,10 +726,10 @@ export default {
       });
     },
     edit(row) {
-      this.$api.getMessageInfo({id:row.id}).then((res)=>{
-          this.form1 = res.data.data;
-          this.dialogVisible = true;
-      })
+      this.$api.getMessageInfo({ id: row.id }).then((res) => {
+        this.form1 = res.data.data;
+        this.dialogVisible = true;
+      });
     },
     saveResult() {
       let result = JSON.stringify(this.form2);
@@ -713,7 +748,7 @@ export default {
             this.$message.error(res.data.message);
           }
           this.dialogVisible1 = false;
-          this.getData()
+          this.getData();
         });
     },
     save() {

+ 66 - 47
src/views/message/modelForm.vue

@@ -98,15 +98,30 @@
               }
           }
            // 右边
+           .phone{
+                width: 350px;
+                height: 713px;
+                background: url("../../assets/survey_bg.png") no-repeat;
+                background-size:100% auto;
+                margin: auto;
+           }
             .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; 
+                height: 541px;
+                width: 315px;
+                background: #FFFFFF;
+                border: 1px solid #ddd;
+                overflow: auto;
+                position: relative;
+                top: 85px;
+                left: 21px;
+                // display: none;
+                // border: 1px solid #DDDDDD;
+                // box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.13);
+                // border-radius: 20px; 
+                overflow: auto;
                 .el-form.over_y{
-                    max-height:calc( 100vh - 340px);
+                   border: none;
+                   overflow: visible;
                 }
             }
             // label样式
@@ -138,6 +153,7 @@
                 }
             }
             .survey_logo{
+                width:145px;
                 position: relative;
                 top:15px;
                 left: 20px;
@@ -297,45 +313,47 @@
             </div>
             <div class="content-item right">
                 <div class='item-title'>效果预览</div>
-                <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="form" 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="form.label" :placeholder="item.placeholder"></el-input>
-                            <el-input v-if="item.type=='textarea'" type="textarea" v-model="form.label" :placeholder="item.placeholder"></el-input>
-                            <el-radio-group v-if="item.type=='radio'">
-                                <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'">
-                                <el-checkbox :label="iitem.label+'22'" 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="dialogVisible = false" style="width:100%;margin-top:20px;">提交</el-button>
-                        </el-form-item>
-                    </el-form>
+                <div class="phone">
+                    <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="form" 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="form.label" :placeholder="item.placeholder"></el-input>
+                                <el-input v-if="item.type=='textarea'" type="textarea" v-model="form.label" :placeholder="item.placeholder"></el-input>
+                                <el-radio-group v-if="item.type=='radio'">
+                                    <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'">
+                                    <el-checkbox :label="iitem.label+'22'" 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="dialogVisible = false" style="width:100%;margin-top:20px;">提交</el-button>
+                            </el-form-item>
+                        </el-form>
+                    </div>
                 </div>
             </div>
         </div>
@@ -393,6 +411,7 @@ components: {vuedraggable},
         },
         save(){
             let id = this.$route.query.id;
+            let copyid = this.$route.query.copyid
             let widgets = Array.from(this.widgetList);
             let flag = 0;
             let labels = []
@@ -442,7 +461,7 @@ components: {vuedraggable},
                     widget:JSON.stringify(widgets)
                 }
             console.log(widgets,22222222222)
-            if(id){
+            if(id && !copyid){
                 params.id = id;
                 this.$api.editTemplate(params).then(res=>{
                     if(res.data.code==0){

+ 67 - 9
src/views/message/templateList.vue

@@ -54,12 +54,33 @@
         <el-table-column prop="name" label="模板名称"> </el-table-column>
         <el-table-column prop="cname" label="创建人"> </el-table-column>
         <el-table-column prop="ctime" label="创建时间"> </el-table-column>
-        <el-table-column prop="zip" width="150" label="操作">
+        <el-table-column prop="zip" width="250" label="操作">
           <template slot-scope="scope">
-            <el-button class="edit" type="text" @click="edit(scope.row)"
+            <el-button
+              class="edit"
+              type="text"
+              @click="edit(scope.row)"
+              v-if="scope.row.edit"
               >编辑</el-button
             >
-            <el-button class="del" @click="del(scope.row.id)" type="text"
+            <el-tooltip
+              v-else
+              class="item"
+              effect="dark"
+              content="该模版使用的问卷正在被填报,无法修改,可新增模版-选择复用历史模版使用该模版或删除正在使用该模版的问卷!"
+              placement="top-start"
+            >
+              <el-button
+                class="edit"
+                type="text"
+                style="color: #ccc; cursor: not-allowed"
+                >编辑</el-button
+              >
+            </el-tooltip>
+            <el-button
+              class="del"
+              @click="del(scope.row.id)"
+              type="text"
               >删除</el-button
             >
           </template>
@@ -84,10 +105,25 @@
         size="small"
         class="preview"
         :inline="false"
-        label-width="80px"
+        label-width="100px"
         :rules="rules"
         :model="form1"
       >
+        <el-form-item label="复用历史模板" v-if="!form1.id">
+          <el-select
+            v-model="form1.copyid"
+            filterable
+            @change="changeTemplate"
+            placeholder="请选择历史模板"
+          >
+            <el-option
+              v-for="(item, index) in allTemplate"
+              :key="index"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="模板名称" prop="name">
           <el-input
             v-model="form1.name"
@@ -114,8 +150,9 @@ export default {
   data() {
     return {
       //   edit:0,
+      allTemplate: [],
       form: { name: "", page: 1, page_size: 20 },
-      form1: {},
+      form1: {name:""},
       total: 1,
       list: [{ name: "2333" }],
       loading: false,
@@ -130,12 +167,29 @@ export default {
     };
   },
   methods: {
+    switchStatus(row) {
+      this.$api.editTemplateStatus({id:row.id}).then((res)=>{
+        row.status = res.data.data
+      })
+    },
+    changeTemplate(val) {
+      let selVal = this.allTemplate.filter(function (x) {
+        return x.id == val;
+      });
+      this.form1.name = selVal[0].name;
+      // this.form1.name = "111"
+    },
     addTtitle() {
       this.$refs["form1"].validate((valid) => {
         if (valid) {
+          let query = { title: this.form1.name, id: this.form1.id };
+          if (this.form1.copyid) {
+            query.id = this.form1.copyid;
+            query.copyid = this.form1.copyid;
+          }
           this.$router.push({
             path: "/message/template/add",
-            query: { title: this.form1.name, id: this.form1.id },
+            query: query,
           });
         }
       });
@@ -152,12 +206,16 @@ export default {
         this.total = res.data.data.total;
         this.loading = false;
       });
+      this.$api.getAllTemplateList().then((res) => {
+        this.allTemplate = res.data.data;
+      });
     },
     edit(row) {
-      this.$api.getTemplate({id:row.id}).then((res)=>{
-        this.form1 = row;
+      this.$api.getTemplate({ id: row.id }).then((res) => {
+        // this.form1 = row;
+        this.form1 = res.data.data;
         this.dialogVisible = true;
-      })
+      });
     },
     del(id) {
       this.$confirm(