Просмотр исходного кода

1、调整安全上传文件
2、调整下载认证处理

yys 1 неделя назад
Родитель
Сommit
c7a83666df
49 измененных файлов с 760 добавлено и 28 удалено
  1. 4 3
      src/components/FileUpload/index.vue
  2. 4 3
      src/components/ImageUpload/index.vue
  3. 3 0
      src/components/Material/index.vue
  4. 3 0
      src/components/Material/single.vue
  5. 3 0
      src/views/chat/chatKeyword/index.vue
  6. 3 0
      src/views/company/companyUser/card/index.vue
  7. 3 0
      src/views/course/Material/index.vue
  8. 6 0
      src/views/course/courseFinishTemp/index.vue
  9. 6 0
      src/views/course/courseFinishTempParent/deptIndex.vue
  10. 6 0
      src/views/course/courseFinishTempParent/index.vue
  11. 6 0
      src/views/course/courseFinishTempParent/myIndex.vue
  12. 4 1
      src/views/crm/components/addVisit.vue
  13. 6 1
      src/views/fastGpt/fastGptCollection/index.vue
  14. 6 1
      src/views/fastGpt/fastGptDataset/fastGptCollection.vue
  15. 3 0
      src/views/qw/contactWay/index.vue
  16. 3 0
      src/views/qw/drainageLink/type1.vue
  17. 4 0
      src/views/qw/drainageLink/type2.vue
  18. 10 1
      src/views/qw/externalContact/deptIndex.vue
  19. 13 2
      src/views/qw/externalContact/myExternalContact.vue
  20. 17 2
      src/views/qw/externalContactTransfer/index.vue
  21. 3 0
      src/views/qw/friendMaterial/index.vue
  22. 4 3
      src/views/qw/friendWelcome/ImageUploadWeclome.vue
  23. 132 0
      src/views/qw/friendWelcome/deptFriendWelcome.vue
  24. 135 0
      src/views/qw/friendWelcome/indexNew.vue
  25. 134 0
      src/views/qw/friendWelcome/myIndexNew.vue
  26. 135 0
      src/views/qw/friendWelcome/myWelcome.vue
  27. 4 0
      src/views/qw/material/ImageUpload.vue
  28. 8 3
      src/views/qw/material/index.vue
  29. 6 2
      src/views/qw/material/materialAdd.vue
  30. 3 0
      src/views/qw/materialQw/index.vue
  31. 4 0
      src/views/qw/sop/ImageUpload.vue
  32. 4 0
      src/views/qw/sop/deptSop.vue
  33. 4 0
      src/views/qw/sop/mySop.vue
  34. 4 0
      src/views/qw/sop/sop.vue
  35. 4 0
      src/views/qw/sopTemp/addSopTemp.vue
  36. 5 0
      src/views/qw/sopTemp/addSopTempOld.vue
  37. 4 0
      src/views/qw/sopTemp/updateSopTemp.vue
  38. 4 0
      src/views/qw/sopTemp/updateSopTemp2.vue
  39. 5 0
      src/views/qw/sopTemp/updateSopTempOld.vue
  40. 4 0
      src/views/qw/sopUserLogsInfo/sendMsgOpenTool.vue
  41. 4 0
      src/views/qw/sopUserLogsInfo/sendMsgSopOpenTool.vue
  42. 4 0
      src/views/qw/sopUserLogsInfo/sopUserLogsInfoDetails.vue
  43. 4 0
      src/views/qw/sopUserLogsInfo/sopUserLogsInfoDetailsOld.vue
  44. 4 0
      src/views/qw/user/ImageUpload.vue
  45. 6 2
      src/views/qw/welcome/deptWelcomeIndex.vue
  46. 6 2
      src/views/qw/welcome/index.vue
  47. 6 2
      src/views/qw/welcome/myWelcome.vue
  48. 4 0
      src/views/qw/welcome/welComeAdd.vue
  49. 3 0
      src/views/store/package/index.vue

+ 4 - 3
src/components/FileUpload/index.vue

@@ -2,6 +2,7 @@
   <div class="upload-file">
     <el-upload
       :action="uploadFileUrl"
+      :headers="headers"
       :before-upload="handleBeforeUpload"
       :file-list="fileList"
       :limit="limit"
@@ -74,9 +75,6 @@ export default {
     return {
       baseUrl: process.env.VUE_APP_BASE_API,
       uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/uploadOSS", // 上传的图片服务器地址
-      headers: {
-        Authorization: "Bearer " + getToken(),
-      },
       fileList: [],
       videoDuration: 0,
       videoTime: "",
@@ -107,6 +105,9 @@ export default {
     }
   },
   computed: {
+    headers() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     // 是否显示提示
     showTip() {
       return this.isShowTip && (this.fileType || this.fileSize);

+ 4 - 3
src/components/ImageUpload/index.vue

@@ -2,6 +2,7 @@
   <div class="component-upload-image">
     <el-upload
       :action="uploadImgUrl"
+      :headers="headers"
       list-type="picture-card"
       :on-success="handleUploadSuccess"
       :before-upload="handleBeforeUpload"
@@ -77,9 +78,6 @@ export default {
       hideUpload: false,
       baseUrl: process.env.VUE_APP_BASE_API,
       uploadImgUrl: process.env.VUE_APP_BASE_API+"/common/uploadOSS", // 上传的图片服务器地址
-      headers: {
-        Authorization: "Bearer " + getToken(),
-      },
       fileList: []
     };
   },
@@ -110,6 +108,9 @@ export default {
     }
   },
   computed: {
+    headers() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     // 是否显示提示
     showTip() {
       return this.isShowTip && (this.fileType || this.fileSize);

+ 3 - 0
src/components/Material/index.vue

@@ -71,6 +71,7 @@
                 </el-col>
                 <el-col :span="12" style="text-align: right;">
                   <el-upload
+      :headers="ossUploadHeaders"
                     :action="uploadUrl"
                     :file-list="[]"
                     :on-progress="handleProgress"
@@ -140,6 +141,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, exportMaterial } from "@/api/store/material";
 import { getAllMaterialGroup,listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup, exportMaterialGroup } from "@/api/store/materialGroup";
 import { Loading } from 'element-ui';
@@ -181,6 +183,7 @@ export default {
   },
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       finalQuality:1,
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       dialogVisible: false,

+ 3 - 0
src/components/Material/single.vue

@@ -62,6 +62,7 @@
                 </el-col>
                 <el-col :span="12" style="text-align: right;">
                   <el-upload
+      :headers="ossUploadHeaders"
                     :action="uploadUrl"
                     :file-list="[]"
                     :on-progress="handleProgress"
@@ -131,6 +132,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, exportMaterial } from "@/api/store/material";
 import { getAllMaterialGroup,listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup, exportMaterialGroup } from "@/api/store/materialGroup";
 import { Loading } from 'element-ui';
@@ -174,6 +176,7 @@ export default {
   },
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       finalQuality:1,
       myValue: this.value,
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",

+ 3 - 0
src/views/chat/chatKeyword/index.vue

@@ -111,6 +111,7 @@
         </el-form-item>
         <!-- <el-form-item label="企微名片" prop="qwCode" v-if="form.type==2">
           <el-upload
+      :headers="ossUploadHeaders"
             v-model="form.qwCode"
             class="avatar-uploader"
             :action="uploadUrl"
@@ -131,12 +132,14 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listChatKeyword, getChatKeyword, delChatKeyword, addChatKeyword, updateChatKeyword, exportChatKeyword } from "@/api/chat/chatKeyword";
 
 export default {
   name: "ChatKeyword",
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       baseUrl: process.env.VUE_APP_BASE_API,
       typeOptions:[],

+ 3 - 0
src/views/company/companyUser/card/index.vue

@@ -175,6 +175,7 @@
 
        <el-form-item label="名片图片" prop="imageUrl">
             <el-upload
+      :headers="ossUploadHeaders"
               v-model="form.icon"
               class="avatar-uploader"
               :action="uploadUrl"
@@ -221,6 +222,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listCard, getCard, delCard, addCard, updateCard, exportCard } from "@/api/company/companyUserCard";
 import addSms from './addSms.vue';
 import customerSelect from './customerSelect.vue';
@@ -234,6 +236,7 @@ export default {
   },
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       baseUrl: process.env.VUE_APP_BASE_API,
       // 遮罩层

+ 3 - 0
src/views/course/Material/index.vue

@@ -69,6 +69,7 @@
                 </el-col>
                 <el-col :span="12" style="text-align: right;">
                   <el-upload
+      :headers="ossUploadHeaders"
                     :action="uploadUrl"
                     :file-list="[]"
                     :on-progress="handleProgress"
