Jelajahi Sumber

修改SOP课程模板

吴树波 1 bulan lalu
induk
melakukan
e2db3f7605

+ 6 - 0
src/components/ImageUpload/index.vue

@@ -9,6 +9,7 @@
       :on-error="handleUploadError"
       :on-exceed="handleExceed"
       name="file"
+      :disabled="disabled"
       :on-remove="handleRemove"
       :show-file-list="true"
       :file-list="fileList"
@@ -56,6 +57,11 @@ export default {
        type: Number,
       default: 5,
     },
+    // 大小限制(MB)
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
     // 文件类型, 例如['png', 'jpg', 'jpeg']
     fileType: {
       type: Array,

+ 8 - 0
src/views/qw/sop/ImageUpload.vue

@@ -9,6 +9,7 @@
       :on-error="handleUploadError"
       :on-exceed="handleExceed"
       name="file"
+      :disabled="disabled"
       :on-remove="handleRemove"
       :show-file-list="true"
       :file-list="fileList"
@@ -54,6 +55,11 @@ export default {
       type: Array,
       default: () => ["png", "jpg", "jpeg"],
     },
+    // 大小限制(MB)
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
     // 是否显示提示
     isShowTip: {
       type: Boolean,
@@ -112,12 +118,14 @@ export default {
       if(findex > -1) {
         this.fileList.splice(findex, 1);
         this.$emit("input", this.listToString(this.fileList));
+        this.$emit("change", this.listToString(this.fileList));    // 新增change事件触发
       }
     },
     // 上传成功回调
     handleUploadSuccess(res,file) {
       this.fileList.push({ name: res.url, url: res.url });
       this.$emit("input", this.listToString(this.fileList));
+      this.$emit("change", this.listToString(this.fileList));    // 新增change事件触发
       this.loading.close();
     },
     // 上传前loading加载

+ 38 - 22
src/views/qw/sopTemp/index.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="销售公司" prop="companyId">
-        <el-select filterable  v-model="queryParams.companyId" clearable placeholder="请选择公司名" size="small">
+        <el-select filterable v-model="queryParams.companyId" clearable placeholder="请选择公司名" size="small">
           <el-option
             v-for="item in companys"
             :key="item.companyId"
@@ -122,7 +122,7 @@
       <el-table-column label="模板编号" align="center" prop="id"/>
       <el-table-column label="销售公司" align="center">
         <template slot-scope="scope">
-          <el-tag v-for="item in companys" v-if="scope.row.companyId == item.companyId">{{item.companyName}}</el-tag>
+          <el-tag v-for="item in companys" v-if="scope.row.companyId == item.companyId">{{ item.companyName }}</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="模板标题" align="center" prop="name"/>
@@ -210,7 +210,7 @@
           <el-input v-model="form.name" placeholder="请输入模板标题"/>
         </el-form-item>
         <el-form-item label="销售公司" prop="companyId">
-          <el-select filterable  v-model="form.companyId" placeholder="请选择公司名" size="small">
+          <el-select filterable v-model="form.companyId" placeholder="请选择公司名" size="small">
             <el-option
               v-for="item in companys"
               :key="item.companyId"
@@ -240,7 +240,8 @@
           </el-select>
         </el-form-item>
         <el-form-item label="课程" prop="courseId" v-if="form.sendType == 5 && !form.id">
-          <el-select v-model="form.courseId"placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable>
+          <el-select v-model="form.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"
+                     filterable>
             <el-option
               v-for="dict in courseList"
               :key="dict.dictValue"
@@ -256,19 +257,19 @@
           <el-input-number v-model="form.sort" :min="0" label="排序"></el-input-number>
         </el-form-item>
         <el-form-item label="每天发送次数" prop="num" v-if="form.sendType == 5 && !form.id">
-          <el-input-number v-model="form.num" :min="1" label="每天发送次数"></el-input-number>
+          <el-input-number v-model="form.num" :min="1" label="每天发送次数" @change="sendNumChange"></el-input-number>
         </el-form-item>
         <el-form-item label="发送时间" v-if="form.sendType == 5 && !form.id">
-            <el-time-picker
-              class="custom-input"
-              v-for="index in form.num"
-              v-model="form.timeList[index]"
-              value-format="HH:mm"
-              format="HH:mm"
-              :picker-options="{ selectableRange: startTimeRange }"
-              placeholder="时间"
-              style="width: 100px;height: 20px;margin-left: 10px;margin-top: 10px">
-            </el-time-picker>
+          <el-time-picker
+            v-for="item in form.timeList"
+            class="custom-input"
+            v-model="item.value"
+            value-format="HH:mm"
+            format="HH:mm"
+            :picker-options="{ selectableRange: startTimeRange }"
+            placeholder="时间"
+            style="width: 100px;height: 20px;margin-left: 10px;margin-top: 10px">
+          </el-time-picker>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer" style="float: right;">
@@ -282,7 +283,8 @@
         <el-table-column label="小节" align="left" prop="videoName"/>
         <el-table-column label="金额" align="center">
           <template slot-scope="scope">
-            <el-input-number v-model="scope.row.redPacketMoney" :min="0.01" step="0.01" label="红包金额"></el-input-number>
+            <el-input-number v-model="scope.row.redPacketMoney" :min="0.01" step="0.01"
+                             label="红包金额"></el-input-number>
           </template>
         </el-table-column>
       </el-table>
@@ -307,7 +309,7 @@ import {
   updateRedPackage,
   updateTemp
 } from "@/api/qw/sopTemp";
-import { getCompanyList } from "@/api/company/company";
+import {getCompanyList} from "@/api/company/company";
 import {courseList} from "@/api/qw/sop";
 import fa from "element-ui/src/locale/lang/fa";
 
@@ -452,7 +454,7 @@ export default {
         sendType: this.sendType,
         sort: 0,
         num: 1,
-        timeList:[],
+        timeList: [{value: ""}],
         status: "1",
       };
       this.resetForm("form");
@@ -578,6 +580,10 @@ export default {
       delete this.form.rules
       this.$refs["form"].validate(valid => {
         if (valid) {
+          let f = JSON.parse(JSON.stringify(this.form));
+          if (f.timeList && f.timeList.length > 0) {
+            f.timeList = f.timeList.map(item => item.value);
+          }
           const loading = this.$loading({
             lock: true,
             text: 'Loading',
@@ -585,22 +591,22 @@ export default {
             background: 'rgba(0, 0, 0, 0.7)'
           });
           if (this.command == 2) {
-            copyTemplate(this.form).then(response => {
+            copyTemplate(f).then(response => {
               this.msgSuccess("复制成功");
               this.open = false;
               loading.close();
               this.getList();
             });
           } else {
-            if (this.form.id != null) {
-              updateTemp(this.form).then(response => {
+            if (f.id != null) {
+              updateTemp(f).then(response => {
                 this.msgSuccess("修改成功");
                 this.open = false;
                 loading.close();
                 this.getList();
               });
             } else {
-              addTemp(this.form).then(response => {
+              addTemp(f).then(response => {
                 this.msgSuccess("新增成功");
                 this.open = false;
                 loading.close();
@@ -658,6 +664,16 @@ export default {
         this.exportLoading = false;
       }).catch(() => {
       });
+    },
+    sendNumChange(val, old) {
+      if (val > old) {
+        for (let i = 0; i < val - old; i++) {
+          this.form.timeList.push({value: ""});
+        }
+      } else {
+        let len = old - val;
+        this.form.timeList.splice(Math.max(this.form.timeList.length - len, 0), len);
+      }
     }
   }
 };

+ 60 - 26
src/views/qw/sopTemp/updateSopTemp.vue

@@ -52,7 +52,7 @@
                                   placeholder="内容名称,仅内部可见"/>
                       </el-form-item>
                       <el-form-item label="课程" v-if="form.sendType == 5 && item.content && item.content.length > 0" required>
-                        <el-select :disabled="formType == 3 || form.sendType == 5" v-model="item.content[0].courseId"
+                        <el-select :disabled="(formType == 3 || form.sendType == 5) && item.id != null" v-model="item.content[0].courseId"
                                    placeholder="请选择课程" style=" margin-right: 10px;" size="mini" remote
                                    filterable
                                    @change="courseChangeUpdate(item.content[0], index, 0)">
@@ -63,7 +63,7 @@
                             :value="parseInt(dict.dictValue)"
                           />
                         </el-select>
-                        <el-select :disabled="formType == 3 || form.sendType == 5" v-model="item.content[0].videoId"
+                        <el-select :disabled="(formType == 3 || form.sendType == 5) && item.id != null" v-model="item.content[0].videoId"
                                    placeholder="请选择小节" size="mini" style=" margin-right: 10px;" remote
                                    filterable
                                    @change="videoIdChange(item.content[0],index,0)">
@@ -74,17 +74,6 @@
                             :value="parseInt(dict.dictValue)"
                           />
                         </el-select>
-                        <el-select :disabled="formType == 3" v-model="item.content[0].courseType"
-                                   placeholder="请选择消息类型" size="mini"
-                                   style=" margin-right: 10px;" v-if="item.content[0].type != 4 ">
-                          <el-option
-                            v-for="dict in sysFsSopWatchStatus"
-                            :key="dict.dictValue"
-                            :label="dict.dictLabel"
-                            :value="Number(dict.dictValue)"
-                          />
-                        </el-select>
-
                       </el-form-item>
                       <el-form-item label="规则">
                         <div v-for="(content, contentIndex) in item.content" :key="contentIndex"
@@ -128,6 +117,18 @@
                                     inactive-value="0">
                                   </el-switch>
                                 </el-form-item>
+                                <el-form-item label="消息类型" v-if="form.sendType != 4">
+                                  <el-select :disabled="formType == 3" v-model="content.courseType"
+                                             placeholder="请选择消息类型" size="mini"
+                                             style=" margin-right: 10px;" v-if="content.type != 4 ">
+                                    <el-option
+                                      v-for="dict in sysFsSopWatchStatus"
+                                      :key="dict.dictValue"
+                                      :label="dict.dictLabel"
+                                      :value="Number(dict.dictValue)"
+                                    />
+                                  </el-select>
+                                </el-form-item>
 
                                 <el-form-item label="消息类别" v-if="form.sendType != 4 && form.sendType != 5">
                                   <el-radio-group v-model="content.type"
@@ -135,7 +136,6 @@
                                                   @change="updateHtml(() => content.contentType = '1')">
                                     <el-radio :label="1">普通</el-radio>
                                     <el-radio :label="2">课程</el-radio>
-                                    <el-radio :label="3">订单</el-radio>
                                     <el-radio :label="4">AI触达</el-radio>
                                     <el-radio :label="5">打标签</el-radio>
                                   </el-radio-group>
@@ -260,10 +260,10 @@
                                               </el-radio>
                                             </el-radio-group>
                                           </div>
-                                          <div v-if="form.sendType == 2 || form.sendType == 5">
+                                          <div v-if="form.sendType == 2">
                                             <el-radio-group v-model="setList.contentType"
                                                             :disabled="formType == 3"
-                                                            @change="handleContentTypeChange(content,index,contentIndex,setIndex)">
+                                                            @change="handleContentTypeChange(content,index,contentIndex,setIndex, item, 'contentType', $event)">
                                               <el-radio
                                                 :key="item.dictValue"
                                                 :label="item.dictValue"
@@ -272,6 +272,18 @@
                                               </el-radio>
                                             </el-radio-group>
                                           </div>
+                                          <div v-if="form.sendType == 5">
+                                            <el-radio-group v-model="setList.contentType"
+                                                            :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
+                                                            @change="handleContentTypeChange(content,index,contentIndex,setIndex, item, 'contentType', $event)">
+                                              <el-radio
+                                                :key="item.dictValue"
+                                                :label="item.dictValue"
+                                                :disabled="(content.type!=2 && item.dictValue === '9') || (content.isOfficial==1 && ['5','6','7','8','9'].includes(item.dictValue))"
+                                                v-for="item in sysQwSopAiContentType" v-if="setIndex == 0 ? courseTypeList.includes(item.dictValue) : !courseTypeList.includes(item.dictValue)">{{ item.dictLabel }}
+                                              </el-radio>
+                                            </el-radio-group>
+                                          </div>
                                         </el-form-item>
                                         <el-form-item label="内容">
                                           <el-input :disabled="formType == 3" v-if="setList.contentType == 1 "
@@ -300,19 +312,22 @@
                                             v-if="setList.contentType == 3  || (setList.contentType == 9 && content.type==2 )">
                                             <el-card class="box-card">
                                               <el-form-item label="链接标题:" label-width="100px" required>
-                                                <el-input :disabled="formType == 3" v-model="setList.linkTitle"
+                                                <el-input :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)" v-model="setList.linkTitle"
+                                                          @change="updateAll(setIndex, item, 'linkTitle', $event)"
                                                           placeholder="请输入链接标题"
                                                           style="width: 90%;"/>
                                               </el-form-item>
                                               <el-form-item label="链接描述:" label-width="100px" required>
-                                                <el-input :disabled="formType == 3" type="textarea" :rows="3"
+                                                <el-input :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)" type="textarea" :rows="3"
                                                           v-model="setList.linkDescribe"
+                                                          @change="updateAll(setIndex, item, 'linkDescribe', $event)"
                                                           placeholder="请输入链接描述"
                                                           style="width: 90%;margin-top: 1%;"/>
                                               </el-form-item>
                                               <el-form-item label="链接封面:" label-width="100px" required>
-                                                <ImageUpload :disabled="formType == 3" v-model="setList.linkImageUrl"
+                                                <ImageUpload :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)" v-model="setList.linkImageUrl"
                                                              type="image" :num="1"
+                                                             @input="updateAll(setIndex, item, 'linkImageUrl', $event)"
                                                              :file-size="2" :width="150" :height="150"
                                                              style="margin-top: 1%;"/>
                                               </el-form-item>
@@ -337,12 +352,16 @@
                                             <el-card class="box-card">
                                               <el-form-item label="标题" prop="miniprogramTitle">
                                                 <el-input v-model="setList.miniprogramTitle"
+                                                          :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
+                                                          @change="updateAll(setIndex, item, 'miniprogramTitle', $event)"
                                                           placeholder="请输入小程序消息标题,最长为64字节" :rows="2"
                                                           maxlength="64" type="textarea"
                                                           @input="checkByteLength(content,setList.contentType,content.isOfficial)"/>
                                               </el-form-item>
                                               <el-form-item label="封面" prop="miniprogramPicUrl">
                                                 <ImageUpload v-if="content.isOfficial !== '1'"
+                                                             @change="updateAll(setIndex, item, 'miniprogramPicUrl', $event)"
+                                                             :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
                                                              v-model="setList.miniprogramPicUrl" type="image" :num="10"
                                                              :width="150" :height="150"/>
                                               </el-form-item>
@@ -479,7 +498,7 @@
                                         <el-form-item label="添加短链"
                                                       v-if="content.type == 2 && setList.contentType == 1  ">
                                           <el-tooltip content="请先根据课程选定课程小节之后再添加" effect="dark"
-                                                      :disabled="!!content.videoId">
+                                                      :disabled="!content.videoId">
                                             <el-switch
                                               @change="updateHtml"
                                               v-model="setList.isBindUrl"
@@ -500,6 +519,8 @@
                                                       v-if="content.type == 2 && setList.isBindUrl == '1' && setList.contentType != 2  && setList.contentType != 5  && setList.contentType != 6 && setList.contentType != 8 && setList.contentType != 9 && setList.contentType != 10  ">
                                           <el-row>
                                             <el-input type="number" v-model="setList.expiresDays"
+                                                      :disabled="formType == 3 || (form.sendType == 5 && contentIndex != 0 && setIndex == 0)"
+                                                      @change="updateAll(setIndex, item, 'expiresDays', $event)"
                                                       style="width: 200px">
                                               <template slot="append">天</template>
                                             </el-input>
@@ -545,7 +566,7 @@
                                     <el-col :span="1" :offset="1">
                                       <i class="el-icon-delete" @click="delSetList(index,contentIndex,setIndex)"
                                          style="margin-top: 20px;"
-                                         v-if="content.setting.length>1 && (formType != 3)"></i>
+                                         v-if="content.setting.length>1 && formType != 3 && !(form.sendType == 5 && setIndex == 0)"></i>
                                     </el-col>
                                   </el-row>
                                 </div>
@@ -707,6 +728,7 @@ export default {
       dayList: [],
       ruleList: [],
       ids: [],
+      courseTypeList: ['3', '4', '9'],
       sysFsSopWatchStatus: [],
       //消息内容类型 企微版
       sysQwSopContentType: [],
@@ -1412,7 +1434,7 @@ export default {
         });
       }
     },
-    handleContentTypeChange(content, index, countIndex) {
+    handleContentTypeChange(content, index, countIndex, setIndex, item, fieldName, val) {
       //如果是链接的才上
       if (content.courseId != null && content.type == 2) {
         const selectedCourse = this.courseList.find(course => parseInt(course.dictValue) === content.courseId);
@@ -1450,7 +1472,14 @@ export default {
           }
         }
       }
-
+      if(countIndex == 0 && setIndex == 0){
+        this.updateAll(setIndex, item, fieldName, val);
+        for (let index in item.content) {
+          if(index != 0){
+            this.handleContentTypeChange(item.content[index], 0, index, 0, item, fieldName, val);
+          }
+        }
+      }
     },
     videoIdChange(content, index, countIndex) {
 
@@ -1699,9 +1728,14 @@ export default {
       val || val();
 
     },
-    // updateChange(val) {
-    //   console.log(val)
-    // }
+    updateAll(setIndex, list, fieldName, newVal) {
+      if(this.form.sendType == 5 && setIndex == 0) {
+        console.info("更新数据", newVal)
+        for (let index in list.content) {
+          this.$set(list.content[index].setting[0], fieldName, newVal);
+        }
+      }
+    }
   }
 };
 </script>