刘政和 5 vuotta sitten
vanhempi
commit
fe403adfb0

+ 3 - 1
package.json

@@ -22,13 +22,15 @@
     "codemirror": "^5.46.0",
     "dayjs": "^1.8.0",
     "enquire.js": "^2.1.6",
+    "html2canvas": "^1.0.0-rc.3",
     "jquery": "^3.4.1",
     "js-cookie": "^2.2.0",
     "lodash.get": "^4.4.2",
     "lodash.pick": "^4.4.0",
+    "mcanvas": "^1.3.9",
     "md5": "^2.2.1",
     "nprogress": "^0.2.0",
-    "promise.prototype.finally": "^3.1.0",
+    "promise.prototype.finally": "^3.1.1",
     "tinymce": "^5.0.2",
     "viser-vue": "^2.4.4",
     "vue": "^2.6.10",

+ 2 - 0
src/main.js

@@ -21,6 +21,8 @@ import preview from 'vue-photo-preview'
 import 'vue-photo-preview/dist/skin.css'
 
 import VuePreview from 'vue-preview';
+import promiseFinally from 'promise.prototype.finally';
+promiseFinally.shim();
 
 import {
   ACCESS_TOKEN,

+ 12 - 4
src/mixins/JeecgListMixin.js

@@ -177,13 +177,21 @@ export const JeecgListMixin = {
         }
       });
     },
