Browse Source

提交代码

zhuxinbo 5 năm trước cách đây
mục cha
commit
c70a710536

+ 125 - 126
package.json

@@ -1,130 +1,129 @@
 {
-  "name": "ant-design-vue-jeecg",
-  "version": "2.0.2",
-  "private": true,
-  "scripts": {
-    "serve": "vue-cli-service serve --open",
-    "build": "vue-cli-service build",
-    "lint": "vue-cli-service lint",
-    "test:unit": "vue-cli-service test:unit",
-    "test:e2e": "vue-cli-service test:e2e"
-  },
-  "dependencies": {
-    "@antv/data-set": "^0.10.2",
-    "@femessage/upload-to-ali": "^1.8.1",
-    "@riophae/vue-treeselect": "^0.4.0",
-    "@tinymce/tinymce-vue": "^2.0.0",
-    "ali-oss": "^6.1.1",
-    "ant-design-vue": "^1.3.9",
-    "apexcharts": "^3.6.5",
-    "axios": "^0.18.0",
-    "babel-loader": "^8.0.6",
-    "blueimp-md5": "^2.11.0",
-    "browser-md5-file": "^1.1.1",
-    "clipboard": "^2.0.4",
-    "codemirror": "^5.46.0",
-    "dayjs": "^1.8.0",
-    "echarts": "^4.3.0",
-    "element-ui": "^2.13.0",
-    "enquire.js": "^2.1.6",
-    "html2canvas": "^1.0.0-rc.3",
-    "iview": "2.0.0-rc.17",
-    "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.1",
-    "tinymce": "^5.0.2",
-    "viser-vue": "^2.4.4",
-    "vue": "^2.6.10",
-    "vue-apexcharts": "^1.3.2",
-    "vue-class-component": "^6.0.0",
-    "vue-count-to": "^1.0.13",
-    "vue-cropper": "^0.4.8",
-    "vue-i18n": "^8.7.0",
-    "vue-layer": "^1.0.2",
-    "vue-loader": "^15.7.0",
-    "vue-ls": "^3.2.0",
-    "vue-oss-uploader": "^0.1.10",
-    "vue-photo-preview": "^1.1.3",
-    "vue-preview": "^1.1.3",
-    "vue-print-nb-jeecg": "^1.0.8",
-    "vue-property-decorator": "^7.3.0",
-    "vue-router": "^3.0.1",
-    "vue-splitpane": "^1.0.4",
-    "vue-video-player": "^5.0.2",
-    "vue-waterfall-easy": "^2.4.3",
-    "vuedraggable": "^2.20.0",
-    "vuex": "^3.0.1",
-    "vuex-class": "^0.3.1"
-  },
-  "devDependencies": {
-    "@babel/polyfill": "^7.2.5",
-    "@babel/preset-env": "^7.7.7",
-    "@vue/cli-plugin-babel": "^3.3.0",
-    "@vue/cli-plugin-eslint": "^3.3.0",
-    "@vue/cli-service": "^3.3.0",
-    "@vue/eslint-config-standard": "^4.0.0",
-    "babel-eslint": "^10.0.1",
-    "babel-plugin-component": "^1.1.1",
-    "eslint": "^5.16.0",
-    "eslint-plugin-vue": "^5.1.0",
-    "html-webpack-plugin": "^3.2.0",
-    "less": "^3.9.0",
-    "less-loader": "^4.1.0",
-    "node-sass": "^4.11.0",
-    "sass-loader": "^7.0.1",
-    "vue-template-compiler": "^2.6.10"
-  },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "node": true
+    "name": "ant-design-vue-jeecg",
+    "version": "2.0.2",
+    "private": true,
+    "scripts": {
+      "serve": "vue-cli-service serve --open",
+      "build": "vue-cli-service build",
+      "lint": "vue-cli-service lint",
+      "test:unit": "vue-cli-service test:unit",
+      "test:e2e": "vue-cli-service test:e2e"
     },
-    "extends": [
-      "plugin:vue/strongly-recommended",
-      "eslint:recommended"
-    ],
-    "parserOptions": {
-      "parser": "babel-eslint"
+    "dependencies": {
+      "@antv/data-set": "^0.10.2",
+      "@femessage/upload-to-ali": "^1.8.1",
+      "@riophae/vue-treeselect": "^0.4.0",
+      "@tinymce/tinymce-vue": "^2.0.0",
+      "ali-oss": "^6.1.1",
+      "ant-design-vue": "^1.3.9",
+      "apexcharts": "^3.6.5",
+      "axios": "^0.18.0",
+      "babel-loader": "^8.0.6",
+      "blueimp-md5": "^2.11.0",
+      "browser-md5-file": "^1.1.1",
+      "clipboard": "^2.0.4",
+      "codemirror": "^5.46.0",
+      "dayjs": "^1.8.0",
+      "echarts": "^4.3.0",
+      "element-ui": "^2.13.0",
+      "enquire.js": "^2.1.6",
+      "html2canvas": "^1.0.0-rc.3",
+      "iview": "2.0.0-rc.17",
+      "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.1",
+      "tinymce": "^5.0.2",
+      "viser-vue": "^2.4.4",
+      "vue": "^2.6.10",
+      "vue-apexcharts": "^1.3.2",
+      "vue-class-component": "^6.0.0",
+      "vue-count-to": "^1.0.13",
+      "vue-cropper": "^0.4.8",
+      "vue-i18n": "^8.7.0",
+      "vue-layer": "^1.0.2",
+      "vue-loader": "^15.7.0",
+      "vue-ls": "^3.2.0",
+      "vue-oss-uploader": "^0.1.10",
+      "vue-photo-preview": "^1.1.3",
+      "vue-preview": "^1.1.3",
+      "vue-print-nb-jeecg": "^1.0.8",
+      "vue-property-decorator": "^7.3.0",
+      "vue-router": "^3.0.1",
+      "vue-splitpane": "^1.0.4",
+      "vue-video-player": "^5.0.2",
+      "vue-waterfall-easy": "^2.4.3",
+      "vuedraggable": "^2.20.0",
+      "vuex": "^3.0.1",
+      "vuex-class": "^0.3.1"
     },
-    "rules": {
-      "generator-star-spacing": "off",
-      "no-mixed-operators": 0,
-      "vue/max-attributes-per-line": [
-        2,
-        {
-          "singleline": 5,
-          "multiline": {
-            "max": 1,
-            "allowFirstLine": false
-          }
-        }
+    "devDependencies": {
+      "@babel/polyfill": "^7.2.5",
+      "@vue/cli-plugin-babel": "^3.3.0",
+      "@vue/cli-plugin-eslint": "^3.3.0",
+      "@vue/cli-service": "^3.3.0",
+      "@vue/eslint-config-standard": "^4.0.0",
+      "babel-eslint": "^10.0.1",
+      "babel-plugin-component": "^1.1.1",
+      "eslint": "^5.16.0",
+      "eslint-plugin-vue": "^5.1.0",
+      "html-webpack-plugin": "^3.2.0",
+      "less": "^3.9.0",
+      "less-loader": "^4.1.0",
+      "node-sass": "^4.11.0",
+      "sass-loader": "^7.0.1",
+      "vue-template-compiler": "^2.6.10"
+    },
+    "eslintConfig": {
+      "root": true,
+      "env": {
+        "node": true
+      },
+      "extends": [
+        "plugin:vue/strongly-recommended",
+        "eslint:recommended"
       ],
-      "vue/attribute-hyphenation": 0,
-      "vue/html-self-closing": 0,
-      "vue/component-name-in-template-casing": 0,
-      "vue/html-closing-bracket-spacing": 0,
-      "vue/singleline-html-element-content-newline": 0,
-      "vue/no-unused-components": 0,
-      "vue/multiline-html-element-content-newline": 0,
-      "vue/no-use-v-if-with-v-for": 0,
-      "vue/html-closing-bracket-newline": 0,
-      "vue/no-parsing-error": 0,
-      "no-console": 0
-    }
-  },
-  "postcss": {
-    "plugins": {
-      "autoprefixer": {}
-    }
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions",
-    "not ie <= 8"
-  ]
-}
+      "parserOptions": {
+        "parser": "babel-eslint"
+      },
+      "rules": {
+        "generator-star-spacing": "off",
+        "no-mixed-operators": 0,
+        "vue/max-attributes-per-line": [
+          2,
+          {
+            "singleline": 5,
+            "multiline": {
+              "max": 1,
+              "allowFirstLine": false
+            }
+          }
+        ],
+        "vue/attribute-hyphenation": 0,
+        "vue/html-self-closing": 0,
+        "vue/component-name-in-template-casing": 0,
+        "vue/html-closing-bracket-spacing": 0,
+        "vue/singleline-html-element-content-newline": 0,
+        "vue/no-unused-components": 0,
+        "vue/multiline-html-element-content-newline": 0,
+        "vue/no-use-v-if-with-v-for": 0,
+        "vue/html-closing-bracket-newline": 0,
+        "vue/no-parsing-error": 0,
+        "no-console": 0
+      }
+    },
+    "postcss": {
+      "plugins": {
+        "autoprefixer": {}
+      }
+    },
+    "browserslist": [
+      "> 1%",
+      "last 2 versions",
+      "not ie <= 8"
+    ]
+  }