@@ -138,6 +139,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, } from "@/api/qw/material";
 import { listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup } from "@/api/qw/materialGroup";
 export default {
@@ -178,6 +180,7 @@ export default {
   },
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       dialogVisible: false,
       materialUrl: '',

+ 6 - 0
src/views/course/courseFinishTemp/index.vue

@@ -275,6 +275,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -293,6 +294,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -457,6 +459,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -475,6 +478,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -604,6 +608,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import {
   addCourseFinishTemp,
   delCourseFinishTemp,
@@ -623,6 +628,7 @@ export default {
   components: {Tip, ImageUpload,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       videoOptionsLoading: false,
       videoOptions: [],
       videoLoading: false,

+ 6 - 0
src/views/course/courseFinishTempParent/deptIndex.vue

@@ -229,6 +229,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -247,6 +248,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -411,6 +413,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -429,6 +432,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -538,6 +542,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listCourseFinishTempParent, getCourseFinishTempParent, delCourseFinishTempParent, addCourseFinishTempParent, updateCourseFinishTempParent, exportCourseFinishTempParent } from "@/api/course/courseFinishTempParent";
 import {courseList, videoList} from '@/api/qw/sop'
 import ImageUpload from '@/views/qw/sop/ImageUpload.vue'
@@ -554,6 +559,7 @@ export default {
   components: { ImageUpload ,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       videoOptionsLoading: false,
       videoOptions: [],
       videoLoading: false,

+ 6 - 0
src/views/course/courseFinishTempParent/index.vue

@@ -229,6 +229,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -247,6 +248,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -411,6 +413,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -429,6 +432,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -538,6 +542,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listCourseFinishTempParent, getCourseFinishTempParent, delCourseFinishTempParent, addCourseFinishTempParent, updateCourseFinishTempParent, exportCourseFinishTempParent } from "@/api/course/courseFinishTempParent";
 import {courseList, videoList} from '@/api/qw/sop'
 import ImageUpload from '@/views/qw/sop/ImageUpload.vue'
@@ -550,6 +555,7 @@ export default {
   components: { ImageUpload ,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       videoOptionsLoading: false,
       videoOptions: [],
       videoLoading: false,

+ 6 - 0
src/views/course/courseFinishTempParent/myIndex.vue

@@ -229,6 +229,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -247,6 +248,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -411,6 +413,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -429,6 +432,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -538,6 +542,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { myListCourseFinishTempParent, getCourseFinishTempParent, delCourseFinishTempParent, addCourseFinishTempParent, updateCourseFinishTempParent, exportCourseFinishTempParent } from "@/api/course/courseFinishTempParent";
 import {courseList, videoList} from '@/api/qw/sop'
 import ImageUpload from '@/views/qw/sop/ImageUpload.vue'
@@ -551,6 +556,7 @@ export default {
   components: { ImageUpload ,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       videoOptionsLoading: false,
       videoOptions: [],
       videoLoading: false,

+ 4 - 1
src/views/crm/components/addVisit.vue

@@ -36,6 +36,7 @@
                 </el-form-item>
                 <!-- <el-form-item label="跟进照片" prop="photos">
                         <el-upload
+      :headers="ossUploadHeaders"
                         :file-list="photoList"
                         :action="uploadUrl"
                         class="avatar-uploader"
@@ -65,11 +66,13 @@
 </template>
   
 <script>
-    import { listCustomerVisit, getCustomerVisit, delCustomerVisit, addCustomerVisit, updateCustomerVisit, exportCustomerVisit } from "@/api/crm/customerVisit";
+    import { getToken } from '@/utils/auth';
+import { listCustomerVisit, getCustomerVisit, delCustomerVisit, addCustomerVisit, updateCustomerVisit, exportCustomerVisit } from "@/api/crm/customerVisit";
     export default {
         name: "visit",
         data() {
             return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
                 customerTypeOptions:[],
                 statusOptions:[],
                 dialogImageUrl: '',

+ 6 - 1
src/views/fastGpt/fastGptCollection/index.vue

@@ -176,7 +176,8 @@
           <el-input v-model="form.link" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="上传文件" prop="fileUrl" v-if="form.type==='file'">
-          <el-upload v-model="form.fileUrl"
+          <el-upload
+      :headers="ossUploadHeaders" v-model="form.fileUrl"
                      class="avatar-uploader"
                      :action="uploadUrl"
                      :show-file-list="false"
@@ -200,6 +201,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listFastGptCollection, getFastGptCollection, delFastGptCollection, addFastGptCollection, updateFastGptCollection, exportFastGptCollection,syncCollection } from "@/api/fastGpt/fastGptCollection";
 import {getAllDataSetList} from "../../../api/fastGpt/fastGptDataset";
 
@@ -288,6 +290,9 @@ export default {
     this.getList();
   },
   computed: {
+    ossUploadHeaders() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     chunkSizePlaceholder() {
       return this.form.trainingType === 'chunk'
         ? 'chunk模式:100~3000'

+ 6 - 1
src/views/fastGpt/fastGptDataset/fastGptCollection.vue

@@ -229,7 +229,8 @@
         </el-form-item>
         <el-form-item label="上传文件" prop="fileUrl" v-if="form.type==='file'">
           <div style="display: flex;flex-wrap: nowrap">
-            <el-upload v-model="form.fileUrl"
+            <el-upload
+      :headers="ossUploadHeaders" v-model="form.fileUrl"
                        class="avatar-uploader"
                        :action="uploadUrl"
                        :show-file-list="false"
@@ -261,6 +262,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listFastGptCollection, getFastGptCollection, delFastGptCollection, addFastGptCollection, updateFastGptCollection, exportFastGptCollection,syncCollection } from "@/api/fastGpt/fastGptCollection";
 import {getAllDataSetList} from "../../../api/fastGpt/fastGptDataset";
 import fastGptCollentionData from "@/views/fastGpt/fastGptDataset/fastGptCollentionData.vue";
@@ -356,6 +358,9 @@ export default {
     this.getList();
   },
   computed: {
+    ossUploadHeaders() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     chunkSizePlaceholder() {
       return this.form.trainingType === 'chunk'
         ? 'chunk模式:100~3000'

+ 3 - 0
src/views/qw/contactWay/index.vue

@@ -473,6 +473,7 @@
         </el-form-item>
         <el-form-item label="图片的链接" prop="imagePicUrl"  v-if="form.isWelcome==1">
           <el-upload
+      :headers="ossUploadHeaders"
              v-model="form.imgUrl"
              class="avatar-uploader"
              :action="uploadUrl"
@@ -751,6 +752,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import {
   informationList,
   sync,
@@ -777,6 +779,7 @@ export default {
    components: {qwUserList, contactWayGroup,ImageUpload,statisDetails,group},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       // 遮罩层
       loading: true,
 	  informationList:[],

+ 3 - 0
src/views/qw/drainageLink/type1.vue

@@ -177,6 +177,7 @@
         </el-form-item>
         <el-form-item label="企业头像" prop="avatarUrl">
           <el-upload
+      :headers="ossUploadHeaders"
              v-model="form.avatarUrl"
              class="avatar-uploader"
              :action="uploadUrl"
@@ -208,6 +209,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listDrainageLink, getDrainageLink, delDrainageLink, addDrainageLink, updateDrainageLink, exportDrainageLink } from "@/api/qw/drainageLink";
 import { listContactWay} from "@/api/qw/contactWay";
 import statisDetails from '@/views/qw/drainageLink/statisDetails.vue'
@@ -216,6 +218,7 @@ export default {
   components: { statisDetails},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       // 遮罩层
       show:{
               title:"数据统计",

+ 4 - 0
src/views/qw/drainageLink/type2.vue

@@ -151,6 +151,7 @@
         </el-form-item>
         <el-form-item label="入群链接" prop="qrCode" >
           <el-upload
+      :headers="ossUploadHeaders"
              v-model="form.qrCode"
              class="avatar-uploader"
              :action="uploadUrl"
@@ -177,6 +178,7 @@
         </el-form-item>
         <el-form-item label="企业头像" prop="avatarUrl">
           <el-upload
+      :headers="ossUploadHeaders"
              v-model="form.avatarUrl"
              class="avatar-uploader"
              :action="uploadUrl"
@@ -208,6 +210,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listDrainageLink, getDrainageLink, delDrainageLink, addDrainageLink, updateDrainageLink, exportDrainageLink } from "@/api/qw/drainageLink";
 import { listContactWay} from "@/api/qw/contactWay";
 import statisDetails from '@/views/qw/drainageLink/statisDetails.vue'
@@ -216,6 +219,7 @@ export default {
     components: { statisDetails},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       show:{
               title:"数据统计",
               open:false,

+ 10 - 1
src/views/qw/externalContact/deptIndex.vue

@@ -411,7 +411,7 @@
       <el-table-column label="删除时间" align="center" prop="delTime" width="100px" />
       <el-table-column label="备注电话号码" align="center" prop="remarkMobiles" width="150px">
         <template slot-scope="scope">
-          <div v-for="i in JSON.parse(scope.row.remarkMobiles)" :key="i">{{i}}</div>
+          <div v-for="(i, idx) in parseRemarkMobiles(scope.row.remarkMobiles)" :key="idx">{{i}}</div>
         </template>
       </el-table-column>
       <el-table-column label="备注企业名称" align="center" prop="remarkCorpName" />
@@ -1267,6 +1267,15 @@ export default {
       });
       this.getList();
     },
+    parseRemarkMobiles(val) {
+      if (val == null || val === '') return [];
+      try {
+        const parsed = JSON.parse(val);
+        return Array.isArray(parsed) ? parsed : (parsed == null ? [] : [parsed]);
+      } catch (e) {
+        return [val];
+      }
+    },
     /** 查询企业微信客户列表 */
     getList() {
       this.loading = true;

+ 13 - 2
src/views/qw/externalContact/myExternalContact.vue

@@ -416,7 +416,7 @@
         </template>
       </el-table-column>
       <el-table-column label="下单次数" align="center" width="100px">
-        <template #default="scope">
+        <template slot-scope="scope">
           {{ scope.row.orderCount && scope.row.orderCount !== 0 ? scope.row.orderCount : '' }}
         </template>
       </el-table-column>
@@ -432,7 +432,7 @@
       <el-table-column label="注册时间" align="center" prop="registerTime" width="100px" />
       <el-table-column label="备注电话号码" align="center" prop="remarkMobiles" width="150px">
         <template slot-scope="scope">
-          <div v-for="i in JSON.parse(scope.row.remarkMobiles)" :key="i">{{i}}</div>
+          <div v-for="(i, idx) in parseRemarkMobiles(scope.row.remarkMobiles)" :key="idx">{{i}}</div>
         </template>
       </el-table-column>
       <el-table-column label="备注企业名称" align="center" prop="remarkCorpName" />
@@ -1675,6 +1675,15 @@ export default {
       });
     },
 
+    parseRemarkMobiles(val) {
+      if (val == null || val === '') return [];
+      try {
+        const parsed = JSON.parse(val);
+        return Array.isArray(parsed) ? parsed : (parsed == null ? [] : [parsed]);
+      } catch (e) {
+        return [val];
+      }
+    },
     /** 查询企业微信客户列表 */
     getList() {
       this.loading = true;
@@ -1682,6 +1691,8 @@ export default {
         this.externalContactList = response.rows;
         this.total = response.total;
         this.loading = false;
+      }).catch(() => {
+        this.loading = false;
       });
     },
 

+ 17 - 2
src/views/qw/externalContactTransfer/index.vue

@@ -189,7 +189,7 @@
         <template slot-scope="scope">
           <div class="tag-container">
             <div class="tag-list">
-              <div v-for="i in JSON.parse(scope.row.tagIds)" :key="i" style="display: inline;">
+              <div v-for="i in parseJsonArray(scope.row.tagIds)" :key="i" style="display: inline;">
               <el-tag type="success" v-for="ii in tagList" :key="ii.id" style="margin: 3px;" v-if="ii.tagId==i">{{ii.name}}</el-tag>
               </div>
             </div>
@@ -215,7 +215,7 @@
       <el-table-column label="企业id" align="center" prop="corpId" />
       <el-table-column label="备注电话号码" align="center" prop="remarkMobiles" width="150px">
         <template slot-scope="scope">
-          <span v-for="i in JSON.parse(scope.row.remarkMobiles)" :key="i">{{i}}</span>
+          <span v-for="i in parseJsonArray(scope.row.remarkMobiles)" :key="i">{{i}}</span>
         </template>
       </el-table-column>
       <el-table-column label="备注企业名称" align="center" prop="remarkCorpName" />
@@ -417,6 +417,21 @@ export default {
 
   },
   methods: {
+    /** 安全解析 JSON 数组,避免空字符串导致渲染报错 */
+    parseJsonArray(val) {
+      if (val == null || val === '') {
+        return [];
+      }
+      if (Array.isArray(val)) {
+        return val;
+      }
+      try {
+        const parsed = JSON.parse(val);
+        return Array.isArray(parsed) ? parsed : [];
+      } catch (e) {
+        return [];
+      }
+    },
     updateCorpId(){
       listTag({corpId:this.queryParams.corpId}).then(response => {
         this.tagList = response.rows;

+ 3 - 0
src/views/qw/friendMaterial/index.vue

@@ -69,6 +69,7 @@
                 </el-col>
                 <el-col :span="12" style="text-align: right;">
                   <el-upload
+      :headers="ossUploadHeaders"
                     :action="uploadUrl"
                     :file-list="[]"
                     :on-progress="handleProgress"
@@ -138,6 +139,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, } from "@/api/qw/material";
 import { listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup } from "@/api/qw/materialGroup";
 export default {
@@ -178,6 +180,7 @@ export default {
   },
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       dialogVisible: false,
       materialUrl: '',

+ 4 - 3
src/views/qw/friendWelcome/ImageUploadWeclome.vue

@@ -2,6 +2,7 @@
   <div class="component-upload-image">
     <el-upload
       :action="uploadUrl"
+      :headers="headers"
       list-type="picture-card"
       :on-success="handleUploadSuccess"
       :before-upload="handleBeforeUpload"
@@ -67,9 +68,6 @@ export default {
       hideUpload: false,
       baseUrl:"",
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
-      headers: {
-        Authorization: "Bearer " + getToken(),
-      },
       fileList: []
     };
   },
@@ -100,6 +98,9 @@ export default {
     }
   },
   computed: {
+    headers() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     // 是否显示提示
     showTip() {
       return this.isShowTip && (this.fileType || this.fileSize);

+ 132 - 0
src/views/qw/friendWelcome/deptFriendWelcome.vue

@@ -199,6 +199,7 @@
                     <span v-if="item.msgtype === 'image'">【图片】: {{ item.image.pic_url }}</span>
                     <span v-if="item.msgtype === 'link'">【链接】: {{ item.link.title }}-{{item.link.desc}}</span>
                     <span v-if="item.msgtype === 'miniprogram'">【小程序】: {{ item.miniprogram.title }}</span>
+                    <span v-if="item.msgtype === 'luckyBag'">【福袋】: {{ (item.luckyBag && item.luckyBag.luckyBagName) || '' }}</span>
                     </div>
                     <div style="  display: flex;gap: 10px;">
                       <el-button
@@ -232,6 +233,9 @@
                 <el-dropdown-item command="miniprogram">
                   <i class="el-icon-link" style="margin-right: 10px;"></i>小程序
                 </el-dropdown-item>
+                <el-dropdown-item command="luckyBag">
+                  <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                </el-dropdown-item>
               </el-dropdown-menu>
 
               <span class="el-dropdown-link">
@@ -323,6 +327,7 @@
                                     <span v-if="attachment.msgtype === 'image'">【图片】: {{ attachment.image.pic_url }}</span>
                                     <span v-if="attachment.msgtype === 'link'">【链接】: {{ attachment.link.title }}-{{attachment.link.desc}}</span>
                                     <span v-if="attachment.msgtype === 'miniprogram'">【小程序】: {{ attachment.miniprogram.title }}</span>
+                                    <span v-if="attachment.msgtype === 'luckyBag'">【福袋】: {{ (attachment.luckyBag && attachment.luckyBag.luckyBagName) || '' }}</span>
                                   </div>
                                   <div style="  display: flex;gap: 10px;">
                                     <el-button
@@ -356,6 +361,9 @@
                               <el-dropdown-item command="miniprogram">
                                 <i class="el-icon-link" style="margin-right: 10px;"></i>小程序
                               </el-dropdown-item>
+                              <el-dropdown-item command="luckyBag">
+                                <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                              </el-dropdown-item>
                             </el-dropdown-menu>
 
                             <span class="el-dropdown-link">
@@ -502,6 +510,27 @@
           <!--            <el-input v-model="fileFrom.linkUrl" :rows="2"  placeholder="选择了课程小节会自动设置地址" />-->
           <!--          </el-form-item>-->
         </div>
+        <div v-if="welcomeItem.type==='luckyBag'">
+          <el-card class="box-card">
+            <el-form-item label="福袋名称">
+              <el-select v-model="luckyBag.luckyBagId"
+                         placeholder="请选择福袋" size="mini"
+                         @change="getLuckyBagStatus(luckyBag.luckyBagId)">
+                <el-option
+                  v-for="dict in luckyBagList"
+                  :key="dict.id"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="福袋状态">
+              <el-tag :type="luckyBag.luckyBagDataStatus == 1 ? 'success' : 'danger'">
+                {{ luckyBag.luckyBagDataStatus == 1 ? '启用' : '禁用' }}
+              </el-tag>
+            </el-form-item>
+          </el-card>
+        </div>
       </el-form>
       <div slot="footer" class="dialog-footer" style="text-align: center">
         <el-button type="primary" @click="confirmUpload">确定</el-button>
@@ -520,6 +549,7 @@ import ImageUpload from '@/views/qw/material/ImageUpload.vue'
 import { getQwAllUserList } from '@/api/company/companyUser'
 import { getMyQwUserList,getMyQwCompanyList } from "@/api/qw/user";
 import {courseList, videoList} from "@/api/qw/sop";
+import { listReward } from '@/api/qw/luckyBag'
 export default {
   name: "deptFriendWelcome",
   components: { ImageUpload, qwUserList,ImageUploadWeclome},
@@ -527,6 +557,19 @@ export default {
     return {
       // 遮罩层
       loading: true,
+      luckyBag:{
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      },
+      luckyBagList: [],
+      queryParams1: {
+        pageNum: 1,
+        pageSize: 100,
+        dataStatus: '1',
+        name: null,
+        type: null
+      },
       // 导出遮罩层
       exportLoading: false,
       // 选中数组
@@ -667,6 +710,9 @@ export default {
     courseList().then(response => {
       this.courseList = response.list;
     });
+    listReward(this.queryParams1).then(response => {
+      this.luckyBagList = response.rows;
+    });
     getMyQwCompanyList().then(response => {
 
             this.myQwCompanyList = response.data;
@@ -685,6 +731,16 @@ export default {
     }
   },
   methods: {
+    getLuckyBagStatus(luckyBagId) {
+      const selectedLuckyBag = this.luckyBagList.find(item => item.id === luckyBagId);
+      if (selectedLuckyBag) {
+        this.luckyBag.luckyBagDataStatus = selectedLuckyBag.dataStatus;
+        this.luckyBag.luckyBagName = selectedLuckyBag.name;
+      } else {
+        this.luckyBag.luckyBagDataStatus = null;
+        this.luckyBag.luckyBagName = null;
+      }
+    },
     updateCorpId(){
         this.getList();
         getQwAllUserList(this.queryParams.corpId).then(response => {
@@ -803,6 +859,8 @@ export default {
           return '添加链接';
         case 'miniprogram':
           return '添加小程序';
+        case 'luckyBag':
+          return '添加福袋';
       }
     },
 
@@ -927,6 +985,15 @@ export default {
           this.videoList = response.list;
         });
 
+      } else if (item.msgtype === 'luckyBag') {
+        this.welcomeItem.type = 'luckyBag';
+        const lb = item.luckyBag || {};
+        this.luckyBag.luckyBagId = lb.luckyBagId;
+        this.luckyBag.luckyBagName = lb.luckyBagName;
+        this.luckyBag.luckyBagDataStatus = lb.luckyBagDataStatus;
+        if (lb.luckyBagId) {
+          this.getLuckyBagStatus(lb.luckyBagId);
+        }
       }
 
 
@@ -942,6 +1009,8 @@ export default {
           return '编辑链接';
         case 'miniprogram':
           return '编辑小程序';
+        case 'luckyBag':
+          return '编辑福袋';
       }
     },
 
@@ -1004,6 +1073,19 @@ export default {
             expiresDays:this.fileFrom.expiresDays,
           }
         };
+      } else if (type === 'luckyBag') {
+        if (!this.luckyBag.luckyBagId) {
+          return this.$message.error("福袋不能为空");
+        }
+        attachment = {
+          msgtype: 'luckyBag',
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: this.luckyBag.luckyBagId,
+            luckyBagName: this.luckyBag.luckyBagName,
+            luckyBagDataStatus: this.luckyBag.luckyBagDataStatus
+          }
+        };
       }
 
       if (itemIndex === -1) {
@@ -1057,6 +1139,11 @@ export default {
         miniprogramPicUrl:null,
         miniprogramAppid:null,
       };
+      this.luckyBag = {
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      };
 
       this.welcomeItem={
         open: false,
@@ -1144,6 +1231,21 @@ export default {
           });
         }
 
+        // 处理福袋附件数据格式(兼容旧数据 / 残缺数据)
+        if (Array.isArray(data.attachments)) {
+          data.attachments = data.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+        }
+
+        // 同样处理分时段欢迎语中的附件
+        if (Array.isArray(data.daypartingItemlist)) {
+          data.daypartingItemlist = data.daypartingItemlist.map(item => {
+            if (item.attachments && Array.isArray(item.attachments)) {
+              item.attachments = item.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+            }
+            return item;
+          });
+        }
+
         // 赋值给表单
         this.form = data;
         this.userSelectList=this.form.userSelectList
@@ -1152,6 +1254,36 @@ export default {
         this.title = "修改好友欢迎语";
       });
     },
+    /** 兼容旧格式 / 残缺福袋附件 */
+    normalizeLuckyBagAttachment(attachment) {
+      if (!attachment) return attachment;
+      const mp = attachment.miniprogram || {};
+      const isOldLucky = attachment.msgtype === 'miniprogram'
+        && (attachment.isLuckyBag == 1 || mp.isLuckyBag == 1);
+      if (isOldLucky) {
+        return {
+          msgtype: 'luckyBag',
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus
+          }
+        };
+      }
+      if (attachment.msgtype === 'luckyBag' && !attachment.luckyBag) {
+        return {
+          ...attachment,
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || attachment.luckyBagName || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus || attachment.luckyBagDataStatus
+          }
+        };
+      }
+      return attachment;
+    },
     /** 提交按钮 验证 from表单*/
     submitForm() {
 

+ 135 - 0
src/views/qw/friendWelcome/indexNew.vue

@@ -201,6 +201,7 @@
                     <span v-if="item.msgtype === 'video'">【视频】: {{ item.video.url }}</span>
                     <span v-if="item.msgtype === 'link'">【链接】: {{ item.link.title }}-{{item.link.desc}}</span>
                     <span v-if="item.msgtype === 'miniprogram'">【小程序】: {{ item.miniprogram.title }}</span>
+                    <span v-if="item.msgtype === 'luckyBag'">【福袋】: {{ (item.luckyBag && item.luckyBag.luckyBagName) || '' }}</span>
                     </div>
                     <div style="  display: flex;gap: 10px;">
                       <el-button
@@ -237,6 +238,9 @@
                 <el-dropdown-item command="miniprogram">
                   <i class="el-icon-link" style="margin-right: 10px;"></i>小程序
                 </el-dropdown-item>
+                <el-dropdown-item command="luckyBag">
+                  <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                </el-dropdown-item>
               </el-dropdown-menu>
 
               <span class="el-dropdown-link">
@@ -329,6 +333,7 @@
                                     <span v-if="attachment.msgtype === 'video'">【视频】: {{ attachment.video.url }}</span>
                                     <span v-if="attachment.msgtype === 'link'">【链接】: {{ attachment.link.title }}-{{attachment.link.desc}}</span>
                                     <span v-if="attachment.msgtype === 'miniprogram'">【小程序】: {{ attachment.miniprogram.title }}</span>
+                                    <span v-if="attachment.msgtype === 'luckyBag'">【福袋】: {{ (attachment.luckyBag && attachment.luckyBag.luckyBagName) || '' }}</span>
                                   </div>
                                   <div style="  display: flex;gap: 10px;">
                                     <el-button
@@ -365,6 +370,9 @@
                               <el-dropdown-item command="miniprogram">
                                 <i class="el-icon-link" style="margin-right: 10px;"></i>小程序
                               </el-dropdown-item>
+                              <el-dropdown-item command="luckyBag">
+                                <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                              </el-dropdown-item>
                             </el-dropdown-menu>
 
                             <span class="el-dropdown-link">
@@ -412,6 +420,7 @@
           <el-form-item label="视频:" prop="videoUrl">
 
             <el-upload
+      :headers="ossUploadHeaders"
               v-model="fileFrom.videoUrl"
               class="avatar-uploader"
               :action="uploadUrl"
@@ -530,6 +539,27 @@
           <!--            <el-input v-model="fileFrom.linkUrl" :rows="2"  placeholder="选择了课程小节会自动设置地址" />-->
           <!--          </el-form-item>-->
         </div>
+        <div v-if="welcomeItem.type==='luckyBag'">
+          <el-card class="box-card">
+            <el-form-item label="福袋名称">
+              <el-select v-model="luckyBag.luckyBagId"
+                         placeholder="请选择福袋" size="mini"
+                         @change="getLuckyBagStatus(luckyBag.luckyBagId)">
+                <el-option
+                  v-for="dict in luckyBagList"
+                  :key="dict.id"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="福袋状态">
+              <el-tag :type="luckyBag.luckyBagDataStatus == 1 ? 'success' : 'danger'">
+                {{ luckyBag.luckyBagDataStatus == 1 ? '启用' : '禁用' }}
+              </el-tag>
+            </el-form-item>
+          </el-card>
+        </div>
       </el-form>
       <div slot="footer" class="dialog-footer" style="text-align: center">
         <el-button type="primary" @click="confirmUpload('fileFrom')">确定</el-button>
@@ -541,6 +571,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listFriendWelcome, getFriendWelcome, delFriendWelcome, addFriendWelcome, updateFriendWelcome, exportFriendWelcome } from "@/api/qw/friendWelcome";
 import qwUserList from '@/views/qw/user/qwUserList.vue'
 import ImageUploadWeclome from '@/views/qw/friendWelcome/ImageUploadWeclome.vue'
@@ -548,13 +579,28 @@ import ImageUpload from '@/views/qw/material/ImageUpload.vue'
 import { getQwAllUserList } from '@/api/company/companyUser'
 import { getMyQwUserList,getMyQwCompanyList } from "@/api/qw/user";
 import {courseList, videoList} from "@/api/qw/sop";
+import { listReward } from '@/api/qw/luckyBag'
 export default {
   name: "FriendWelcome",
   components: { ImageUpload, qwUserList,ImageUploadWeclome},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       // 遮罩层
       loading: true,
+      luckyBag:{
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      },
+      luckyBagList: [],
+      queryParams1: {
+        pageNum: 1,
+        pageSize: 100,
+        dataStatus: '1',
+        name: null,
+        type: null
+      },
       // 导出遮罩层
       exportLoading: false,
       // 选中数组
@@ -714,6 +760,9 @@ export default {
     courseList().then(response => {
       this.courseList = response.list;
     });
+    listReward(this.queryParams1).then(response => {
+      this.luckyBagList = response.rows;
+    });
     getMyQwCompanyList().then(response => {
 
             this.myQwCompanyList = response.data;
@@ -732,6 +781,16 @@ export default {
     }
   },
   methods: {
+    getLuckyBagStatus(luckyBagId) {
+      const selectedLuckyBag = this.luckyBagList.find(item => item.id === luckyBagId);
+      if (selectedLuckyBag) {
+        this.luckyBag.luckyBagDataStatus = selectedLuckyBag.dataStatus;
+        this.luckyBag.luckyBagName = selectedLuckyBag.name;
+      } else {
+        this.luckyBag.luckyBagDataStatus = null;
+        this.luckyBag.luckyBagName = null;
+      }
+    },
     updateCorpId(){
         this.getList();
         getQwAllUserList(this.queryParams.corpId).then(response => {
@@ -850,6 +909,8 @@ export default {
           return '添加链接';
         case 'miniprogram':
           return '添加小程序';
+        case 'luckyBag':
+          return '添加福袋';
       }
     },
 
@@ -976,6 +1037,15 @@ export default {
           this.videoList = response.list;
         });
 
+      } else if (item.msgtype === 'luckyBag') {
+        this.welcomeItem.type = 'luckyBag';
+        const lb = item.luckyBag || {};
+        this.luckyBag.luckyBagId = lb.luckyBagId;
+        this.luckyBag.luckyBagName = lb.luckyBagName;
+        this.luckyBag.luckyBagDataStatus = lb.luckyBagDataStatus;
+        if (lb.luckyBagId) {
+          this.getLuckyBagStatus(lb.luckyBagId);
+        }
       }
 
 
@@ -991,6 +1061,8 @@ export default {
           return '编辑链接';
         case 'miniprogram':
           return '编辑小程序';
+        case 'luckyBag':
+          return '编辑福袋';
       }
     },
 
@@ -1061,6 +1133,19 @@ export default {
                   expiresDays:this.fileFrom.expiresDays,
                 }
               };
+            } else if (type === 'luckyBag') {
+              if (!this.luckyBag.luckyBagId) {
+                return this.$message.error("福袋不能为空");
+              }
+              attachment = {
+                msgtype: 'luckyBag',
+                isLuckyBag: 1,
+                luckyBag: {
+                  luckyBagId: this.luckyBag.luckyBagId,
+                  luckyBagName: this.luckyBag.luckyBagName,
+                  luckyBagDataStatus: this.luckyBag.luckyBagDataStatus
+                }
+              };
             }
 
             if (itemIndex === -1) {
@@ -1119,6 +1204,11 @@ export default {
         miniprogramPicUrl:null,
         miniprogramAppid:null,
       };
+      this.luckyBag = {
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      };
 
       this.welcomeItem={
         open: false,
@@ -1207,6 +1297,21 @@ export default {
           });
         }
 
+        // 处理福袋附件数据格式(兼容旧数据 / 残缺数据)
+        if (Array.isArray(data.attachments)) {
+          data.attachments = data.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+        }
+
+        // 同样处理分时段欢迎语中的附件
+        if (Array.isArray(data.daypartingItemlist)) {
+          data.daypartingItemlist = data.daypartingItemlist.map(item => {
+            if (item.attachments && Array.isArray(item.attachments)) {
+              item.attachments = item.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+            }
+            return item;
+          });
+        }
+
         // 赋值给表单
         this.form = data;
         this.userSelectList=this.form.userSelectList
@@ -1215,6 +1320,36 @@ export default {
         this.title = "修改好友欢迎语";
       });
     },
+    /** 兼容旧格式 / 残缺福袋附件 */
+    normalizeLuckyBagAttachment(attachment) {
+      if (!attachment) return attachment;
+      const mp = attachment.miniprogram || {};
+      const isOldLucky = attachment.msgtype === 'miniprogram'
+        && (attachment.isLuckyBag == 1 || mp.isLuckyBag == 1);
+      if (isOldLucky) {
+        return {
+          msgtype: 'luckyBag',
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus
+          }
+        };
+      }
+      if (attachment.msgtype === 'luckyBag' && !attachment.luckyBag) {
+        return {
+          ...attachment,
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || attachment.luckyBagName || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus || attachment.luckyBagDataStatus
+          }
+        };
+      }
+      return attachment;
+    },
     /** 提交按钮 验证 from表单*/
     submitForm() {
 

+ 134 - 0
src/views/qw/friendWelcome/myIndexNew.vue

@@ -200,6 +200,7 @@
                       <span v-if="item.msgtype === 'image'">【图片】: {{ item.image.pic_url }}</span>
                       <span v-if="item.msgtype === 'link'">【链接】: {{ item.link.title }}-{{ item.link.desc }}</span>
                       <span v-if="item.msgtype === 'miniprogram'">【小程序】: {{ item.miniprogram.title }}</span>
+                      <span v-if="item.msgtype === 'luckyBag'">【福袋】: {{ (item.luckyBag && item.luckyBag.luckyBagName) || '' }}</span>
                     </div>
                     <div style="  display: flex;gap: 10px;">
                       <el-button
@@ -235,6 +236,9 @@
                 <el-dropdown-item command="miniprogram">
                   <i class="el-icon-link" style="margin-right: 10px;"></i>小程序
                 </el-dropdown-item>
+                <el-dropdown-item command="luckyBag">
+                  <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                </el-dropdown-item>
               </el-dropdown-menu>
 
               <span class="el-dropdown-link">
@@ -343,6 +347,9 @@
                                   <span v-if="attachment.msgtype === 'miniprogram'">【小程序】: {{
                                       attachment.miniprogram.title
                                     }}</span>
+                                  <span v-if="attachment.msgtype === 'luckyBag'">【福袋】: {{
+                                      (attachment.luckyBag && attachment.luckyBag.luckyBagName) || ''
+                                    }}</span>
                                 </div>
                                 <div style="  display: flex;gap: 10px;">
                                   <el-button
@@ -379,6 +386,9 @@
                             <!--                              <el-dropdown-item command="miniprogram">-->
                             <!--                                <i class="el-icon-link" style="margin-right: 10px;"></i>小程序-->
                             <!--                              </el-dropdown-item>-->
+                            <el-dropdown-item command="luckyBag">
+                              <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                            </el-dropdown-item>
                           </el-dropdown-menu>
 
                           <span class="el-dropdown-link">
@@ -538,6 +548,27 @@
           <!--            <el-input v-model="fileFrom.linkUrl" :rows="2"  placeholder="选择了课程小节会自动设置地址" />-->
           <!--          </el-form-item>-->
         </div>
+        <div v-if="welcomeItem.type==='luckyBag'">
+          <el-card class="box-card">
+            <el-form-item label="福袋名称">
+              <el-select v-model="luckyBag.luckyBagId"
+                         placeholder="请选择福袋" size="mini"
+                         @change="getLuckyBagStatus(luckyBag.luckyBagId)">
+                <el-option
+                  v-for="dict in luckyBagList"
+                  :key="dict.id"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="福袋状态">
+              <el-tag :type="luckyBag.luckyBagDataStatus == 1 ? 'success' : 'danger'">
+                {{ luckyBag.luckyBagDataStatus == 1 ? '启用' : '禁用' }}
+              </el-tag>
+            </el-form-item>
+          </el-card>
+        </div>
       </el-form>
       <div slot="footer" class="dialog-footer" style="text-align: center">
         <el-button type="primary" @click="confirmUpload">确定</el-button>
@@ -564,6 +595,7 @@ import ImageUpload from '@/views/qw/material/ImageUpload.vue'
 import {getQwAllUserList} from '@/api/company/companyUser'
 import {getMyQwUserList, getMyQwCompanyList} from "@/api/qw/user";
 import {courseList, videoList} from "@/api/qw/sop";
+import { listReward } from '@/api/qw/luckyBag'
 
 export default {
   name: "FriendWelcome",
@@ -572,6 +604,19 @@ export default {
     return {
       // 遮罩层
       loading: true,
+      luckyBag: {
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      },
+      luckyBagList: [],
+      queryParams1: {
+        pageNum: 1,
+        pageSize: 100,
+        dataStatus: '1',
+        name: null,
+        type: null
+      },
       // 导出遮罩层
       exportLoading: false,
       // 选中数组
@@ -713,6 +758,9 @@ export default {
     courseList().then(response => {
       this.courseList = response.list;
     });
+    listReward(this.queryParams1).then(response => {
+      this.luckyBagList = response.rows;
+    });
     getMyQwCompanyList().then(response => {
 
       this.myQwCompanyList = response.data;
@@ -731,6 +779,16 @@ export default {
     }
   },
   methods: {
+    getLuckyBagStatus(luckyBagId) {
+      const selectedLuckyBag = this.luckyBagList.find(item => item.id === luckyBagId);
+      if (selectedLuckyBag) {
+        this.luckyBag.luckyBagDataStatus = selectedLuckyBag.dataStatus;
+        this.luckyBag.luckyBagName = selectedLuckyBag.name;
+      } else {
+        this.luckyBag.luckyBagDataStatus = null;
+        this.luckyBag.luckyBagName = null;
+      }
+    },
     updateCorpId() {
       this.getList();
       getQwAllUserList(this.queryParams.corpId).then(response => {
@@ -849,6 +907,8 @@ export default {
           return '添加链接';
         case 'miniprogram':
           return '添加小程序';
+        case 'luckyBag':
+          return '添加福袋';
       }
     },
 
@@ -973,6 +1033,15 @@ export default {
           this.videoList = response.list;
         });
 
+      } else if (item.msgtype === 'luckyBag') {
+        this.welcomeItem.type = 'luckyBag';
+        const lb = item.luckyBag || {};
+        this.luckyBag.luckyBagId = lb.luckyBagId;
+        this.luckyBag.luckyBagName = lb.luckyBagName;
+        this.luckyBag.luckyBagDataStatus = lb.luckyBagDataStatus;
+        if (lb.luckyBagId) {
+          this.getLuckyBagStatus(lb.luckyBagId);
+        }
       }
 
 
@@ -987,6 +1056,8 @@ export default {
           return '编辑链接';
         case 'miniprogram':
           return '编辑小程序';
+        case 'luckyBag':
+          return '编辑福袋';
       }
     },
 
@@ -1055,6 +1126,19 @@ export default {
             expiresDays: this.fileFrom.expiresDays,
           }
         };
+      } else if (type === 'luckyBag') {
+        if (!this.luckyBag.luckyBagId) {
+          return this.$message.error("福袋不能为空");
+        }
+        attachment = {
+          msgtype: 'luckyBag',
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: this.luckyBag.luckyBagId,
+            luckyBagName: this.luckyBag.luckyBagName,
+            luckyBagDataStatus: this.luckyBag.luckyBagDataStatus
+          }
+        };
       }
 
       if (itemIndex === -1) {
@@ -1108,6 +1192,11 @@ export default {
         miniprogramPicUrl: null,
         miniprogramAppid: null,
       };
+      this.luckyBag = {
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      };
 
       this.welcomeItem = {
         open: false,
@@ -1201,6 +1290,21 @@ export default {
           });
         }
 
+        // 处理福袋附件数据格式(兼容旧数据 / 残缺数据)
+        if (Array.isArray(data.attachments)) {
+          data.attachments = data.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+        }
+
+        // 同样处理分时段欢迎语中的附件
+        if (Array.isArray(data.daypartingItemlist)) {
+          data.daypartingItemlist = data.daypartingItemlist.map(item => {
+            if (item.attachments && Array.isArray(item.attachments)) {
+              item.attachments = item.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+            }
+            return item;
+          });
+        }
+
         // 赋值给表单
         this.form = data;
         this.userSelectList = this.form.userSelectList
@@ -1209,6 +1313,36 @@ export default {
         this.title = "修改好友欢迎语";
       });
     },
+    /** 兼容旧格式 / 残缺福袋附件 */
+    normalizeLuckyBagAttachment(attachment) {
+      if (!attachment) return attachment;
+      const mp = attachment.miniprogram || {};
+      const isOldLucky = attachment.msgtype === 'miniprogram'
+        && (attachment.isLuckyBag == 1 || mp.isLuckyBag == 1);
+      if (isOldLucky) {
+        return {
+          msgtype: 'luckyBag',
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus
+          }
+        };
+      }
+      if (attachment.msgtype === 'luckyBag' && !attachment.luckyBag) {
+        return {
+          ...attachment,
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || attachment.luckyBagName || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus || attachment.luckyBagDataStatus
+          }
+        };
+      }
+      return attachment;
+    },
     /** 提交按钮 验证 from表单*/
     submitForm() {
 

+ 135 - 0
src/views/qw/friendWelcome/myWelcome.vue

@@ -199,6 +199,7 @@
                      <span v-if="item.msgtype === 'video'">【视频】: {{ item.video.url }}</span>
                     <span v-if="item.msgtype === 'link'">【链接】: {{ item.link.title }}-{{item.link.desc}}</span>
                     <span v-if="item.msgtype === 'miniprogram'">【小程序】: {{ item.miniprogram.title }}</span>
+                    <span v-if="item.msgtype === 'luckyBag'">【福袋】: {{ (item.luckyBag && item.luckyBag.luckyBagName) || '' }}</span>
                     </div>
                     <div style="  display: flex;gap: 10px;">
                       <el-button
@@ -235,6 +236,9 @@
                 <el-dropdown-item command="miniprogram">
                   <i class="el-icon-link" style="margin-right: 10px;"></i>小程序
                 </el-dropdown-item>
+                <el-dropdown-item command="luckyBag">
+                  <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                </el-dropdown-item>
               </el-dropdown-menu>
 
               <span class="el-dropdown-link">
@@ -326,6 +330,7 @@
                                     <span v-if="attachment.msgtype === 'image'">【图片】: {{ attachment.image.pic_url }}</span>
                                     <span v-if="attachment.msgtype === 'link'">【链接】: {{ attachment.link.title }}-{{attachment.link.desc}}</span>
                                     <span v-if="attachment.msgtype === 'miniprogram'">【小程序】: {{ attachment.miniprogram.title }}</span>
+                                    <span v-if="attachment.msgtype === 'luckyBag'">【福袋】: {{ (attachment.luckyBag && attachment.luckyBag.luckyBagName) || '' }}</span>
                                   </div>
                                   <div style="  display: flex;gap: 10px;">
                                     <el-button
@@ -362,6 +367,9 @@
                               <el-dropdown-item command="miniprogram">
                                 <i class="el-icon-link" style="margin-right: 10px;"></i>小程序
                               </el-dropdown-item>
+                              <el-dropdown-item command="luckyBag">
+                                <i class="el-icon-link" style="margin-right: 10px;"></i>福袋
+                              </el-dropdown-item>
                             </el-dropdown-menu>
 
                             <span class="el-dropdown-link">
@@ -409,6 +417,7 @@
           <el-form-item label="视频:" prop="videoUrl">
 
             <el-upload
+      :headers="ossUploadHeaders"
               v-model="fileFrom.videoUrl"
               class="avatar-uploader"
               :action="uploadUrl"
@@ -527,6 +536,27 @@
           <!--            <el-input v-model="fileFrom.linkUrl" :rows="2"  placeholder="选择了课程小节会自动设置地址" />-->
           <!--          </el-form-item>-->
         </div>
+        <div v-if="welcomeItem.type==='luckyBag'">
+          <el-card class="box-card">
+            <el-form-item label="福袋名称">
+              <el-select v-model="luckyBag.luckyBagId"
+                         placeholder="请选择福袋" size="mini"
+                         @change="getLuckyBagStatus(luckyBag.luckyBagId)">
+                <el-option
+                  v-for="dict in luckyBagList"
+                  :key="dict.id"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="福袋状态">
+              <el-tag :type="luckyBag.luckyBagDataStatus == 1 ? 'success' : 'danger'">
+                {{ luckyBag.luckyBagDataStatus == 1 ? '启用' : '禁用' }}
+              </el-tag>
+            </el-form-item>
+          </el-card>
+        </div>
       </el-form>
       <div slot="footer" class="dialog-footer" style="text-align: center">
         <el-button type="primary" @click="confirmUpload('fileFrom')">确定</el-button>
@@ -538,6 +568,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listMyFriendWelcome,listFriendWelcome, getFriendWelcome, delFriendWelcome, addFriendWelcome, updateFriendWelcome, exportFriendWelcome } from "@/api/qw/friendWelcome";
 import qwUserList from '@/views/qw/user/qwUserList.vue'
 import ImageUploadWeclome from '@/views/qw/friendWelcome/ImageUploadWeclome.vue'
@@ -545,15 +576,30 @@ import ImageUpload from '@/views/qw/material/ImageUpload.vue'
 import { getQwAllUserList } from '@/api/company/companyUser'
 import { getMyQwUserList,getMyQwCompanyList } from "@/api/qw/user";
 import {courseList, videoList} from "@/api/qw/sop";
+import { listReward } from '@/api/qw/luckyBag'
 export default {
   name: "myWelcome",
   components: { ImageUpload, qwUserList,ImageUploadWeclome},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       
       uploadUrl: process.env.VUE_APP_BASE_API + "/common/uploadOSS2",
       // 遮罩层
       loading: true,
+      luckyBag:{
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      },
+      luckyBagList: [],
+      queryParams1: {
+        pageNum: 1,
+        pageSize: 100,
+        dataStatus: '1',
+        name: null,
+        type: null
+      },
       // 导出遮罩层
       exportLoading: false,
       // 选中数组
@@ -712,6 +758,9 @@ export default {
     courseList().then(response => {
       this.courseList = response.list;
     });
+    listReward(this.queryParams1).then(response => {
+      this.luckyBagList = response.rows;
+    });
     getMyQwCompanyList().then(response => {
 
             this.myQwCompanyList = response.data;
@@ -730,6 +779,16 @@ export default {
     }
   },
   methods: {
+    getLuckyBagStatus(luckyBagId) {
+      const selectedLuckyBag = this.luckyBagList.find(item => item.id === luckyBagId);
+      if (selectedLuckyBag) {
+        this.luckyBag.luckyBagDataStatus = selectedLuckyBag.dataStatus;
+        this.luckyBag.luckyBagName = selectedLuckyBag.name;
+      } else {
+        this.luckyBag.luckyBagDataStatus = null;
+        this.luckyBag.luckyBagName = null;
+      }
+    },
     updateCorpId(){
         this.getList();
         getQwAllUserList(this.queryParams.corpId).then(response => {
@@ -850,6 +909,8 @@ export default {
           return '添加链接';
         case 'miniprogram':
           return '添加小程序';
+        case 'luckyBag':
+          return '添加福袋';
       }
     },
 
@@ -976,6 +1037,15 @@ export default {
           this.videoList = response.list;
         });
 
+      } else if (item.msgtype === 'luckyBag') {
+        this.welcomeItem.type = 'luckyBag';
+        const lb = item.luckyBag || {};
+        this.luckyBag.luckyBagId = lb.luckyBagId;
+        this.luckyBag.luckyBagName = lb.luckyBagName;
+        this.luckyBag.luckyBagDataStatus = lb.luckyBagDataStatus;
+        if (lb.luckyBagId) {
+          this.getLuckyBagStatus(lb.luckyBagId);
+        }
       }
 
 
@@ -991,6 +1061,8 @@ export default {
           return '编辑链接';
         case 'miniprogram':
           return '编辑小程序';
+        case 'luckyBag':
+          return '编辑福袋';
       }
     },
 
@@ -1061,6 +1133,19 @@ export default {
                   expiresDays:this.fileFrom.expiresDays,
                 }
               };
+            } else if (type === 'luckyBag') {
+              if (!this.luckyBag.luckyBagId) {
+                return this.$message.error("福袋不能为空");
+              }
+              attachment = {
+                msgtype: 'luckyBag',
+                isLuckyBag: 1,
+                luckyBag: {
+                  luckyBagId: this.luckyBag.luckyBagId,
+                  luckyBagName: this.luckyBag.luckyBagName,
+                  luckyBagDataStatus: this.luckyBag.luckyBagDataStatus
+                }
+              };
             }
 
             if (itemIndex === -1) {
@@ -1121,6 +1206,11 @@ export default {
         miniprogramPicUrl:null,
         miniprogramAppid:null,
       };
+      this.luckyBag = {
+        luckyBagId: null,
+        luckyBagName: null,
+        luckyBagDataStatus: null,
+      };
 
       this.welcomeItem={
         open: false,
@@ -1208,6 +1298,21 @@ export default {
           });
         }
 
+        // 处理福袋附件数据格式(兼容旧数据 / 残缺数据)
+        if (Array.isArray(data.attachments)) {
+          data.attachments = data.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+        }
+
+        // 同样处理分时段欢迎语中的附件
+        if (Array.isArray(data.daypartingItemlist)) {
+          data.daypartingItemlist = data.daypartingItemlist.map(item => {
+            if (item.attachments && Array.isArray(item.attachments)) {
+              item.attachments = item.attachments.map(attachment => this.normalizeLuckyBagAttachment(attachment));
+            }
+            return item;
+          });
+        }
+
         // 赋值给表单
         this.form = data;
         this.userSelectList=this.form.userSelectList
@@ -1216,6 +1321,36 @@ export default {
         this.title = "修改好友欢迎语";
       });
     },
+    /** 兼容旧格式 / 残缺福袋附件 */
+    normalizeLuckyBagAttachment(attachment) {
+      if (!attachment) return attachment;
+      const mp = attachment.miniprogram || {};
+      const isOldLucky = attachment.msgtype === 'miniprogram'
+        && (attachment.isLuckyBag == 1 || mp.isLuckyBag == 1);
+      if (isOldLucky) {
+        return {
+          msgtype: 'luckyBag',
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus
+          }
+        };
+      }
+      if (attachment.msgtype === 'luckyBag' && !attachment.luckyBag) {
+        return {
+          ...attachment,
+          isLuckyBag: 1,
+          luckyBag: {
+            luckyBagId: mp.luckyBagId || attachment.luckyBagId,
+            luckyBagName: mp.luckyBagName || mp.title || attachment.luckyBagName || '',
+            luckyBagDataStatus: mp.luckyBagDataStatus || attachment.luckyBagDataStatus
+          }
+        };
+      }
+      return attachment;
+    },
     /** 提交按钮 验证 from表单*/
     submitForm() {
 

+ 4 - 0
src/views/qw/material/ImageUpload.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="component-upload-image">
     <el-upload
+      :headers="ossUploadHeaders"
       :action="uploadUrl"
       list-type="picture-card"
       :on-success="handleUploadSuccess"
@@ -100,6 +101,9 @@ export default {
     }
   },
   computed: {
+    ossUploadHeaders() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     // 是否显示提示
     showTip() {
       return this.isShowTip && (this.fileType || this.fileSize);

+ 8 - 3
src/views/qw/material/index.vue

@@ -462,7 +462,8 @@
         </div>
         <div v-else-if="form.materialType=='voice'">
           <el-form-item label="上传音频" prop="materialUrl">
-            <el-upload v-if="form.materialUrl==null || form.materialId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.materialUrl==null || form.materialId"
               v-model="form.materialUrl"
               class="avatar-uploader"
               :action="uploadUrl"
@@ -476,7 +477,8 @@
         </div>
         <div v-else-if="form.materialType=='video'">
           <el-form-item label="上传视频" prop="materialUrl">
-            <el-upload v-if="form.materialUrl==null || form.materialId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.materialUrl==null || form.materialId"
               v-model="form.materialUrl"
               class="avatar-uploader"
               :action="uploadUrl"
@@ -493,7 +495,8 @@
         </div>
         <div v-else-if="form.materialType=='file'">
           <el-form-item label="上传文件" prop="materialUrl">
-            <el-upload v-if="form.materialUrl==null || form.materialId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.materialUrl==null || form.materialId"
               v-model="form.materialUrl"
               class="avatar-uploader"
               :action="uploadUrl"
@@ -518,6 +521,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, exportMaterial } from "@/api/qw/material";
 import MaterialGroup from '@/views/qw/materialGroup/materialGroup'
 import ImageUpload from "@/views/qw/material/ImageUpload";
@@ -527,6 +531,7 @@ export default {
   components: { MaterialGroup,ImageUpload},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       //图片放大
       dialogVisible: false,
       dialogImageUrl:null,

+ 6 - 2
src/views/qw/material/materialAdd.vue

@@ -49,7 +49,8 @@
 
     <div v-if="form.welcomeType=='4'">
       <el-form-item label="上传文件" prop="fileUrl">
-        <el-upload v-if="form.fileUrl==null || form.welcomeId"
+        <el-upload
+      :headers="ossUploadHeaders" v-if="form.fileUrl==null || form.welcomeId"
                    v-model="form.fileUrl"
                    class="avatar-uploader"
                    :action="uploadUrl"
@@ -66,7 +67,8 @@
 
     <div v-if="form.welcomeType=='5'">
       <el-form-item label="上传视频" prop="videoUrl">
-        <el-upload v-if="form.videoUrl==null || form.welcomeId"
+        <el-upload
+      :headers="ossUploadHeaders" v-if="form.videoUrl==null || form.welcomeId"
                    v-model="form.videoUrl"
                    class="avatar-uploader"
                    :action="uploadUrl"
@@ -102,6 +104,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listWelcome, getWelcome, delWelcome, addWelcome, updateWelcome, exportWelcome } from "@/api/qw/welcome";
 import ImageUpload from "@/views/qw/material/ImageUpload";
 
@@ -111,6 +114,7 @@ export default {
 
   data(){
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       //上传地址
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       //欢迎语类型

+ 3 - 0
src/views/qw/materialQw/index.vue

@@ -71,6 +71,7 @@
                 </el-col>
                 <el-col :span="12" style="text-align: right;">
                   <el-upload
+      :headers="ossUploadHeaders"
                     :action="uploadUrl"
                     :file-list="[]"
                     :on-progress="handleProgress"
@@ -140,6 +141,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listMaterial, getMaterial, delMaterial, addMaterial, updateMaterial, } from "@/api/qw/material";
 import { listMaterialGroup, getMaterialGroup, delMaterialGroup, addMaterialGroup, updateMaterialGroup } from "@/api/qw/materialGroup";
 export default {
@@ -185,6 +187,7 @@ export default {
   },
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       dialogVisible: false,
       materialUrl: '',

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

@@ -1,6 +1,7 @@
 <template>
   <div class="component-upload-image">
     <el-upload
+      :headers="ossUploadHeaders"
       :action="uploadUrl"
       list-type="picture-card"
       :on-success="handleUploadSuccess"
@@ -106,6 +107,9 @@ export default {
     }
   },
   computed: {
+    ossUploadHeaders() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     // 是否显示提示
     showTip() {
       return this.isShowTip && (this.fileType || this.fileSize);

+ 4 - 0
src/views/qw/sop/deptSop.vue

@@ -778,6 +778,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -796,6 +797,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -910,6 +912,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import {
   addSop,
   courseList,
@@ -942,6 +945,7 @@ export default {
   components: {CustomerGroupDetails, qwUserList, ImageUpload, sopLogsDetails, SendMsgSopOpenTool},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       luckyBagList: [],
       // 存储每一行的展开状态
       expandedRows: {},

+ 4 - 0
src/views/qw/sop/mySop.vue

@@ -778,6 +778,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -796,6 +797,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -910,6 +912,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import {
   addSop,
   courseList,
@@ -941,6 +944,7 @@ export default {
   components: {CustomerGroupDetails, qwUserList, ImageUpload, sopLogsDetails, SendMsgSopOpenTool},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       luckyBagList: [],
       // 存储每一行的展开状态
       expandedRows: {},

+ 4 - 0
src/views/qw/sop/sop.vue

@@ -810,6 +810,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -828,6 +829,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -942,6 +944,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import {
   addSop,
   courseList,
@@ -974,6 +977,7 @@ export default {
   components: {CustomerGroupDetails, qwUserList, ImageUpload, sopLogsDetails, SendMsgSopOpenTool},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       luckyBagList: [],
       // 存储每一行的展开状态
       expandedRows: {},

+ 4 - 0
src/views/qw/sopTemp/addSopTemp.vue

@@ -199,6 +199,7 @@
 
                                             <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                                               <el-upload
+      :headers="ossUploadHeaders"
                                                 v-model="setList.fileUrl"
                                                 class="avatar-uploader"
                                                 :action="uploadUrl"
@@ -217,6 +218,7 @@
                                           <div v-if="setList.contentType == 6 ">
                                             <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                                               <el-upload
+      :headers="ossUploadHeaders"
                                                 v-model="setList.videoUrl"
                                                 class="avatar-uploader"
                                                 :action="uploadUrl"
@@ -350,6 +352,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listSopTemp, getSopTemp, delSopTemp, addSopTemp, updateSopTemp, exportSopTemp } from "@/api/qw/sopTemp";
 import { courseList,videoList } from "@/api/qw/sop";
 import ImageUpload from "@/views/qw/sop/ImageUpload";
@@ -361,6 +364,7 @@ export default {
   components: { ImageUpload,FriendMaterial,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
 
       //图片放大
       dialogVisible: false,

+ 5 - 0
src/views/qw/sopTemp/addSopTempOld.vue

@@ -164,6 +164,7 @@
 
                                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                                         <el-upload
+      :headers="ossUploadHeaders"
                                         v-model="content.fileUrl"
                                         class="avatar-uploader"
                                         :action="uploadUrl"
@@ -182,6 +183,7 @@
                                     <div v-if="content.contentType == 6 ">
                                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                                         <el-upload
+      :headers="ossUploadHeaders"
                                         v-model="content.videoUrl"
                                         class="avatar-uploader"
                                         :action="uploadUrl"
@@ -199,6 +201,7 @@
                                     <div v-if="content.contentType == 7 ">
                                       <el-form-item label="上传语音:" prop="videoUrl" label-width="100px">
                                         <el-upload
+      :headers="ossUploadHeaders"
                                           v-model="content.voiceUrl"
                                           class="avatar-uploader"
                                           :action="uploadUrl"
@@ -277,6 +280,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listSopTemp, getSopTemp, delSopTemp, addSopTemp, updateSopTemp, exportSopTemp } from "@/api/qw/sopTemp";
 import { courseList,videoList } from "@/api/qw/sop";
 import ImageUpload from "@/views/qw/sop/ImageUpload";
@@ -286,6 +290,7 @@ export default {
       components: { ImageUpload,FriendMaterial},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       // 遮罩层
       loading: true,

+ 4 - 0
src/views/qw/sopTemp/updateSopTemp.vue

@@ -477,6 +477,7 @@
 
                                             <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                                               <el-upload
+      :headers="ossUploadHeaders"
                                                 :disabled="formType == 3 || !roles.includes('edit_sop_temp_content')"
                                                 v-model="setList.fileUrl"
                                                 class="avatar-uploader"
@@ -497,6 +498,7 @@
                                           <div v-if="setList.contentType == 6 ">
                                             <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                                               <el-upload
+      :headers="ossUploadHeaders"
                                                 :disabled="formType == 3 || !roles.includes('edit_sop_temp_content')"
                                                 v-model="setList.videoUrl"
                                                 class="avatar-uploader"
@@ -1629,6 +1631,7 @@
 }
 </style>
 <script>
+import { getToken } from '@/utils/auth';
 import draggable from 'vuedraggable';
 import {
   listSopTemp,
@@ -1658,6 +1661,7 @@ export default {
   components: {ImageUpload, userVideo, draggable},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       queryParams1: {
         pageNum: 1,
         pageSize: 10,

+ 4 - 0
src/views/qw/sopTemp/updateSopTemp2.vue

@@ -166,6 +166,7 @@
 
                                             <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                                               <el-upload
+      :headers="ossUploadHeaders"
                                                 v-model="setList.fileUrl"
                                                 class="avatar-uploader"
                                                 :action="uploadUrl"
@@ -184,6 +185,7 @@
                                           <div v-if="setList.contentType == 6 ">
                                             <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                                               <el-upload
+      :headers="ossUploadHeaders"
                                                 v-model="setList.videoUrl"
                                                 class="avatar-uploader"
                                                 :action="uploadUrl"
@@ -312,6 +314,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listSopTemp, getSopTemp, delSopTemp, addSopTemp, updateSopTemp, exportSopTemp } from "@/api/qw/sopTemp";
 import { courseList,videoList } from "@/api/qw/sop";
 import ImageUpload from "@/views/qw/sop/ImageUpload";
@@ -321,6 +324,7 @@ export default {
   components: { ImageUpload,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS2",
       uploadUrlByVoice:process.env.VUE_APP_BASE_API+"/common/uploadOSSByHOOKVoice",
       //上传语音的遮罩层

+ 5 - 0
src/views/qw/sopTemp/updateSopTempOld.vue

@@ -156,6 +156,7 @@
 
                                     <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                                       <el-upload
+      :headers="ossUploadHeaders"
                                         v-model="content.fileUrl"
                                         class="avatar-uploader"
                                         :action="uploadUrl"
@@ -174,6 +175,7 @@
                                   <div v-if="content.contentType == 6 ">
                                     <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                                       <el-upload
+      :headers="ossUploadHeaders"
                                         v-model="content.videoUrl"
                                         class="avatar-uploader"
                                         :action="uploadUrl"
@@ -191,6 +193,7 @@
                                   <div v-if="content.contentType == 7 ">
                                     <el-form-item label="上传语音:" prop="videoUrl" label-width="100px">
                                       <el-upload
+      :headers="ossUploadHeaders"
                                         v-model="content.voiceUrl"
                                         class="avatar-uploader"
                                         :action="uploadUrl"
@@ -267,6 +270,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listSopTemp, getSopTemp, delSopTemp, addSopTemp, updateSopTemp, exportSopTemp } from "@/api/qw/sopTemp";
 import { courseList,videoList } from "@/api/qw/sop";
 import ImageUpload from "@/views/qw/sop/ImageUpload";
@@ -275,6 +279,7 @@ export default {
   components: { ImageUpload},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       // 遮罩层
       loading: true,

+ 4 - 0
src/views/qw/sopUserLogsInfo/sendMsgOpenTool.vue

@@ -199,6 +199,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -217,6 +218,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -449,6 +451,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { sendMsgSopType,} from "../../../api/qw/sopUserLogsInfo";
 import ImageUpload from "@/views/qw/sop/ImageUpload.vue";
 import {courseList, videoList} from "@/api/qw/sop";
@@ -463,6 +466,7 @@ export default {
   components: {ImageUpload,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       queryParams1: {
         pageNum: 1,
         pageSize: 10,

+ 4 - 0
src/views/qw/sopUserLogsInfo/sendMsgSopOpenTool.vue

@@ -138,6 +138,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -156,6 +157,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -338,6 +340,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { sendMsg,} from "../../../api/qw/sopUserLogsInfo";
 import ImageUpload from "@/views/qw/sop/ImageUpload.vue";
 import {courseList, videoList} from "@/api/qw/sop";
@@ -351,6 +354,7 @@ export default {
   components: {ImageUpload,userVideo},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       queryParams1: {
         pageNum: 1,
         pageSize: 10,

+ 4 - 0
src/views/qw/sopUserLogsInfo/sopUserLogsInfoDetails.vue

@@ -368,6 +368,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -386,6 +387,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -664,6 +666,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import {
   listSopUserLogsInfo,
   delSopUserLogsInfo,
@@ -689,6 +692,7 @@ export default {
   components: {PaginationMore, userVideo, ImageUpload},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       queryParams1: {
         pageNum: 1,
         pageSize: 10,

+ 4 - 0
src/views/qw/sopUserLogsInfo/sopUserLogsInfoDetailsOld.vue

@@ -337,6 +337,7 @@
 
                       <el-form-item label="上传文件:" prop="fileUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.fileUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -355,6 +356,7 @@
                     <div v-if="item.contentType == 6 ">
                       <el-form-item label="上传视频:" prop="videoUrl" label-width="100px">
                         <el-upload
+      :headers="ossUploadHeaders"
                           v-model="item.videoUrl"
                           class="avatar-uploader"
                           :action="uploadUrl"
@@ -488,6 +490,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import {
   listSopUserLogsInfo,
   delSopUserLogsInfo,
@@ -509,6 +512,7 @@ export default {
   components: { PaginationMore, ImageUpload},
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       //上传语音的遮罩层
       voiceLoading :false,
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS2",

+ 4 - 0
src/views/qw/user/ImageUpload.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="component-upload-image">
     <el-upload
+      :headers="ossUploadHeaders"
       :action="uploadUrl"
       list-type="picture-card"
       :on-success="handleUploadSuccess"
@@ -100,6 +101,9 @@ export default {
     }
   },
   computed: {
+    ossUploadHeaders() {
+      return { Authorization: "Bearer " + getToken() };
+    },
     // 是否显示提示
     showTip() {
       return this.isShowTip && (this.fileType || this.fileSize);

+ 6 - 2
src/views/qw/welcome/deptWelcomeIndex.vue

@@ -215,7 +215,8 @@
 
         <div v-if="form.welcomeType=='4'">
           <el-form-item label="上传文件" prop="fileUrl">
-            <el-upload v-if="form.fileUrl==null || form.welcomeId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.fileUrl==null || form.welcomeId"
                        v-model="form.fileUrl"
                        class="avatar-uploader"
                        :action="uploadUrl"
@@ -232,7 +233,8 @@
 
         <div v-if="form.welcomeType=='5'">
           <el-form-item label="上传视频" prop="videoUrl">
-            <el-upload v-if="form.videoUrl==null || form.welcomeId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.videoUrl==null || form.welcomeId"
                        v-model="form.videoUrl"
                        class="avatar-uploader"
                        :action="uploadUrl"
@@ -357,6 +359,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listWelcome, getWelcome, delWelcome, addWelcome, updateWelcome, exportWelcome } from "@/api/qw/welcome";
 import ImageUpload from "@/views/qw/material/ImageUpload";
 import { getMyQwUserList,getMyQwCompanyList } from "@/api/qw/user";
@@ -367,6 +370,7 @@ export default {
 
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       //上传地址
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       //放大图片

+ 6 - 2
src/views/qw/welcome/index.vue

@@ -215,7 +215,8 @@
 
         <div v-if="form.welcomeType=='4'">
           <el-form-item label="上传文件" prop="fileUrl">
-            <el-upload v-if="form.fileUrl==null || form.welcomeId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.fileUrl==null || form.welcomeId"
                        v-model="form.fileUrl"
                        class="avatar-uploader"
                        :action="uploadUrl"
@@ -232,7 +233,8 @@
 
         <div v-if="form.welcomeType=='5'">
           <el-form-item label="上传视频" prop="videoUrl">
-            <el-upload v-if="form.videoUrl==null || form.welcomeId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.videoUrl==null || form.welcomeId"
                        v-model="form.videoUrl"
                        class="avatar-uploader"
                        :action="uploadUrl"
@@ -357,6 +359,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listWelcome, getWelcome, delWelcome, addWelcome, updateWelcome, exportWelcome } from "@/api/qw/welcome";
 import ImageUpload from "@/views/qw/material/ImageUpload";
 import { getMyQwUserList,getMyQwCompanyList } from "@/api/qw/user";
@@ -367,6 +370,7 @@ export default {
 
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       //上传地址
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       //放大图片

+ 6 - 2
src/views/qw/welcome/myWelcome.vue

@@ -215,7 +215,8 @@
 
         <div v-if="form.welcomeType=='4'">
           <el-form-item label="上传文件" prop="fileUrl">
-            <el-upload v-if="form.fileUrl==null || form.welcomeId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.fileUrl==null || form.welcomeId"
                        v-model="form.fileUrl"
                        class="avatar-uploader"
                        :action="uploadUrl"
@@ -232,7 +233,8 @@
 
         <div v-if="form.welcomeType=='5'">
           <el-form-item label="上传视频" prop="videoUrl">
-            <el-upload v-if="form.videoUrl==null || form.welcomeId"
+            <el-upload
+      :headers="ossUploadHeaders" v-if="form.videoUrl==null || form.welcomeId"
                        v-model="form.videoUrl"
                        class="avatar-uploader"
                        :action="uploadUrl"
@@ -357,6 +359,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listWelcome, getWelcome, delWelcome, addWelcome, updateWelcome, exportWelcome } from "@/api/qw/welcome";
 import ImageUpload from "@/views/qw/material/ImageUpload";
 import { getMyQwUserList,getMyQwCompanyList } from "@/api/qw/user";
@@ -367,6 +370,7 @@ export default {
 
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       //上传地址
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
       //放大图片

+ 4 - 0
src/views/qw/welcome/welComeAdd.vue

@@ -83,6 +83,7 @@
 
             <el-form-item label="上传文件:" prop="fileUrl">
               <el-upload
+      :headers="ossUploadHeaders"
                           v-model="form.fileUrl"
                          class="avatar-uploader"
                          :action="uploadUrl"
@@ -101,6 +102,7 @@
           <div v-if="form.msgType=='5'">
             <el-form-item label="上传视频:" prop="videoUrl">
               <el-upload
+      :headers="ossUploadHeaders"
                          v-model="form.videoUrl"
                          class="avatar-uploader"
                          :action="uploadUrl"
@@ -244,6 +246,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listWelcome, getWelcome, delWelcome, addWelcome, updateWelcome, exportWelcome } from "@/api/qw/welcome";
 import ImageUpload from "@/views/qw/material/ImageUpload";
 import {courseList, videoList} from "../../../api/qw/sop";
@@ -254,6 +257,7 @@ export default {
 
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
 
       courseList:[],
       videoList:[],

+ 3 - 0
src/views/store/package/index.vue

@@ -179,6 +179,7 @@
         </el-form-item>
         <el-form-item label="封面图" prop="imgUrl">
           <el-upload
+      :headers="ossUploadHeaders"
             v-model="form.imgUrl"
             class="avatar-uploader"
             :action="uploadUrl"
@@ -469,6 +470,7 @@
 </template>
 
 <script>
+import { getToken } from '@/utils/auth';
 import { listPackage, getPackage, delPackage, addPackage, updatePackage, exportPackage } from "@/api/store/package";
 import { getAllFollowTempName } from "@/api/store/followTemp";
 import packageDetails from '../components/packageDetails.vue';
@@ -492,6 +494,7 @@ export default {
   },
   data() {
     return {
+      ossUploadHeaders: { Authorization: "Bearer " + getToken() },
       product: {
         open: false,
         title: "商品选择"