-    handleEdit: function (record) {
-      this.$refs.modalForm.edit(record);
+    handleEdit: function (record,sign) {
+      this.$refs.modalForm.edit(record,sign);
       this.$refs.modalForm.title = "编辑";
       this.$refs.modalForm.disableSubmit = false;
+      if(sign == 'preview'){
+        this.$refs.modalForm.title = "预览";
+      }
+    },
+    handleImagePreview: function (record) {
+        this.$refs.modalForm.imagePreview(record);
+        this.$refs.modalForm.title = "预览";
+        this.$refs.modalForm.disableSubmit = false;
     },
-    handleAdd: function () {
-      this.$refs.modalForm.add();
+    handleAdd: function (sign) {
+      this.$refs.modalForm.add(sign);
       this.$refs.modalForm.title = "新增";
       this.$refs.modalForm.disableSubmit = false;
     },

+ 1 - 1
src/utils/request.js

@@ -8,7 +8,7 @@ import {ACCESS_TOKEN} from "@/store/mutation-types"
 // 创建 axios 实例
 const service = axios.create({
   baseURL: '/jeecg-boot', // api base_url
-  timeout: 600000 // 请求超时时间
+  timeout: 6000000 // 请求超时时间
 })
 
 const err = (error) => {

+ 33 - 0
src/utils/videoControl.js

@@ -0,0 +1,33 @@
+import $ from 'jquery';
+
+// 播放当前视频时停止其他视频播放
+const stopOtherVideo = function () {
+    $(document).ready(function () {
+        let videos = $('video');
+        function pauseAll() {
+            let self = this;
+            ;[].forEach.call(videos, i => {
+                // 将 videos 中其他的 video 全部暂停
+                i !== self && i.pause();
+                // i !== self && i.load();
+
+            });
+        };
+        // 给play事件绑定暂停函数
+        ;[].forEach.call(videos, i => {
+            i.addEventListener('play', pauseAll.bind(i))
+        });
+    });
+};
+
+// 关闭所有视频
+const closeAllVideoFun = function () {
+    let videos = $('video');
+    let videosArr = Array.prototype.slice.call(videos);
+    videosArr.forEach(x => {
+        x.pause();
+        // x.load();
+    });
+};
+
+export { stopOtherVideo, closeAllVideoFun }

+ 293 - 188
src/views/modules/appad/AdList.vue

@@ -14,8 +14,8 @@
                     v-decorator="['pid', validatorRules.pid]"
                     dict="sys_category,name,id"
                     pidField="pid"
-                    pidValue="67d69117968be1eecb1e705b399b9d93">
-                  </j-tree-select>
+                    pidValue="67d69117968be1eecb1e705b399b9d93"
+                  ></j-tree-select>
                 </a-form-item>
               </a-col>
               <a-col :md="8" :sm="8">
@@ -58,12 +58,9 @@
                 <a-form-item
                   label="发布日期"
                   :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-                  :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
-                  <a-range-picker
-                    name="buildTime"
-                    style="width: 100%"
-                    v-model="time"
-                  />
+                  :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
+                >
+                  <a-range-picker name="buildTime" style="width: 100%" v-model="time" />
                 </a-form-item>
               </a-col>
               <a-col :md="8" :sm="8">
@@ -94,216 +91,324 @@
               </a-col>
               <a-col :md="8" :sm="8">
                 <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
-                <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+                <a-button
+                  type="primary"
+                  @click="searchReset"
+                  icon="reload"
+                  style="margin-left: 8px"
+                >重置</a-button>
               </a-col>
             </a-row>
           </a-form>
         </div>
-
         <app-ad-modal ref="modalForm"></app-ad-modal>
       </a-card>
     </a-col>
-    <vue-waterfall-easy ref="waterfall" :imgsArr="imgsArr" @click="handleDetail" @scrollReachBottom="getData"
-                        style="height: 800px;">
+    <vue-waterfall-easy
+      class="adcover_waterfall_container"
+      ref="waterfall"
+      :imgsArr="imgsArr"
+      @click="handleDetail"
+      @scrollReachBottom="getData"
+      style="height: 800px;"
+    >
       <div class="img-info" slot-scope="props">
-        <p class="some-info">发布人:{{props.value.userName}},质量分:{{props.value.score}}<br/>发布时间:{{props.value.time}}<br/>展示:{{props.value.viewCount}},喜欢:{{props.value.likeCount}},评论:{{props.value.commentCount}}
-        </p>
+        <div class="some-info">
+          <ul>
+            <li>
+              <b>发布人:</b>
+              <span>{{props.value.userName}}</span>
+            </li>
+            <li>
+              <b>质量分:</b>
+              <span>{{props.value.score}}</span>
+            </li>
+            <li>
+              <b>发布时间:</b>
+              <span>{{props.value.time}}</span>
+            </li>
+            <li>
+              <b>展示:</b>
+              <span>{{props.value.viewCount}}</span>
+            </li>
+            <li>
+              <b>喜欢:</b>
+              <span>{{props.value.likeCount}}</span>
+            </li>
+            <li>
+              <b>评论:</b>
+              <span>{{props.value.commentCount}}</span>
+            </li>
+          </ul>
+        </div>
       </div>
       <div slot="waterfall-over">无更多数据</div>
     </vue-waterfall-easy>
+    <div class="scroll_top">
+      <a-icon type="to-top" />
+    </div>
   </a-row>
-
 </template>
 
 <script>
-  import {getAction} from '@/api/manage'
-  import {filterObj} from '@/utils/util'
-  import vueWaterfallEasy from 'vue-waterfall-easy'
-  import AppAdModal from './modules/AppAdModal'
-  import JTreeSelect from '@/components/jeecg/JTreeSelect'
-  import {JeecgListMixin} from '@/mixins/JeecgListMixin'
-  import ARow from "ant-design-vue/es/grid/Row"
-  import ACol from "ant-design-vue/es/grid/Col"
-  import AFormItem from "ant-design-vue/es/form/FormItem"
-  import moment from "moment"
+import { getAction } from '@/api/manage'
+import { filterObj } from '@/utils/util'
+import vueWaterfallEasy from 'vue-waterfall-easy'
+import AppAdModal from './modules/AppAdModal'
+import JTreeSelect from '@/components/jeecg/JTreeSelect'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import ARow from 'ant-design-vue/es/grid/Row'
+import ACol from 'ant-design-vue/es/grid/Col'
+import AFormItem from 'ant-design-vue/es/form/FormItem'
+import moment from 'moment'
+import $ from 'jquery'
 
-  let timeout;
-  let currentValue;
+let timeout
+let currentValue
 
-  function fetch(value, callback) {
-    if (timeout) {
-      clearTimeout(timeout);
-      timeout = null;
-    }
-    currentValue = value;
+function fetch(value, callback) {
+  if (timeout) {
+    clearTimeout(timeout)
+    timeout = null
+  }
+  currentValue = value
+
+  function fake() {}
 
-    function fake() {
+  timeout = setTimeout(fake, 300)
+}
+
+$(function() {
+  $('.scroll_top').click(function() {
+    $('.vue-waterfall-easy-scroll').animate(
+      {
+        scrollTop: 0
+      },
+      500
+    )
+    return false
+  })
+  $('.vue-waterfall-easy-scroll').scroll(function() {
+    var top = $('.vue-waterfall-easy-scroll').scrollTop()
+    if (top >= 100) {
+      $('.scroll_top').fadeIn()
+    } else {
+      $('.scroll_top').fadeOut()
     }
+  })
+})
 
-    timeout = setTimeout(fake, 300);
-  }
+export default {
+  name: 'waterfall',
+  // mixins:[JeecgListMixin],
+  data() {
+    return {
+      queryParam: {
+        orderByColumn: 'create_time',
+        orderByType: 'desc',
+        start: '',
+        end: ''
+      },
+      time: [],
+      companyData: [],
+      productData: [],
+      value: undefined,
+      imgsArr: [],
+      pageNo: 1, // request param
+      url: {
+        feedsUrl: '/ctop/adcover/feeds',
+        companySugestUrl: '/ctop/kuaishou/advertiser/companysugest',
+        productSugestUrl: '/ctop/kuaishou/advertiser/productsugest',
+        list: '/ctop/adcover/feeds'
+      },
+      validatorRules: {
+        pid: {},
+        name: {},
+        code: {}
+      },
+      pidField: 'pid',
+      isCoverStar: false // 收藏
+    }
+  },
+  components: {
+    AFormItem,
+    ACol,
+    ARow,
+    vueWaterfallEasy,
+    AppAdModal,
+    JTreeSelect
+  },
+  mixins: [JeecgListMixin],
+  methods: {
+    searchQuery() {
+      this.imgsArr = []
+      this.ipagination.current = 1
+      if (this.time != null && this.time.length > 0) {
+        this.queryParam.start = moment(this.time[0]).format('YYYY-MM-DD')
+        this.queryParam.end = moment(this.time[1]).format('YYYY-MM-DD')
+      }
 
-  export default {
-    name: 'waterfall',
-    // mixins:[JeecgListMixin],
-    data() {
-      return {
-        queryParam: {
-          orderByColumn: 'create_time',
-          orderByType: 'desc',
-          start: '',
-          end: ''
-        },
-        time: [],
-        companyData: [],
-        productData: [],
-        value: undefined,
-        imgsArr: [],
-        pageNo: 1,// request param
-        url: {
-          feedsUrl: '/ctop/adcover/feeds',
-          companySugestUrl: '/ctop/kuaishou/advertiser/companysugest',
-          productSugestUrl: '/ctop/kuaishou/advertiser/productsugest',
-          list: '/ctop/adcover/feeds',
-        },
-        validatorRules: {
-          pid: {},
-          name: {},
-          code: {},
-        },
-        pidField: "pid"
+      this.getData()
+    },
+    searchReset() {
+      this.queryParam = {
+        orderByColumn: 'create_time',
+        orderByType: 'desc'
       }
+      this.imgsArr = []
+      this.time = []
+      this.ipagination.current = 1
+      this.ipagination.pageSize = 20
+      this.getData()
+    },
+    handleProductSearch(value) {
+      getAction(this.url.productSugestUrl, { product: value }).then(res => {
+        console.log(res)
+        if (currentValue === value) {
+          const result = res.result
+          const data = []
+          result.forEach(r => {
+            data.push({
+              value: r,
+              text: r
+            })
+          })
+          this.productData = data
+        }
+      })
+      fetch(value)
     },
-    components: {
-      AFormItem,
-      ACol,
-      ARow,
-      vueWaterfallEasy,
-      AppAdModal,
-      JTreeSelect,
+    handleProductChange(value) {
+      this.value = value
+      fetch(value, data => (this.productData = data))
     },
-    mixins: [JeecgListMixin],
-    methods: {
-      searchQuery() {
-        this.imgsArr = []
-        this.ipagination.current = 1
-        if (this.time != null && this.time.length > 0) {
-          this.queryParam.start = moment(this.time[0]).format('YYYY-MM-DD')
-          this.queryParam.end = moment(this.time[1]).format('YYYY-MM-DD')
+    handleCompanySearch(value) {
+      getAction(this.url.companySugestUrl, { company: value }).then(res => {
+        if (currentValue === value) {
+          const result = res.result
+          const data = []
+          result.forEach(r => {
+            data.push({
+              value: r,
+              text: r
+            })
+          })
+          this.companyData = data
         }
-
-        this.getData();
-      },
-      searchReset() {
-        this.queryParam = {
-          orderByColumn: 'create_time',
-          orderByType: 'desc'
+      })
+      fetch(value)
+    },
+    handleCompanyChange(value) {
+      this.value = value
+      fetch(value, data => (this.companyData = data))
+    },
+    handleDetail(event, { index, value }) {
+      this.$refs.modalForm.show(value.photoId, value.userId)
+      this.$refs.modalForm.title = '详情'
+    },
+    flushData() {
+      this.imgsArr = []
+      this.pageNo = 1
+      this.getData()
+    },
+    modalFormOk() {},
+    getQueryParams() {
+      //获取查询条件
+      var param = Object.assign(this.queryParam, this.isorter, this.filters)
+      param.pageNo = this.ipagination.current
+      param.pageSize = 20
+      return filterObj(param)
+    },
+    getData() {
+      var params = this.getQueryParams() //查询条件
+      console.log(params)
+      getAction(this.url.feedsUrl, params).then(res => {
+        console.log(res)
+        this.ipagination.current = this.ipagination.current + 1
+        if (res.success) {
+          if (res.result.length == 0) {
+            this.$refs.waterfall.waterfallOver()
+            return
+          }
+          for (var i = 0; i < res.result.length; i++) {
+            let arr = {}
+            arr.coverId = res.result[i].coverId
+            arr.src = res.result[i].coverUrl
+            arr.time = res.result[i].time
+            arr.userName = res.result[i].userName
+            arr.viewCount = res.result[i].viewCount
+            arr.likeCount = res.result[i].likeCount
+            arr.commentCount = res.result[i].commentCount
+            arr.score = res.result[i].score
+            arr.userId = res.result[i].userId
+            arr.photoId = res.result[i].photoId
+            //arr.href=res.result.records[i].mvUrl
+            this.imgsArr = this.imgsArr.concat(arr)
+          }
         }
-        this.imgsArr = []
-        this.time = []
-        this.ipagination.current = 1
-        this.ipagination.pageSize = 20
-        this.getData();
-      },
-      handleProductSearch(value) {
-        getAction(this.url.productSugestUrl, {product: value})
-          .then((res) => {
-            console.log(res)
-            if (currentValue === value) {
-              const result = res.result;
-              const data = [];
-              result.forEach((r) => {
-                data.push({
-                  value: r,
-                  text: r,
-                });
-              });
-              this.productData = data
-            }
-          });
-        fetch(value);
-      },
-      handleProductChange(value) {
-        this.value = value
-        fetch(value, data => this.productData = data);
-      },
-      handleCompanySearch(value) {
-        getAction(this.url.companySugestUrl, {company: value})
-          .then((res) => {
-            if (currentValue === value) {
-              const result = res.result;
-              const data = [];
-              result.forEach((r) => {
-                data.push({
-                  value: r,
-                  text: r,
-                });
-              });
-              this.companyData = data
-            }
-          });
-        fetch(value);
-      },
-      handleCompanyChange(value) {
-        this.value = value
-        fetch(value, data => this.companyData = data);
-      },
-      handleDetail(event, {index, value}) {
-        this.$refs.modalForm.show(value.photoId, value.userId);
-        this.$refs.modalForm.title = "详情";
-      },
-      flushData() {
-        this.imgsArr = []
-        this.pageNo = 1
-        this.getData()
-      },
-      modalFormOk() {
+      })
+    },
+  },
+  created() {
+    this.getData()
+  }
+}
+</script>
 
-      },
-      getQueryParams() {
-        //获取查询条件
-        var param = Object.assign(this.queryParam, this.isorter, this.filters);
-        param.pageNo = this.ipagination.current;
-        param.pageSize = 20;
-        return filterObj(param);
-      },
-      getData() {
-        var params = this.getQueryParams();//查询条件
-        console.log(params)
-        getAction(this.url.feedsUrl, params).then((res) => {
-          console.log(res)
-          this.ipagination.current = this.ipagination.current + 1
-          if (res.success) {
-            if (res.result.length == 0) {
-              this.$refs.waterfall.waterfallOver()
-              return
-            }
-            for (var i = 0; i < res.result.length; i++) {
-              let arr = {}
-              arr.coverId = res.result[i].coverId
-              arr.src = res.result[i].coverUrl
-              arr.time = res.result[i].time
-              arr.userName = res.result[i].userName
-              arr.viewCount = res.result[i].viewCount
-              arr.likeCount = res.result[i].likeCount
-              arr.commentCount = res.result[i].commentCount
-              arr.score = res.result[i].score
-              arr.userId = res.result[i].userId
-              arr.photoId = res.result[i].photoId
-              //arr.href=res.result.records[i].mvUrl
-              this.imgsArr = this.imgsArr.concat(arr)
 
+<style lang="scss">
+.adcover_waterfall_container {
+  .img-box {
+    .img-inner-box {
+      position: relative;
+      cursor: pointer;
+
+      -webkit-transition: all 0.3s;
+      transition: all 0.3s;
+      .img-wraper {
+        // height: 427px!important;
+        img {
+        }
+      }
+      .img-info {
+        position: relative;
+        // height: 146px!important;
+        .some-info {
+          color: rgba(0, 0, 0, 0.65);
+          padding: 10px;
+          ul {
+            margin: 0;
+            padding: 0;
+            li {
+              list-style: none;
+              padding: 0;
+              margin: 0;
             }
           }
-        })
-      },
-    },
-    created() {
-      this.getData()
+        }
+        .cover_star {
+          position: absolute;
+          right: 0;
+          bottom: 0;
+          padding: 10px;
+          z-index: 1;
+          color: rgba(0, 0, 0, 0.65);
+          .coverStar {
+            color: red;
+          }
+        }
+      }
     }
   }
-</script>
-
-<style scoped>
-
+}
+.scroll_top {
+  position: fixed;
+  z-index: 9;
+  right: 80px;
+  bottom: 40px;
+  display: none;
+  cursor: pointer;
+  color: #1890ff;
+  font-size: 40px;
+}
 </style>

BIN
src/views/modules/appad/images/arrow_left.png


BIN
src/views/modules/appad/images/arrow_right.png


+ 346 - 247
src/views/modules/appad/modules/AppAdModal.vue

@@ -4,56 +4,73 @@
     :width="1300"
     :visible="visible"
     @cancel="handleCancel"
-    cancelText="关闭">
+    cancelText="关闭"
+    class="ad_cover_container"
+  >
     <div>
       <a-row>
-        <a-col :span="8">
-          <a-tabs defaultActiveKey="1">
+        <a-col :span="8" class="addetail_left">
+          <a-tabs :defaultActiveKey="defaultActiveKey">
             <a-tab-pane tab="视频" key="1">
               <div class="item">
                 <div class="player">
-                  <video-player class="vjs-custom-skin"
-                                ref="videoPlayer"
-                                :options="playerOptions"
-                                :playsinline="true"
-                                @play="onPlayerPlay($event)"
-                                @pause="onPlayerPause($event)"
-                                @ended="onPlayerEnded($event)"
-                                @loadeddata="onPlayerLoadeddata($event)"
-                                @waiting="onPlayerWaiting($event)"
-                                @playing="onPlayerPlaying($event)"
-                                @timeupdate="onPlayerTimeupdate($event)"
-                                @canplay="onPlayerCanplay($event)"
-                                @canplaythrough="onPlayerCanplaythrough($event)"
-                                @ready="playerReadied"
-                                @statechanged="playerStateChanged($event)">
-                  </video-player>
+                  <video-player
+                    class="vjs-custom-skin"
+                    ref="videoPlayer"
+                    :options="playerOptions"
+                    :playsinline="true"
+                    @play="onPlayerPlay($event)"
+                    @pause="onPlayerPause($event)"
+                    @ended="onPlayerEnded($event)"
+                    @loadeddata="onPlayerLoadeddata($event)"
+                    @waiting="onPlayerWaiting($event)"
+                    @playing="onPlayerPlaying($event)"
+                    @timeupdate="onPlayerTimeupdate($event)"
+                    @canplay="onPlayerCanplay($event)"
+                    @canplaythrough="onPlayerCanplaythrough($event)"
+                    @ready="playerReadied"
+                    @statechanged="playerStateChanged($event)"
+                  ></video-player>
                 </div>
               </div>
             </a-tab-pane>
             <a-tab-pane tab="视频封面" key="2">
-              <a-carousel>
-                <div v-if="videoModel != null"><img :src="videoModel.coverUrl" :width="360"></div>
+              <a-carousel class="cover_carousel_con">
+                <div v-if="videoModel != null">
+                  <img :src="videoModel.coverUrl" :width="360" />
+                </div>
               </a-carousel>
             </a-tab-pane>
-            <a-tab-pane tab="广告封面" key="3">
-              <a-carousel>
-                <div v-for="item in model">
-                  <img :src="item.coverUrl" :width="360">
+            <a-tab-pane tab="广告封面" key="3" class="cover_container">
+              <a-carousel arrows class="cover_carousel_con">
+                <div v-for="(item,index) in model" :key="index">
+                  <img :src="item.coverUrl" :width="360" />
                 </div>
+                <div
+                  slot="prevArrow"
+                  slot-scope
+                  class="custom-slick-arrow slick_arrow_left"
+                  style="left: 10px;zIndex: 1"
+                ></div>
+                <div
+                  slot="nextArrow"
+                  slot-scope
+                  class="custom-slick-arrow slick_arrow_right"
+                  style="right: 10px;zIndex: 9"
+                ></div>
               </a-carousel>
             </a-tab-pane>
           </a-tabs>
-
         </a-col>
-        <a-col :span="16">
+        <a-col :span="16" class="addetail_right">
           <div v-if="videoModel != null">
             <detail-list :col="1">
               <detail-list-item term="标题">{{videoModel.caption}}</detail-list-item>
             </detail-list>
             <detail-list :col="3">
-              <detail-list-item term="快手视频ID"><a :href="[videoModel.share_info]"
-                                                 target="_blank">{{videoModel.photo_id}}</a></detail-list-item>
+              <detail-list-item term="快手视频ID">
+                <a :href="[videoModel.share_info]" target="_blank">{{videoModel.photo_id}}</a>
+              </detail-list-item>
               <detail-list-item term="发布时间">{{videoModel.time}}</detail-list-item>
               <detail-list-item term="抓取时间">{{videoModel.createTime}}</detail-list-item>
             </detail-list>
@@ -65,7 +82,8 @@
           </div>
           <div v-if="userModel != null">
             <detail-list :col="3">
-              <detail-list-item term="发布人"><a :href="[userModel.url]" target="_blank">{{userModel.name}}</a>
+              <detail-list-item term="发布人">
+                <a :href="[userModel.url]" target="_blank">{{userModel.name}}</a>
               </detail-list-item>
               <detail-list-item term="广告主">{{userModel.company}}</detail-list-item>
               <detail-list-item term="推广产品">{{userModel.product}}</detail-list-item>
@@ -76,248 +94,329 @@
               <detail-list-item term="二级行业">{{userModel.secondIndustry}}</detail-list-item>
             </detail-list>
           </div>
-          <a-table
-            :columns="goodsColumns"
-            :dataSource="model"
-            :pagination="false">
-
+          <a-table :columns="goodsColumns" :dataSource="model" :pagination="false">
+            <!-- 图片预览 -->
+            <div slot="ADcoverImagePreview" slot-scope="text, record">
+              <img
+                style="width:100px;"
+                :src="record.coverUrl"
+                @click="coverPreviewShowModal(record,'preview')"
+              />
+              <a-modal
+                title="图片预览"
+                v-model="coverPreviewVisible"
+                @ok="coverPreviewHandleOk"
+                @cancel="coverPreviewHandleCancel"
+                :footer="null"
+                :maskStyle="coverPreviewMaskStyle"
+              >
+                <div style="text-align:center;">
+                  <img style="width:350px;" :src="coverPreviewUrl" />
+                </div>
+              </a-modal>
+            </div>
+            <!-- 图片预览 E -->
           </a-table>
-
-
         </a-col>
       </a-row>
-
     </div>
-
   </a-modal>
 </template>
 <script>
-  // custom skin css
-  // import '../src/custom-theme.css'
-  import 'video.js/dist/video-js.css'
-  import {videoPlayer} from 'vue-video-player'
-  import DetailList from '@/components/tools/DetailList'
-  import PageLayout from '@/components/page/PageLayout'
-  import STable from '@/components/table/'
-  import {getAction, deleteAction, putAction, postAction} from '@/api/manage'
+// custom skin css
+// import '../src/custom-theme.css'
+import 'video.js/dist/video-js.css'
+import { videoPlayer } from 'vue-video-player'
+import DetailList from '@/components/tools/DetailList'
+import PageLayout from '@/components/page/PageLayout'
+import STable from '@/components/table/'
+import { getAction, deleteAction, putAction, postAction } from '@/api/manage'
 
-  const DetailListItem = DetailList.Item
-  export default {
-    components: {
-      videoPlayer,
-      PageLayout,
-      DetailList,
-      DetailListItem,
-      STable
-    },
-    data() {
-      return {
-        goodsColumns: [
-          {
-            title: '封面ID',
-            dataIndex: 'coverId',
-            key: 'coverId'
-          },
-          {
-            title: '创意ID',
-            dataIndex: 'creativeId',
-            key: 'creativeId'
-          },
-          {
-            title: '展示数',
-            dataIndex: 'viewCount',
-            key: 'viewCount'
-          },
-          {
-            title: '喜欢数',
-            dataIndex: 'likeCount',
-            key: 'likeCount'
-          },
-          {
-            title: '评论数',
-            dataIndex: 'commentCount',
-            key: 'commentCount'
-          },
-          {
-            title: '质量分',
-            dataIndex: 'score',
-            key: 'score'
-          },
-          {
-            title: 'App名称',
-            dataIndex: 'appName',
-            key: 'appName'
-          },
-          {
-            title: '发布时间',
-            dataIndex: 'time',
-            key: 'time'
-          }
-        ],
-        userId: 0,
-        photoId: 0,
-        title: "操作",
-        visible: false,
-        model: [],
-        userModel: {},
-        videoModel: {},
-        labelCol: {
-          xs: {span: 24},
-          sm: {span: 5},
+const DetailListItem = DetailList.Item
+export default {
+  components: {
+    videoPlayer,
+    PageLayout,
+    DetailList,
+    DetailListItem,
+    STable
+  },
+  data() {
+    return {
+      goodsColumns: [
+        {
+          title: '封面ID',
+          dataIndex: 'coverId',
+          key: 'coverId'
         },
-        wrapperCol: {
-          xs: {span: 24},
-          sm: {span: 16},
+        {
+          title: '封面预览',
+          //   dataIndex: 'coverUrl',
+          //   key: 'coverUrl',
+          dataIndex: 'ADcoverImagePreview',
+          scopedSlots: { customRender: 'ADcoverImagePreview' }
         },
-        // videojs options
-        playerOptions: {
-          height: '640',
-          width: '360',
-          autoplay: true,
-          muted: true,
-          language: 'en',
-          playbackRates: [0.7, 1.0, 1.5, 2.0],
-          sources: [{
-            type: "video/mp4",
-            // mp4
-            src: "",
-            // webm
-            // src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
-          }],
-          poster: "",
+        {
+          title: '创意ID',
+          dataIndex: 'creativeId',
+          key: 'creativeId'
         },
-        loadGoodsData: () => {
-          var params = {
-            "photoId": this.photoId,
-            "userId": this.userId
-          }
-          return getAction("/ctop/adcover/adlist", params).then(res => {
-            this.model = res.result
-            console.log(res.result)
-            return res.result
-          })
+        {
+          title: '展示数',
+          dataIndex: 'viewCount',
+          key: 'viewCount'
         },
-      }
-    },
-    mounted() {
-      // console.log('this is current player instance object', this.player)
-      setTimeout(() => {
-        console.log('dynamic change options', this.player)
-        // change src
-        // this.playerOptions.sources[0].src = 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm';
-        // change item
-        // this.$set(this.playerOptions.sources, 0, {
-        //   type: "video/mp4",
-        //   src: 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm',
-        // })
-        // change array
-        // this.playerOptions.sources = [{
-        //   type: "video/mp4",
-        //   src: 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm',
-        // }]
-        this.player.muted(false)
-      }, 5000)
-    },
-    computed: {
-      player() {
-        return this.$refs.videoPlayer.player
-      }
-    },
-    methods: {
-      // listen event
-      onPlayerPlay(player) {
-        // console.log('player play!', player)
-      },
-      onPlayerPause(player) {
-        // console.log('player pause!', player)
-      },
-      onPlayerEnded(player) {
-        // console.log('player ended!', player)
-      },
-      onPlayerLoadeddata(player) {
-        // console.log('player Loadeddata!', player)
-      },
-      onPlayerWaiting(player) {
-        // console.log('player Waiting!', player)
-      },
-      onPlayerPlaying(player) {
-        // console.log('player Playing!', player)
-      },
-      onPlayerTimeupdate(player) {
-        // console.log('player Timeupdate!', player.currentTime())
-      },
-      onPlayerCanplay(player) {
-        // console.log('player Canplay!', player)
-      },
-      onPlayerCanplaythrough(player) {
-        // console.log('player Canplaythrough!', player)
-      },
-      // or listen state event
-      playerStateChanged(playerCurrentState) {
-        // console.log('player current update state', playerCurrentState)
+        {
+          title: '喜欢数',
+          dataIndex: 'likeCount',
+          key: 'likeCount'
+        },
+        {
+          title: '评论数',
+          dataIndex: 'commentCount',
+          key: 'commentCount'
+        },
+        {
+          title: '质量分',
+          dataIndex: 'score',
+          key: 'score'
+        },
+        {
+          title: 'App名称',
+          dataIndex: 'appName',
+          key: 'appName'
+        },
+        {
+          title: '发布时间',
+          dataIndex: 'time',
+          key: 'time'
+        }
+      ],
+      userId: 0,
+      photoId: 0,
+      title: '操作',
+      visible: false,
+      model: [],
+      userModel: {},
+      videoModel: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
       },
-      // player is ready
-      playerReadied(player) {
-        // seek to 10s
-        console.log('example player 1 readied', player)
-        // player.currentTime(10)
-        // console.log('example 01: the player is readied', player)
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
       },
-      show(photoId, userId) {
-        this.model = []
-        this.userModel = {}
-        this.videoModel = {}
-        this.playerOptions.sources[0].src = ""
-        this.photoId = photoId
-        this.userId = userId
-        this.loadDetail(photoId, userId)
-        this.visible = true;
+      // videojs options
+      playerOptions: {
+        height: '640',
+        width: '360',
+        autoplay: false,
+        muted: true,
+        language: 'en',
+        playbackRates: [0.7, 1.0, 1.5, 2.0],
+        sources: [
+          {
+            type: 'video/mp4',
+            // mp4
+            src: ''
+            // webm
+            // src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
+          }
+        ],
+        poster: ''
       },
-      loadDetail(photoId, userId) {
+      loadGoodsData: () => {
         var params = {
-          "photoId": photoId,
-          "userId": userId
+          photoId: this.photoId,
+          userId: this.userId
         }
-        console.log(params)
-        getAction("/ctop/adcover/detail", params).then((res) => {
-          if (res.success) {
-            console.log(res.result)
-            this.userModel = res.result.user
-            this.videoModel = res.result.video
-            this.model = res.result.adlist
-            if (res.result.video != null) {
-              this.playerOptions.sources[0].src = res.result.video.mvUrl
-            }
-
-            // this.dataSource = res.result.records;
-          }
+        return getAction('/ctop/adcover/adlist', params).then(res => {
+          this.model = res.result
+          console.log(res.result)
+          return res.result
         })
-
-      },
-      close() {
-        this.$emit('close');
-        this.visible = false;
       },
-      handleCancel() {
-        this.close()
+      defaultActiveKey: '1',
+
+      //   封面预览弹窗
+      coverPreviewVisible: false,
+      coverPreviewMaskStyle: {
+        background: 'rgba(0,0,0,.08)'
       },
+      coverPreviewUrl: ''
+    }
+  },
+  mounted() {
+    // console.log('this is current player instance object', this.player)
+    setTimeout(() => {
+      console.log('dynamic change options', this.player)
+      // change src
+      // this.playerOptions.sources[0].src = 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm';
+      // change item
+      // this.$set(this.playerOptions.sources, 0, {
+      //   type: "video/mp4",
+      //   src: 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm',
+      // })
+      // change array
+      // this.playerOptions.sources = [{
+      //   type: "video/mp4",
+      //   src: 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm',
+      // }]
+      this.player.muted(false)
+    }, 5000)
+  },
+  computed: {
+    // player() {
+    //   return this.$refs.videoPlayer.player
+    // }
+  },
+  methods: {
+    // listen event
+    onPlayerPlay(player) {
+      // console.log('player play!', player)
+    },
+    onPlayerPause(player) {
+      // console.log('player pause!', player)
+    },
+    onPlayerEnded(player) {
+      // console.log('player ended!', player)
+    },
+    onPlayerLoadeddata(player) {
+      // console.log('player Loadeddata!', player)
+    },
+    onPlayerWaiting(player) {
+      // console.log('player Waiting!', player)
+    },
+    onPlayerPlaying(player) {
+      // console.log('player Playing!', player)
+    },
+    onPlayerTimeupdate(player) {
+      // console.log('player Timeupdate!', player.currentTime())
+    },
+    onPlayerCanplay(player) {
+      // console.log('player Canplay!', player)
+    },
+    onPlayerCanplaythrough(player) {
+      // console.log('player Canplaythrough!', player)
+    },
+    // or listen state event
+    playerStateChanged(playerCurrentState) {
+      // console.log('player current update state', playerCurrentState)
+    },
+    // player is ready
+    playerReadied(player) {
+      // seek to 10s
+      console.log('example player 1 readied', player)
+      // player.currentTime(10)
+      // console.log('example 01: the player is readied', player)
+    },
+    show(photoId, userId) {
+      this.model = []
+      this.userModel = {}
+      this.videoModel = {}
+      this.playerOptions.sources[0].src = ''
+      this.photoId = photoId
+      this.userId = userId
+      this.loadDetail(photoId, userId)
+      this.visible = true
+      this.defaultActiveKey = '1'
+    },
+    loadDetail(photoId, userId) {
+      var params = {
+        photoId: photoId,
+        userId: userId
+      }
+      console.log(params)
+      getAction('/ctop/adcover/detail', params).then(res => {
+        if (res.success) {
+          console.log(res.result)
+          this.userModel = res.result.user
+          this.videoModel = res.result.video
+          this.model = res.result.adlist
+          if (res.result.video != null) {
+            this.playerOptions.sources[0].src = res.result.video.mvUrl
+          }
+
+          // this.dataSource = res.result.records;
+        }
+      })
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.defaultActiveKey = '1'
+    },
+    handleCancel() {
+      this.close()
+      this.defaultActiveKey = '1'
+    },
+
+    // 封面预览弹窗
+    coverPreviewShowModal(record) {
+      this.coverPreviewVisible = true
+      this.coverPreviewUrl = record.coverUrl
+      this.coverPreviewMaskStyle.background = 'rgba(0,0,0,.08)'
+    },
+    coverPreviewHandleOk() {
+      this.coverPreviewVisible = false
+      this.coverPreviewMaskStyle.background = 0
+    },
+    coverPreviewHandleCancel() {
+      this.coverPreviewVisible = false
+      this.coverPreviewUrl = ''
+      this.coverPreviewMaskStyle.background = 0
     }
   }
+}
 </script>
-<style>
-  .ant-carousel >>> .slick-slide {
-    text-align: center;
-    height: 160px;
-    line-height: 160px;
-    background: #364d79;
-    overflow: hidden;
+<style lang="scss">
+.ad_cover_container {
+  .ant-modal-body {
+    max-height: 650px;
+    overflow-y: scroll;
   }
+}
+.ant-carousel >>> .slick-slide {
+  text-align: center;
+  //   height: 160px;
+  //   line-height: 160px;
+  background: #364d79;
+  overflow: hidden;
+}
 
-  .ant-card-body {
-    padding: 0;
-  }
+.ant-card-body {
+  padding: 0;
+}
 
-  .ant-carousel >>> .slick-slide h3 {
-    color: #fff;
+.ant-carousel >>> .slick-slide h3 {
+  color: #fff;
+}
+.ant-carousel >>> .custom-slick-arrow {
+  width: 25px;
+  height: 25px;
+  font-size: 25px;
+  color: #fff;
+  background-color: rgba(31, 45, 61, 0.11);
+  opacity: 0.3;
+}
+.ant-carousel >>> .custom-slick-arrow:before {
+  display: none;
+}
+.ant-carousel >>> .custom-slick-arrow:hover {
+  opacity: 0.5;
+}
+.addetail_left {
+  padding-right: 56px;
+  .custom-slick-arrow {
+    width: 40px;
+    height: 40px;
+  }
+  .slick_arrow_left {
+    background-image: url(../images/arrow_left.png);
+  }
+  .slick_arrow_right {
+    background-image: url(../images/arrow_right.png);
   }
+}
 </style>

+ 160 - 35
src/views/modules/bytedance/model/InternalModel.vue

@@ -2,6 +2,21 @@
   <a-card :body-style="{padding: '24px 32px'}" :bordered="false">
     <a-form @submit="handleSubmit" :form="form">
       <a-form-item
+          label="选择头条账户"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol">
+          <a-select
+            v-model="accountId"
+            showSearch
+            placeholder="选择头条账户"
+            optionFilterProp="children"
+            style="width: 200px"
+          >
+            <a-select-option v-for="user in userList" :key="user.id" :value="user.id">{{user.accountName}}</a-select-option>
+          </a-select>
+      </a-form-item>
+
+      <a-form-item
         label="模板名称"
         :labelCol="labelCol"
         :wrapperCol="wrapperCol">
@@ -27,7 +42,7 @@
           <a-radio-button value="2">原生</a-radio-button>
         </a-radio-group>
       </a-form-item>
-      <a-form-item
+      <!--<a-form-item
         label="广告类别"
         :labelCol="labelCol"
         :wrapperCol="wrapperCol">
@@ -38,7 +53,7 @@
           <a-radio-button value="5">内广</a-radio-button>
           <a-radio-button value="7">补量</a-radio-button>
         </a-radio-group>
-      </a-form-item>
+      </a-form-item>-->
       <a-form-item
         label="投放目标"
         :labelCol="labelCol"
@@ -51,14 +66,6 @@
       </a-form-item>
 
       <a-form-item
-        v-if="showConvertTarget"
-        label="转化目标"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol">
-        <a-input placeholder="请输入网址或从之前网站选择" v-model="convertTarget"/>
-      </a-form-item>
-
-      <a-form-item
         label="下载方式"
         :labelCol="labelCol"
         :wrapperCol="wrapperCol">
@@ -67,35 +74,82 @@
           <a-radio-button value="1">下载链接</a-radio-button>
           <a-radio-button value="2">落地页</a-radio-button>
         </a-radio-group>
+      </a-form-item>
 
+      <a-form-item
+        v-if="showDownloadMode"
+        label="下载类型"
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol">
+        <a-radio-group @change="onChangeDownloadMode" v-model="downloadMode">
+          <a-radio-button value="android">安卓下载</a-radio-button>
+          <a-radio-button value="IOS">IOS下载</a-radio-button>
+        </a-radio-group>
       </a-form-item>
 
       <a-form-item
         label="下载链接"
-        v-if="showDownloadUrl"
         :labelCol="labelCol"
         :wrapperCol="wrapperCol">
-        <a-input placeholder="请填写下载链接" v-model="downloadUrl"/>
+        <a-select
+          v-model="urlId"
+          style="width: 300px">
+          <a-select-option v-for="url in urlList" :key="url.id" :value="url.id">{{url.name}}</a-select-option>
+        </a-select>
       </a-form-item>
 
       <a-form-item
-        v-if="showExternalUrl"
-        label="链接地址"
+        v-if="showConvertTarget"
+        label="选择转化跟踪方式"
         :labelCol="labelCol"
         :wrapperCol="wrapperCol">
-        <a-input placeholder="请输入网址或从之前网站选择" v-model="externalUrl"/>
+        <a-select
+          v-model="convertType"
+          showSearch
+          placeholder="选择投放目标模板"
+          optionFilterProp="children"
+          style="width: 200px"
+          @change="changeConvertType"
+        >
+          <a-select-option v-if="showSimple"value="SIMPLE">普通应用下载</a-select-option>
+          <!--<a-select-option value="API">应用下载API</a-select-option>-->
+        </a-select>
       </a-form-item>
 
-
       <a-form-item
-        label="应用包名"
-        v-if="showPackageName"
+        v-if="showConvertTarget&&showConvertTargetSimple"
+        label="选择转化目标"
         :labelCol="labelCol"
         :wrapperCol="wrapperCol">
-        <a-input v-model="packageName"></a-input>
+        <a-select
+          v-model="simpleDeliverytarget"
+          showSearch
+          placeholder="选择转化目标"
+          optionFilterProp="children"
+          style="width: 200px"
+        >
+          <a-select-option value="AD_CONVERT_TYPE_INSTALL_FINISH">安装完成</a-select-option>
+          <a-select-option value="AD_CONVERT_TYPE_DOWNLOAD_FINiSH">下载完成</a-select-option>
+        </a-select>
       </a-form-item>
 
       <a-form-item
+        v-if="showConvertTarget&&showConvertTargetApi"
+        label="选择转化目标"
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol">
+        <a-select
+          v-model="convertId"
+          showSearch
+          placeholder="选择转化目标"
+          optionFilterProp="children"
+          style="width: 800px"
+        >
+          <a-select-option v-for="activeConvert in activeConvertList" :key="activeConvert.id" :value="activeConvert.id">{{activeConvert.name}}</a-select-option>
+        </a-select>
+      </a-form-item>
+
+      <!--<a-form-item
         label="直达链接"
         v-if="showOpenUrlStatus"
         :labelCol="labelCol"
@@ -104,7 +158,7 @@
           <a-radio-button value="disabled">不启用</a-radio-button>
           <a-radio-button value="enabled">启用</a-radio-button>
         </a-radio-group>
-      </a-form-item>
+      </a-form-item>-->
 
 <!--      <a-form-item-->
 <!--        label="直达链接生成方式"-->
@@ -219,10 +273,17 @@
       </a-form-item>
 
+      <a-form-item
+        label="迭代数量"
+        :labelCol="labelCol"
+        :wrapperCol="wrapperCol">
+        <a-input-number v-model="itratorNum" :min="1" :max="1000" @change="onChange"/>
+      </a-form-item>
+
 
       <a-form-item :wrapperCol="{ span: 24 }"
                    style="text-align: center">
-        <a-button htmlType="submit" type="primary">提交</a-button>
+        <a-button htmlType="submit" type="primary" :loading="loading">提交</a-button>
         <a-button style="margin-left: 8px">保存</a-button>
       </a-form-item>
 
@@ -244,6 +305,8 @@
     components: {AFormItem},
     data() {
       return {
+        loading:false,
+        templateName:'',
         title: "操作",
         visible: false,
         model: {},
@@ -255,7 +318,21 @@
           xs: {span: 24},
           sm: {span: 16},
         },
-
+        itratorNum:1,
+        accountId:'',
+        userList:[],
+        urlId:'',
+        urlList:[],
+        showDownloadMode:'true',
+        downloadMode:'android',
+        convertId:'',
+        showSimple:true,
+        showConvertTargetSimple:false,
+        showConvertTargetApi:false,
+        convertType:'',
+        simpleDeliverytarget:'',
+        activeConvertList:[],
+        deliverytargetId:null,
         templateName: '', //模板名称
         deliveryRange: '1',//投放范围
         deliveryForm: '1',//投放形式
@@ -280,9 +357,7 @@
         convertPrice: 0, //目标转化出价
         convertTarget: '',
         showDownloadUrl: true,
-        showExternalUrl: false,
         showConvertTarget: true,
-        showPackageName: true,
         showOpenUrlStatus: false,
         openUrlStatus: 'disabled',
         redirectUrl: '',
@@ -290,7 +365,6 @@
         showOpenUrlCreateMode: false,
         openUrlCreateMode: 'hand_create',
         name: '',
-        confirmLoading: false,
         showDateFlowRange: false,
         showDateQuantumRange: false,
         price: 0,
@@ -298,12 +372,46 @@
         flowDateList: {},
         form: this.$form.createForm(this),
         url: {
+          urllist: '/ctop/bytedanceUrlInfo/list',
+          userAllocationList:'/template/bind/login/list',
           dictListUrl: 'toutiao/dictitem/list',
-          insertUrl: 'test/create'
+          insertUrl: 'test/create',
+          convertList:'template/convert/list/url'
         }
       }
     },
     methods: {
+      refreshConvertApiId(){
+        let params = {};
+        getAction(this.url.convertList+'?accountId='+this.accountId+'&urlId='+this.urlId ,params).then((res)=>{
+          console.log(res);
+          if(res.code == 0){
+            this.activeConvertList = res.data.active_convert_list;
+          }else{
+            this.$message.error(res.message);
+          }
+        });
+      },
+      changeConvertType(){
+        if(this.convertType == 'SIMPLE'){
+          this.showConvertTargetSimple = true;
+          this.showConvertTargetApi = false;
+        }else{
+          this.refreshConvertApiId();
+          this.showConvertTargetSimple = false;
+          this.showConvertTargetApi = true;
+        }
+      },
+      refreshUrl(value){
+        let params = {};
+        params.pageSize = '1000';
+        params.type = value;
+        getAction(this.url.urllist, params).then((res) => {
+          if (res.success) {
+            this.urlList = res.result.records
+          }
+        });
+      },
       onChangedeliveRange() {
         if (this.deliveryRange == '1') {
           this.deliveryRangeShow = false;
@@ -385,16 +493,17 @@
       onChangeDownloadType(value) {
         console.log(value);
         if (this.downloadType == '1') {
+          this.urlId = null;
           this.showDownloadUrl = true;
-          this.showExternalUrl = false;
-          this.showPackageName = true;
           this.showOpenUrlStatus = false;
-
+          this.showDownloadMode = true;
+          this.refreshUrl('android');
         } else {
+          this.urlId = null;
           this.showDownloadUrl = false;
-          this.showExternalUrl = true;
-          this.showPackageName = false;
           this.showOpenUrlStatus = true;
+          this.showDownloadMode = false;
+          this.refreshUrl('page');
         }
       },
       onChangeDeliveryTarget(value) {
@@ -447,7 +556,7 @@
         console.log("目标转化出价:" + this.convertPrice);
 
         params.templateName = this.templateName;
-
+        params.accountId = this.accountId;
         params.deliveryRange = this.deliveryRange;
         params.deliveryForm =this.deliveryForm;
         params.adCategory =this.adCategory;
@@ -465,12 +574,15 @@
         params.dateQuantum =this.dateQuantum;
         params.pricing = this.pricing;
         params.convertPrice = this.convertPrice;
+        params.itratorNum = this.itratorNum;
+        params.templateName = this.templateName;
         if (this.time != [] && this.time.length == 2) {
           params.startDate = moment(this.time[0]).format('YYYY-MM-DD HH:mm')
           params.endDate = moment(this.time[1]).format('YYYY-MM-DD HH:mm')
         }
 
         params.dateQuantumRange = this.dateQuantumRange;
+        params.urlId = this.urlId;
         e.preventDefault()
         this.form.validateFields((err, values) => {
           if (!err) {
@@ -490,17 +602,18 @@
             params.convertPrice = this.convertPrice;
             params.filterType = this.filterType;
             params.dateQuantumRange = this.dateQuantumRange;*/
+            this.loading = true;
             console.log(params)
              postAction(this.url.insertUrl, params).then((res) => {
                console.log(res)
                if (res.success) {
-                 this.$message.success(res.message);
+                 this.$message.success("批量创建成功");
                  this.$emit('ok');
                  this.close();
                } else {
                  this.$message.warning(res.message);
                }
-               this.confirmLoading = false;
+               this.loading = false;
 
              });
           }
@@ -520,6 +633,10 @@
           });
         }
       },
+      onChangeDownloadMode(){
+        this.urlId = null;
+        this.refreshUrl(this.downloadMode);
+      },
       onChangeFlowDate() {
         console.log(this.flowDateType)
         if (this.flowDateType == '1') {
@@ -531,7 +648,15 @@
       }
     },
     created: function () {
-
+      this.refreshUrl("android");
+      let params = {};
+      params.pageSize = '1000';
+      params.id = this.accountId;
+      postAction(this.url.userAllocationList, params).then((res) => {
+        if (res.success) {
+          this.userList = res.result.records
+        }
+      });
     }
   }
 

+ 2 - 2
src/views/modules/kuaishouapp/KuaiShouCreateAppTemplateList.vue

@@ -50,7 +50,7 @@
 
     <!-- 操作按钮区域 -->
     <div class="table-operator">
-      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button @click="handleAdd('add')" type="primary" icon="plus">新增</a-button>
       <a-button type="primary" icon="download" @click="handleExportXls('创建应用')">导出</a-button>
       <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
         <a-button type="primary" icon="import">导入</a-button>
@@ -83,7 +83,7 @@
         @change="handleTableChange">
 
         <span slot="action" slot-scope="text, record">
-          <a @click="handleEdit(record)">编辑</a>
+          <a @click="handleEdit(record,'edit')">编辑</a>
 
           <a-divider type="vertical" />
           <a-dropdown>

+ 184 - 90
src/views/modules/kuaishouapp/KuaiShouImageList.vue

@@ -1,63 +1,77 @@
 <template>
   <a-card :bordered="false">
-
     <!-- 查询区域 -->
     <div class="table-page-search-wrapper">
       <a-form layout="inline">
         <a-row :gutter="24">
-
-
-          <a-col :md="6" :sm="8">
-            <a-form-item label="">
-              <a-input  v-model="queryParam.imageName"></a-input>
-            </a-form-item>
-          </a-col>
-        <template v-if="toggleSearchStatus">
-        <a-col :md="6" :sm="8">
-            <a-form-item label="视频类别">
-              <a-input placeholder="请输入视频类别" v-model="queryParam.imageType"></a-input>
-            </a-form-item>
-          </a-col>
           <a-col :md="6" :sm="8">
-            <a-form-item label="图片类型">
-              <a-input placeholder="请输入图片类型" v-model="queryParam.materialType"></a-input>
+            <a-form-item label>
+              <a-input v-model="queryParam.imageName"></a-input>
             </a-form-item>
           </a-col>
+          <template v-if="toggleSearchStatus">
+            <a-col :md="6" :sm="8">
+              <a-form-item label="视频类别">
+                <a-input placeholder="请输入视频类别" v-model="queryParam.imageType"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="8">
+              <a-form-item label="图片类型">
+                <a-input placeholder="请输入图片类型" v-model="queryParam.materialType"></a-input>
+              </a-form-item>
+            </a-col>
           </template>
-          <a-col :md="6" :sm="8" >
+          <a-col :md="6" :sm="8">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
-              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a-button
+                type="primary"
+                @click="searchReset"
+                icon="reload"
+                style="margin-left: 8px"
+              >重置</a-button>
               <a @click="handleToggleSearch" style="margin-left: 8px">
                 {{ toggleSearchStatus ? '收起' : '展开' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
               </a>
             </span>
           </a-col>
-
         </a-row>
       </a-form>
     </div>
 
     <!-- 操作按钮区域 -->
     <div class="table-operator">
-      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button @click="handleAdd()" type="primary" icon="plus">新增</a-button>
       <a-button type="primary" icon="download" @click="handleExportXls('快手-本地图片保存')">导出</a-button>
-      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+      <a-upload
+        name="file"
+        :showUploadList="false"
+        :multiple="false"
+        :headers="tokenHeader"
+        :action="importExcelUrl"
+        @change="handleImportExcel"
+      >
         <a-button type="primary" icon="import">导入</a-button>
       </a-upload>
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
-          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+          <a-menu-item key="1" @click="batchDel">
+            <a-icon type="delete" />删除
+          </a-menu-item>
         </a-menu>
-        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+        <a-button style="margin-left: 8px">
+          批量操作
+          <a-icon type="down" />
+        </a-button>
       </a-dropdown>
     </div>
 
     <!-- table区域-begin -->
     <div>
       <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
-        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
+        <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
         <a style="margin-left: 24px" @click="onClearSelected">清空</a>
       </div>
 
@@ -71,14 +85,17 @@
         :pagination="ipagination"
         :loading="loading"
         :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-        @change="handleTableChange">
-
+        @change="handleTableChange"
+      >
         <span slot="action" slot-scope="text, record">
           <a @click="handleEdit(record)">编辑</a>
 
           <a-divider type="vertical" />
           <a-dropdown>
-            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a class="ant-dropdown-link">
+              更多
+              <a-icon type="down" />
+            </a>
             <a-menu slot="overlay">
               <a-menu-item>
                 <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
@@ -89,6 +106,45 @@
           </a-dropdown>
         </span>
 
+        <!-- 图片预览 -->
+        <div slot="coverImagePreview" slot-scope="text, record">
+          <img
+            style="width:100px;cursor: pointer;"
+            :src="record.localUrl"
+            @click="imagePreviewShowModal(record)"
+          />
+          <a-modal
+            title="图片预览"
+            v-model="imagePreviewVisible"
+            @ok="imagePreviewHandleOk"
+            @cancel="imagePreviewHandleCancel"
+            :footer="null"
+            :maskStyle="imagePreviewMaskStyle"
+          >
+            <div style="text-align:center;">
+              <img style="width:250px;" :src="imagePreviewUrl" />
+            </div>
+          </a-modal>
+          <!-- <img style="width:100px;" :src="record.localUrl" @click="handleEdit(record,'preview')" /> -->
+        </div>
+
+        <!-- 图片类别 -->
+        <!-- <div slot="imageTypeShow" slot-scope="text, record">
+            {{record.imageType}}
+            {{imageTypeArr}}
+        </div>-->
+
+        <!-- 图片类型 -->
+        <div
+          slot="materialTypeShow"
+          slot-scope="text, record"
+        >{{materialTypeArr[record.materialType]}}</div>
+
+        <!-- 素材类型 -->
+        <div
+          slot="positionTypeShow"
+          slot-scope="text, record"
+        >{{positionTypeArr[record.positionType]}}</div>
       </a-table>
     </div>
     <!-- table区域-end -->
@@ -99,77 +155,115 @@
 </template>
 
 <script>
-  import KuaiShouImageModal from './modules/KuaiShouImageModal'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-
-  export default {
-    name: "KuaiShouImageList",
-    mixins:[JeecgListMixin],
-    components: {
-      KuaiShouImageModal
-    },
-    data () {
-      return {
-        description: '快手-本地图片保存管理页面',
-        // 表头
-        columns: [
-          {
-            title: '#',
-            dataIndex: '',
-            key:'rowIndex',
-            width:60,
-            align:"center",
-            customRender:function (t,r,index) {
-              return parseInt(index)+1;
-            }
-           },
-		   {
-            title: '图片保存地址',
-            align:"center",
-            dataIndex: 'localUrl'
-           },
-		   {
-            title: '图片名称',
-            align:"center",
-            dataIndex: 'imageName'
-           },
-		   {
-            title: '图片类别',
-            align:"center",
-            dataIndex: 'imageType'
-           },
+import KuaiShouImageModal from './modules/KuaiShouImageModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 
-		   {
-            title: '图片类型',
-            align:"center",
-            dataIndex: 'materialType'
-           },
-          {
-            title: '操作',
-            dataIndex: 'action',
-            align:"center",
-            scopedSlots: { customRender: 'action' },
+export default {
+  name: 'KuaiShouImageList',
+  mixins: [JeecgListMixin],
+  components: {
+    KuaiShouImageModal
+  },
+  data() {
+    return {
+      imageTypeArr: ['类别1', '类别2'], // 图片类别
+      materialTypeArr: ['', '竖版图片', '横版图片'], // 图片类型
+      positionTypeArr: ['', '信息广告流', '后贴片'], // 素材类型
+      description: '快手-本地图片保存管理页面',
+      // 表头
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
           }
-        ],
-		url: {
-          list: "/kuaishou/kuaiShouImage/list",
-          delete: "/kuaishou/kuaiShouImage/delete",
-          deleteBatch: "/kuaishou/kuaiShouImage/deleteBatch",
-          exportXlsUrl: "kuaishou/kuaiShouImage/exportXls",
-          importExcelUrl: "kuaishou/kuaiShouImage/importExcel",
-       },
+        },
+        {
+          title: '图片预览',
+          align: 'center',
+          // dataIndex: 'localUrl',
+          dataIndex: 'coverImagePreview',
+          scopedSlots: { customRender: 'coverImagePreview' }
+        },
+        {
+          title: '图片名称',
+          align: 'center',
+          dataIndex: 'imageName'
+        },
+        // {
+        //   title: '图片类别',
+        //   align: 'center',
+        //   dataIndex: 'imageType'
+        //   //   dataIndex: 'imageTypeShow',
+        //   // scopedSlots: { customRender: 'imageTypeShow' }
+        // },
+
+        {
+          title: '图片类型',
+          align: 'center',
+          //   dataIndex: 'materialType'
+          dataIndex: 'materialTypeShow',
+          scopedSlots: { customRender: 'materialTypeShow' }
+        },
+        {
+          title: '素材',
+          align: 'center',
+          //   dataIndex: 'positionType',
+          dataIndex: 'positionTypeShow',
+          scopedSlots: { customRender: 'positionTypeShow' }
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/kuaishou/kuaiShouImage/list',
+        delete: '/kuaishou/kuaiShouImage/delete',
+        deleteBatch: '/kuaishou/kuaiShouImage/deleteBatch',
+        exportXlsUrl: 'kuaishou/kuaiShouImage/exportXls',
+        importExcelUrl: 'kuaishou/kuaiShouImage/importExcel'
+      },
+
+      //   图片预览弹窗
+      imagePreviewVisible: false,
+      imagePreviewMaskStyle: {
+        background: 'rgba(0,0,0,.08)'
+      },
+      imagePreviewUrl: ''
     }
   },
   computed: {
-    importExcelUrl: function(){
-      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     }
   },
-    methods: {
-     
+  methods: {
+    testUrl(url) {
+      console.log(url)
+    },
+
+    // 图片预览弹窗
+    imagePreviewShowModal(record) {
+      this.imagePreviewVisible = true
+      this.imagePreviewUrl = record.localUrl
+    },
+    imagePreviewHandleOk() {
+      this.imagePreviewVisible = false
+    },
+    imagePreviewHandleCancel() {
+      this.imagePreviewVisible = false
+      this.imagePreviewUrl = ''
     }
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less'
+@import '~@assets/less/common.less';
 </style>

+ 114 - 83
src/views/modules/kuaishouapp/KuaiShouVideoList.vue

@@ -1,12 +1,9 @@
 <template>
   <a-card :bordered="false">
-
     <!-- 查询区域 -->
     <div class="table-page-search-wrapper">
       <a-form layout="inline">
         <a-row :gutter="24">
-
-
           <template v-if="toggleSearchStatus">
             <a-col :md="6" :sm="8">
               <a-form-item label="视频名称">
@@ -22,35 +19,45 @@
           <a-col :md="6" :sm="8">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
               <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
-              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a-button
+                type="primary"
+                @click="searchReset"
+                icon="reload"
+                style="margin-left: 8px"
+              >重置</a-button>
               <a @click="handleToggleSearch" style="margin-left: 8px">
                 {{ toggleSearchStatus ? '收起' : '展开' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
               </a>
             </span>
           </a-col>
-
         </a-row>
       </a-form>
     </div>
 
     <!-- 操作按钮区域 -->
     <div class="table-operator">
-      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button @click="handleAdd('add')" type="primary" icon="plus">新增</a-button>
       <a-button type="primary" icon="download" @click="handleExportXls('快手-上传视频')">导出</a-button>
-      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
-                @change="handleImportExcel">
+      <a-upload
+        name="file"
+        :showUploadList="false"
+        :multiple="false"
+        :headers="tokenHeader"
+        :action="importExcelUrl"
+        @change="handleImportExcel"
+      >
         <a-button type="primary" icon="import">导入</a-button>
       </a-upload>
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
           <a-menu-item key="1" @click="batchDel">
-            <a-icon type="delete"/>
-            删除
+            <a-icon type="delete" />删除
           </a-menu-item>
         </a-menu>
-        <a-button style="margin-left: 8px"> 批量操作
-          <a-icon type="down"/>
+        <a-button style="margin-left: 8px">
+          批量操作
+          <a-icon type="down" />
         </a-button>
       </a-dropdown>
     </div>
@@ -58,8 +65,11 @@
     <!-- table区域-begin -->
     <div>
       <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
-        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{
-        selectedRowKeys.length }}</a>项
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
+        <a style="font-weight: 600">
+          {{
+          selectedRowKeys.length }}
+        </a>项
         <a style="margin-left: 24px" @click="onClearSelected">清空</a>
       </div>
 
@@ -73,14 +83,17 @@
         :pagination="ipagination"
         :loading="loading"
         :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-        @change="handleTableChange">
-
+        @change="handleTableChange"
+      >
         <span slot="action" slot-scope="text, record">
           <a @click="handleEdit(record)">编辑</a>
 
-          <a-divider type="vertical"/>
+          <a-divider type="vertical" />
           <a-dropdown>
-            <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
+            <a class="ant-dropdown-link">
+              更多
+              <a-icon type="down" />
+            </a>
             <a-menu slot="overlay">
               <a-menu-item>
                 <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
@@ -91,6 +104,17 @@
           </a-dropdown>
         </span>
 
+        <!-- 视频预览 -->
+        <div slot="coverVideoPreview" slot-scope="text, record" class="coverVideoPreview">
+          <video
+            class="video"
+            style="width:100px;"
+            :src="record.localUrl"
+            controls="controls"
+          >您的浏览器不支持 video 标签。</video>
+          <img src="" alt="">
+        </div>
+        <!-- 视频预览 E -->
       </a-table>
     </div>
     <!-- table区域-end -->
@@ -101,75 +125,82 @@
 </template>
 
 <script>
-  import KuaiShouVideoModal from './modules/KuaiShouVideoModal'
-  import {JeecgListMixin} from '@/mixins/JeecgListMixin'
-
-  export default {
-    name: "KuaiShouVideoList",
-    mixins: [JeecgListMixin],
-    components: {
-      KuaiShouVideoModal
-    },
-    data() {
-      return {
-        description: '快手-上传视频管理页面',
-        // 表头
-        columns: [
-          {
-            title: '#',
-            dataIndex: '',
-            key: 'rowIndex',
-            width: 60,
-            align: "center",
-            customRender: function (t, r, index) {
-              return parseInt(index) + 1;
-            }
-          },
-          {
-            title: '视频本地地址',
-            align: "center",
-            dataIndex: 'localUrl'
-          },
-          {
-            title: '视频描述',
-            align: "center",
-            dataIndex: 'videoDesc'
-          },
-          {
-            title: '视频名称',
-            align: "center",
-            dataIndex: 'videoName'
-          },
-          {
-            title: '视频类别',
-            align: "center",
-            dataIndex: 'videoType'
-          },
+import KuaiShouVideoModal from './modules/KuaiShouVideoModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { create } from 'domain'
+import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl'
 
-          {
-            title: '操作',
-            dataIndex: 'action',
-            align: "center",
-            scopedSlots: {customRender: 'action'},
+export default {
+  name: 'KuaiShouVideoList',
+  mixins: [JeecgListMixin],
+  components: {
+    KuaiShouVideoModal
+  },
+  data() {
+    return {
+      description: '快手-上传视频管理页面',
+      // 表头
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
           }
-        ],
-        url: {
-          list: "/kuaishou/kuaiShouVideo/list",
-          delete: "/kuaishou/kuaiShouVideo/delete",
-          deleteBatch: "/kuaishou/kuaiShouVideo/deleteBatch",
-          exportXlsUrl: "kuaishou/kuaiShouVideo/exportXls",
-          importExcelUrl: "kuaishou/kuaiShouVideo/importExcel",
         },
+        {
+          title: '视频本地地址',
+          align: 'center',
+          // dataIndex: 'localUrl',
+          dataIndex: 'coverVideoPreview',
+          scopedSlots: { customRender: 'coverVideoPreview' }
+        },
+        {
+          title: '视频描述',
+          align: 'center',
+          dataIndex: 'videoDesc'
+        },
+        {
+          title: '视频名称',
+          align: 'center',
+          dataIndex: 'videoName'
+        },
+        {
+          title: '视频类别',
+          align: 'center',
+          dataIndex: 'videoType'
+        },
+
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/kuaishou/kuaiShouVideo/list',
+        delete: '/kuaishou/kuaiShouVideo/delete',
+        deleteBatch: '/kuaishou/kuaiShouVideo/deleteBatch',
+        exportXlsUrl: 'kuaishou/kuaiShouVideo/exportXls',
+        importExcelUrl: 'kuaishou/kuaiShouVideo/importExcel'
       }
-    },
-    computed: {
-      importExcelUrl: function () {
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
-      }
-    },
-    methods: {}
+    }
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
+  },
+  methods: {},
+  updated() {
+    stopOtherVideo()
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less'
+@import '~@assets/less/common.less';
 </style>

+ 2 - 2
src/views/modules/kuaishouapp/campaignCreate.vue

@@ -57,14 +57,14 @@
           allowClear
           placeholder="选择应用目标"
           optionFilterProp="children"
-          style="width: 200px"
+          style="width: 600px"
           @focus="handleFocus"
           @blur="handleBlur"
           @change="handleChange"
           :filterOption="filterOption"
         >
           <a-select-option value="0">请选择目标应用</a-select-option>
-          <a-select-option v-for="appModel in appList" :key="appModel.id" :value="appModel.id">{{appModel.appName}}&#12288;&nbsp;{{appModel.appType}}</a-select-option>
+          <a-select-option  v-for="appModel in appList" :key="appModel.id" :value="appModel.id">{{appModel.appName}}&#12288;&nbsp;&#12288;{{appModel.appType}}&#12288;&#12288;  {{appModel.appVersion}}</a-select-option>
         </a-select>
       </a-form-item>
 

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 856 - 472
src/views/modules/kuaishouapp/creativeCreate.vue


+ 116 - 12
src/views/modules/kuaishouapp/groupCreate.vue

@@ -199,23 +199,86 @@
 
 
       <a-form-item
-        label="出价"
+        label="OCPC出价"
         v-if="showCpaBid"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
         :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
         <a-input
           v-model="cpaBid"
-          v-decorator="[
-                  'confirm_cap_bid',
-                  {rules: [{ required: true, message: ' ' },
-                  {validator: handleConfirmCpaBid}]}
-                ]"
           placeholder="请填写出价金额" style="width: 70%"></a-input>
       </a-form-item>
 
 
       <a-form-item
+        label="深度转化目标"
+        v-if="showDeepConversionType"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
+        <a-select
+          v-model="deepConversionType"
+          showSearch
+          showArrow
+          allowClear
+          optionFilterProp="children"
+          style="width: 500px"
+          :filterOption="filterOption"
+        >
+          <a-select-option v-for="conversionType in deepConversionTypes"
+                           :key="conversionType.deep_conversion_type"
+                           :value="conversionType.deep_conversion_type">{{conversionType.desc}}
+          </a-select-option>
+        </a-select>
+      </a-form-item>
+
+
+      <a-form-item
+        label="深度转化目标出价"
+        v-if="showDeepConversionBid"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
+        <a-input
+          v-model="deepConversionBid"
+          placeholder="请填写深度转化出价金额" style="width: 70%"></a-input>
+        元
+      </a-form-item>
+
+
+      <a-form-item
+        label="广告投放位置"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
+        <a-radio-group v-model="placementPosition" buttonStyle="solid" @change="changeShowPosition()">
+          <a-radio-button value='1' :disabled="true">优选广告位</a-radio-button>
+          <a-radio-button value='2'>按场景选择广告位</a-radio-button>
+        </a-radio-group>
+      </a-form-item>
+
+
+      <a-form-item
+        label="场景广告位"
+        v-if="showPosition"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
+        <a-radio-group v-model="sceneId">
+          <a-radio-button value='2'>信息流广告</a-radio-button>
+          <a-radio-button value='3'>视频后贴片广告</a-radio-button>
+        </a-radio-group>
+      </a-form-item>
+
+
+      <a-form-item
+        label="创意制作方式"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
+        <a-radio-group v-model="unitType">
+          <a-radio-button value='4'>自定义</a-radio-button>
+          <a-radio-button value='2' :disabled="true">程序化创意</a-radio-button>
+        </a-radio-group>
+      </a-form-item>
+
+
+      <a-form-item
         label="广告组名称"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
         :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
@@ -235,7 +298,7 @@
       <a-form-item
         :wrapperCol="{ span: 20 }"
         style="text-align: center">
-        <a-button htmlType="submit" type="primary">提交</a-button>
+        <a-button htmlType="submit" type="primary" :loading="loading">提交</a-button>
         <a-button style="margin-left: 8px">保存</a-button>
       </a-form-item>
     </a-form>
@@ -273,16 +336,25 @@
         showMode: '2', // 1 轮播 2 优选
         bidType: '2',
         showBid: true,
+        loading: false,
         bid: 0,// bid_type 为 CPC/eCPC 出价
         ocpxActionType: '2',// 2行为数 180 激活数
         showOcpxActionType: false,
         showCpaBid: false,
         cpaBid: 0,// bid_type 是 OCPC 时该字段必填
-        page: 2,// 资源位置
         unitName: "_" + moment().format('YYYY-MM-DD_HH:mm'),//广告组名称
         activationDisabled: true,
         isFormDisabled: true,
 
+        placementPosition: '2',
+        showPosition: true,
+        sceneId: '2',
+        deepConversionTypes: [],
+        deepConversionType: '',
+        showDeepConversionType: false,
+        showDeepConversionBid: false,
+        deepConversionBid: 0,
+        unitType: '4',
 
         form: this.$form.createForm(this),
         url: {
@@ -298,6 +370,15 @@
     methods: {
       ...mapGetters(["nickname", "avatar", "userInfo"]),
 
+
+      changeShowPosition() {
+        if (this.placementPosition == 1) {
+          this.showPosition = false;
+        } else {
+          this.showPosition = true;
+        }
+      },
+
       deepConversion() {
         if (this.accountId != '') {
           let params = {};
@@ -306,6 +387,7 @@
             if (res.success) {
               if (res.result.isActivate == 1) {
                 this.activationDisabled = false;
+                this.deepConversionTypes = res.result.deepConversionTypes;
               } else {
                 this.activationDisabled = true;
               }
@@ -314,10 +396,13 @@
               } else {
                 this.isFormDisabled = true;
               }
-              console.log(res.result)
+
+
             } else {
               this.activationDisabled = true;
               this.isFormDisabled = true;
+              this.showDeepConversionType = false;
+              this.showDeepConversionBid = false;
             }
           });
 
@@ -330,6 +415,17 @@
           this.showBid = false;
           this.showOcpxActionType = true;
           this.showCpaBid = true;
+
+          if (this.ocpxActionType == '180' && this.deepConversionTypes.length > 0) {
+            this.showDeepConversionType = true;
+            this.showDeepConversionBid = true;
+
+          } else {
+            this.showDeepConversionType = false;
+            this.showDeepConversionBid = false;
+          }
+
+
         } else {
           this.showBid = true;
           this.showOcpxActionType = false;
@@ -396,6 +492,7 @@
         e.preventDefault()
         this.form.validateFields((err, values) => {
           if (!err) {
+            this.loading = true;
             console.log('Received values of form: ', values);
             console.log('预算金额: ', this.dayBudget);
             console.log('投放方式: ', this.speed);
@@ -419,8 +516,8 @@
               console.log('优化目标:', this.ocpxActionType);
               console.log('出价金额,cpaBid:', this.cpaBid);
             }
-            console.log('资源位置: ', this.page);
-            console.log('广告组名称: ', this.unitName);
+
+
             let params = {};
             params.dayBudget = this.dayBudget * 1000;
             params.speed = this.speed;
@@ -443,20 +540,27 @@
               params.ocpxActionType = this.ocpxActionType;
               params.cpaBid = this.cpaBid * 1000;
             }
-            params.page = this.page;
+
             params.showModel = this.showMode;
             params.unitName = this.unitName;
             params.loginId = this.userInfo().id;
             params.accountId = this.accountId;
             params.campaignTemplateId = this.campaignTemplateId;
             params.createCount = this.createCount;
+            params.sceneId = this.sceneId;
+            params.unitType = this.unitType;
+            params.deepConversionType = this.deepConversionType;
+            params.deepConversionBid = this.deepConversionBid * 1000;
+
 
             console.log(params)
             postAction(this.url.insertTemplateUrl, params).then((res) => {
               console.log(res)
               if (res.success) {
+                this.loading = false;
                 alert("广告组模板创建成功");
               } else {
+                this.loading = false;
                 alert(res.message);
               }
             });

+ 498 - 54
src/views/modules/kuaishouapp/modules/KuaiShouCreateAppTemplateModal.vue

@@ -4,8 +4,10 @@
     :width="800"
     :visible="visible"
     :confirmLoading="confirmLoading"
+    :footer="null"
     @ok="handleOk"
     @cancel="handleCancel"
+<<<<<<< HEAD
     cancelText="关闭">
     
     <a-form>
@@ -160,10 +162,235 @@
       </a-form-item>
 
     </a-form>
+=======
+    cancelText="关闭"
+  >
+    <!-- <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="app类型 安卓 ios">
+          <a-input placeholder="请输入app类型 安卓 ios" v-decorator="['appType', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="应用类型   : 1 Android 应用下载,2: Android 网页游戏,3: iOS 应用下载, 4:iOS 网页游戏">
+          <a-input placeholder="请输入应用类型   : 1 Android 应用下载,2: Android 网页游戏,3: iOS 应用下载, 4:iOS 网页游戏" v-decorator="['platform', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="应用标记">
+          <a-input placeholder="请输入应用标记" v-decorator="['appVersion', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="应用名称">
+          <a-input placeholder="请输入应用名称" v-decorator="['appName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="应用包名">
+          <a-input placeholder="请输入应用包名" v-decorator="['packageName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="上传文件到服务器返回地址">
+          <a-input placeholder="请输入上传文件到服务器返回地址" v-decorator="['file', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="上传图片到服务器返回地址">
+          <a-input placeholder="请输入上传图片到服务器返回地址" v-decorator="['imageUrl', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="输入应用下载地址">
+          <a-input placeholder="请输入输入应用下载地址" v-decorator="['url', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="登录人id">
+          <a-input placeholder="请输入登录人id" v-decorator="['loginId', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>-->
+    <a-card :body-style="{padding: '24px 32px'}" :bordered="false">
+      <a-form>
+        <a-form-item
+          label="设备类型"
+          :labelCol="{xs: {span: 24},sm: {span: 5}}"
+          :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+        >
+          <a-radio-group v-model="appType" @change="changePlatform">
+            <a-radio-button value="android">安卓</a-radio-button>
+            <a-radio-button value="ios">IOS</a-radio-button>
+          </a-radio-group>
+        </a-form-item>
+        <a-form-item v-if="showAndroid">
+          <a-form @submit="handleSubmit" :form="form">
+            <a-form-item
+              label="推广类型"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-radio-group v-model="platform" @change="changeShowUploadType">
+                <a-radio value="1">应用下载</a-radio>
+                <a-radio value="2">网页游戏</a-radio>
+              </a-radio-group>
+            </a-form-item>
+
+            <a-form-item
+              label="上传应用"
+              v-if="showUpload"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-radio-group v-model="uploadType" @change="changeShowUpload">
+                <a-radio-button value="1">本地上传</a-radio-button>
+                <a-radio-button value="2">填写链接</a-radio-button>
+              </a-radio-group>
+            </a-form-item>
+
+            <a-form-item
+              label="上传文件"
+              v-if="showUploadFile"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <upload-to-ali
+                v-model="file"
+                :customDomain="customDomain"
+                preview
+                :region="region"
+                :bucket="bucket"
+                :accept="acceptVideo"
+                :max="10"
+                :size="1024000"
+                :accessKeyId="accessKeyId"
+                :accessKeySecret="accessKeySecret"
+              ></upload-to-ali>
+            </a-form-item>
+
+            <a-form-item
+              v-if="showDownLoad"
+              label="下载链接"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-input placeholder="请填写应用链接" v-model="downloadUrl" />
+            </a-form-item>
+
+            <a-form-item
+              label="应用包名"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-input placeholder="请填写包名称,如com.smile.gifmaker" v-model="packageName" />
+            </a-form-item>
+
+            <a-form-item
+              label="应用名称"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-input placeholder="请填写应用名称" v-model="appName" />
+            </a-form-item>
+
+            <a-form-item
+              label="上传图标"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <upload-to-ali
+                v-model="imageUrl"
+                :customDomain="customDomain"
+                preview
+                :region="region"
+                :bucket="bucket"
+                :accept="acceptVideo"
+                :max="10"
+                :size="1024000"
+                :accessKeyId="accessKeyId"
+                :accessKeySecret="accessKeySecret"
+              ></upload-to-ali>
+            </a-form-item>
+
+            <a-form-item
+              label="应用标记"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-input placeholder="请填写应用标记,必填且不可重复,如快手-5.6.1.66" v-model="appVersion" />
+            </a-form-item>
+
+            <a-form-item :wrapperCol="{ span: 24 }" style="text-align: center">
+              <a-button htmlType="submit" type="primary">提交</a-button>
+              <a-button style="margin-left: 8px">保存</a-button>
+            </a-form-item>
+          </a-form>
+        </a-form-item>
+
+        <a-form-item v-if="showIOS">
+          <a-form @submit="submitIOS" :form="form">
+            <a-form-item
+              label="推广类型"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-radio-group v-model="platform">
+                <a-radio value="3">应用下载</a-radio>
+                <a-radio value="4">网页游戏</a-radio>
+              </a-radio-group>
+            </a-form-item>
+
+            <a-form-item
+              v-if="showDownLoad"
+              label="填写链接"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-input placeholder="请填写应用下载地址" v-model="downloadUrl" />
+            </a-form-item>
+
+            <a-form-item
+              label="应用名称"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-input placeholder="请填写应用名称" v-model="appName" />
+            </a-form-item>
+            <a-form-item
+              label="应用标记"
+              :labelCol="{xs: {span: 24},sm: {span: 5}}"
+              :wrapperCol="{xs: {span: 24},sm: {span: 16}}"
+            >
+              <a-input placeholder="请填写应用标记,必填且不可重复,如快手-5.6.1.66" v-model="appVersion" />
+            </a-form-item>
+            <a-form-item :wrapperCol="{ span: 24 }" style="text-align: center">
+              <a-button htmlType="submit" type="primary">提交</a-button>
+              <a-button style="margin-left: 8px">保存</a-button>
+            </a-form-item>
+          </a-form>
+        </a-form-item>
+      </a-form>
+    </a-card>
+>>>>>>> test
   </a-modal>
 </template>
 
 <script>
+<<<<<<< HEAD
   import { httpAction } from '@/api/manage'
   import pick from 'lodash.pick'
   import moment from "moment"
@@ -227,68 +454,242 @@
 
           insertTemplateUrl: '/kuaishou/kuaiShouCreateAppTemplate/insert'
         }
-      }
-    },
-    created () {
-    },
-    methods: {
-      add () {
-        this.edit({});
+=======
+import { httpAction } from '@/api/manage'
+import pick from 'lodash.pick'
+import moment from 'moment'
+
+import { deleteAction, postAction, getAction } from '@/api/manage'
+import UploadToAli from '@femessage/upload-to-ali'
+import { mapActions, mapGetters } from 'vuex'
+import { constants } from 'crypto'
+
+export default {
+  name: 'KuaiShouCreateAppTemplateModal',
+  components: {
+    UploadToAli
+  },
+  data() {
+    return {
+      title: '操作',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
       },
-      edit (record) {
-        this.form.resetFields();
-        this.model = Object.assign({}, record);
-        this.visible = true;
-        this.$nextTick(() => {
-          this.form.setFieldsValue(pick(this.model,'appType','platform','appVersion','appName','packageName','file','imageUrl','url','loginId'))
-		  //时间格式化
-        });
-
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
       },
-      close () {
-        this.$emit('close');
-        this.visible = false;
+
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {},
+      url: {
+        add: '/kuaishou/kuaiShouCreateAppTemplate/add',
+        edit: '/kuaishou/kuaiShouCreateAppTemplate/edit'
       },
-      handleOk () {
-        const that = this;
-        // 触发表单验证
-        this.form.validateFields((err, values) => {
-          if (!err) {
-            that.confirmLoading = true;
-            let httpurl = '';
-            let method = '';
-            if(!this.model.id){
-              httpurl+=this.url.add;
-              method = 'post';
-            }else{
-              httpurl+=this.url.edit;
-               method = 'put';
-            }
-            let formData = Object.assign(this.model, values);
-            //时间格式化
-            
-            console.log(formData)
-            httpAction(httpurl,formData,method).then((res)=>{
-              if(res.success){
-                that.$message.success(res.message);
-                that.$emit('ok');
-              }else{
-                that.$message.warning(res.message);
+
+      appType: 'android', //设备类型
+      platform: '1', //应用类型   : 1 Android 应用下载,2: Android 网页游戏,3: iOS 应用下载, 4:iOS 网页游戏
+      uploadType: '1', //上传类型 1 本地上传 2 填写链接
+      appVersion: '', //应用标记
+      appName: '', // 应用名称
+      packageName: '', //应用包名
+      file: '', // 上传文件
+      imageUrl: '', // 上传图标链接链接
+      downloadUrl: '', //下载链接
+      showUploadFile: true,
+      showDownLoad: false,
+      showUpload: true,
+      showAndroid: true,
+      showIOS: false,
+      customDomain: '',
+      acceptVideo: '/*.apk,/*.png,/*.jpg,/*.jpeg,/*.mp4',
+      accessKeyId: 'LTAIbNbqWzSOklQV',
+      accessKeySecret: '1rkPz7JNoXk8sJevPaeYHWqfkQXBGh',
+      region: 'oss-cn-beijing',
+      bucket: 'ctop-media',
+      form: this.$form.createForm(this),
+      url: {
+        insertTemplateUrl: '/kuaishou/kuaiShouCreateAppTemplate/insert'
+>>>>>>> test
+      }
+    }
+  },
+  created() {},
+  methods: {
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    add(sign) {
+      this.edit({})
+      this.appType = 'android'
+    },
+    edit(record, sign) {
+      this.form.resetFields()
+      this.model = Object.assign({}, record)
+      this.visible = true
+      this.appType = record.appType
+      this.platform = record.platform
+      this.appVersion = record.appVersion
+      this.appName = record.appName
+      this.packageName = record.packageName
+      this.file = record.file
+      this.imageUrl = record.imageUrl
+      this.url = record.url
+      this.loginId = record.loginId
+        // this.$nextTick(() => {
+        //   this.form.setFieldsValue(
+        //     pick(
+        //       (this.appType = record.appType),
+        //       (this.platform = record.platform),
+        //       (this.appVersion = record.appVersion),
+        //       (this.appName = record.appName),
+        //       (this.packageName = record.packageName),
+        //       (this.file = record.file),
+        //       (this.imageUrl = record.imageUrl),
+        //       (this.url = record.url),
+        //       (this.loginId = record.loginId),
+        //       this.model,
+        //       // 'appType',
+        //       // 'platform',
+        //       // 'appVersion',
+        //       // 'appName',
+        //       // 'packageName',
+        //       // 'file',
+        //       // 'imageUrl',
+        //       // 'url',
+        //       // 'loginId'
+        //     )
+        //   )
+        // })
+      if (sign == 'add') {
+        this.appType = 'android'
+      }
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+    handleOk() {
+      const that = this
+      // 触发表单验证
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          let formData = Object.assign(this.model, values)
+          //时间格式化
+
+          console.log(formData)
+          httpAction(httpurl, formData, method)
+            .then(res => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok')
+              } else {
+                that.$message.warning(res.message)
               }
-            }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
             })
+            .finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    changePlatform() {
+      if (this.appType == 'android') {
+        this.showAndroid = true
+        this.showIOS = false
+        this.platform = '1'
+      } else {
+        this.showAndroid = false
+        this.showIOS = true
+        this.showDownLoad = true
+        this.platform = '3'
+      }
+    },
+    changeShowUpload() {
+      if (this.uploadType == '1') {
+        this.showUploadFile = true
+        this.showDownLoad = false
+      } else {
+        this.showUploadFile = false
+        this.showDownLoad = true
+      }
+    },
+    changeShowUploadType() {
+      if (this.platform == '2') {
+        this.showUpload = false
+        this.showUploadFile = false
+        this.showDownLoad = true
+        this.uploadType = '1'
+      } else {
+        this.showUpload = true
+        this.showUploadFile = true
+        this.showDownLoad = false
+      }
+    },
 
-
-
+    handleSubmit(e) {
+      console.log('设备类型:' + this.appType)
+      console.log('应用类型:' + this.platform)
+      console.log('上传类型:' + this.uploadType)
+      console.log('应用标记:' + this.appVersion)
+      console.log('应用名称:' + this.appName)
+      console.log('包名称:' + this.packageName)
+      console.log('文件地址:' + this.file)
+      console.log('图片地址:' + this.imageUrl)
+      e.preventDefault()
+      this.visible = false
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          console.log('Received values of form: ', values)
+          let params = {}
+          if (this.uploadType == '1') {
+            if (this.file != '') {
+              params.file = this.file
+            }
+          } else if (this.uploadType == '2') {
+            params.url = this.downloadUrl
           }
-        })
-      },
-      handleCancel () {
-        this.close()
-      },
+          if (this.imageUrl != '') {
+            params.imageUrl = this.imageUrl
+          }
+          params.platform = this.platform
+          params.appType = this.appType
+          params.packageName = this.packageName
+          params.appName = this.appName
+          params.appVersion = this.appVersion
+          params.loginId = this.userInfo().id
+          console.log(params)
+          postAction(this.url.insertTemplateUrl, params).then(res => {
+            console.log(res)
+            if (res.success) {
+              this.loadData()
+              alert('创建应用成功')
+              //   location.reload();
+            } else {
+              alert(res.message)
+            }
+          })
+        }
+      })
+    },
 
+<<<<<<< HEAD
     // 迁移
       ...mapGetters(["nickname", "avatar", "userInfo"]),
       changePlatform() {
@@ -402,15 +803,58 @@
       onChange(value) {
         console.log(value);
       },
+=======
+    submitIOS(e) {
+      console.log('设备类型:' + this.appType)
+      console.log('应用类型:' + this.platform)
+      console.log('上传类型:' + this.uploadType)
+      console.log('应用标记:' + this.appVersion)
+      console.log('应用名称:' + this.appName)
+      console.log('包名称:' + this.packageName)
+      console.log('文件地址:' + this.file)
+      console.log('图片地址:' + this.imageUrl)
+      e.preventDefault()
+      this.visible = false
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          console.log('Received values of form: ', values)
+          let params = {}
+          params.appType = this.appType
+          params.platform = this.platform
+          params.url = this.downloadUrl
+          params.appName = this.appName
+          params.appVersion = this.appVersion
+          params.loginId = this.userInfo().id
+          console.log(params)
+          postAction(this.url.insertTemplateUrl, params).then(res => {
+            console.log(res)
+            if (res.success) {
+              alert('广告组模板创建成功')
+              //   location.reload();
+            } else {
+              alert(res.message)
+            }
+          })
+        }
+      })
+    },
+>>>>>>> test
 
+    onChange(value) {
+      console.log(value)
     }
   }
+}
 </script>
 
+<<<<<<< HEAD
 <style lang="scss">
     .create_app_container{
         .ant-modal-footer{
             display: none;
         }
     }
+=======
+<style lang="less" scoped>
+>>>>>>> test
 </style>

+ 120 - 99
src/views/modules/kuaishouapp/modules/KuaiShouImageModal.vue

@@ -6,143 +6,164 @@
     :confirmLoading="confirmLoading"
     @ok="handleOk"
     @cancel="handleCancel"
-    cancelText="关闭">
-    
+    cancelText="关闭"
+  >
     <a-spin :spinning="confirmLoading">
       <a-form :form="form">
-      
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="图片保存本地地址">
+          v-if="imageLocalUrl"
+          label="图片保存本地地址"
+        >
           <a-input placeholder="请输入图片保存本地地址" v-decorator="['localUrl', {}]" />
         </a-form-item>
+
+        <!-- 图片预览 -->
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="imageName">
-          <a-input placeholder="请输入imageName" v-decorator="['videoName', {}]" />
+          label="图片预览"
+          v-if="imagePreviewItem"
+        >
+          <img style="width:200px;" :src="imagePreviewUrl" />
         </a-form-item>
+        <!-- 图片预览 E -->
+
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="视频类别">
-          <a-input placeholder="请输入视频类别" v-decorator="['imageType', {}]" />
+          label="图片名称"
+          v-if="imageNameItem"
+        >
+          <a-input placeholder="请输入图片名称" v-decorator="['imageName', {}]" />
         </a-form-item>
-        <a-form-item
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-          label="登录人id">
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="loginIdItem" label="登录人id">
           <a-input placeholder="请输入登录人id" v-decorator="['loginId', {}]" />
         </a-form-item>
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="图片类型 1-竖版图片 2-横版图片">
+          v-if="imageTypeItem"
+          label="图片类型 1-竖版图片 2-横版图片"
+        >
           <a-input placeholder="请输入图片类型 1-竖版图片 2-横版图片" v-decorator="['materialType', {}]" />
         </a-form-item>
-		
       </a-form>
     </a-spin>
   </a-modal>
 </template>
 
 <script>
-  import { httpAction } from '@/api/manage'
-  import pick from 'lodash.pick'
-  import moment from "moment"
-
-  export default {
-    name: "KuaiShouImageModal",
-    data () {
-      return {
-        title:"操作",
-        visible: false,
-        model: {},
-        labelCol: {
-          xs: { span: 24 },
-          sm: { span: 5 },
-        },
-        wrapperCol: {
-          xs: { span: 24 },
-          sm: { span: 16 },
-        },
-
-        confirmLoading: false,
-        form: this.$form.createForm(this),
-        validatorRules:{
-        },
-        url: {
-          add: "/kuaishou/kuaiShouImage/add",
-          edit: "/kuaishou/kuaiShouImage/edit",
-        },
-      }
-    },
-    created () {
-    },
-    methods: {
-      add () {
-        this.edit({});
-      },
-      edit (record) {
-        this.form.resetFields();
-        this.model = Object.assign({}, record);
-        this.visible = true;
-        this.$nextTick(() => {
-          this.form.setFieldsValue(pick(this.model,'localUrl','videoName','imageType','loginId','materialType'))
-		  //时间格式化
-        });
+import { httpAction } from '@/api/manage'
+import pick from 'lodash.pick'
+import moment from 'moment'
 
+export default {
+  name: 'KuaiShouImageModal',
+  data() {
+    return {
+      title: '操作',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
       },
-      close () {
-        this.$emit('close');
-        this.visible = false;
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
       },
-      handleOk () {
-        const that = this;
-        // 触发表单验证
-        this.form.validateFields((err, values) => {
-          if (!err) {
-            that.confirmLoading = true;
-            let httpurl = '';
-            let method = '';
-            if(!this.model.id){
-              httpurl+=this.url.add;
-              method = 'post';
-            }else{
-              httpurl+=this.url.edit;
-               method = 'put';
-            }
-            let formData = Object.assign(this.model, values);
-            //时间格式化
-            
-            console.log(formData)
-            httpAction(httpurl,formData,method).then((res)=>{
-              if(res.success){
-                that.$message.success(res.message);
-                that.$emit('ok');
-              }else{
-                that.$message.warning(res.message);
-              }
-            }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
-            })
-
 
-
-          }
-        })
-      },
-      handleCancel () {
-        this.close()
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {},
+      url: {
+        add: '/kuaishou/kuaiShouImage/add',
+        edit: '/kuaishou/kuaiShouImage/edit'
       },
+      imageNameItem: true,
+      imagePreviewUrl: '',
+      loginIdItem: true,
+      imageTypeItem: true,
+      imagePreviewItem: true,
+      imageLocalUrl: true
+    }
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    // 新增
+    add() {
+      this.edit({})
+      this.loginIdItem = true
+      this.imageTypeItem = true
+      this.imagePreviewItem = false
+      this.imageLocalUrl = true
+    },
+    //   编辑
+    edit(record, sign) {
+    //   if (sign == 'preview') {
+    //     this.imageNameItem = false
+    //   }
+      this.loginIdItem = false
+      this.imageTypeItem = false
+      this.imagePreviewItem = true
+      this.imageLocalUrl = false
+      this.form.resetFields()
+      this.model = Object.assign({}, record)
+      this.visible = true
 
+      this.$nextTick(() => {
+        this.form.setFieldsValue(pick(this.model, 'localUrl', 'imageName', 'imageType', 'loginId', 'materialType'))
+      })
+      this.imagePreviewUrl = record.localUrl;
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+    handleOk() {
+      const that = this
+      // 触发表单验证
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          let formData = Object.assign(this.model, values)
+          //时间格式化
 
+          console.log(formData)
+          httpAction(httpurl, formData, method)
+            .then(res => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok')
+              } else {
+                that.$message.warning(res.message)
+              }
+            })
+            .finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
     }
   }
+}
 </script>
 
 <style lang="less" scoped>
-
 </style>

+ 142 - 95
src/views/modules/kuaishouapp/modules/KuaiShouVideoModal.vue

@@ -6,143 +6,190 @@
     :confirmLoading="confirmLoading"
     @ok="handleOk"
     @cancel="handleCancel"
-    cancelText="关闭">
-    
+    cancelText="关闭"
+  >
     <a-spin :spinning="confirmLoading">
       <a-form :form="form">
-      
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="视频保存本地地址">
+          v-if="videoLocalUrlItem"
+          label="视频保存本地地址"
+        >
           <a-input placeholder="请输入视频保存本地地址" v-decorator="['localUrl', {}]" />
         </a-form-item>
+
+        <!-- 视频预览 -->
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          v-if="videoPreviewItem"
+          label="视频预览"
+        >
+          <video
+            class="video"
+            style="width:200px;"
+            :src="videoPreviewUrl"
+            controls="controls"
+          >您的浏览器不支持 video 标签。</video>
+        </a-form-item>
+        <!-- 视频预览 E -->
+
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="视频描述">
+          v-if="videoDescItem"
+          label="视频描述"
+        >
           <a-input placeholder="请输入视频描述" v-decorator="['videoDesc', {}]" />
         </a-form-item>
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="videoName">
-          <a-input placeholder="请输入videoName" v-decorator="['videoName', {}]" />
+          v-if="vodeoNameItem"
+          label="视频名称"
+        >
+          <a-input placeholder="请输入视频名称" v-decorator="['videoName', {}]" />
         </a-form-item>
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="视频类别">
+          v-if="videoTypeItem"
+          label="视频类别"
+        >
           <a-input placeholder="请输入视频类别" v-decorator="['videoType', {}]" />
         </a-form-item>
         <a-form-item
           :labelCol="labelCol"
           :wrapperCol="wrapperCol"
-          label="登录人id">
+          v-if="videoLoginIdItem"
+          label="登录人id"
+        >
           <a-input placeholder="请输入登录人id" v-decorator="['loginId', {}]" />
         </a-form-item>
-		
       </a-form>
     </a-spin>
   </a-modal>
 </template>
 
 <script>
-  import { httpAction } from '@/api/manage'
-  import pick from 'lodash.pick'
-  import moment from "moment"
+import { httpAction } from '@/api/manage'
+import pick from 'lodash.pick'
+import moment from 'moment'
+import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl'
 
-  export default {
-    name: "KuaiShouVideoModal",
-    data () {
-      return {
-        title:"操作",
-        visible: false,
-        model: {},
-        labelCol: {
-          xs: { span: 24 },
-          sm: { span: 5 },
-        },
-        wrapperCol: {
-          xs: { span: 24 },
-          sm: { span: 16 },
-        },
+export default {
+  name: 'KuaiShouVideoModal',
+  data() {
+    return {
+      title: '操作',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
 
-        confirmLoading: false,
-        form: this.$form.createForm(this),
-        validatorRules:{
-        },
-        url: {
-          add: "/kuaishou/kuaiShouVideo/add",
-          edit: "/kuaishou/kuaiShouVideo/edit",
-        },
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {},
+      url: {
+        add: '/kuaishou/kuaiShouVideo/add',
+        edit: '/kuaishou/kuaiShouVideo/edit'
+      },
+      videoPreviewUrl: '',
+      videoLocalUrlItem: true,
+      videoDescItem: true,
+      vodeoNameItem: true,
+      videoTypeItem: true,
+      videoLoginIdItem: true,
+      videoPreviewItem: true
+    }
+  },
+  methods: {
+    add(sign) {
+      /**
+       * 在 src\mixins\JeecgListMixin.js 中给 handleAdd 一个参数 sign
+       * sign---add---新增
+       */
+      if (sign == 'add') {
+        this.edit({});
+        this.videoPreviewItem = false;
+        this.vodeoNameItem = true;
+        this.videoTypeItem = true;
+        this.videoLoginIdItem = true;
       }
+      closeAllVideoFun();
     },
-    created () {
+    edit(record) {
+      this.form.resetFields();
+      this.model = Object.assign({}, record);
+      this.visible = true;
+      this.videoLocalUrlItem = false;
+      this.videoDescItem = true;
+      this.vodeoNameItem = false;
+      this.videoTypeItem = false;
+      this.videoLoginIdItem = false;
+      this.videoPreviewItem = true;
+      this.$nextTick(() => {
+        this.form.setFieldsValue(pick(this.model, 'localUrl', 'videoDesc', 'videoName', 'videoType', 'loginId'));
+        //时间格式化
+        this.videoPreviewUrl = record.localUrl;
+      })
+      closeAllVideoFun();
     },
-    methods: {
-      add () {
-        this.edit({});
-      },
-      edit (record) {
-        this.form.resetFields();
-        this.model = Object.assign({}, record);
-        this.visible = true;
-        this.$nextTick(() => {
-          this.form.setFieldsValue(pick(this.model,'localUrl','videoDesc','videoName','videoType','loginId'))
-		  //时间格式化
-        });
+    close() {
+      this.$emit('close');
+      this.visible = false;
+      closeAllVideoFun();
+    },
+    handleOk() {
+      const that = this
+      // 触发表单验证
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          let formData = Object.assign(this.model, values)
+          //时间格式化
 
-      },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-      },
-      handleOk () {
-        const that = this;
-        // 触发表单验证
-        this.form.validateFields((err, values) => {
-          if (!err) {
-            that.confirmLoading = true;
-            let httpurl = '';
-            let method = '';
-            if(!this.model.id){
-              httpurl+=this.url.add;
-              method = 'post';
-            }else{
-              httpurl+=this.url.edit;
-               method = 'put';
-            }
-            let formData = Object.assign(this.model, values);
-            //时间格式化
-            
-            console.log(formData)
-            httpAction(httpurl,formData,method).then((res)=>{
-              if(res.success){
-                that.$message.success(res.message);
-                that.$emit('ok');
-              }else{
-                that.$message.warning(res.message);
+          console.log(formData)
+          httpAction(httpurl, formData, method)
+            .then(res => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok')
+              } else {
+                that.$message.warning(res.message)
               }
-            }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
             })
-
-
-
-          }
-        })
-      },
-      handleCancel () {
-        this.close()
-      },
-
-
-    }
+            .finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+        }
+      })
+      closeAllVideoFun();
+    },
+    handleCancel() {
+      this.close();
+      closeAllVideoFun();
+    },
   }
+}
 </script>
 
 <style lang="less" scoped>
-
 </style>

+ 68 - 18
src/views/modules/kuaishouapp/uploadApp.vue

@@ -1,6 +1,25 @@
 <template>
   <a-card :body-style="{padding: '24px 32px'}" :bordered="false">
     <a-form>
+      <a-form-item
+        label="选择快手账户"
+        :labelCol="{xs: {span: 24},sm: {span: 5}}"
+        :wrapperCol="{xs: {span: 24},sm: {span: 16}}">
+        <a-select
+          v-model="accountId"
+          showSearch
+          showArrow
+          allowClear
+          placeholder="选择需创建的快手账户"
+          optionFilterProp="children"
+          style="width: 500px"
+          :filterOption="filterOption"
+        >
+          <a-select-option v-for="userAccount in accountList" :key="userAccount.accountId"
+                           :value="userAccount.accountId">{{userAccount.authName}}
+          </a-select-option>
+        </a-select>
+      </a-form-item>
 
       <a-form-item
         label="设备类型"
@@ -58,7 +77,7 @@
             label="下载链接"
             :labelCol="{xs: {span: 24},sm: {span: 5}}"
             :wrapperCol="{xs: {span: 24},sm: {span: 16}}">
-            <a-input v-model="downloadUrl" placeholder="请填写视频链接"/>
+            <a-input v-model="downloadUrl" placeholder="请填写应用链接"/>
           </a-form-item>
 
 
@@ -167,6 +186,8 @@
     },
     data() {
       return {
+        accountId: '',
+        accountList: {},
         appType: 'android',//设备类型
         platform: '1',//应用类型   : 1 Android 应用下载,2: Android 网页游戏,3: iOS 应用下载, 4:iOS 网页游戏
         uploadType: '1',//上传类型 1 本地上传 2 填写链接
@@ -190,7 +211,8 @@
         form: this.$form.createForm(this),
         url: {
 
-          insertTemplateUrl: '/kuaishou/kuaiShouCreateAppTemplate/insert'
+          insertTemplateUrl: '/kuaishou/kuaiShouCreateAppTemplate/insert',
+          userAllocationList: '/ctop/userAllocation/list',
         }
       }
     },
@@ -247,25 +269,37 @@
           if (!err) {
             console.log('Received values of form: ', values);
             let params = {};
-            if (this.uploadType == '1') {
-              params.file = this.file;
-            } else if (this.uploadType == '2') {
+            params.accountId = this.accountId;
+            if (this.imageUrl != '') {
+              params.imageUrl = this.imageUrl;
+            }
+            if (this.platform == '2') {
               params.url = this.downloadUrl;
+            } else {
+              if (this.uploadType == '1') {
+                if (this.file != '') {
+                  params.file = this.file;
+                }
+              } else if (this.uploadType == '2') {
+                params.url = this.downloadUrl;
+              }
             }
-            params.imageUrl = this.imageUrl;
             params.platform = this.platform;
+            params.uploadType = this.uploadType;
             params.appType = this.appType;
             params.packageName = this.packageName;
             params.appName = this.appName;
             params.appVersion = this.appVersion;
             params.loginId = this.userInfo().id;
             console.log(params)
-             postAction(this.url.insertTemplateUrl, params).then((res) => {
-               console.log(res)
-               if (res.success) {
-                 alert("创建应用成功");
-               }
-             });
+            postAction(this.url.insertTemplateUrl, params).then((res) => {
+              console.log(res)
+              if (res.success) {
+                alert("创建应用成功");
+              } else {
+                alert(res.message)
+              }
+            });
           }
         })
       },
@@ -285,19 +319,23 @@
           if (!err) {
             console.log('Received values of form: ', values);
             let params = {};
+            params.accountId = this.accountId;
             params.appType = this.appType;
             params.platform = this.platform;
+            params.uploadType = '2';
             params.url = this.downloadUrl;
             params.appName = this.appName;
             params.appVersion = this.appVersion;
             params.loginId = this.userInfo().id;
             console.log(params)
-             postAction(this.url.insertTemplateUrl, params).then((res) => {
-               console.log(res)
-               if (res.success) {
-                 alert("广告组模板创建成功");
-               }
-             });
+            postAction(this.url.insertTemplateUrl, params).then((res) => {
+              console.log(res)
+              if (res.success) {
+                alert("广告组模板创建成功");
+              } else {
+                alert(res.message)
+              }
+            });
           }
         })
       },
@@ -308,6 +346,18 @@
       },
 
 
+    },
+    created: function () {
+      let params = {};
+      params.pageSize = '1000';
+      params.mediaId = '2';
+      params.userId = this.userInfo().id;
+      getAction(this.url.userAllocationList, params).then((res) => {
+        if (res.success) {
+          this.accountList = res.result.records
+        }
+      });
     }
+
   }
 </script>

+ 60 - 9
src/views/modules/kuaishouapp/uploadVideo.vue

@@ -13,6 +13,38 @@
 
 
       <a-form-item
+        label="选择快手账户"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
+        <a-select
+          v-model="accountId"
+          showSearch
+          showArrow
+          allowClear
+          placeholder="选择需创建的快手账户"
+          optionFilterProp="children"
+          style="width: 500px"
+          :filterOption="filterOption"
+        >
+          <a-select-option v-for="userAccount in accountList" :key="userAccount.accountId"
+                           :value="userAccount.accountId">{{userAccount.authName}}
+          </a-select-option>
+        </a-select>
+      </a-form-item>
+
+
+      <a-form-item
+        label="素材投放位置"
+        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+        :wrapperCol="{lg: {span: 8}, sm: {span: 8} }">
+        <a-radio-group buttonStyle="solid" v-model="positionType">
+          <a-radio-button value="1">信息流广告</a-radio-button>
+          <a-radio-button value="2">视频后贴片广告</a-radio-button>
+        </a-radio-group>
+      </a-form-item>
+
+
+      <a-form-item
         label="素材格式"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
         :wrapperCol="{lg: {span: 8}, sm: {span: 8} }">
@@ -42,9 +74,9 @@
 
 
       <a-form-item class="pic_upload_content"
-        label="封面图素材上传"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 12}, sm: {span: 12} }">
+                   label="封面图素材上传"
+                   :labelCol="{lg: {span: 7}, sm: {span: 7}}"
+                   :wrapperCol="{lg: {span: 12}, sm: {span: 12} }">
         <upload-to-ali v-model="localImageUrl"
                        :customDomain="customDomain"
                        multiple
@@ -67,11 +99,11 @@
           v-model="videoDesc" placeholder="(必填) 说点什么..." :rows="4"/>
       </a-form-item>
 
-     <!-- v-decorator="[
-      'confirm_videoDesc',
-      {rules: [{ required: true, message: 'error:' },
-      {validator: handleConfirmValue}]}
-      ]"-->
+      <!-- v-decorator="[
+       'confirm_videoDesc',
+       {rules: [{ required: true, message: 'error:' },
+       {validator: handleConfirmValue}]}
+       ]"-->
       <a-form-item
         label="格式"
         :labelCol="{lg: {span: 7}, sm: {span: 7}}"
@@ -110,8 +142,11 @@
     },
     data() {
       return {
+        accountId: '',
+        accountList: {},
         localUrl: '',
         localImageUrl: '',
+        positionType: '1',
         materialType: '1',
         videoDesc: '',
         customDomain: '',
@@ -124,6 +159,7 @@
         form: this.$form.createForm(this),
         url: {
           addUrl: '/kuaishou/kuaiShouVideo/insert',
+          userAllocationList: '/ctop/userAllocation/list',
         }
       }
     },
@@ -146,7 +182,9 @@
           if (!err) {
             console.log('Received values of form: ', values);
             let params = {};
+            params.accountId = this.accountId;
             params.localUrl = this.localUrl;
+            params.positionType = this.positionType;
             params.materialType = this.materialType;
             params.videoDesc = this.videoDesc;
             params.localImageUrl = this.localImageUrl;
@@ -161,10 +199,23 @@
           }
         })
       },
+    },
+    created: function () {
+      let params = {};
+      params.pageSize = '1000';
+      params.mediaId = '2';
+      params.userId = this.userInfo().id;
+      getAction(this.url.userAllocationList, params).then((res) => {
+        if (res.success) {
+          this.accountList = res.result.records
+        }
+      });
     }
   }
 </script>
 
 <style lang="scss">
-.pic_upload_content .draggable-list{display: block;}
+  .pic_upload_content .draggable-list {
+    display: block;
+  }
 </style>

+ 1 - 2
src/views/report/autodebit.vue

@@ -96,7 +96,7 @@
         accessKeySecret:'1rkPz7JNoXk8sJevPaeYHWqfkQXBGh',
         bucket:'ctop-media',
         region:'oss-cn-beijing',
-        acceptcsv:'text/csv,application/vnd.ms-excel',
+        acceptcsv:'application/vnd.ms-excel,text/csv',
         customDomain:'',
         options:[],
         loading: false,
@@ -127,7 +127,6 @@
             postAction(this.url.uploadUrl,params).then((res)=>{
               console.log(res)
               if(res.success){
-                alert(res.path);
                 this.filepath = res.path;
                 this.downloadUrl = "http://39.97.120.42:8080/jeecg-boot/"+this.url.downloadUrl+"?path="+this.filepath;
                 this.showDownLoad = true;

+ 1 - 1
src/views/template/creative/create.vue

@@ -95,7 +95,7 @@
           :filterOption="filterOption"
           @change="changeConvertType"
         >
-          <a-select-option v-if="showSimple"value="SIMPLE">普通应用下载</a-select-option>
+          <a-select-option v-if="showSimple" value="SIMPLE">普通应用下载</a-select-option>
           <a-select-option value="API">应用下载API</a-select-option>
         </a-select>
       </a-form-item>