+ 397 - 0
src/views/modules/Statistics/caicaicai/dayStatistics.vue

@@ -0,0 +1,397 @@
+<style lang="scss" scoped>
+.search-bar {
+  display: flex;
+  align-items: center;
+}
+.search-box p {
+  display: inline-block;
+  border: 1px solid #f2f2f2;
+  border-radius: 5px;
+  margin-right: 10px;
+  padding: 5px 10px;
+  cursor: pointer;
+}
+</style>
+<style>
+/* .data-display-statistics .ant-card-body {
+  padding: 0 15px;
+} */
+.data-display-statistics .ant-col-6 {
+  margin: 10px 0;
+}
+.data-display-statistics .ant-col-6 .ant-card-body {
+  display: flex;
+  justify-content: center;
+}
+.data-display-statistics .ant-col-6 p,
+.data-display-statistics .ant-col-6 span {
+  text-align: center;
+  line-height: 40px;
+  font-size: 30px;
+  font-weight: 600;
+  color: red;
+  margin: 0;
+}
+.search-box .ant-card-body {
+  padding: 5px 15px;
+}
+.data-display-statistics .ant-col-6 .ant-card-body .styleElse {
+  line-height: 60px;
+  height: 40px;
+  font-size: 16px;
+  font-weight: 400;
+  margin-left: 10px;
+}
+.ant-modal-wrap .yincang .ant-modal-content .ant-modal-footer {
+  display: none !important;
+}
+.yincang .ant-col-6 p {
+  text-align: left;
+  color: red;
+  font-size: 16px;
+  font-weight: 500;
+}
+.ant-table-thead div {
+  font-weight: 700;
+}
+.tool-tip {
+  position: absolute;
+  top: 65px;
+  right: 10px;
+}
+th div {
+  white-space: nowrap;
+}
+</style>
+<template>
+  <div class="data-statistics">
+    <a-row class="image-list-heading vm-panel">
+      <a-row type="flex" align="middle" justify="space-between" class="panel-body">
+        <div class="search-bar" style="width:100%">
+          <span>项目选择:</span>
+          <a-select
+            v-model="projectId"
+            style="width:500px"
+            showSearch
+            optionFilterProp="children"
+            :filterOption="filterOption"
+          >
+            <a-select-option :value="item.projectId" v-for="item of dataElse" :key="item.id">
+              {{ item.projectName }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{
+                item.mediaId == '1' ? '头条' : '快手'
+              }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ item.advertiserName }}
+            </a-select-option>
+          </a-select>
+          <span style="margin-left:10px">系统类型:</span>
+          <a-select
+            v-model="systemType"
+            style="width:300px"
+            showSearch
+            optionFilterProp="children"
+            :filterOption="filterOption"
+          >
+            <a-select-option value="1">
+              不限
+            </a-select-option>
+            <a-select-option value="android">
+              安卓
+            </a-select-option>
+            <a-select-option value="ios">
+              ios
+            </a-select-option>
+          </a-select>
+
+          <a-button type="primary" style="margin:10px" @click="addUser">搜索</a-button>
+          <a-button
+            type="primary"
+            icon="reload"
+            @click="getDataReset"
+            style="background-color:#67c23a;border-color:#67c23a"
+            >刷新</a-button
+          >
+        </div>
+      </a-row>
+    </a-row>
+    <a-row :gutter="10" style="margin-top:10px">
+      <a-col :span="24">
+        <a-card
+          style="width:100%"
+          :tabList="tabListNoTitle"
+          :activeTabKey="noTitleKey"
+          @tabChange="key => onTabChange(key, 'noTitleKey')"
+        >
+          <div style="display:flex;margin-bottom:15px" v-if="tabListNoTitle.length > 0">
+            <!-- <a-select style="width: 120px" v-model="statHour" @change="getElseData" allowClear>
+              <a-select-option v-for="item of 24" :key="item - 1" :value="item - 1">{{ item - 1 }}</a-select-option>
+            </a-select> -->
+            <a-button type="primary" @click="exportExcel">导出</a-button>
+          </div>
+          <a-table
+            v-if="tabListNoTitle.length > 0"
+            size="middle"
+            :columns="columns"
+            :dataSource="data"
+            bordered
+            id="outTable"
+            :pagination="ipagination"
+            :scroll="{ x: true }"
+            :loading="loading"
+          >
+          </a-table>
+        </a-card>
+      </a-col>
+    </a-row>
+  </div>
+</template>
+
+<script>
+import ARow from 'ant-design-vue/es/grid/Row'
+import ACol from 'ant-design-vue/es/grid/Col'
+import countTo from 'vue-count-to'
+import moment from 'moment'
+import { getDailyReport } from '@api/statistics'
+import { getAction, postAction, downFile, downFilePost } from '@/api/manage'
+import axios from 'axios'
+import lifting from '../components/lifting'
+import timeCheck from '../components/timeCheck'
+import Treeselect from '../components/Treeselect.vue'
+import { mapGetters } from 'vuex'
+import { JeecgListMixin } from '@/mixins/ipagination'
+
+var length = 0
+var active = 1
+const columns = [
+  {
+    title: '日期',
+    dataIndex: 'date',
+    scopedSlots: { customRender: 'date' },
+    align: 'center'
+  },
+  {
+    title: '总花费(元)',
+    dataIndex: 'cost',
+    align: 'center'
+  },
+  {
+    title: '双出价(元)',
+    dataIndex: 'doubleBid',
+    align: 'center'
+  },
+  {
+    title: '非双出价(元)',
+    dataIndex: 'singleBid',
+    align: 'center'
+  },
+  {
+    title: '激活数',
+    dataIndex: 'active',
+    align: 'center'
+  },
+  {
+    title: '激活成本',
+    dataIndex: 'activeCost',
+    align: 'center'
+  },
+  {
+    title: '每日计划(组)',
+    dataIndex: 'planNum',
+    align: 'center'
+  },
+  {
+    title: '每日素材安排',
+    dataIndex: 'mat',
+    align: 'center'
+  }
+]
+
+export default {
+  name: 'data-display-statistics',
+  components: {
+    ACol,
+    ARow,
+    countTo,
+    lifting,
+    timeCheck,
+    Treeselect
+  },
+  mixins: [JeecgListMixin],
+  data: function() {
+    return {
+      // this.timeRange[1] = moment().add(1, 'months')
+      statDate: moment().subtract(1, 'day'),
+      title: '账户数据展示',
+      show: true,
+      data: [],
+      dataAll: null,
+      columns: columns,
+      options: [],
+      list: [],
+      appId: [],
+      tabListNoTitle: [],
+      noTitleKey: 'day',
+      discount: 1.06,
+      date: '',
+      loading: false,
+      dataElse: [],
+      projectId: 285,
+      systemType: '1'
+    }
+  },
+  filters: {
+    formatDate: function(value) {
+      let date = new Date(value)
+      let y = date.getFullYear()
+      let MM = date.getMonth() + 1
+      MM = MM < 10 ? '0' + MM : MM
+      let d = date.getDate()
+      d = d < 10 ? '0' + d : d
+      let h = date.getHours()
+      h = h < 10 ? '0' + h : h
+      let m = date.getMinutes()
+      m = m < 10 ? '0' + m : m
+      let s = date.getSeconds()
+      s = s < 10 ? '0' + s : s
+      return y + '-' + MM + '-' + d
+    },
+    toFixtwo: function(value) {
+      if (value) {
+        return value.toFixed(2)
+      } else {
+        return 0.0
+      }
+    },
+    getBo: function(value) {
+      if (value) {
+        return (value * 100).toFixed(2) + '%'
+      } else {
+        return '0.00%'
+      }
+    }
+  },
+  methods: {
+    moment,
+    filterOption(input, option) {
+      return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+    },
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    getParticipateList() {
+      getAction('/ctop/projectMember/participateList', {
+        userId: this.userInfo().id
+      }).then(res => {
+        if (res.code == 0) {
+          this.dataElse = res.result
+        }
+      })
+    },
+    onTabChange(key, type) {
+      console.log(key, type)
+      this[type] = key
+      this.data = []
+      var list = this.tabListNoTitle.filter(item => {
+        return item.key == key
+      })
+      console.log(list)
+      this.data = list[0].data
+      this.ipagination.total = this.data.length
+      this.ipagination.current = 1
+    },
+    disabledDate(current) {
+      return current && current > moment().subtract(1, 'day')
+    },
+    getDataReset() {
+      this.addUser()
+    },
+    addUser() {
+      var that = this
+      //   if (this.appId.length > 0 && this.date != '') {
+      that.getDailyReport()
+      //   } else {
+      //     this.$message.error('请选择账户及时间')
+      //   }
+    },
+    getDailyReport() {
+      var params = {}
+      params.projectId = this.projectId
+      params.systemType = this.systemType == '1' ? '' : this.systemType
+      this.data = []
+      this.loading = true
+      postAction('/ctop/advertiser/xxlDailyReportList', params).then(res => {
+        if (res.success) {
+          console.log(res)
+          this.loading = false
+          //        {
+          //       key: 'channel',
+          //       tab: '渠道包分析'
+          //     }
+          //   ],
+          //   noTitleKey: 'day',
+          this.noTitleKey = res.data[0].sheetName
+          this.tabListNoTitle = res.data.map(item => {
+            return {
+              key: item.sheetName,
+              tab: item.sheetName,
+              data: item.details
+            }
+          })
+
+          this.data = this.tabListNoTitle[0].data.map((item, index) => {
+            return {
+              ...item,
+              key: index
+            }
+          })
+          this.ipagination.total = this.data.length
+        }
+      })
+    },
+    getDate(value) {
+      if (value) {
+        let date = new Date(value)
+        let y = date.getFullYear()
+        let MM = date.getMonth() + 1
+        MM = MM < 10 ? '0' + MM : MM
+        let d = date.getDate()
+        d = d < 10 ? '0' + d : d
+        this.date = y + '-' + MM + '-' + d
+      } else {
+        let date = new Date()
+        let y = date.getFullYear()
+        let MM = date.getMonth() + 1
+        MM = MM < 10 ? '0' + MM : MM
+        let d = date.getDate()
+        d = d < 10 ? '0' + d : d
+        this.date = y + '-' + MM + '-' + d
+      }
+    },
+    exportExcel() {
+      var params = {}
+      params.projectId = this.projectId
+      params.disCount = this.discount
+      params.statDate = this.statDate.format('YYYY-MM-DD')
+      var name = this.dataElse.filter(item => {
+        return item.projectId == this.projectId
+      })[0].projectName
+      downFilePost('/ctop/yiche/report/exportDailyReport', params).then(res => {
+        let blob = new Blob([res], {
+          type: 'application/vnd.ms-excel'
+        })
+        let downloadElement = document.createElement('a')
+        let href = window.URL.createObjectURL(blob) //创建下载的链接
+        downloadElement.href = href
+        downloadElement.download = name + '-' + this.statDate.format('YYYY-MM-DD') + '-日报' //下载后文件名
+        document.body.appendChild(downloadElement)
+        downloadElement.click() //点击下载
+        document.body.removeChild(downloadElement) //下载完成移除元素
+        window.URL.revokeObjectURL(href) //释放掉blob对象
+      })
+    }
+  },
+  watch: {},
+  distoryed() {},
+  mounted: function() {
+    this.getParticipateList()
+    this.statDate = moment().subtract(1, 'day')
+    // moment().format('YYYY-MM-DD_HH:mm')
+  }
+}
+</script>

