朱鑫波 před 3 roky
rodič
revize
3da4834ed9

+ 19 - 15
src/components/uploadFile.vue

@@ -156,17 +156,17 @@ export default {
                 }
               })
             } else {
-              if (n == '') {
+              if (n === '') {
                 this.fileList = []
               } else {
-                this.fileList = [
-                  {
-                    uid: 1,
-                    name: 1,
-                    status: 'done',
-                    url: n,
-                  },
-                ]
+                this.fileList = []
+                var data = {
+                  uid: 1,
+                  name: '回显',
+                  status: 'done',
+                  url: n,
+                }
+                this.fileList.push(data)
               }
             }
           } else {
@@ -303,12 +303,16 @@ export default {
             that.$emit('overUpload', that.fileList)
 
             if (that.multiple) {
-              that.$emit(
-                'update:value',
-                that.fileList.map((item) => {
-                  return item.url
-                })
-              )
+              let urlList =  that.fileList.map((item) => {
+                return item.url
+              })
+             
+                that.$emit(
+                  'update:value',urlList
+                 
+                )
+    
+              
             } else {
               that.$emit(
                 'update:value',

+ 2 - 2
src/utils/request.js

@@ -20,8 +20,8 @@ else if (process.env.NODE_ENV === 'debug') {
 else if (process.env.NODE_ENV === 'production') {
 	// axios.defaults.baseURL = 'http://apipre.tjyourong.com.cn/jeecg-boot'; // 预生产
     // axios.defaults.baseURL = 'http://gateway.tjyourong.com.cn/jeecg-boot';//测试
-	axios.defaults.baseURL = 'http://api.tjyourong.com.cn/jeecg-boot'; // 生产环境
-	// axios.defaults.baseURL = 'http://gateway.tjyourong.com.cn/jeecg-boot'; // 生产环境
+	// axios.defaults.baseURL = 'http://api.tjyourong.com.cn/jeecg-boot'; // 生产环境
+	axios.defaults.baseURL = 'http://gateway.tjyourong.com.cn/jeecg-boot'; // 生产环境
 	
 }
 const service = axios.create({

+ 401 - 2
src/views/modules/material/videoMaterial.vue

@@ -419,6 +419,11 @@ a {
               </a-select>
             </a-form-item>
           </a-col>
+           <a-col :md="8" :sm="8">
+            <a-form-item label="设计负责人">
+              <a-input placeholder="请输入设计负责人" v-model="queryParam.leaderName"></a-input>
+            </a-form-item>
+          </a-col>
 
           <a-col :md="8" :sm="8">
             <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
@@ -447,6 +452,12 @@ a {
         >新增</a-button
       >
       <a-button
+        @click="batchUploadVisible=true"
+        type="primary"
+        icon="plus"
+        >批量新增</a-button
+      >
+      <a-button
         @click="onCheckAllChange"
         v-if="
           queryParam.productId &&
@@ -798,6 +809,9 @@ a {
                         <a-menu-item key="5">
                           <a href="javascript:;" style="margin-right: 20px" @click="editTagList(items)">修改标签</a>
                         </a-menu-item>
+                        <a-menu-item key="6"  v-show="active !== '1'"  v-if="items.userId == userInfo().id">
+                          <a href="javascript:;" style="margin-right: 20px" @click="editMaterialName(items)">修改素材名称</a>
+                        </a-menu-item>
                       </a-menu>
                     </a-dropdown>
                     <a-checkbox :value="items.id" style="float: right" v-show="active == '1'"></a-checkbox>
@@ -831,6 +845,25 @@ a {
         </a-spin>
       </a-tab-pane>
     </a-tabs>
+    <a-modal title="修改素材名称" @cancel="editMaterialVisible=false" v-if="editMaterialVisible" v-model="editMaterialVisible">
+      <template slot="footer">
+        <a-button key="back" @click="editMaterialVisible=false">取消</a-button>
+        <a-button type="primary" @click="handleOkEditMaterialName" :loading="loadingEdit">确定</a-button>
+      </template>
+      <a-form :form="editMaterialform">
+        <a-form-model-item
+          label="素材名称"
+        >
+          <a-input placeholder="请填写素材名称" 
+          v-decorator="[
+              'name',
+              {
+                  rules: [{ required: true, message: '素材名称不能为空' }]
+              }
+          ]" />
+        </a-form-model-item>
+      </a-form>
+    </a-modal>
     <a-modal title="封面上传" @cancel="closeImage" @afterClose="closeImage" v-model="addImageVisible">
       <template slot="footer">
         <a-button key="back" @click="closeImage">取消</a-button>
@@ -906,6 +939,238 @@ a {
       </div>
     </a-modal>
 
+     <a-modal
+      title="批量上传素材"
+      v-model="batchUploadVisible"
+      v-if="batchUploadVisible"
+      :maskClosable="false"
+      :width="1200"
+    >
+      <template slot="footer">
+        <a-button type="primary" @click="handleOkBatch" :loading="loadingBatch">确定</a-button>
+      </template>
+      <a-form-model
+        ref="ruleForm"
+        :model="ruleForm"
+        :label-col="{ span: 4 }"
+        :wrapper-col="{ span: 14 }"
+      >
+       
+        <a-form-model-item ref="name" label="项目选择" prop="projectId" :rules="{
+          required: true,
+          message: '项目不能为空',
+          trigger: 'blur',
+        }">
+          <a-select
+            v-model="ruleForm.projectId"
+            @change="getProjectId"
+            @focus="getParticipateList"
+            showSearch
+            optionFilterProp="children"
+            :filterOption="filterOption"
+            @search="getParticipateList"
+            :disabled="!add"
+          >
+            <a-select-option :value="item.projectId" v-for="item of dataElse" :key="item.id">
+              {{ item.projectName }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{
+                item.mediaId == '1'
+                  ? '头条'
+                  : item.mediaId == '2'
+                  ? '快手'
+                  : item.mediaId == '3'
+                  ? '头条内广'
+                  : '快手内广'
+              }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ item.advertiserName }}
+            </a-select-option>
+          </a-select>
+        </a-form-model-item>
+        <a-form-model-item label="视频上传" prop="videoList">
+          <uploadFile
+            :checkFile="ruleFormFile"
+            :value.sync="ruleForm.urlList"
+            @overUpload="ruleFormOverUpload"
+            @removeUpload="ruleFormRemoveUpload"
+            :fileCount="10"
+            :sizeCheck="true"
+            uploadType="video"
+            :multiple="true"
+            v-if="batchUploadVisible"
+          />
+          <!-- <uploadFile
+            :checkFile="file"
+            :value.sync="urlList.url"
+            @overUpload="overUpload"
+            @removeUpload="removeUpload"
+            :fileCount="2"
+            uploadType="video"
+            :multiple="true"
+          /> -->
+        </a-form-model-item>
+
+        <a-form-model-item :wrapper-col="{ span: 14 , offset:4}">
+          <el-collapse v-model="activeCollapse" accordion v-if="ruleForm.urlList.length>0">
+            <el-collapse-item :title="'视频'+(index+1)" :name="index" v-for="(items,index) of ruleForm.urlListData" :key="index">
+              <a-form-model-item label="视频" :label-col="{ span: 4 }"
+              :wrapper-col="{ span: 14 }">
+                <video :src="items.url" style="width:150px"></video>
+              </a-form-model-item>
+              <a-form-model-item label="素材名称"  
+                :key="index"
+                :prop="'urlListData.'+index+'.materialName'" 
+                :label-col="{ span: 4 }" 
+                :wrapper-col="{ span: 14 }"
+                :rules="{
+                  required: true,
+                  message: '素材名称必填',
+                  trigger: 'blur',
+                }"
+              >
+                <a-input placeholder="请输入素材名称" v-model="items.materialName"></a-input>
+              </a-form-model-item>
+              
+              <a-form-model-item label="剪辑"  
+              :key="index"
+              :prop="'urlListData.'+index+'.clipId'" 
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+              :rules="{
+                required: true,
+                message: '剪辑必选',
+                trigger: 'blur',
+              }">
+                  <a-select
+                  v-model="items.clipId"
+                  showSearch
+                  optionFilterProp="children"
+                  :filterOption="filterOption"
+                >
+                  <a-select-option :value="item.userId" v-for="item of ascription.clipId" :key="item.userId">{{
+                    item.userName
+                  }}</a-select-option>
+                </a-select>
+              </a-form-model-item>
+              <a-form-model-item label="策划" 
+              :prop="'urlListData.' + index  + '.planId'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+              :rules="{
+                required: true,
+                message: '策划必选',
+                trigger: 'blur',
+              }">
+                <a-select
+                  v-model="items.planId"
+                  showSearch
+                  optionFilterProp="children"
+                  :filterOption="filterOption"
+                >
+                  <a-select-option :value="item.userId" v-for="item of ascription.planId" :key="item.userId">{{
+                    item.userName
+                  }}</a-select-option>
+                </a-select>
+                
+              </a-form-model-item>
+              <a-form-model-item label="拍摄" 
+              :prop="'urlListData.'+index+'.shotId'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }">
+                  <a-select
+                  v-model="items.shotId"
+                  showSearch
+                  optionFilterProp="children"
+                  :filterOption="filterOption"
+                >
+                  <a-select-option :value="item.userId" v-for="item of ascription.shotId" :key="item.userId">{{
+                    item.userName
+                  }}</a-select-option>
+                </a-select>
+              </a-form-model-item>
+
+              <a-form-model-item label="形式标签" 
+              :prop="'urlListData.'+index+'.modalityTagList'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+              :rules="{
+                required: true,
+                message: '形式标签必选',
+                trigger: 'blur',
+              }">
+                  <el-cascader
+                    placeholder="搜索你想要的形式标签"
+                    :options="departTreeModality"
+                    v-model="items.modalityTagList"
+                    :props="{
+                      multiple: true,
+                      value: 'id',
+                      label: 'tagName',
+                      emitPath: false,
+                      checkStrictly: true,
+                      expandTrigger: 'hover',
+                    }"
+                    filterable
+                    style="width: 100%"
+                  ></el-cascader>
+              </a-form-model-item>
+              <a-form-model-item label="场景标签" 
+              :prop="'urlListData.'+index+'.senceTagList'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+                :rules="{
+                required: true,
+                message: '场景标签必选',
+                trigger: 'blur',
+              }">
+                <el-cascader
+                  placeholder="搜索你想要的场景标签"
+                  :options="departTreeSence"
+                  v-model="items.senceTagList"
+                  :props="{
+                    multiple: true,
+                    value: 'id',
+                    label: 'tagName',
+                    emitPath: false,
+                    checkStrictly: true,
+                    expandTrigger: 'hover',
+                  }"
+                  filterable
+                  style="width: 100%"
+                ></el-cascader>
+              </a-form-model-item>
+              <a-form-model-item label="基调标签" 
+              :prop="'urlListData.'+index+'.modTagList'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+                :rules="{
+                required: true,
+                message: '基调标签必选',
+                trigger: 'blur',
+              }">
+                 <el-cascader
+                  placeholder="搜索你想要的基调标签"
+                  :options="departTreeMod"
+                  v-model="items.modTagList"
+                  :props="{
+                    multiple: true,
+                    value: 'id',
+                    label: 'tagName',
+                    emitPath: false,
+                    checkStrictly: true,
+                    expandTrigger: 'hover',
+                  }"
+                  filterable
+                  style="width: 100%"
+                ></el-cascader>
+              </a-form-model-item>
+              <a-form-model-item :wrapper-col="{ span: 14,offset:4 }" v-if="index == 0">
+                  <a-button type="primary" @click="syncDesign">剩余素材同步设计人员</a-button>
+              </a-form-model-item>
+            </el-collapse-item>
+          </el-collapse>
+        </a-form-model-item>
+      </a-form-model>
+    </a-modal>
+
+
     <a-modal
       :title="add ? '添加素材' : '修改素材'"
       v-model="visible"
@@ -1841,6 +2106,13 @@ export default {
 
   data() {
     return {
+      ruleForm:{
+        projectId:'',
+        urlList:[],
+        urlListData:[]
+      },
+      loadingBatch:false,
+      batchUploadVisible:false,
       controlLoading: false,
       defaultCurrent: 1,
       settlementColumns: [
@@ -1935,7 +2207,9 @@ export default {
           },
         },
       ],
-
+      editMaterialVisible:false,
+      editMaterialId:'',
+      loadingEdit:false,
       addImageVisible: false,
       addImageData: null,
       projectId: '',
@@ -2017,6 +2291,7 @@ export default {
       detail: false,
       form: this.$form.createForm(this),
       formPerson: this.$form.createForm(this),
+      editMaterialform: this.$form.createForm(this),
       tags: [],
       refuseFile: [],
       refuseReason: '',
@@ -2065,7 +2340,8 @@ export default {
       allDetailData: null,
       dataAllList: [],
       dataSourceFace: [],
-      totalAll: 0
+      totalAll: 0,
+      activeCollapse: 0
     }
   },
   filters: {
@@ -2183,6 +2459,129 @@ export default {
     },
   },
   methods: {
+            //     :checkFile="ruleFormFile"
+            // :value.sync="ruleForm.urlList"
+            // @overUpload="ruleFormOverUpload"
+            // @removeUpload="ruleFormRemoveUpload"
+    ruleFormFile(file){
+      var bmf = new BMF()
+      var that = this
+      return new Promise(function (resolve, reject) {
+        bmf.md5(file, (err, md5) => {
+          let videoInfo = {name:file.name,md5:md5}
+          // that.ruleForm.urlList = []
+          fileCheck({
+            code: md5,
+            projectId: that.ruleForm.projectId,
+          }).then((res) => {
+            if (res.code == 0) {
+              that.$message.error('素材'+file.name+'已经上传')
+
+              reject()
+            } else {
+              resolve()
+              //   reject()
+            }
+          })
+        })
+      })
+    },
+    ruleFormOverUpload(urlAll){
+      this.ruleForm.urlListData = urlAll.map(item=>{
+        return {
+          url:item.url,
+          planId:undefined,
+          clipId:undefined,
+          shotId:undefined,
+          modTagList:[],
+          modalityTagList:[],
+          senceTagList:[],
+          materialName:''
+        }
+      })
+    },
+    ruleFormRemoveUpload(){
+
+    },
+    handleOkBatch(){
+      this.$refs.ruleForm.validate(valid => {
+        if(valid){
+          if(this.ruleForm.urlListData.length == 0){
+            this.$message.error('请上传视频素材')
+            return
+          }
+          this.loadingBatch = true
+          let params = {}
+          params.projectId = this.ruleForm.projectId
+          params.videoArray = this.ruleForm.urlListData.map(item=>{
+            return {
+              ...item,
+              ascription:{
+                planId:item.planId,
+                clipId:item.clipId,
+                shotId:item.shotId,
+              }
+            }
+          })
+          postAction('/insertV3',params).then(res=>{
+            this.loadingBatch = false
+            if(res.success){
+              this.$message.success('上传成功')
+              this.batchUploadVisible = false
+            }else{
+               this.$message.error(res.message)
+            }
+          })
+        }else{
+          this.$message.error('有必填项未填')
+        }
+
+      })
+    },
+    syncDesign(){
+      let clipId = this.ruleForm.urlListData[0].clipId
+      let planId = this.ruleForm.urlListData[0].planId
+      let shotId = this.ruleForm.urlListData[0].shotId
+      this.ruleForm.urlListData = this.ruleForm.urlListData.map(item=>{
+        return {
+          ...item,
+          clipId,
+          planId,
+          shotId
+        }
+      })
+    },
+    editMaterialName(item) {
+      this.editMaterialVisible = true
+      this.editMaterialId = item.id
+      this.$nextTick(()=>{
+        this.editMaterialform.setFieldsValue({name:item.materialName})
+      })
+
+    },
+    handleOkEditMaterialName(){
+      this.editMaterialform.validateFieldsAndScroll((err, values) => {
+        if (err) {
+          // 这里做逻辑处理
+        } else {
+          this.loadingEdit = true
+          let params={}
+          params.id = this.editMaterialId
+          params.name = values.name
+          postAction('/ctop/materialInfo/editName', params).then(res=>{
+            this.loadingEdit = false
+            if(res.success){
+              this.$message.success('修改成功')
+              this.editMaterialVisible = false
+              this.editMaterialform.resetFields()
+            }else{
+              this.$message.error(res.message)
+            }
+
+          })
+        }
+      })
+    },
     // TODO 推送操作
     handlePushData(list) {
       const paramsData = {