+ 53 - 10
src/views/modules/advertiser/UserAllocationList.vue

@@ -16,6 +16,35 @@
               </a-form-item>
             </a-col>
           </template>
+          <a-col :md="8" :sm="8">
+            <a-form-item label="账户状态">
+              <a-select placeholder="请选择账户状态" v-model="queryParam.accountStatus">
+                <a-select-option :value="0">开启</a-select-option>
+                <a-select-option :value="1">关闭</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="8" :sm="8">
+            <a-form-item label="项目名称">
+              <a-select
+                v-model="queryParam.projectId"
+                showSearch
+                optionFilterProp="children"
+                :filterOption="filterOption"
+              >
+                <a-select-option :value="item.projectId" v-for="item of dataElse" :key="item.id">
+                  {{ item.mediaId == '1' ? '头条' : '快手' }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{
+                    item.projectName
+                  }}
+                </a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="8" :sm="8">
+            <a-form-item label="账号id">
+              <a-input placeholder="请输入账号id" v-model="queryParam.accountId"></a-input>
+            </a-form-item>
+          </a-col>
           <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>
@@ -72,7 +101,7 @@
           :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
         >
           <a-select
-            v-decorator="['transferor', { initialValue: userInfo().id }]"
+            v-decorator="['transferor']"
             showSearch
             optionFilterProp="children"
             :filterOption="filterOption"
@@ -157,6 +186,7 @@ export default {
       description: '账号绑定管理页面',
       visibleAdd: false,
       options: [],
+      dataElse: [],
       // 表头
       columns: [
         {
@@ -210,17 +240,14 @@ export default {
           title: '账户状态',
           dataIndex: 'accountStatus',
           align: 'center',
-          filters: [
-            { text: '开启', value: '0' },
-            { text: '关闭', value: '1' }
-          ],
-          onFilter: (value, record) =>
-            record.accountStatus
-              .toString()
-              .toLowerCase()
-              .includes(value.toLowerCase()),
           scopedSlots: { customRender: 'accountStatus' }
         },
+
+        {
+          title: '系统名称',
+          dataIndex: 'systemType',
+          align: 'center'
+        },
         {
           title: '操作',
           dataIndex: 'action',
@@ -247,6 +274,9 @@ export default {
       return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     }
   },
+  mounted() {
+    this.getParticipateList()
+  },
   methods: {
     moment,
     onChangeSwitch(item) {
@@ -261,6 +291,15 @@ export default {
         }
       })
     },
+    getParticipateList() {
+      getAction('/ctop/projectMember/participateList', {
+        userId: this.userInfo().id
+      }).then(res => {
+        if (res.code == 0) {
+          this.dataElse = res.result
+        }
+      })
+    },
     filterOption(input, option) {
       return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
     },
@@ -277,6 +316,10 @@ export default {
       this.visibleAdd = true
       this.accountId = item.accountId
       this.projectId = item.projectId
+
+      setTimeout(() => {
+        this.form.setFieldsValue({ transferor: item.userId })
+      }, 0)
       this.getALLperson()
     },
     handleOkAdd(e) {

+ 1 - 1
src/views/modules/advertiser/modules/AdvertiserModal.vue

@@ -166,7 +166,7 @@
             'advertiserType', 'saleId', 'agentId'))
           //时间格式化
         });
-        getAction('/sys/user/getAllUserList', '').then(res => {
+        getAction('/sys/user/getAllSaleList', '').then(res => {
           console.log(res)
           if (res.success) {
             this.options = res.result

+ 31 - 4
src/views/modules/advertiser/modules/UserAllocationModal.vue

@@ -20,7 +20,7 @@
             :filterOption="filterOption"
             style="width:100%"
           >
-            <a-select-option :value="item.userId" v-for="(item,index) of options" :key="index">
+            <a-select-option :value="item.userId" v-for="(item, index) of options" :key="index">
               {{ item.realName }}
             </a-select-option>
           </a-select>
@@ -50,6 +50,19 @@
             <a-select-option value="2">快手</a-select-option>
           </a-select>
         </a-form-item>
+        <a-form-item label="系统名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group buttonStyle="outline" v-decorator="['systemType', {}]" @change="systemTypeName=''">
+            <a-radio-button value="不限">不限</a-radio-button>
+            <a-radio-button value="ios">ios</a-radio-button>
+            <a-radio-button value="android">android</a-radio-button>
+            <a-radio-button value="4">其他</a-radio-button>
+          </a-radio-group>
+          <a-input
+            v-model="systemTypeName"
+            v-if="getFormFieldValue('systemType') == '4'"
+            placeholder="请输入系统类型"
+          />
+        </a-form-item>
         <a-form-item label="预警金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
           <!-- <a-input v-decorator="['warningAmount', { rules: [{ required: true, message: '请输入预警金额' }] }]" /> -->
           <a-input-number
@@ -103,7 +116,8 @@ export default {
         add: '/ctop/userAllocation/add',
         edit: '/ctop/userAllocation/edit'
       },
-      options: []
+      options: [],
+      systemTypeName: ''
     }
   },
   created() {},
@@ -122,7 +136,13 @@ export default {
         }
       })
       this.form.resetFields()
-      this.model = Object.assign({}, record)
+      var data = record
+      this.systemTypeName = data.systemType
+      if (data.systemType != '不限' && data.systemType != 'ios' && data.systemType != 'android') {
+        data.systemType = '4'
+      }
+
+      this.model = Object.assign({}, data)
       this.visible = true
       this.$nextTick(() => {
         this.form.setFieldsValue(
@@ -139,7 +159,8 @@ export default {
             'authName',
             'mediaId',
             'warningAmount',
-            'warningProportion'
+            'warningProportion',
+            'systemType'
           )
         )
         //时间格式化
@@ -168,6 +189,9 @@ export default {
           formData.userName = this.options.filter(item => {
             return item.userId == values.userId
           })[0].realName
+          if (values.systemType == '4') {
+            formData.systemType = this.systemTypeName
+          }
           //时间格式化
 
           console.log(formData)
@@ -189,6 +213,9 @@ export default {
     },
     handleCancel() {
       this.close()
+    },
+    getFormFieldValue(field) {
+      return this.form.getFieldValue(field)
     }
   }
 }

+ 1 - 1
src/views/modules/material/videoMaterial.vue

@@ -2107,4 +2107,4 @@ export default {
 </script>
 <style scoped>
 @import '~@assets/less/common.less';
-</style>
+</style>

+ 141 - 0
src/views/modules/material/videoTemplate.vue

@@ -0,0 +1,141 @@
+<style scoped>
+.template-content {
+  width: 100%;
+  overflow: hidden;
+  padding: 10px 0px;
+  display: flex;
+  flex-wrap: wrap;
+  margin-right: -10px;
+}
+.home-item {
+  border-style: solid;
+  border-width: 1px;
+  border-color: #e4e4e4;
+  width: calc(25% - 10px);
+  padding: 10px;
+  margin-right: 10px;
+  margin-bottom: 10px;
+  display: flex;
+  align-items: center;
+  background: #fff;
+  position: relative;
+  z-index: 99;
+  cursor: pointer;
+}
+</style>
+<template>
+  <a-card :bordered="false">
+    <a-steps :current="current" style="width:50%;margin:auto">
+      <a-step v-for="item in steps" :key="item.title" :title="item.title" />
+    </a-steps>
+    <div class="steps-content" v-if="current == 0">
+      <div style="margin-bottom:10px">
+        <span>
+          视频尺寸&nbsp;&nbsp;&nbsp;&nbsp;
+        </span>
+        <a-radio-group defaultValue="a" buttonStyle="solid">
+          <a-radio-button value="a">Hangzhou</a-radio-button>
+          <a-radio-button value="b">Shanghai</a-radio-button>
+        </a-radio-group>
+      </div>
+      <div style="margin-bottom:10px">
+        <span>
+          行业类别&nbsp;&nbsp;&nbsp;&nbsp;
+        </span>
+        <a-radio-group defaultValue="a" buttonStyle="solid">
+          <a-radio-button value="a">Hangzhou</a-radio-button>
+          <a-radio-button value="b">Shanghai</a-radio-button>
+          <a-radio-button value="c">Beijing</a-radio-button>
+          <a-radio-button value="d">Chengdu</a-radio-button>
+          <a-radio-button value="o">Beijing</a-radio-button>
+          <a-radio-button value="p">Chengdu</a-radio-button>
+          <a-radio-button value="e">Beijing</a-radio-button>
+          <a-radio-button value="f">Chengdu</a-radio-button>
+        </a-radio-group>
+      </div>
+      <div style="margin-bottom:10px">
+        <span>
+          模板排序&nbsp;&nbsp;&nbsp;&nbsp;
+        </span>
+        <a-radio-group defaultValue="a" buttonStyle="solid">
+          <a-radio-button value="a">Hangzhou</a-radio-button>
+          <a-radio-button value="b">Shanghai</a-radio-button>
+          <a-radio-button value="c">Beijing</a-radio-button>
+          <a-radio-button value="d">Chengdu</a-radio-button>
+        </a-radio-group>
+      </div>
+
+      <div class="template-content">
+        <div v-for="item of 10" :key="item" class="home-item">{{ item }}</div>
+      </div>
+    </div>
+    <div class="steps-action">
+      <a-button v-if="current < steps.length - 1" type="primary" @click="next">
+        Next
+      </a-button>
+      <a-button v-if="current == steps.length - 1" type="primary" @click="$message.success('Processing complete!')">
+        Done
+      </a-button>
+      <a-button v-if="current > 0" style="margin-left: 8px" @click="prev">
+        Previous
+      </a-button>
+    </div>
+  </a-card>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      current: 0,
+      steps: [
+        {
+          title: '选择模板',
+          content: 'First-content'
+        },
+        {
+          title: '上传物料',
+          content: 'Second-content'
+        }
+      ],
+      labelCol: {
+        xs: {
+          span: 24
+        },
+        sm: {
+          span: 5
+        }
+      },
+      wrapperCol: {
+        xs: {
+          span: 24
+        },
+        sm: {
+          span: 16
+        }
+      }
+    }
+  },
+  methods: {
+    next() {
+      this.current++
+    },
+    prev() {
+      this.current--
+    }
+  }
+}
+</script>
+<style scoped>
+.steps-content {
+  margin-top: 16px;
+  border: 1px dashed #e9e9e9;
+  border-radius: 6px;
+  background-color: #fafafa;
+  min-height: 200px;
+  padding: 30px;
+}
+
+.steps-action {
+  margin-top: 24px;
+}
+</style>

+ 5 - 5
src/views/system/modules/UserModal.vue

@@ -58,13 +58,13 @@
         </a-form-item>
         <!--部门分配-->
         <a-form-item label="部门分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
-          <a-input-search
+          <a-input
             placeholder="点击右侧按钮选择部门"
             v-model="checkedDepartNameString"
             disabled
             @search="onSearch">
-            <a-button slot="enterButton" icon="search">选择</a-button>
-          </a-input-search>
+            <span slot="addonAfter" icon="search" @click="onSearch" style="cursor: pointer;">选择</span>
+          </a-input>
         </a-form-item>
         <a-form-item label="头像" :labelCol="labelCol" :wrapperCol="wrapperCol">
           <a-upload
@@ -277,7 +277,7 @@
         this.resetScreenSize(); // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度
         let that = this;
         that.initialRoleList();
-        that.checkedDepartNameString = "";
+        // that.checkedDepartNameString = "";
         that.form.resetFields();
         if (record.hasOwnProperty("id")) {
           that.loadUserRoles(record.id);
@@ -493,7 +493,7 @@
         return this.url.imgerver + "/" + this.model.avatar;
       },
       // 搜索用户对应的部门API
-      onSearch() {
+      onSearch(value) {
         this.$refs.departWindow.add(this.checkedDepartKeys, this.userId);
       },
 

+ 2 - 2
vue.config.js

@@ -67,8 +67,8 @@ module.exports = {
         // target: 'http://39.97.120.42:8080', //请求本地 需要jeecg-boot后台项目  生产环境
         // target: 'http://39.106.184.70:8080', //请求本地 需要jeecg-boot后台项目
         // target: 'http://192.168.2.53:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
-        // target: 'http://192.168.2.109:8080', //请求本地 需要jeecg-boot后台项目  英豪
-        target: 'http://192.168.1.103:8080', //请求本地 需要jeecg-boot后台项目
+        target: 'http://192.168.2.109:8080', //请求本地 需要jeecg-boot后台项目  英豪
+        // target: 'http://192.168.1.103:8080', //请求本地 需要jeecg-boot后台项目
         // target: 'http://192.168.2.115:8080', //请求本地 需要jeecg-boot后台项目  祚云
         // target: 'http://192.168.2.124:8080', //请求本地 需要jeecg-boot后台项目  孙震
         // target: 'http://192.168.43.119:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙,手机热点