Browse Source

'合并代码'

syh 4 years ago
parent
commit
145c33e9af
61 changed files with 5387 additions and 21418 deletions
  1. BIN
      dist.zip
  2. 0 18943
      package-lock.json
  3. 1 1
      package.json
  4. 1 1
      src/api/api.js
  5. 0 3
      src/components/ctop/vm-card.vue
  6. 4 4
      src/components/layouts/TabLayout.vue
  7. 4 4
      src/components/page/GlobalLayout.vue
  8. 2 2
      src/components/table/index.js
  9. 1 1
      src/components/tools/Breadcrumb.vue
  10. 2 2
      src/components/tools/HeaderNotice.vue
  11. 1 1
      src/components/tools/UserPassword.vue
  12. 17 4
      src/components/uploadFile.vue
  13. 3 4
      src/main.js
  14. 5 5
      src/mixins/JeecgListMixin.js
  15. 0 2
      src/permission.js
  16. 3 3
      src/store/modules/permission.js
  17. 3 3
      src/utils/authFilter.js
  18. 1 1
      src/utils/getDay.js
  19. 2 2
      src/utils/request.js
  20. 1 1
      src/views/activiti/todoManage.vue
  21. 1 1
      src/views/modules/Statistics/KSAccountReport.vue
  22. 3 3
      src/views/modules/Statistics/accountReport.vue
  23. 1 1
      src/views/modules/Statistics/alipayStatistics.vue
  24. 1 1
      src/views/modules/Statistics/caicaicai/dayStatistics.vue
  25. 1 1
      src/views/modules/Statistics/companyDetail.vue
  26. 2 1
      src/views/modules/Statistics/companyStatistics.vue
  27. 1 1
      src/views/modules/Statistics/components/selecTable.vue
  28. 337 0
      src/views/modules/Statistics/components/selectPagination.vue
  29. 70 29
      src/views/modules/Statistics/dataDisplayStatistics.vue
  30. 53 0
      src/views/modules/Statistics/effectReport.vue
  31. 18 0
      src/views/modules/Statistics/refuseDataCreat.vue
  32. 28 10
      src/views/modules/Statistics/refuseDataCreatNew.vue
  33. 1 1
      src/views/modules/Statistics/videoStatics/vDay.vue
  34. 1 1
      src/views/modules/Statistics/videoStatics/vMonth.vue
  35. 2 2
      src/views/modules/Statistics/videoStatics/vSummary.vue
  36. 1 1
      src/views/modules/Statistics/videoStatics/vWeek.vue
  37. 1 1
      src/views/modules/Statistics/yicheStatistics/dayStatistics.vue
  38. 1 1
      src/views/modules/Statistics/yicheStatistics/timeStatistics.vue
  39. 174 123
      src/views/modules/advertiser/ProjectList.vue
  40. 16 37
      src/views/modules/advertiser/ProjectMemberList.vue
  41. 378 277
      src/views/modules/advertiser/UserAllocationList.vue
  42. 0 31
      src/views/modules/advertiser/modules/ProjectMemberModal.vue
  43. 1 1
      src/views/modules/advertiser/modules/ProjectModal.vue
  44. 2 2
      src/views/modules/kuaishouapp/account/copyGroup.vue
  45. 2 2
      src/views/modules/kuaishouapp/account/editGroup.vue
  46. 3 3
      src/views/modules/kuaishouapp/account/editGroupNew.vue
  47. 2 2
      src/views/modules/kuaishouapp/account/stepForm/Step2.vue
  48. 330 0
      src/views/modules/material/labelMaterial.vue
  49. 660 0
      src/views/modules/material/labelNewMaterial.vue
  50. 116 0
      src/views/modules/material/modules/DepartDataruleModal.vue
  51. 194 0
      src/views/modules/material/modules/DepartModal.vue
  52. 415 0
      src/views/modules/material/modules/labelModal.vue
  53. 1 7
      src/views/modules/material/modules/videoList.vue
  54. 361 290
      src/views/modules/material/scriptFile.vue
  55. 2068 1561
      src/views/modules/material/videoMaterial.vue
  56. 11 7
      src/views/modules/material/videoTemplate.vue
  57. 0 3
      src/views/modules/yard/YardList.vue
  58. 0 3
      src/views/modules/yard/modules/yardDetail.vue
  59. 1 1
      src/views/system/modules/PasswordModal.vue
  60. 76 24
      src/views/ureport/UReportFileList.vue
  61. 2 2
      vue.config.js

BIN
dist.zip


File diff suppressed because it is too large
+ 0 - 18943
package-lock.json


+ 1 - 1
package.json

@@ -29,7 +29,6 @@
     "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",
     "k-form-design": "^3.6.1",
@@ -47,6 +46,7 @@
     "vue-count-to": "^1.0.13",
     "vue-cropper": "^0.4.8",
     "vue-i18n": "^8.7.0",
+    "vue-infinite-scroll": "^2.0.2",
     "vue-layer": "^1.0.2",
     "vue-loader": "^15.7.0",
     "vue-ls": "^3.2.0",

+ 1 - 1
src/api/api.js

@@ -76,7 +76,7 @@ export const ajaxGetDictItems = (code, params)=>getAction(`/sys/dict/getDictItem
 function getDictItemsFromCache(dictCode) {
   if (Vue.ls.get(UI_CACHE_DB_DICT_DATA) && Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode]) {
     let dictItems = Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode];
-    console.log("-----------getDictItemsFromCache----------dictCode="+dictCode+"---- dictItems=",dictItems)
+    // console.log("-----------getDictItemsFromCache----------dictCode="+dictCode+"---- dictItems=",dictItems)
     return dictItems;
   }
 }

+ 0 - 3
src/components/ctop/vm-card.vue

@@ -12,9 +12,6 @@
 /* .ping-list:hover span {
   display: block;
 } */
-/* .ant-modal-body {
-  padding-top: 0px;
-} */
 li {
   list-style-type: none;
 }

+ 4 - 4
src/components/layouts/TabLayout.vue

@@ -235,7 +235,7 @@
           this.$message.warning('这是最后一页,不能再关闭了啦')
           return
         }
-        console.log("this.pageList ", this.pageList);
+        // console.log("this.pageList ", this.pageList);
         // this.pageList = this.pageList.filter(item => item.fullPath !== key)
         // let index = this.linkList.indexOf(key)
         // this.linkList = this.linkList.filter(item => item !== key)
@@ -287,14 +287,14 @@
         if (key == '/modules/BatchCreate/newGroup' && !(this.linkList.includes('/modules/BatchCreate/newCreate') || this
             .linkList.includes('/modules/BatchCreate/newPlan') || this.linkList.includes(
               '/modules/BatchCreate/TouTiaoBatch'))) {
-          console.log('newGroup')
+          // console.log('newGroup')
           localStorage.setItem('accountInfo', '')
           localStorage.setItem("groupInfo", '')
         }
         if (key == '/modules/BatchCreate/newPlan' && !(this.linkList.includes('/modules/BatchCreate/newCreate') || this
             .linkList.includes('/modules/BatchCreate/newGroup') || this.linkList.includes(
               '/modules/BatchCreate/TouTiaoBatch'))) {
-          console.log('newPlan')
+          // console.log('newPlan')
           localStorage.setItem('accountInfo', '')
           localStorage.setItem("groupInfo", '')
           localStorage.setItem("planInfo", '')
@@ -302,7 +302,7 @@
         if (key == '/modules/BatchCreate/newCreate' && !(this.linkList.includes('/modules/BatchCreate/TouTiaoBatch') ||
             this.linkList.includes('/modules/BatchCreate/newPlan') || this.linkList.includes(
               '/modules/BatchCreate/newGroup'))) {
-          console.log('newCreate')
+          // console.log('newCreate')
           localStorage.setItem('accountInfo', '')
           localStorage.setItem("groupInfo", '')
           localStorage.setItem("planInfo", '')

+ 4 - 4
src/components/page/GlobalLayout.vue

@@ -129,10 +129,10 @@
       //this.menus = this.mainRouters.find((item) => item.path === '/').children;
       this.menus = this.permissionMenuList
       // 根据后台配置菜单,重新排序加载路由信息
-      console.log('----加载菜单逻辑----')
-      console.log(this.mainRouters)
-      console.log(this.permissionMenuList)
-      console.log('----navTheme------'+this.navTheme)
+      // console.log('----加载菜单逻辑----')
+      // console.log(this.mainRouters)
+      // console.log(this.permissionMenuList)
+      // console.log('----navTheme------'+this.navTheme)
       //--update-end----author:scott---date:20190320------for:根据后台菜单配置,判断是否路由菜单字段,动态选择是否生成路由(为了支持参数URL菜单)------
     },
     methods: {

+ 2 - 2
src/components/table/index.js

@@ -57,13 +57,13 @@ export default {
       });
     },
     pageSize(val) {
-      console.log('pageSize:', val)
+      // console.log('pageSize:', val)
       Object.assign(this.localPagination, {
         pageSize: val
       });
     },
     showSizeChanger(val) {
-      console.log('showSizeChanger', val)
+      // console.log('showSizeChanger', val)
       Object.assign(this.localPagination, {
         showSizeChanger: val
       });

+ 1 - 1
src/components/tools/Breadcrumb.vue

@@ -23,7 +23,7 @@
     methods: {
       getBreadcrumb() {
 
-        console.log('this.$route.matched', this.$route.matched)
+        // console.log('this.$route.matched', this.$route.matched)
 
         this.breadList = []
         this.breadList.push({name: 'dashboard', path: '/dashboard/', meta: {title: '首页'}})

+ 2 - 2
src/components/tools/HeaderNotice.vue

@@ -151,9 +151,9 @@
               this.msg2Title = "系统消息(" + res.result.sysMsgTotal + ")";
             }
           }).catch(error => {
-            console.log("系统消息通知异常",error);//这行打印permissionName is undefined
+            // console.log("系统消息通知异常",error);//这行打印permissionName is undefined
             this.stopTimer = true;
-            console.log("清理timer");
+            // console.log("清理timer");
           });
         } catch (err) {
           this.stopTimer = true;

+ 1 - 1
src/components/tools/UserPassword.vue

@@ -112,7 +112,7 @@
           if (!err) {
             that.confirmLoading = true;
             let params = Object.assign({username:this.username},values)
-            console.log("修改密码提交数据",params)
+            // console.log("修改密码提交数据",params)
             putAction(this.url,params).then((res)=>{
               if(res.success){
                 console.log(res)

+ 17 - 4
src/components/uploadFile.vue

@@ -180,7 +180,7 @@
         }
       },
       removeFile(file) {
-        console.log(file)
+        // console.log(file)
         var index = this.fileList.findIndex(v => v.uid === file.uid)
         this.fileList.splice(index, 1)
         this.$emit('removeUpload', file)
@@ -196,7 +196,7 @@
         this.percent = 0
         this.loadingElse = true
         const fileOvesize = (file.size > this.size * oneKB)
-        console.log(fileOvesize)
+        // console.log(fileOvesize)
         if (fileOvesize) {
           this.onOversize()
           this.loadingElse = false
@@ -228,13 +228,26 @@
         d = d < 10 ? '0' + d : d
         var timeElse = new Date().getTime()
         var arr = file.name.split('.')
-        console.log(arr[0] + '-' + timeElse + '.' + arr[1])
+
+        var str = ''
+        for (let i = 0; i < arr.length; i++) {
+          if (i == arr.length - 1) {} else {
+            if (i == arr.length - 2) {
+              str += arr[i]
+            } else {
+              str += (arr[i] + '.')
+            }
+          }
+
+        }
+        // console.log(str + '-' + timeElse + '.' + arr[arr.length - 1])
         cos.putObject({
           Bucket: 'media-1301855440',
           /* 必须 */
           Region: 'ap-chongqing',
           /* 存储桶所在地域,必须字段 */
-          Key: that.uploadType + '/' + y + '-' + MM + '-' + d + '/' + arr[0] + '-' + timeElse + '.' + arr[1],
+          Key: that.uploadType + '/' + y + '-' + MM + '-' + d + '/' + str + '-' + timeElse + '.' + arr[arr
+            .length - 1],
           /* 必须 */
           StorageClass: 'STANDARD',
           Body: file, // 上传文件对象

+ 3 - 4
src/main.js

@@ -62,9 +62,9 @@ import JeecgComponents from '@/components/jeecg/index'
 // import iView from 'iview'
 import '!style-loader!css-loader!less-loader!./theme/index.less'
 
-// import ElementUI from 'element-ui';
-// import 'element-ui/lib/theme-chalk/index.css';
-
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+Vue.use(ElementUI);
 import {
   getDay,
   allWeeks
@@ -77,7 +77,6 @@ Vue.prototype.wps = WPS;
 
 Vue.prototype.$getDay = getDay
 Vue.prototype.allWeeks = allWeeks
-// Vue.use(ElementUI);
 
 Vue.config.productionTip = false
 // Vue.use(iView)

+ 5 - 5
src/mixins/JeecgListMixin.js

@@ -79,7 +79,7 @@ export const JeecgListMixin = {
                                 key:index
                             }
                         })
-                        console.log(record.innerData)
+                        // console.log(record.innerData)
                         record.innerData = transformTozTreeFormat( record.innerData)
                     }
                     if (res.code === 510) {
@@ -163,7 +163,7 @@ export const JeecgListMixin = {
       if (this.superQueryParams) {
         sqp['superQueryParams'] = encodeURI(this.superQueryParams)
       }
-      console.log(this.queryParam)
+      // console.log(this.queryParam)
       var param = {...this.queryParam,...this.isorter, ...this.filters}
       param.pageNo = this.ipagination.current;
       param.pageSize = this.ipagination.pageSize;
@@ -243,7 +243,7 @@ export const JeecgListMixin = {
       });
     },
     handleEdit: function (record,sign) {
-        console.log(record,sign)
+        // console.log(record,sign)
       this.$refs.modalForm.edit(record,sign);
       this.$refs.modalForm.title = "编辑";
       this.$refs.modalForm.disableSubmit = false;
@@ -302,7 +302,7 @@ export const JeecgListMixin = {
       if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
         param['selections'] = this.selectedRowKeys.join(",")
       }
-      console.log("导出参数", param)
+      // console.log("导出参数", param)
       downFile(this.url.exportXlsUrl, param).then((data) => {
         if (!data) {
           this.$message.warning("文件下载失败")
@@ -326,7 +326,7 @@ export const JeecgListMixin = {
     /* 导入 */
     handleImportExcel(info) {
       if (info.file.status !== 'uploading') {
-        console.log(info.file, info.fileList);
+        // console.log(info.file, info.fileList);
       }
       if (info.file.status === 'done') {
         if (info.file.response.success) {

+ 0 - 2
src/permission.js

@@ -23,10 +23,8 @@ router.beforeEach((to, from, next) => {
     } else {
       if (store.getters.permissionList.length === 0) {
         store.dispatch('GetPermissionList').then(res => {
-          console.log(res,34567890)
           const menuData = res.result.menu;
           localStorage.setItem("roleCode",res.result.roleCode)
-          console.log(res.message)
           if (menuData === null || menuData === "" || menuData === undefined) {
             return;
           }

+ 3 - 3
src/store/modules/permission.js

@@ -60,17 +60,17 @@ const permission = {
     SET_ROUTERS: (state, data) => {
       state.addRouters = data
       state.routers = constantRouterMap.concat(data)
-      console.log('-----mutations---SET_ROUTERS----', data)
+      // console.log('-----mutations---SET_ROUTERS----', data)
     }
   },
   actions: {
     GenerateRoutes({ commit }, data) {
       return new Promise(resolve => {
         const { roles } = data
-        console.log('-----mutations---data----', data)
+        // console.log('-----mutations---data----', data)
         let accessedRouters
         accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
-        console.log('-----mutations---accessedRouters----', accessedRouters)
+        // console.log('-----mutations---accessedRouters----', accessedRouters)
         commit('SET_ROUTERS', accessedRouters)
         resolve()
       })

+ 3 - 3
src/utils/authFilter.js

@@ -9,7 +9,7 @@ export function disabledAuthFilter(code, formData) {
 }
 
 function nodeDisabledAuth(code, formData) {
-  console.log("页面权限禁用--NODE--开始");
+  // console.log("页面权限禁用--NODE--开始");
   var permissionList = [];
   try {
     var obj = formData;
@@ -40,7 +40,7 @@ function nodeDisabledAuth(code, formData) {
   } else {
     for (var item2 of permissionList) {
       if (code === item2.action) {
-        console.log("页面权限禁用--NODE--生效");
+        // console.log("页面权限禁用--NODE--生效");
         return true;
       }
     }
@@ -49,7 +49,7 @@ function nodeDisabledAuth(code, formData) {
 }
 
 function globalDisabledAuth(code) {
-  console.log("页面禁用权限--Global--开始");
+  // console.log("页面禁用权限--Global--开始");
 
   var permissionList = [];
   var allPermissionList = [];

+ 1 - 1
src/utils/getDay.js

@@ -65,7 +65,7 @@ export  function allWeeks(now_month) {
     let start = new Date(year, month, 1); // 得到当月第一天
     let end = new Date(year, month + 1, 0); // 得到当月最后一天
     let start_day = start.getDay(); // 当月第一天是周几
-    console.log(start.format("yyyy-MM-dd"), end.format("yyyy-MM-dd")); // 每月的起始日期
+    // console.log(start.format("yyyy-MM-dd"), end.format("yyyy-MM-dd")); // 每月的起始日期
     switch (start_day) {
       case 0:
         i = 0 - 1;

+ 2 - 2
src/utils/request.js

@@ -28,8 +28,8 @@ const err = (error) => {
   if (error.esponse) {
     let data = error.response.data
     const token = Vue.ls.get(ACCESS_TOKEN)
-    console.log("------异常响应------", token)
-    console.log("------异常响应------", error.response.status)
+    // console.log("------异常响应------", token)
+    // console.log("------异常响应------", error.response.status)
     switch (error.response.status) {
       case 403:
         notification.error({message: '系统提示', description: '拒绝访问', duration: 4})

+ 1 - 1
src/views/activiti/todoManage.vue

@@ -303,7 +303,7 @@ export default {
       this.$refs.table.selectAll(false);
     },
     handelSubmit() {
-      console.log("提交")
+      // console.log("提交")
       this.submitLoading = true;
       var formData = Object.assign({},this.form);
       formData.assignees = formData.assignees.join(",");

+ 1 - 1
src/views/modules/Statistics/KSAccountReport.vue

@@ -1276,7 +1276,7 @@ export default {
                 columns.map((item, index) => {
                 if (index > columnsFixd.length - 1) {
                     item.sorter = function(a, b) {
-                    return a[item.dataIndex] - b[item.dataIndex]
+                      return a[item.dataIndex] - b[item.dataIndex]
                     }
                 }
                 })

+ 3 - 3
src/views/modules/Statistics/accountReport.vue

@@ -90,7 +90,7 @@
                   </span>
                 </a-tooltip>
             </div>
-            <div class="infoNum">
+            <div class="infoNum">
                 <span class="red">{{clickLink.click | formatCurrency }}</span> 
                 <span class="green" v-if="dateValue[0].format('YYYY-MM-DD')==dateValue[1].format('YYYY-MM-DD')"><span class="huanbi">环比: </span> {{ clickLink.clickLink|toPercentage  }}</span> 
             </div>
@@ -105,7 +105,7 @@
                   </span>
                 </a-tooltip>
             </div>
-            <div class="infoNum">
+            <div class="infoNum">
                 <span class="red">{{showNumLink.showNum | formatCurrency }}</span> 
                 <span class="green" v-if="dateValue[0].format('YYYY-MM-DD')==dateValue[1].format('YYYY-MM-DD')"><span class="huanbi">环比: </span> {{ showNumLink.showNumLink|toPercentage  }}</span> 
             </div>
@@ -120,7 +120,7 @@
                   </span>
                 </a-tooltip>
             </div>
-            <div class="infoNum">
+            <div class="infoNum">
                 <span class="red">{{convertNumLink.convertNum | formatCurrency }}</span> 
                 <span class="green" v-if="dateValue[0].format('YYYY-MM-DD')==dateValue[1].format('YYYY-MM-DD')"><span class="huanbi">环比: </span> {{ convertNumLink.convertNumLink|toPercentage  }}</span> 
             </div>

+ 1 - 1
src/views/modules/Statistics/alipayStatistics.vue

@@ -508,7 +508,7 @@ export default {
       params.discount = this.discount
       downFilePost('/ctop/daily/exportDailyReport', params).then(res => {
         let blob = new Blob([res], {
-          type: 'application/vnd.ms-excel'
+          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
         })
         let downloadElement = document.createElement('a')
         let href = window.URL.createObjectURL(blob) //创建下载的链接

+ 1 - 1
src/views/modules/Statistics/caicaicai/dayStatistics.vue

@@ -373,7 +373,7 @@ export default {
       })[0].projectName
       downFilePost('/ctop/advertiser/exportXxlDailyReport', param).then(res => {
         let blob = new Blob([res], {
-          type: 'application/vnd.ms-excel'
+          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
         })
         let downloadElement = document.createElement('a')
         let href = window.URL.createObjectURL(blob) //创建下载的链接

+ 1 - 1
src/views/modules/Statistics/companyDetail.vue

@@ -299,7 +299,7 @@ export default {
       downFilePost('/agent/kuaiShouDailyAgent/companyReportAccountDetailListExportExcel', params).then(
         res => {
           let blob = new Blob([res], {
-            type: 'application/vnd.ms-excel'
+            type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
           })
           let downloadElement = document.createElement('a')
           let href = window.URL.createObjectURL(blob) //创建下载的链接

+ 2 - 1
src/views/modules/Statistics/companyStatistics.vue

@@ -387,7 +387,8 @@ export default {
     exportExcel() {
       downFilePost('/agent/kuaiShouDailyAgent/companyReportExportExcel', this.params).then(res => {
         let blob = new Blob([res], {
-          type: 'application/vnd.ms-excel'
+          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+          
         })
         let downloadElement = document.createElement('a')
         let href = window.URL.createObjectURL(blob) //创建下载的链接

+ 1 - 1
src/views/modules/Statistics/components/selecTable.vue

@@ -236,4 +236,4 @@ export default {
 /*.clear{*/
 /*  margin:20px 0px 20px 0px;*/
 /*}*/
-</style>
+</style>

+ 337 - 0
src/views/modules/Statistics/components/selectPagination.vue

@@ -0,0 +1,337 @@
+<style>
+.select-table .ant-table-thead > tr > th,
+.select-table .ant-table-tbody > tr > td {
+  padding: 0 !important;
+}
+.select-table .ant-table {
+  font-size: 12px;
+}
+.demo-infinite-container {
+  border: 1px solid #e8e8e8;
+  border-radius: 4px;
+  overflow: auto;
+  padding: 8px 24px;
+  height: 300px;
+}
+.demo-loading-container {
+  position: absolute;
+  bottom: 40px;
+  width: 100%;
+  text-align: center;
+}
+</style>
+<template>
+  <a-form-item
+    label="项目名称"
+    :label-col="labelCol"
+    :wrapper-col="wrapperCol"
+    v-clickoutside="handleClose"
+    style="width:100%"
+    class="select-table"
+  >
+    <a-input placeholder="请选择项目" @focus="topMiddle = true" v-model="keyValue" @change="getData" />
+    <div
+      v-show="topMiddle"
+      v-infinite-scroll="handleInfiniteOnLoad"
+      style="background:white;padding:10px;box-shadow: 0 2px 8px 0 rgba(0,0,0,.15);position:relative;z-index:1000"
+      class="demo-infinite-container"
+      :infinite-scroll-disabled="busy"
+      :infinite-scroll-distance="80"
+    >
+      <a-list :data-source="data">
+        <a-list-item slot="renderItem" slot-scope="item" @click="showProject(item)">
+          <a-list-item-meta :description="'广告主名称:'+item.advertiserName">
+            <a slot="title">项目名称:{{ item.projectName }}</a>
+          </a-list-item-meta>
+          <div>
+            {{item.mediaId == '1'
+            ? '头条'
+            : item.mediaId == '2'
+            ? '快手'
+            : item.mediaId == '3'
+            ? '头条内广'
+            : '快手内广'}}
+          </div>
+        </a-list-item>
+        <div v-if="loading && !busy" class="demo-loading-container">
+          <a-spin />
+        </div>
+      </a-list>
+    </div>
+  </a-form-item>
+</template>
+
+<script>
+import { getAction, postAction } from '@/api/manage'
+import moment from 'moment'
+import { mapGetters } from 'vuex'
+import jq from 'jquery'
+import infiniteScroll from 'vue-infinite-scroll'
+const clickoutside = {
+  // 初始化指令
+  bind(el, binding, vnode) {
+    function documentHandler(e) {
+      // 这里判断点击的元素是否是本身,是本身,则返回
+      if (el.contains(e.target)) {
+        return false
+      }
+      // 判断指令中是否绑定了函数
+      if (binding.expression) {
+        // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法
+        binding.value(e)
+      }
+    }
+    // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听
+    el.__vueClickOutside__ = documentHandler
+    document.addEventListener('click', documentHandler)
+  },
+  update() {},
+  unbind(el, binding) {
+    // 解除事件监听
+    document.removeEventListener('click', el.__vueClickOutside__)
+    delete el.__vueClickOutside__
+  },
+}
+export default {
+  name: 'select-pagination',
+  components: {},
+  directives: { clickoutside, infiniteScroll },
+  props: {
+    projectId: {
+      type: String,
+      default() {
+        return ''
+      },
+    },
+  },
+
+  data() {
+    return {
+      loading: false,
+      busy: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 },
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 12 },
+      },
+      selectedRowKeys: [],
+      selectedRowKeysValue: [],
+      topMiddle: false,
+      keyValue: '',
+      data: [],
+      dataElse: [],
+      ipagination: {
+        current: 0,
+        pageSize: 20,
+      },
+      rowClick: (record, index) => ({
+        // 事件
+        on: {
+          click: () => {
+            var str =
+              record.mediaId == '1'
+                ? '头条'
+                : record.mediaId == '2'
+                ? '快手'
+                : record.mediaId == '3'
+                ? '头条内广'
+                : '快手内广'
+            this.keyValue = record.projectName + ' ' + str
+            this.topMiddle = false
+            this.data = this.dataElse
+            this.$emit('update:projectId', record.projectId)
+          },
+        },
+      }),
+    }
+  },
+  computed: {},
+  filters: {},
+  methods: {
+    showProject(record) {
+      var str =
+        record.mediaId == '1'
+          ? '头条'
+          : record.mediaId == '2'
+          ? '快手'
+          : record.mediaId == '3'
+          ? '头条内广'
+          : '快手内广'
+      this.keyValue = record.projectName
+      this.topMiddle = false
+      this.$emit('update:projectId', record.projectId)
+    },
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    onSelectChange(selectedRowKeys, selectionRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRowKeysValue = selectionRows.map((item) => {
+        return { orientationId: item.orientationId, orientationName: item.orientationName }
+      })
+    },
+    getData() {
+      if(this.keyValue == ''){
+        this.$emit('update:projectId', "")
+      }
+      this.ipagination.current = 1
+      getAction('/ctop/projectMember/participateListV2', {
+        userId: this.userInfo().id,
+        pageNo:  this.ipagination.current,
+        projectName: this.keyValue,
+      }).then((res) => {
+        if (res.code == 0) {
+          this.data = res.result.records.map((item, index) => {
+            return {
+              ...item,
+              projectId: item.projectId + '',
+              key: index,
+            }
+          })
+          // this.dataElse = res.result.records.map((item, index) => {
+          //   return {
+          //     ...item,
+          //     projectId: item.projectId + '',
+          //     key: index,
+          //   }
+          // })
+        }
+      })
+    },
+    handleClose() {
+      this.topMiddle = false
+    },
+    // allData() {
+    //   getAction('/ctop/projectMember/participateListV2', {
+    //     userId: this.userInfo().id,
+    //     pageSize: this.ipagination.pageSize,
+    //     pageNo: this.ipagination.current,
+    //   }).then((res) => {
+    //     if (res.code == 0) {
+    //       this.data = res.result.records.map((item, index) => {
+    //         return {
+    //           ...item,
+    //           projectId: item.projectId + '',
+    //           key: index,
+    //         }
+    //       })
+    //       this.dataElse = res.result.records.map((item, index) => {
+    //         return {
+    //           ...item,
+    //           projectId: item.projectId + '',
+    //           key: index,
+    //         }
+    //       })
+    //     }
+    //   })
+    // },
+    handleInfiniteOnLoad() {
+      const data = this.data
+      this.loading = true
+      this.ipagination.current++
+      // this.fetchData((res) => {
+      //   this.data = data.concat(res.results)
+      //   this.loading = false
+      // })
+      getAction('/ctop/projectMember/participateListV2', {
+        userId: this.userInfo().id,
+        pageSize: this.ipagination.pageSize,
+        pageNo: this.ipagination.current,
+        projectName: this.keyValue,
+      }).then((res) => {
+        if (res.code == 0) {
+          this.busy = true
+          this.data = data.concat(
+            res.result.records.map((item, index) => {
+              return {
+                ...item,
+                projectId: item.projectId + '',
+              }
+            })
+          )
+
+          // this.data = res.result.records.map((item, index) => {
+          //   return {
+          //     ...item,
+          //     projectId: item.projectId + '',
+          //     key: index,
+          //   }
+          // })
+          // this.dataElse = res.result.records.map((item, index) => {
+          //   return {
+          //     ...item,
+          //     projectId: item.projectId + '',
+          //     key: index,
+          //   }
+          // })
+        }
+      })
+    },
+  },
+  watch: {
+    projectId(n, o) {
+      if (n == '') {
+        this.keyValue = ''
+      } else {
+      }
+    },
+  },
+  mounted: function () {
+    // this.handleInfiniteOnLoad()
+  },
+}
+</script>
+
+<style type="text/css">
+.plug-timer-grid {
+  width: 100%;
+}
+
+.plug-timer-grid td,
+.plug-timer-grid th {
+  border: 1px solid #97b4d1;
+  text-align: center; /*cursor:pointer;*/
+  font-size: 10px;
+  line-height: 10px;
+}
+
+.Selected {
+  background-color: rgb(102, 162, 243);
+  opacity: 0.5;
+}
+
+.plug-timer-grid {
+  border-collapse: collapse;
+  z-index: 4;
+}
+
+.plug-timer-grid thead tr {
+  display: table-row;
+  vertical-align: inherit;
+  border-color: inherit;
+}
+
+.group-creat table td {
+  height: 20px;
+  max-width: 5px;
+  font-size: 12px;
+  text-align: center;
+  vertical-align: middle;
+  overflow: hidden;
+  transition: background 0.5s;
+  -webkit-transition: background 0.5s;
+}
+
+.plug-timer-grid tbody th {
+  width: 4%;
+}
+
+.plug-timer-grid tbody tr td {
+  width: 2%;
+}
+
+/*.clear{*/
+/*  margin:20px 0px 20px 0px;*/
+/*}*/
+</style>

+ 70 - 29
src/views/modules/Statistics/dataDisplayStatistics.vue

@@ -204,14 +204,11 @@ th div {
             :columns="columns"
             :dataSource="data"
             bordered
+            id="outTable"
             :pagination="false"
-            :scroll="{ x: scrollX }"
-            ref="accountTable"
-            :width="tableWidth"
-            
-            style="word-break: break-all;font-size:16px;font-weight:600"
+            :scroll="{ x: 2500 }"
           ></a-table>
-          <!-- <customColumn :visible='visible'  :listNum='listNum' :fiexColumn='columnsFixd' :mediaType='2'   @closeCustomColumn='closeCustomColumn' @changeColumn='changeColumn' /> -->
+          <!-- <customColumn :visible='visible'  :listNum='listNum' :fiexColumn='columnsFixd'  @closeCustomColumn='closeCustomColumn' @changeColumn='changeColumn' /> -->
         </a-card>
       </a-col>
     </a-row>
@@ -253,6 +250,7 @@ const columns = [
     dataIndex: 'date',
     align: 'center',
     width: 150,
+    fixed:'left',
     customRender: function(text, record, index) {
       const obj = {
         children: text,
@@ -274,7 +272,8 @@ const columns = [
     title: '账户Id',
     dataIndex: 'accountId',
     align: 'center',
-    width: 150,
+    width: 250,
+    fixed:'left',
     customRender: function(text, record, index) {
       const obj = {
         children: text,
@@ -301,7 +300,8 @@ const columns = [
     dataIndex: 'accountName',
     scopedSlots: { customRender: 'cost' },
     align: 'center',
-    width: 150,
+    width: 250,
+    fixed:'left',
     customRender: function(text, record, index) {
       const obj = {
         children: text,
@@ -431,13 +431,13 @@ const columns = [
 ]
 
 
-const columnsFixd = [
+const columnsWu = [
   {
     title: '时间',
     dataIndex: 'date',
     align: 'center',
     width: 150,
-    fixed:'left',
+     fixed:'left',
     customRender: function(text, record, index) {
       const obj = {
         children: text,
@@ -487,7 +487,7 @@ const columnsFixd = [
     dataIndex: 'accountName',
     scopedSlots: { customRender: 'cost' },
     align: 'center',
-    width: 250,
+    width: 200,
     fixed:'left',
     customRender: function(text, record, index) {
       const obj = {
@@ -542,25 +542,68 @@ const columnsFixd = [
     dataIndex: 'photoClickRatio',
     align: 'center'
   },
-  
+  {
+    title: 'cvr',
+    dataIndex: 'cvr',
+    align: 'center'
+  },
+  {
+    title: 'cpm(¥)',
+    dataIndex: 'cpm',
+    align: 'center'
+  },
   {
     title: '行为数',
     dataIndex: 'bClick',
     align: 'center'
   },
   {
-    title: '行为率',
-    dataIndex: 'bClicks',
+    title: '转化数',
+    dataIndex: 'formCount',
+    align: 'center'
+  },
+  {
+    title: '折前转化单价(¥)',
+    dataIndex: 'beforeFormPrice',
+    align: 'center'
+  },
+  {
+    title: '折后转化单价(¥)',
+    dataIndex: 'afterFormPrice',
+    align: 'center'
+  },
+
+  {
+    title: '注册数',
+    dataIndex: 'eventRegister',
     align: 'center'
   },
   {
-    title: '平均千次封面曝光花费',
-    dataIndex: 'CPM',
+    title: '注册成本(¥)',
+    dataIndex: 'eventRegisterCost',
     align: 'center'
   },
-  
-  
-  
+  {
+    title: '单价区间',
+    dataIndex: 'price',
+    align: 'center',
+    customRender: function(text, record, index) {
+      const obj = {
+        children: text,
+        attrs: {}
+      }
+      for (let i = 0; i < length; i++) {
+        if (index == 0 && i == 0) {
+          obj.attrs.rowSpan = length
+        } else {
+          if (index == i) {
+            obj.attrs.rowSpan = 0
+          }
+        }
+      }
+      return obj
+    }
+  }
 ]
 export default {
   name: 'data-display-statistics',
@@ -579,8 +622,7 @@ export default {
       title: '账户数据展示',
       show: true,
       data: [],
-      columns:JSON.parse(JSON.stringify(columnsFixd)),
-      columnsFixd,
+      columns:columnsWu,
       options: [],
       list: [],
       appId: [],
@@ -605,7 +647,7 @@ export default {
         discountCostProportion: 0
       },
       timeList: [
-        // { label: '今天', value: 1, show: true },
+        //{ label: '今天', value: 1, show: true },
         { label: '昨天', value: 2, show: true },
         { label: '近一周', value: 3, show: true },
         { label: '近十五天', value: 4, show: true },
@@ -642,8 +684,7 @@ export default {
       statDate: '',
       visible:false,//自定义页面的打开
        listNum:[],
-       scrollX:2000,
-       tableWidth:'',
+       scrollX:0,
     }
   },
   filters: {
@@ -678,7 +719,7 @@ export default {
     changeColumn(val){
         this.columns=[...val];
         if(this.columns.length> this.columnsFixd.length){
-              this.scrollX=2000+200*(this.columns.length-this.columnsFixd.length)
+              this.scrollX=200*(this.columns.length-this.columnsFixd.length)
         }else{
           this.scrollX=0
         }
@@ -688,8 +729,8 @@ export default {
         //   console.log(this.listNum.length, this.columns)
 
         if (this.listNum.length >= 9 || this.columns.length >= 9) {
-          this.tableWidth = 160
-          this.scrollX = this.columns.length * 160
+          this.tableWidth = 120
+          this.scrollX = this.columns.length * 120
           // console.log(this.scrollX)
         } else {
           this.scrollX = 0
@@ -727,7 +768,7 @@ export default {
           }
         }
       } else {
-        this.options = this.list
+        this.options = this.lista
       }
     },
     search(value) {
@@ -1398,4 +1439,4 @@ export default {
     })
   }
 }
-</script>
+</script>

+ 53 - 0
src/views/modules/Statistics/effectReport.vue

@@ -15,6 +15,7 @@
       </a-select>     
       <a-range-picker v-model="dateRange" @change="dateChange" style="width:200px" />      
       <div class="opt">
+        <!-- <a-button type='primary' @click="exportExcel" style="margin-right:15px">导出报表</a-button> -->
         <a-button type='primary' @click="(ipagination.current=1);(projectId = null);( unitId = null );(campaignId = null);(accountId = null) ;search()">查询</a-button>
       </div>
     </div>
@@ -25,6 +26,7 @@
             <a-tab-pane :key="3" tab="广告计划"> </a-tab-pane>
             <a-tab-pane :key="4" tab="广告组"> </a-tab-pane>
             <a-tab-pane :key="5" tab="广告创意"> </a-tab-pane>
+            <a-button slot="tabBarExtraContent" type='primary' @click="exportExcel"  :loading="exportLoading">导出报表</a-button>
         </a-tabs>
         <div class="tableBody">
           <a-spin :spinning="spinning">
@@ -480,9 +482,59 @@ export default {
         visible:false,
         imgSrc:undefined,
         currentRecords:{},
+        projectRecord:{},
+        exportLoading:false,
       }
     },
     methods: {
+      //导出报表
+        exportExcel() {
+          if(this.projectValue.length>0){
+            this.exportLoading=true;
+            let type='';
+           if(this.tabKey==1){
+              type='project'
+            }else if(this.tabKey==2){
+              type='account'
+            }else if(this.tabKey==3){
+              type='campaign'
+            }else if(this.tabKey==4){
+              type='group'
+            }else if(this.tabKey==5){
+              type='creative'
+            }
+
+          var name =`${this.dateRange[0].format('YYYY_MM_DD')}~${this.dateRange[1].format('YYYY_MM_DD')}_效果报表`;
+            
+          downFilePost(`/ctop/advertiser/exportKuaishouProjectInfo`, {
+            startDate:this.dateRange[0].format('YYYY-MM-DD'),
+            endDate:this.dateRange[1].format('YYYY-MM-DD'),
+            projectList:this.projectValue,
+            projectId:this.projectId,
+            accountId:this.accountId,
+            campaignId:this.campaignId,
+            unitId:this.unitId,
+            type,
+          }).then(res => {
+                // console.log(res)
+                this.exportLoading=false;
+                let blob = new Blob([res], {
+                    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+                })
+                // console.log(blob)
+                let downloadElement = document.createElement('a')
+                let href = window.URL.createObjectURL(blob) //创建下载的链接
+                downloadElement.href = href
+                downloadElement.download = name+'.xlsx'    //下载后文件名
+                document.body.appendChild(downloadElement)
+                downloadElement.click() //点击下载
+                document.body.removeChild(downloadElement) //下载完成移除元素
+                window.URL.revokeObjectURL(href) //释放掉blob对象
+            })
+          }else{
+            this.$message.error('请选择项目!')
+          }
+        },
       handleOk(e) {
         // console.log(e);
         this.visible = false;
@@ -553,6 +605,7 @@ export default {
       // 从项目跳转到账户,并获取账户的table值
       goAccount(records){
         console.log(records,'--account');
+        this.projectRecord=records
         this.projectId=records.projectId 
         this.getTableAccountList()
 

+ 18 - 0
src/views/modules/Statistics/refuseDataCreat.vue

@@ -20,6 +20,17 @@
             <a-button type="primary" style="margin-left:10px" @click="clickAgain" v-if="selectedRowKeys.length>0"
               :loading="loadingList">一键重提
             </a-button>
+            <a-radio-group v-model="putStatus" button-style="solid" style="margin-left:10px" @change="changeSlide">
+              <a-radio-button value="0">
+                全部
+              </a-radio-button>
+              <a-radio-button value="1">
+                开启
+              </a-radio-button>
+              <a-radio-button value="2">
+                已关闭
+              </a-radio-button>
+            </a-radio-group>
             <a-button type="primary" style="position:absolute;right:0" @click="syncCreative"
               :loading="loadingSyncCreative">
               同步创意
@@ -256,6 +267,7 @@
 
     data: function () {
       return {
+        putStatus: '0',
         title: '被拒创意列表',
         visibleFail: false,
         visibleAgain: false,
@@ -356,6 +368,9 @@
       }
     },
     methods: {
+      changeSlide() {
+        this.addUser()
+      },
       // 广告语改变
       DescriptionChange(e){
         console.log(e.target.value);
@@ -594,12 +609,15 @@
       addUser() {
         this.loading = true
         var params = {}
+        this.selectedRowKeys = []
+        this.selectedRowKeysValue = []
         //  localStorage.setItem('accountIdCreat', record.campaignId)
         // localStorage.setItem('accountIdCreatNow', this.appId)
         params.accountId = localStorage.getItem('accountIdCreatNow')
         params.campaignId = localStorage.getItem('accountIdCreat')
         params.pageSize = this.ipagination.pageSize
         params.pageNo = this.ipagination.current
+        params.putStatus = this.putStatus == "0" ? null : this.putStatus
         getAction('/MaterialRefuse/getRefuseCreative', params).then(res => {
           if (res.code == 0) {
             this.dataList = res.result.records.map((v, index) => {

+ 28 - 10
src/views/modules/Statistics/refuseDataCreatNew.vue

@@ -20,6 +20,17 @@
             <a-button type="primary" style="margin-left:10px" @click="clickAgain" v-if="selectedRowKeys.length>0"
               :loading="loadingList">一键重提
             </a-button>
+            <a-radio-group v-model="putStatus" button-style="solid" style="margin-left:10px" @change="changeSlide">
+              <a-radio-button value="0">
+                全部
+              </a-radio-button>
+              <a-radio-button value="1">
+                开启
+              </a-radio-button>
+              <a-radio-button value="2">
+                已关闭
+              </a-radio-button>
+            </a-radio-group>
             <a-button type="primary" style="position:absolute;right:0" @click="syncCreative"
               :loading="loadingSyncCreative">
               同步创意
@@ -59,7 +70,7 @@
       <a-textarea v-model="editWord" autosize />
     </a-modal>
     <a-modal title="一键重提" @cancel="handleClose" :visible="visibleAgain" @ok="handleOkAgain"
-      :confirmLoading="againLoading" :width="650" >
+      :confirmLoading="againLoading" :width="650">
       <a-form :form="form">
         <a-form-item label="是否修改" :labelCol="{ lg: { span: 4 }, sm: { span: 6 } }"
           :wrapperCol="{ lg: { span: 18 }, sm: { span: 18 } }">
@@ -256,6 +267,7 @@
 
     data: function () {
       return {
+        putStatus: '0',
         title: '被拒创意列表',
         visibleFail: false,
         visibleAgain: false,
@@ -303,7 +315,7 @@
         dataOne: [],
         value: '',
 
-        updateDescription:'',//广告语的字符
+        updateDescription: '', //广告语的字符
       }
     },
     filters: {
@@ -357,11 +369,14 @@
       }
     },
     methods: {
+      changeSlide() {
+          this.addUser()
+      },
       // 广告语改变
-      DescriptionChange(e){
+      DescriptionChange(e) {
         console.log(e.target.value);
-        if(e.target.value.length>30){
-          
+        if (e.target.value.length > 30) {
+
           // this.updateDescription=e.target.value.substr(0,30);
           // console.log(this.updateDescription)
           this.$message.error('广告语最多30字!')
@@ -381,7 +396,7 @@
         // this.form.setFieldsValue({
         //   updateDescription: item.title
         // })
-        this.updateDescription=item.title;
+        this.updateDescription = item.title;
         this.cunTitleVisible = false;
         this.cunTitleList = []
       },
@@ -390,7 +405,7 @@
         // this.form.setFieldsValue({
         //   updateDescription: item
         // })
-        this.updateDescription=item;
+        this.updateDescription = item;
         this.titleVisible = false;
         this.dataOne = []
         this.value = ""
@@ -522,13 +537,13 @@
         //    this.selectedRowKeysValue.length > 0 ? this.selectedRowKeysValue :
       },
       handleOkAgain(e) {
-        if(this.updateDescription.length>30&&this.getData('type')==1){
+        if (this.updateDescription.length > 30 && this.getData('type') == 1) {
           this.$message.error('广告语最多30个字,请修正后再次提交!')
-        }else{
+        } else {
           this.againLoading = true
           this.form.validateFields((err, values) => {
             if (!err) {
-              values.updateDescription=this.updateDescription;
+              values.updateDescription = this.updateDescription;
               var params = {
 
                 ...values,
@@ -592,12 +607,15 @@
       addUser() {
         this.loading = true
         var params = {}
+        this.selectedRowKeys = []
+        this.selectedRowKeysValue = []
         //  localStorage.setItem('accountIdCreat', record.campaignId)
         // localStorage.setItem('accountIdCreatNow', this.appId)
         params.accountId = this.appId
         // params.campaignId = localStorage.getItem('accountIdCreat')
         params.pageSize = this.ipagination.pageSize
         params.pageNo = this.ipagination.current
+        params.putStatus = this.putStatus == "0" ? null : this.putStatus
         getAction('/MaterialRefuse/getRefuseCreative', params).then(res => {
           if (res.code == 0) {
             this.dataList = res.result.records.map((v, index) => {

+ 1 - 1
src/views/modules/Statistics/videoStatics/vDay.vue

@@ -300,7 +300,7 @@ export default {
       videoUrl:'',
 
       //消耗的值
-      consumeValue: 1000,
+      consumeValue: 0,
       //视频ID
       videoID: '',
       columns: [...columnsFixd, ...variableCol],

+ 1 - 1
src/views/modules/Statistics/videoStatics/vMonth.vue

@@ -388,7 +388,7 @@ export default {
       //明细里的数据
       detailData: [],
 
-      consumeValue: 1000,
+      consumeValue: 0,
       //视频ID
       videoID: null,
       columns: [...columnsFixd, ...variableCol],

+ 2 - 2
src/views/modules/Statistics/videoStatics/vSummary.vue

@@ -323,7 +323,7 @@ export default {
 
       //是否显示导出按钮
       exportExcelIsOk: true,
-      consumeValue: 1000,
+      consumeValue: 0,
 
       columns: [...columnsFixd, ...variableCol],
       addColumns: [],
@@ -448,7 +448,7 @@ export default {
       // })[0].projectName
       // downFilePost('/ctop/yiche/report/exportDailyReport', params).then(res => {
       //   let blob = new Blob([res], {
-      //     type: 'application/vnd.ms-excel'
+      //     type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
       let column = this.columns.map((item, index) => {
         return item.dataIndex
       })

+ 1 - 1
src/views/modules/Statistics/videoStatics/vWeek.vue

@@ -381,7 +381,7 @@ export default {
       //明细里的数据
       detailData: [],
 
-      consumeValue: 1000,
+      consumeValue: 0,
       //视频ID
       videoID: '',
       columns: [...columnsFixd, ...variableCol],

+ 1 - 1
src/views/modules/Statistics/yicheStatistics/dayStatistics.vue

@@ -637,7 +637,7 @@ export default {
       })[0].projectName
       downFilePost('/ctop/yiche/report/exportDailyReport', params).then(res => {
         let blob = new Blob([res], {
-          type: 'application/vnd.ms-excel'
+          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
         })
         let downloadElement = document.createElement('a')
         let href = window.URL.createObjectURL(blob) //创建下载的链接

+ 1 - 1
src/views/modules/Statistics/yicheStatistics/timeStatistics.vue

@@ -383,7 +383,7 @@ export default {
       })[0].projectName
       downFilePost('/ctop/yiche/report/exportHourReport', params).then(res => {
         let blob = new Blob([res], {
-          type: 'application/vnd.ms-excel'
+          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
         })
         let downloadElement = document.createElement('a')
         let href = window.URL.createObjectURL(blob) //创建下载的链接

+ 174 - 123
src/views/modules/advertiser/ProjectList.vue

@@ -19,11 +19,21 @@
             <a-col :md="6" :sm="8">
               <a-form-item label="运营负责人">
                 <!-- <a-input placeholder="请输入负责人" v-model="queryParam.responsible"></a-input> -->
-                <a-select placeholder="请选择运营负责人" showSearch optionFilterProp="children" style="width: 100%"
-                  :filterOption="filterOption" v-model="queryParam.responsibleId">
-                  <a-select-option v-for="appModel in options" :key="appModel.userId + new Date().getTime()"
-                    :value="appModel.userId">{{ appModel.realName }}&#12288;&#12288;{{ appModel.roleName }}
-                  </a-select-option>
+                <a-select
+                  placeholder="请选择运营负责人"
+                  showSearch
+                  optionFilterProp="children"
+                  style="width: 100%"
+                  :filterOption="filterOption"
+                  v-model="queryParam.responsibleId"
+                  @search="search"
+                  @focus="getAllUserList"
+                >
+                  <a-select-option
+                    v-for="appModel in options"
+                    :key="appModel.userId + new Date().getTime()"
+                    :value="appModel.userId"
+                  >{{ appModel.realName }}&#12288;&#12288;{{ appModel.roleName }}</a-select-option>
                 </a-select>
               </a-form-item>
             </a-col>
@@ -32,36 +42,50 @@
             <a-col :md="6" :sm="8">
               <a-form-item label="设计负责人">
                 <!-- <a-input placeholder="请输入负责人" v-model="queryParam.responsible"></a-input> -->
-                <a-select placeholder="请选择设计负责人" showSearch optionFilterProp="children" style="width: 100%"
-                  :filterOption="filterOption" v-model="queryParam.designResponsibleId">
-                  <a-select-option v-for="appModel in options" :key="appModel.userId + new Date().getTime()"
-                    :value="appModel.userId">{{ appModel.realName }}&#12288;&#12288;{{ appModel.roleName }}
-                  </a-select-option>
+                <a-select
+                  placeholder="请选择设计负责人"
+                  showSearch
+                  optionFilterProp="children"
+                  style="width: 100%"
+                  :filterOption="filterOption"
+                  v-model="queryParam.designResponsibleId"
+                  @search="search"
+                  @focus="getAllUserList"
+                >
+                  <a-select-option
+                    v-for="appModel in options"
+                    :key="appModel.userId + new Date().getTime()"
+                    :value="appModel.userId"
+                  >{{ appModel.realName }}&#12288;&#12288;{{ appModel.roleName }}</a-select-option>
                 </a-select>
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="6">
-            <a-form-item label="行业">
+              <a-form-item label="行业">
                 <j-tree-select
-                    v-model="queryParam.industryId"
-                    ref="treeSelect"
-                    placeholder="请选择行业"
-                    dict="sys_category,name,id"
-                    pidField="pid"
-                    pidValue="f5cb2d2d28417b3b65a6dd744bcb9a76"
-                >
-                </j-tree-select>
-                </a-form-item>
+                  v-model="queryParam.industryId"
+                  ref="treeSelect"
+                  placeholder="请选择行业"
+                  dict="sys_category,name,id"
+                  pidField="pid"
+                  pidValue="f5cb2d2d28417b3b65a6dd744bcb9a76"
+                ></j-tree-select>
+              </a-form-item>
             </a-col>
           </template>
           <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> -->
+              </a>-->
             </span>
           </a-col>
         </a-row>
@@ -76,8 +100,17 @@
     <!-- table区域-begin -->
     <!-- 供应商 -->
     <div>
-      <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource"
-        :pagination="ipagination" :loading="loading" @change="handleTableChange">
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        @change="handleTableChange"
+      >
         <span slot="maxBid" slot-scope="text">{{ text / 1000 }}</span>
         <span slot="maxDeepCpaBid" slot-scope="text">{{ text / 1000 }}</span>
 
@@ -100,116 +133,134 @@
 </template>
 
 <script>
-  import ProjectModal from './modules/ProjectModal'
-  import JTreeSelect from '@/components/jeecg/JTreeSelect'
-  import {
-    httpAction,
-    getAction
-  } from '@/api/manage'
-  import {
-    JeecgListMixin
-  } from '@/mixins/JeecgListMixin'
+import ProjectModal from './modules/ProjectModal'
+import JTreeSelect from '@/components/jeecg/JTreeSelect'
+import { httpAction, getAction } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 
-  export default {
-    name: 'ProjectList',
-    mixins: [JeecgListMixin],
-    components: {
-      ProjectModal,
-      JTreeSelect
-    },
-    data() {
-      return {
-        description: '项目管理页面',
-        // 表头
-        columns: [{
-            title: '项目名称',
-            align: 'center',
-            dataIndex: 'projectName'
-          },
-          {
-            title: '广告主名称',
-            align: 'center',
-            dataIndex: 'advertiserName'
-          },
-          {
-            title: '行业类型',
-            align: 'center',
-            dataIndex: 'industryId_dictText'
-          },
-          {
-            title: '最高出价',
-            align: 'center',
-            dataIndex: 'maxBid',
-            scopedSlots: {
-              customRender: 'maxBid'
-            }
-          },
-          {
-            title: '最高转化出价',
-            align: 'center',
-            dataIndex: 'maxDeepCpaBid',
-            scopedSlots: {
-              customRender: 'maxDeepCpaBid'
-            }
-          },
-          {
-            title: '供应商',
-            align: 'center',
-            dataIndex: 'supplierCode_dictText'
-          },
-          {
-            title: '销售',
-            align: 'center',
-            dataIndex: 'saleId_dictText'
+export default {
+  name: 'ProjectList',
+  mixins: [JeecgListMixin],
+  components: {
+    ProjectModal,
+    JTreeSelect,
+  },
+  data() {
+    return {
+      description: '项目管理页面',
+      // 表头
+      columns: [
+        {
+          title: '项目名称',
+          align: 'center',
+          dataIndex: 'projectName',
+        },
+        {
+          title: '广告主名称',
+          align: 'center',
+          dataIndex: 'advertiserName',
+        },
+        {
+          title: '行业类型',
+          align: 'center',
+          dataIndex: 'industryId_dictText',
+        },
+        {
+          title: '最高出价',
+          align: 'center',
+          dataIndex: 'maxBid',
+          scopedSlots: {
+            customRender: 'maxBid',
           },
-          {
-            title: '运营负责人',
-            align: 'center',
-            dataIndex: 'responsibleName'
+        },
+        {
+          title: '最高转化出价',
+          align: 'center',
+          dataIndex: 'maxDeepCpaBid',
+          scopedSlots: {
+            customRender: 'maxDeepCpaBid',
           },
-          {
-            title: '设计负责人',
-            align: 'center',
-            dataIndex: 'designResponsibleName'
+        },
+        {
+          title: '供应商',
+          align: 'center',
+          dataIndex: 'supplierCode_dictText',
+        },
+        {
+          title: '销售',
+          align: 'center',
+          dataIndex: 'saleId_dictText',
+        },
+        {
+          title: '运营负责人',
+          align: 'center',
+          dataIndex: 'responsibleName',
+        },
+        {
+          title: '设计负责人',
+          align: 'center',
+          dataIndex: 'designResponsibleName',
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: {
+            customRender: 'action',
           },
-          {
-            title: '操作',
-            dataIndex: 'action',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'action'
-            }
-          }
-        ],
-        url: {
-          list: '/ctop/project/list',
-          delete: '/ctop/project/delete',
-          deleteBatch: '/ctop/project/deleteBatch',
-          exportXlsUrl: 'ctop/project/exportXls',
-          importExcelUrl: 'ctop/project/importExcel'
         },
-        options: []
-      }
-    },
-    computed: {
-      importExcelUrl: function () {
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
-      }
-    },
-    methods: {
-      filterOption(input, option) {
-        return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      ],
+      url: {
+        list: '/ctop/project/list',
+        delete: '/ctop/project/delete',
+        deleteBatch: '/ctop/project/deleteBatch',
+        exportXlsUrl: 'ctop/project/exportXls',
+        importExcelUrl: 'ctop/project/importExcel',
       },
+      options: [],
+    }
+  },
+  computed: {
+    importExcelUrl: function () {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     },
-    mounted() {
-      getAction('/sys/user/getAllUserList', '').then(res => {
+  },
+  methods: {
+    filterOption(input, option) {
+      return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+    },
+    getAllUserList(value) {
+      this.options = []
+      getAction('/sys/user/getAllUserList', { pageSize: 50, pageNo: 1, userName: value }).then((res) => {
         if (res.success) {
-          this.options = res.result
+          this.options = res.result.list
         }
       })
     },
-  }
+    search(value) {
+      this.options = []
+      if (value != '') {
+        // this.options = this.list.filter(item => {
+        //   var data = item.realName + ' ' + item.roleName
+        //   return data.toLowerCase().indexOf(value.toLowerCase()) > -1
+        // })
+        // this.options = [...this.options]
+        this.getAllUserList(value)
+      } else {
+        this.getAllUserList()
+      }
+    },
+  },
+  mounted() {
+    this.getAllUserList()
+    // getAction('/sys/user/getAllUserList', { pageSize: 50, pageNo: 1, userName: '' }).then((res) => {
+    //   if (res.success) {
+    //     this.options = res.result.list
+    //   }
+    // })
+  },
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>

+ 16 - 37
src/views/modules/advertiser/ProjectMemberList.vue

@@ -182,7 +182,6 @@
 </template>
 
 <script>
-  import ProjectMemberModal from './modules/ProjectMemberModal'
   import {
     httpAction,
     getAction,
@@ -202,7 +201,6 @@
   export default {
     name: 'ProjectMemberList',
     components: {
-      ProjectMemberModal,
       JSelectUserByDep
     },
     mixins: [JeecgListMixin],
@@ -569,16 +567,19 @@
           }
         })
       },
+      getAllUserList(value){
+        getAction('/sys/user/getAllUserList', {pageSize:50,pageNo:1,userName:value}).then(res => {
+          if (res.success) {
+            this.list = res.result.list
+            this.options = res.result.list
+          }
+        })
+      },
       addParams(item) {
         if (this.noTitleKey == 'myProject') {
           this.visibleAdd = true
           this.itemJson = item
-          getAction('/sys/user/getAllUserList', '').then(res => {
-            if (res.success) {
-              this.list = res.result
-              this.options = res.result
-            }
-          })
+          this.getAllUserList()
         } else {
           this.visibleAccount = true
           this.titleAccount = item.projectName
@@ -699,40 +700,18 @@
       },
       handleBlur() {},
       handleFocus() {
-        if (this.appId.length > 0) {
-          this.options = []
-          for (let i = 0; i < this.list.length; i++) {
-            for (let j = 0; j < this.appId.length; j++) {
-              if (this.list[i].userId == this.appId[j]) {
-                this.options.push(this.list[i])
-              }
-            }
-          }
-        } else {
-          this.options = this.list
-        }
       },
       search(value) {
         this.options = []
         if (value != '') {
-          this.options = this.list.filter(item => {
-            var data = item.realName + ' ' + item.roleName
-            return data.toLowerCase().indexOf(value.toLowerCase()) > -1
-          })
-          this.options = [...this.options]
+          // this.options = this.list.filter(item => {
+          //   var data = item.realName + ' ' + item.roleName
+          //   return data.toLowerCase().indexOf(value.toLowerCase()) > -1
+          // })
+          // this.options = [...this.options]
+          this.getAllUserList(value)
         } else {
-          if (this.appId.length > 0) {
-            this.options = []
-            for (let i = 0; i < this.list.length; i++) {
-              for (let j = 0; j < this.appId.length; j++) {
-                if (this.list[i].userId == this.appId[j]) {
-                  this.options.push(this.list[i])
-                }
-              }
-            }
-          } else {
-            this.options = this.list
-          }
+          this.getAllUserList()
         }
       }
     },

+ 378 - 277
src/views/modules/advertiser/UserAllocationList.vue

@@ -6,12 +6,22 @@
         <a-row :gutter="24">
           <a-col :md="8" :sm="8">
             <a-form-item label="账号所属人">
-
-              <a-select placeholder="请选择所属人" showSearch optionFilterProp="children" style="width: 100%"
-                :filterOption="filterOption" v-model="queryParam.userId" v-if="userInfo().username == 'admin'">
-                <a-select-option v-for="appModel in optionsAll" :key="appModel.userId + new Date().getTime()"
-                  :value="appModel.userId">{{ appModel.realName }}
-                </a-select-option>
+              <a-select
+                placeholder="请选择所属人"
+                showSearch
+                optionFilterProp="children"
+                style="width: 100%"
+                :filterOption="filterOption"
+                v-model="queryParam.userId"
+                v-if="userInfo().username == 'admin'"
+                @search="search"
+                @focus="getAllUserList"
+              >
+                <a-select-option
+                  v-for="appModel in optionsAll"
+                  :key="appModel.userId + new Date().getTime()"
+                  :value="appModel.userId"
+                >{{ appModel.realName }}</a-select-option>
               </a-select>
               <a-input placeholder="请输入所属人" v-model="queryParam.userName" v-else></a-input>
             </a-form-item>
@@ -33,12 +43,16 @@
           </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
+                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" ? '头条' :item.mediaId == "2"? '快手':item.mediaId == "3"?'头条内广':'快手内广'
-                   }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{
-                    item.projectName
+                  }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{
+                  item.projectName
                   }}
                 </a-select-option>
               </a-select>
@@ -52,7 +66,12 @@
           <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>
             </span>
           </a-col>
         </a-row>
@@ -62,12 +81,24 @@
     <br />
     <!-- table区域-begin -->
     <div>
-      <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource"
-        :pagination="ipagination" :loading="loading" @change="handleTableChange">
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        @change="handleTableChange"
+      >
         <span slot="accountStatus" slot-scope="text, record">
           <!-- {{ text == 0 ? '启用' : '禁用' }} -->
 
-          <a-switch v-model="record.accountStatus == 0 ? true : false" @change="onChangeSwitch(record)" />
+          <a-switch
+            v-model="record.accountStatus == 0 ? true : false"
+            @change="onChangeSwitch(record)"
+          />
         </span>
         <span slot="mediaId" slot-scope="text">{{ text == 1 ? '头条' : '快手' }}</span>
         <span slot="action" slot-scope="text, record">
@@ -80,7 +111,11 @@
           <a @click="handleEdit(record)">编辑</a>
 
           <a-divider type="vertical" v-show="roleCode == 'admin'" />
-          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" v-show="roleCode == 'admin'">
+          <a-popconfirm
+            title="确定删除吗?"
+            @confirm="() => handleDelete(record.id)"
+            v-show="roleCode == 'admin'"
+          >
             <a>删除</a>
           </a-popconfirm>
         </span>
@@ -91,34 +126,72 @@
     <!-- 表单区域 -->
     <userAllocation-modal ref="modalForm" @ok="modalFormOk"></userAllocation-modal>
     <!--  添加项目成员 -->
-    <a-modal title="账户转让" v-model="visibleAdd" @ok="handleOkAdd" :confirmLoading="confirmLoading" :width="800">
+    <a-modal
+      title="账户转让"
+      v-model="visibleAdd"
+      @ok="handleOkAdd"
+      :confirmLoading="confirmLoading"
+      :width="800"
+    >
       <a-form :form="form">
-        <a-form-item label="转户人" :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
-          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }">
-          <a-select v-decorator="['transferor']" showSearch optionFilterProp="children" :filterOption="filterOption"
-            style="width:100%" disabled>
-            <a-select-option :value="item.userId" v-for="(item, index) of options" :key="index">
-              {{ item.realName }}
-            </a-select-option>
+        <a-form-item
+          label="转户人"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <a-select
+            v-decorator="['transferor']"
+            showSearch
+            optionFilterProp="children"
+            :filterOption="filterOption"
+            style="width:100%"
+            disabled
+          >
+            <a-select-option
+              :value="item.userId"
+              v-for="(item, index) of options"
+              :key="index"
+            >{{ item.realName }}</a-select-option>
           </a-select>
         </a-form-item>
-        <a-form-item label="受让人" :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
-          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }">
-          <a-select v-decorator="['assignee', { rules: [{ required: true, message: '请选择受让人' }] }]" placeholder="请选择受让人"
-            showSearch optionFilterProp="children" :filterOption="filterOption" style="width:100%">
-            <a-select-option :value="item.userId" v-for="(item, index) of options" :key="index">
-              {{ item.realName }}
-            </a-select-option>
+        <a-form-item
+          label="受让人"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <a-select
+            v-decorator="['assignee', { rules: [{ required: true, message: '请选择受让人' }] }]"
+            placeholder="请选择受让人"
+            showSearch
+            optionFilterProp="children"
+            :filterOption="filterOption"
+            style="width:100%"
+          >
+            <a-select-option
+              :value="item.userId"
+              v-for="(item, index) of options"
+              :key="index"
+            >{{ item.realName }}</a-select-option>
           </a-select>
         </a-form-item>
-        <a-form-item label="转户人绩效截止日期" :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
-          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }">
-          <a-date-picker v-decorator="['transferorDate', { rules: [{ required: true, message: '请选择转户人绩效截止日期' }] }]" />
+        <a-form-item
+          label="转户人绩效截止日期"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <a-date-picker
+            v-decorator="['transferorDate', { rules: [{ required: true, message: '请选择转户人绩效截止日期' }] }]"
+          />
           <!-- , { initialValue:moment(new Date(), 'YYYY-MM-DD') } -->
         </a-form-item>
-        <a-form-item label="受让人绩效开始日期" :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
-          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }">
-          <a-date-picker v-decorator="['assigneeDate', { rules: [{ required: true, message: '请选择受让人绩效截止日期' }] }]" />
+        <a-form-item
+          label="受让人绩效开始日期"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <a-date-picker
+            v-decorator="['assigneeDate', { rules: [{ required: true, message: '请选择受让人绩效截止日期' }] }]"
+          />
         </a-form-item>
         <!-- 
         <a-form-item
@@ -132,30 +205,53 @@
         -->
       </a-form>
     </a-modal>
-    <a-modal title="项目转移" v-model="visibleAccount" @ok="handleOkAccount" :confirmLoading="accountLoading" :width="800">
+    <a-modal
+      title="项目转移"
+      v-model="visibleAccount"
+      @ok="handleOkAccount"
+      :confirmLoading="accountLoading"
+      :width="800"
+    >
       <a-form :form="formAccount">
-        <a-form-item label="原项目" :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
-          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }">
-          <a-select v-decorator="[
+        <a-form-item
+          label="原项目"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <a-select
+            v-decorator="[
               'projectId', // 给表单赋值或拉取表单时,该input对应的key
               { rules: [{ required: true, message: '请选择项目!' }] }
-            ]" showSearch optionFilterProp="children" :filterOption="filterOption" disabled>
+            ]"
+            showSearch
+            optionFilterProp="children"
+            :filterOption="filterOption"
+            disabled
+          >
             <a-select-option :value="item.projectId" v-for="item of dataElse" :key="item.id">
               {{ item.projectName }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{
-               item.mediaId == "1" ? '头条' :item.mediaId == "2"? '快手':item.mediaId == "3"?'头条内广':'快手内广'
+              item.mediaId == "1" ? '头条' :item.mediaId == "2"? '快手':item.mediaId == "3"?'头条内广':'快手内广'
               }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ item.advertiserName }}
             </a-select-option>
           </a-select>
         </a-form-item>
-        <a-form-item label="转移项目" :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
-          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }">
-          <a-select v-decorator="[
+        <a-form-item
+          label="转移项目"
+          :labelCol="{ xs: { span: 24 }, sm: { span: 5 } }"
+          :wrapperCol="{ xs: { span: 24 }, sm: { span: 16 } }"
+        >
+          <a-select
+            v-decorator="[
               'projectNewId', // 给表单赋值或拉取表单时,该input对应的key
               { rules: [{ required: true, message: '请选择项目!' }] }
-            ]" showSearch optionFilterProp="children" :filterOption="filterOption">
+            ]"
+            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" ? '头条' :item.mediaId == "2"? '快手':item.mediaId == "3"?'头条内广':'快手内广'
+              item.mediaId == "1" ? '头条' :item.mediaId == "2"? '快手':item.mediaId == "3"?'头条内广':'快手内广'
               }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ item.advertiserName }}
             </a-select-option>
           </a-select>
@@ -176,259 +272,264 @@
 </template>
 
 <script>
-  import UserAllocationModal from './modules/UserAllocationModal'
-  import {
-    JeecgListMixin
-  } from '@/mixins/JeecgListMixin'
-  import {
-    mapGetters
-  } from 'vuex'
-  import {
-    httpAction,
-    getAction,
-    deleteAction
-  } from '@/api/manage'
+import UserAllocationModal from './modules/UserAllocationModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { mapGetters } from 'vuex'
+import { httpAction, getAction, deleteAction } from '@/api/manage'
 
-  import treeSelect from './modules/Treeselect'
-  import moment from 'moment'
-  import {
-    postAction
-  } from '../../../api/manage'
-  import qs from 'qs'
-  export default {
-    name: 'UserAllocationList',
-    mixins: [JeecgListMixin],
-    components: {
-      UserAllocationModal,
-      treeSelect
-    },
-    data() {
-      return {
-        description: '账号绑定管理页面',
-        visibleAdd: false,
-        visibleAccount: false,
-        options: [],
-        optionsAll: [],
-        dataElse: [],
-        // 表头
-        columns: [{
-            title: '账号所属人',
-            align: 'center',
-            dataIndex: 'userName'
-          },
-          {
-            title: '授权',
-            align: 'center',
-            dataIndex: 'accountId'
-          },
-          {
-            title: '广告主名称',
-            align: 'center',
-            dataIndex: 'advertiserName'
-          },
-          {
-            title: '项目名称',
-            align: 'center',
-            dataIndex: 'projectName'
-          },
-          //    {
-          //     title: '输入账号  --登陆',
-          //     align:"center",
-          //     dataIndex: 'accountName'
-          //    },
-          {
-            title: '授权名称',
-            align: 'center',
-            dataIndex: 'authName'
-          },
-          {
-            title: '平台类型',
-            align: 'center',
-            dataIndex: 'mediaId',
-            scopedSlots: {
-              customRender: 'mediaId'
-            }
-          },
-          {
-            title: '预警金额',
-            align: 'center',
-            dataIndex: 'warningAmount'
-          },
-          {
-            title: '预警比例',
-            align: 'center',
-            dataIndex: 'warningProportion'
+import treeSelect from './modules/Treeselect'
+import moment from 'moment'
+import { postAction } from '../../../api/manage'
+import qs from 'qs'
+export default {
+  name: 'UserAllocationList',
+  mixins: [JeecgListMixin],
+  components: {
+    UserAllocationModal,
+    treeSelect,
+  },
+  data() {
+    return {
+      description: '账号绑定管理页面',
+      visibleAdd: false,
+      visibleAccount: false,
+      options: [],
+      optionsAll: [],
+      dataElse: [],
+      // 表头
+      columns: [
+        {
+          title: '账号所属人',
+          align: 'center',
+          dataIndex: 'userName',
+        },
+        {
+          title: '授权',
+          align: 'center',
+          dataIndex: 'accountId',
+        },
+        {
+          title: '广告主名称',
+          align: 'center',
+          dataIndex: 'advertiserName',
+        },
+        {
+          title: '项目名称',
+          align: 'center',
+          dataIndex: 'projectName',
+        },
+        //    {
+        //     title: '输入账号  --登陆',
+        //     align:"center",
+        //     dataIndex: 'accountName'
+        //    },
+        {
+          title: '授权名称',
+          align: 'center',
+          dataIndex: 'authName',
+        },
+        {
+          title: '平台类型',
+          align: 'center',
+          dataIndex: 'mediaId',
+          scopedSlots: {
+            customRender: 'mediaId',
           },
-          // accountStatus:0启用;1禁用
-          {
-            title: '账户状态',
-            dataIndex: 'accountStatus',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'accountStatus'
-            }
+        },
+        {
+          title: '预警金额',
+          align: 'center',
+          dataIndex: 'warningAmount',
+        },
+        {
+          title: '预警比例',
+          align: 'center',
+          dataIndex: 'warningProportion',
+        },
+        // accountStatus:0启用;1禁用
+        {
+          title: '账户状态',
+          dataIndex: 'accountStatus',
+          align: 'center',
+          scopedSlots: {
+            customRender: 'accountStatus',
           },
+        },
 
-          {
-            title: '系统名称',
-            dataIndex: 'systemType',
-            align: 'center'
+        {
+          title: '系统名称',
+          dataIndex: 'systemType',
+          align: 'center',
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: {
+            customRender: 'action',
           },
-          {
-            title: '操作',
-            dataIndex: 'action',
-            align: 'center',
-            scopedSlots: {
-              customRender: 'action'
-            }
-          }
-        ],
-        url: {
-          list: '/ctop/userAllocation/list',
-          delete: '/ctop/userAllocation/delete',
-          deleteBatch: '/ctop/userAllocation/deleteBatch',
-          exportXlsUrl: 'ctop/userAllocation/exportXls',
-          importExcelUrl: 'ctop/userAllocation/importExcel'
         },
-        confirmLoading: false,
-        accountLoading: false,
-        projectId: '',
-        accountId: '',
-        mediaId: '',
-        form: this.$form.createForm(this),
-        formAccount: this.$form.createForm(this),
-        roleCode: localStorage.getItem('roleCode'),
-        dataElse: []
-      }
+      ],
+      url: {
+        list: '/ctop/userAllocation/list',
+        delete: '/ctop/userAllocation/delete',
+        deleteBatch: '/ctop/userAllocation/deleteBatch',
+        exportXlsUrl: 'ctop/userAllocation/exportXls',
+        importExcelUrl: 'ctop/userAllocation/importExcel',
+      },
+      confirmLoading: false,
+      accountLoading: false,
+      projectId: '',
+      accountId: '',
+      mediaId: '',
+      form: this.$form.createForm(this),
+      formAccount: this.$form.createForm(this),
+      roleCode: localStorage.getItem('roleCode'),
+      dataElse: [],
+    }
+  },
+  computed: {
+    importExcelUrl: function () {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     },
-    computed: {
-      importExcelUrl: function () {
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+  },
+  mounted() {
+    this.getParticipateList()
+  },
+  methods: {
+    moment,
+    search(value) {
+      this.optionsAll = []
+      if (value != '') {
+        // this.options = this.list.filter(item => {
+        //   var data = item.realName + ' ' + item.roleName
+        //   return data.toLowerCase().indexOf(value.toLowerCase()) > -1
+        // })
+        // this.options = [...this.options]
+        this.getAllUserList(value)
+      } else {
+        this.getAllUserList()
       }
     },
-    mounted() {
-      this.getParticipateList()
-      getAction('/sys/user/getAllUserList', '').then(res => {
+    getAllUserList(value) {
+      getAction('/sys/user/getAllUserList', { pageSize: 50, pageNo: 1, userName: value }).then((res) => {
         if (res.success) {
-          this.optionsAll = res.result
+          this.optionsAll = res.result.list
         }
       })
+    },
+    onChangeSwitch(item) {
+      var params = {}
+      params.id = item.id
+      params.accountStatus = item.accountStatus == 0 ? 1 : 0
 
+      httpAction('/ctop/userAllocation/edit', params, 'put').then((res) => {
+        if (res.success) {
+          this.loadData()
+        }
+      })
     },
-    methods: {
-      moment,
-      onChangeSwitch(item) {
-        var params = {}
-        params.id = item.id
-        params.accountStatus = item.accountStatus == 0 ? 1 : 0
+    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
+    },
+    ...mapGetters(['nickname', 'avatar', 'userInfo']),
+    getALLperson() {
+      getAction('/sys/user/getAllUserListByCompany', {
+        userId: this.userInfo().id,
+      }).then((res) => {
+        if (res.success) {
+          this.options = res.result
+        }
+      })
+    },
+    project(item) {
+      this.visibleAdd = true
+      this.accountId = item.accountId
+      this.projectId = item.projectId
 
-        httpAction('/ctop/userAllocation/edit', params, 'put').then(res => {
-          if (res.success) {
-            this.loadData()
-          }
-        })
-      },
-      getParticipateList() {
-        getAction('/ctop/projectMember/participateList', {
-          userId: this.userInfo().id
-        }).then(res => {
-          if (res.code == 0) {
-            this.dataElse = res.result
-          }
+      setTimeout(() => {
+        this.form.setFieldsValue({
+          transferor: item.userId,
         })
-      },
-      filterOption(input, option) {
-        return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
-      },
-      ...mapGetters(['nickname', 'avatar', 'userInfo']),
-      getALLperson() {
-        getAction('/sys/user/getAllUserListByCompany', {
-          userId: this.userInfo().id
-        }).then(res => {
-          if (res.success) {
-            this.options = res.result
-          }
+      }, 0)
+      this.getALLperson()
+    },
+    account(item) {
+      this.visibleAccount = true
+      this.accountId = item.accountId
+      this.projectId = item.projectId
+
+      setTimeout(() => {
+        this.formAccount.setFieldsValue({
+          projectId: item.projectId,
         })
-      },
-      project(item) {
-        this.visibleAdd = true
-        this.accountId = item.accountId
-        this.projectId = item.projectId
+      }, 0)
+    },
+    handleOkAccount(e) {
+      this.accountLoading = true
 
-        setTimeout(() => {
-          this.form.setFieldsValue({
-            transferor: item.userId
+      this.formAccount.validateFieldsAndScroll((err, values) => {
+        if (err) {
+          // 这里做逻辑处理
+        } else {
+          var params = qs.stringify({
+            projectId: values.projectNewId,
+            accountId: this.accountId,
           })
-        }, 0)
-        this.getALLperson()
-      },
-      account(item) {
-        this.visibleAccount = true
-        this.accountId = item.accountId
-        this.projectId = item.projectId
-
-        setTimeout(() => {
-          this.formAccount.setFieldsValue({
-            projectId: item.projectId
+          postAction('/ctop/projectTransferRecord/add', params).then((res) => {
+            if (res.success) {
+              this.accountLoading = false
+              this.visibleAccount = false
+              this.formAccount.resetFields()
+              this.loadData()
+            } else {
+              this.$message.error(res.message)
+            }
           })
-        }, 0)
-      },
-      handleOkAccount(e) {
-        this.accountLoading = true
+        }
+      })
+    },
+    handleOkAdd(e) {
+      this.confirmLoading = true
 
-        this.formAccount.validateFieldsAndScroll((err, values) => {
-          if (err) {
-            // 这里做逻辑处理
-          } else {
-            var params = qs.stringify({
-              projectId: values.projectNewId,
-              accountId: this.accountId
-            })
-            postAction('/ctop/projectTransferRecord/add', params).then(res => {
-              if (res.success) {
-                this.accountLoading = false
-                this.visibleAccount = false
-                this.formAccount.resetFields()
-                this.loadData()
-              } else {
-                this.$message.error(res.message)
-              }
-            })
+      this.form.validateFieldsAndScroll((err, values) => {
+        if (err) {
+          // 这里做逻辑处理
+        } else {
+          var params = {
+            ...values,
           }
-        })
-      },
-      handleOkAdd(e) {
-        this.confirmLoading = true
-
-        this.form.validateFieldsAndScroll((err, values) => {
-          if (err) {
-            // 这里做逻辑处理
-          } else {
-            var params = {
-              ...values
+          params.transferorDate = moment(values.transferorDate).format('YYYY-MM-DD')
+          params.assigneeDate = moment(values.assigneeDate)
+            // .add(1, 'day')
+            .format('YYYY-MM-DD')
+          params.projectId = this.projectId
+          params.accountId = this.accountId
+          params.status = 0
+          postAction('/ctop/transferAccount/add', params).then((res) => {
+            if (res.success) {
+              this.confirmLoading = false
+              this.visibleAdd = false
+              this.form.resetFields()
+            } else {
+              this.$message.error(res.message)
             }
-            params.transferorDate = moment(values.transferorDate).format('YYYY-MM-DD')
-            params.assigneeDate = moment(values.assigneeDate)
-              // .add(1, 'day')
-              .format('YYYY-MM-DD')
-            params.projectId = this.projectId
-            params.accountId = this.accountId
-            params.status = 0
-            postAction('/ctop/transferAccount/add', params).then(res => {
-              if (res.success) {
-                this.confirmLoading = false
-                this.visibleAdd = false
-                this.form.resetFields()
-              } else {
-                this.$message.error(res.message)
-              }
-            })
-          }
-        })
-      }
-    }
-  }
+          })
+        }
+      })
+    },
+  },
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>

+ 0 - 31
src/views/modules/advertiser/modules/ProjectMemberModal.vue

@@ -83,38 +83,7 @@
       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()

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

@@ -260,7 +260,7 @@ export default {
         )
         // this.resId = record.responsibleId
         // this.shejiId = record.designResponsibleId
-        getAction('/sys/user/getAllUserList', '').then(res => {
+        getAction('/sys/user/getAllUserListV1', '').then(res => {
           console.log(res)
           if (res.success) {
             this.options = res.result

+ 2 - 2
src/views/modules/kuaishouapp/account/copyGroup.vue

@@ -220,7 +220,7 @@
                   <a-form-item label="计费方式" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
                     :wrapperCol="{ lg: { span: 18 }, sm: { span: 17 } }">
                     <a-radio-group :defaultValue="1">
-                      <a-radio :value="1">点击计费</a-radio>
+                      <a-radio :value="1">{{item.bidType == 1?"点击计费":"展示计费(oCPM)"}}</a-radio>
                     </a-radio-group>
                   </a-form-item>
                   <a-form-item label="出价" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
@@ -674,7 +674,7 @@
                 bid: item.bid != '' ? item.bid * 1000 : '',
                 deepConversionBid: item.deepConversionBid != '' ? item.deepConversionBid * 1000 : '',
                 ocpxActionType: item.bidType,
-                bidType: item.bidType == 1 ? 2 : 6
+                bidType: item.bidType == 1 ? 2 : 10
               }
             })
             var json = {

+ 2 - 2
src/views/modules/kuaishouapp/account/editGroup.vue

@@ -239,7 +239,7 @@
                     <a-form-item label="计费方式" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
                       :wrapperCol="{ lg: { span: 18 }, sm: { span: 17 } }">
                       <a-radio-group :defaultValue="1">
-                        <a-radio :value="1">点击计费</a-radio>
+                        <a-radio :value="1">{{item.bidType == 1?"点击计费":"展示计费(oCPM)"}}</a-radio>
                       </a-radio-group>
                     </a-form-item>
                     <a-form-item label="出价" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
@@ -721,7 +721,7 @@
                 bid: item.bid != '' ? item.bid * 1000 : '',
                 deepConversionBid: item.deepConversionBid != '' ? item.deepConversionBid * 1000 : '',
                 ocpxActionType: item.bidType,
-                bidType: item.bidType == 1 ? 2 : 6
+                bidType: item.bidType == 1 ? 2 : 10
               }
             })[0]
             var json = {

+ 3 - 3
src/views/modules/kuaishouapp/account/editGroupNew.vue

@@ -241,7 +241,7 @@
                     <a-form-item label="计费方式" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
                       :wrapperCol="{ lg: { span: 18 }, sm: { span: 17 } }">
                       <a-radio-group :defaultValue="1">
-                        <a-radio :value="1">点击计费</a-radio>
+                        <a-radio :value="1">{{item.bidType == 1?"点击计费":"展示计费(oCPM)"}}</a-radio>
                       </a-radio-group>
                     </a-form-item>
                     <a-form-item label="出价" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
@@ -786,7 +786,7 @@
                   bid: item.bid != '' ? item.bid * 1000 : '',
                   deepConversionBid: item.deepConversionBid != '' ? item.deepConversionBid * 1000 : '',
                   ocpxActionType: item.bidType,
-                  bidType: item.bidType == 1 ? 2 : 6
+                  bidType: item.bidType == 1 ? 2 : 10
                 }
               })[0]
               var param = {
@@ -830,7 +830,7 @@
                   bid: item.bid != '' ? item.bid * 1000 : '',
                   deepConversionBid: item.deepConversionBid != '' ? item.deepConversionBid * 1000 : '',
                   ocpxActionType: item.bidType,
-                  bidType: item.bidType == 1 ? 2 : 6
+                  bidType: item.bidType == 1 ? 2 : 10
                 }
               })[0]
               console.log(groupArrTwo)

+ 2 - 2
src/views/modules/kuaishouapp/account/stepForm/Step2.vue

@@ -273,7 +273,7 @@
                     <a-form-item label="计费方式" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
                       :wrapperCol="{ lg: { span: 18 }, sm: { span: 17 } }">
                       <a-radio-group defaultValue="1">
-                        <a-radio value="1">点击计费</a-radio>
+                        <a-radio value="1">{{item.bidType == 1?"点击计费":"展示计费(oCPM)"}}</a-radio>
                       </a-radio-group>
                     </a-form-item>
                     <a-form-item label="出价" :labelCol="{ lg: { span: 6 }, sm: { span: 7 } }"
@@ -832,7 +832,7 @@
                 bid: item.bid != '' ? item.bid * 1000 : '',
                 deepConversionBid: item.deepConversionBid != '' ? item.deepConversionBid * 1000 : '',
                 ocpxActionType: item.bidType,
-                bidType: item.bidType == 1 ? 2 : 6
+                bidType: item.bidType == 1 ? 2 : 10
               }
             })
             var json = {

+ 330 - 0
src/views/modules/material/labelMaterial.vue

@@ -0,0 +1,330 @@
+<template>
+  <a-card :bordered="false">
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+          <a-col :md="6" :sm="6">
+            <a-form-item label="标签名称">
+              <a-input placeholder="请输入标签名称" v-model="queryParam.tagName"></a-input>
+            </a-form-item>
+          </a-col>
+          <!--  -->
+          <a-col :md="6" :sm="6">
+            <a-form-item label="标签分类">
+              <a-select v-model="queryParam.tagCategoryId" placeholder="请选择">
+                <a-select-option value="1">形式</a-select-option>
+                <a-select-option value="2">基调</a-select-option>
+                <a-select-option value="3">内容</a-select-option>
+                <a-select-option value="4">场景</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="6">
+            <a-form-item label="标签等级">
+              <a-select v-model="queryParam.level" placeholder="请选择">
+                <a-select-option value="1">一级标签</a-select-option>
+                <a-select-option value="2">二级标签</a-select-option>
+                <a-select-option value="3">三级标签</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :md="6" :sm="6">
+            <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>
+            </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="batchDel" v-if="selectedRowKeys.length > 0" ghost type="primary" icon="delete">批量删除
+      </a-button>-->
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        @change="handleTableChange"
+      >
+        <span slot="tagName" slot-scope="text,record">
+          <span v-if="record.status == 1">{{text}}</span>
+          <span v-else-if="record.status == 0" style="color:red">{{text}}(未审核)</span>
+          <span v-else>{{text}}(已驳回)</span>
+        </span>
+        <span slot="action" slot-scope="text, record">
+          <a href="javascript:;" @click="handleAddSub(record)" :disabled="record.level==3">添加下级</a>
+          <a-divider type="vertical" />
+          <a @click="handleDeleteModel(record)" :disabled="!IsURL(record.model)">查看示例</a>
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link" @click="e => e.preventDefault()">更多</a>
+            <a-menu slot="overlay">
+              <!-- <a-menu-item key="4" :disabled="!IsURL(record.model)">
+                <a style="margin-right:20px" @click="handleDeleteModel(record)">查看示例</a>
+              </a-menu-item>-->
+              <a-menu-item key="0">
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDeleteElse(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item key="1" :disabled="record.status==1">
+                <a
+                  href="javascript:;"
+                  @click="handleDeleteStatus(record.id,'1')"
+                  :disabled="record.status==1"
+                >通过</a>
+              </a-menu-item>
+              <a-menu-item key="3" :disabled="record.status==1">
+                <a
+                  style="margin-right:20px"
+                  @click="handleDeleteStatus(record.id,'2')"
+                  :disabled="record.status==1"
+                >驳回</a>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+        <!-- 字符串超长截取省略号显示-->
+        <span slot="model" slot-scope="text">
+          <!-- <j-ellipsis :value="text" /> -->
+          <video :src="text" v-if="text" style="width: 100%" controls="controls">您的浏览器不支持 video 标签。</video>
+          <span v-else>-</span>
+        </span>
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <permission-modal ref="modalForm" @ok="modalFormOk"></permission-modal>
+  </a-card>
+</template>
+
+<script>
+import PermissionModal from './modules/DepartModal'
+import { getPermissionList } from '@/api/api'
+import { httpAction, deleteAction, getAction } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+//   import PermissionDataRuleList from './PermissionDataRuleList'
+import JEllipsis from '@/components/jeecg/JEllipsis'
+const columns = [
+  {
+    title: '标签分类',
+    dataIndex: 'tagCategoryId_dictText',
+    key: 'tagCategoryId_dictText',
+    align: 'center',
+  },
+  {
+    title: '标签名称',
+    dataIndex: 'tagName',
+    key: 'tagName',
+    align: 'center',
+    scopedSlots: {
+      customRender: 'tagName',
+    },
+  },
+  /*{
+         title: '菜单类型',
+         dataIndex: 'menuType',
+         key: 'menuType',
+         customRender: function(text) {
+           if (text == 0) {
+             return '菜单'
+           } else if (text == 1) {
+             return '菜单'
+           } else if (text == 2) {
+             return '按钮/权限'
+           } else {
+             return text
+           }
+         }
+       },*/
+  {
+    title: '标签层级',
+    dataIndex: 'level',
+    key: 'level',
+    customRender: function (text) {
+      if (text == 1) {
+        return '一级标签'
+      } else if (text == 2) {
+        return '二级标签'
+      } else if (text == 3) {
+        return '三级标签'
+      }
+    },
+    align: 'center',
+  },
+  {
+    title: '所属一级标签',
+    dataIndex: 'firstTagId_dictText',
+    key: 'firstTagId_dictText',
+    customRender: function (text) {
+      if (text == null) {
+        return '-'
+      } else {
+        return text
+      }
+    },
+    align: 'center',
+  },
+  {
+    title: '所属二级标签',
+    dataIndex: 'secendTagId_dictText',
+    key: 'secendTagId_dictText',
+    customRender: function (text) {
+      if (text == null) {
+        return '-'
+      } else {
+        return text
+      }
+    },
+    align: 'center',
+  },
+  {
+    title: '描述',
+    dataIndex: 'description',
+    key: 'description',
+    customRender: function (text) {
+      if (text == null) {
+        return '-'
+      } else {
+        return text
+      }
+    },
+    align: 'center',
+    width: 400,
+  },
+  // {
+  //   title: '标签示例',
+  //   dataIndex: 'model',
+  //   key: 'model',
+  //   scopedSlots: {
+  //     customRender: 'model'
+  //   },
+  //   //   customRender: function (text) {
+  //   //     if (text == null) {
+  //   //       return '-'
+  //   //     } else {
+  //   //       return text
+  //   //     }
+  //   //   },
+  //   align: 'center',
+  //   width: 200
+  // },
+  {
+    title: '操作',
+    dataIndex: 'action',
+    scopedSlots: {
+      customRender: 'action',
+    },
+    align: 'center',
+    width: 250,
+  },
+]
+export default {
+  name: 'label-material',
+  mixins: [JeecgListMixin],
+  components: {
+    PermissionModal,
+    JEllipsis
+  },
+  data() {
+    return {
+      description: '标签管理',
+      // 表头
+      columns: columns,
+      loading: false,
+      // 展开的行,受控属性
+      expandedRowKeys: [],
+      url: {
+        list: '/ctop/tagInfo/list',
+        delete: '/ctop/tagInfo/edit',
+        deleteBatch: '/sys/permission/deleteBatch',
+      },
+    }
+  },
+  methods: {
+    IsURL(res) {
+      //   var strRegex = /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/|www\.)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/
+      var strRegex = /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+(.+[A-Za-z0-9-~\/])+$/
+      var re = new RegExp(strRegex)
+      // console.log(re.test(res))
+      if (re.test(res)) {
+        return true
+      } else {
+        return false
+      }
+    },
+    handleDeleteModel(record) {
+      if (record.model) {
+        if (this.IsURL(record.model)) {
+          window.open(record.model, '_blank')
+        }
+      }
+    },
+    handleDeleteStatus(id, status) {
+      httpAction(
+        '/ctop/tagInfo/edit',
+        {
+          id: id,
+          status: status,
+        },
+        'post'
+      ).then((res) => {
+        if (res.success) {
+          //删除成功后,去除已选中中的数据
+          this.loadData(1)
+        } else {
+          this.$message.warning(res.message)
+        }
+      })
+    },
+    handleDeleteElse(id) {
+      httpAction(
+        '/ctop/tagInfo/edit',
+        {
+          id: id,
+          delFlag: 1,
+        },
+        'post'
+      ).then((res) => {
+        if (res.success) {
+          //删除成功后,去除已选中中的数据
+          this.loadData(1)
+        } else {
+          this.$message.warning('删除失败!')
+        }
+      })
+    },
+    handleAddSub(record) {
+      this.$refs.modalForm.title = '添加子标签'
+      this.$refs.modalForm.edit({
+        status: '1',
+        parentId: record.id,
+        tagCategoryId: record.tagCategoryId,
+      })
+    },
+    handleExpandedRowsChange(expandedRows) {
+      this.expandedRowKeys = expandedRows
+    },
+  },
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>

+ 660 - 0
src/views/modules/material/labelNewMaterial.vue

@@ -0,0 +1,660 @@
+<template xmlns:background-color="http://www.w3.org/1999/xhtml">
+  <a-row :gutter="10">
+    <a-col :md="12" :sm="24">
+      <a-card :bordered="false">
+
+        <!-- 按钮操作区域 -->
+        <a-row style="margin-left: 14px">
+          <a-button @click="handleAdd(1)" type="primary">添加标签</a-button>
+          <a-button @click="handleAdd(2)" type="primary" style="margin-left: 14px">添加下级</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>
+          </a-upload> -->
+          <!-- <a-button title="删除多条数据" @click="batchDel" type="default">批量删除</a-button> -->
+          <!--<a-button @click="refresh" type="default" icon="reload" :loading="loading">刷新</a-button>-->
+        </a-row>
+        <div style="background: #fff;padding-left:16px;height: 100%; margin-top: 5px">
+          <a-alert type="info" :showIcon="true">
+            <div slot="message">
+              当前选择:<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
+              <a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消选择</a>
+            </div>
+          </a-alert>
+          <a-input-search @search="onSearch" style="width:100%;margin-top: 10px" placeholder="请输入标签名称" />
+          <!-- {{departValue}}
+          <el-cascader placeholder="试试搜索:指南" :options="departTree"
+            :props="{ multiple: true,value:'id',label:'tagName',emitPath:false}" filterable v-model="departValue">
+          </el-cascader> -->
+          <!-- 树-->
+          <a-col :md="10" :sm="24">
+            <template>
+              <a-dropdown :trigger="[this.dropTrigger]" @visibleChange="dropStatus">
+                <span>
+                  <a-tree  @select="onSelect" @check="onCheck" @rightClick="rightHandle"
+                    :selectedKeys="selectedKeys" :checkedKeys="checkedKeys" :treeData="departTree"
+                    :checkStrictly="checkStrictly" :expandedKeys="iExpandedKeys" :autoExpandParent="autoExpandParent"
+                    @expand="onExpand" />
+                </span>
+                <!--新增右键点击事件,和增加添加和删除功能-->
+                <a-menu slot="overlay">
+                  <a-menu-item @click="handleAdd(3)" key="1">添加</a-menu-item>
+                  <a-menu-item @click="handleDelete" key="2">删除</a-menu-item>
+                  <a-menu-item @click="closeDrop" key="3">取消</a-menu-item>
+                </a-menu>
+              </a-dropdown>
+            </template>
+          </a-col>
+        </div>
+      </a-card>
+      <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
+      <div class="drawer-bootom-button">
+        <a-dropdown :trigger="['click']" placement="topCenter">
+          <a-menu slot="overlay">
+            <a-menu-item key="1" @click="switchCheckStrictly(1)">父子关联</a-menu-item>
+            <a-menu-item key="2" @click="switchCheckStrictly(2)">取消关联</a-menu-item>
+            <a-menu-item key="3" @click="checkALL">全部勾选</a-menu-item>
+            <a-menu-item key="4" @click="cancelCheckALL">取消全选</a-menu-item>
+            <a-menu-item key="5" @click="expandAll">展开所有</a-menu-item>
+            <a-menu-item key="6" @click="closeAll">合并所有</a-menu-item>
+          </a-menu>
+          <a-button>
+            树操作
+            <a-icon type="up" />
+          </a-button>
+        </a-dropdown>
+      </div>
+      <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
+    </a-col>
+    <a-col :md="12" :sm="24">
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane tab="基本信息" key="1">
+          <a-card :bordered="false" v-if="selectedKeys.length>0">
+            <a-form :form="form">
+              <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签名称">
+                <a-input placeholder="请输入标签名称" v-decorator="['tagName', validatorRules.departName ]" />
+              </a-form-item>
+              <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="上级标签">
+                <a-tree-select style="width:100%" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+                  :treeData="treeData" :disabled="disable" v-model="model.parentId" placeholder="无">
+                </a-tree-select>
+              </a-form-item>
+              <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签描述">
+                <a-input placeholder="请输入标签描述" v-decorator="['description' ]" />
+              </a-form-item>
+              <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签编码">
+                <a-input disabled placeholder="请输入标签编码" v-decorator="['tagCode', validatorRules.orgCode ]" />
+              </a-form-item>
+            </a-form>
+            <div class="anty-form-btn">
+              <a-button @click="emptyCurrForm" type="default" htmlType="button" icon="sync">重置</a-button>
+              <a-button @click="submitCurrForm" type="primary" htmlType="button" icon="form">保存</a-button>
+            </div>
+          </a-card>
+          <a-card v-else>
+            <a-empty>
+              <span slot="description"> 请先选择一个标签! </span>
+            </a-empty>
+          </a-card>
+        </a-tab-pane>
+      </a-tabs>
+
+    </a-col>
+    <depart-modal ref="departModal" @ok="loadTree"></depart-modal>
+  </a-row>
+</template>
+<script>
+  import DepartModal from './modules/DepartModal'
+  import pick from 'lodash.pick'
+  import {
+    queryDepartTreeList,
+    searchByKeywords,
+    deleteByDepartId
+  } from '@/api/api'
+  import {
+    httpAction,
+    deleteAction,
+    getAction
+  } from '@/api/manage'
+  import {
+    JeecgListMixin
+  } from '@/mixins/JeecgListMixin'
+  // 表头
+  const columns = [{
+      title: '机构名称',
+      dataIndex: 'departName'
+    },
+    {
+      title: '机构类型',
+      align: 'center',
+      dataIndex: 'orgType'
+    },
+    {
+      title: '机构编码',
+      dataIndex: 'orgCode',
+    },
+    {
+      title: '手机号',
+      dataIndex: 'mobile'
+    },
+    {
+      title: '传真',
+      dataIndex: 'fax'
+    },
+    {
+      title: '地址',
+      dataIndex: 'address'
+    },
+    {
+      title: '排序',
+      align: 'center',
+      dataIndex: 'departOrder'
+    },
+    {
+      title: '操作',
+      align: 'center',
+      dataIndex: 'action',
+      scopedSlots: {
+        customRender: 'action'
+      }
+    }
+  ]
+  export default {
+    name: 'DepartList',
+    mixins: [JeecgListMixin],
+    components: {
+      DepartModal
+    },
+    data() {
+      return {
+        departValue: [],
+        iExpandedKeys: [],
+        loading: false,
+        autoExpandParent: true,
+        currFlowId: '',
+        currFlowName: '',
+        disable: true,
+        treeData: [],
+        visible: false,
+        departTree: [],
+        rightClickSelectedKey: '',
+        rightClickSelectedOrgCode: '',
+        hiding: true,
+        model: {},
+        dropTrigger: '',
+        depart: {},
+        columns: columns,
+        disableSubmit: false,
+        checkedKeys: [],
+        selectedKeys: [],
+        autoIncr: 1,
+        currSelected: {},
+
+        allTreeKeys: [],
+        checkStrictly: true,
+
+        form: this.$form.createForm(this),
+        labelCol: {
+          xs: {
+            span: 24
+          },
+          sm: {
+            span: 5
+          }
+        },
+        wrapperCol: {
+          xs: {
+            span: 24
+          },
+          sm: {
+            span: 16
+          }
+        },
+        graphDatasource: {
+          nodes: [],
+          edges: []
+        },
+        validatorRules: {
+          departName: {
+            rules: [{
+              required: true,
+              message: '请输入机构/部门名称!'
+            }]
+          },
+          orgCode: {
+            rules: [{
+              required: true,
+              message: '请输入机构编码!'
+            }]
+          },
+          orgCategory: {
+            rules: [{
+              required: true,
+              message: '请输入机构类型!'
+            }]
+          },
+          mobile: {
+            rules: [{
+              validator: this.validateMobile
+            }]
+          }
+        },
+        url: {
+          delete: '/ctop/tagInfo/edit',
+          edit: '/ctop/tagInfo/edit',
+          deleteBatch: '/sys/sysDepart/deleteBatch',
+          exportXlsUrl: "sys/sysDepart/exportXls",
+          importExcelUrl: "sys/sysDepart/importExcel",
+        },
+        orgCategoryDisabled: false,
+      }
+    },
+    computed: {
+      importExcelUrl: function () {
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      }
+    },
+    methods: {
+      loadData() {
+        this.refresh();
+      },
+      loadTree() {
+        var that = this
+        that.treeData = []
+        that.departTree = []
+        getAction('/ctop/tagInfo/queryTreeList').then((res) => {
+          if (res.success) {
+            //部门全选后,再添加部门,选中数量增多
+            this.allTreeKeys = [];
+            for (let i = 0; i < res.result.length; i++) {
+              let temp = res.result[i]
+              that.treeData.push(temp)
+              that.departTree.push(temp)
+              that.setThisExpandedKeys(temp)
+              that.getAllKeys(temp);
+              // console.log(temp.id)
+
+            }
+            this.loading = false
+          }
+        })
+      },
+      setThisExpandedKeys(node) {
+        if (node.children && node.children.length > 0) {
+          this.iExpandedKeys.push(node.key)
+          for (let a = 0; a < node.children.length; a++) {
+            this.setThisExpandedKeys(node.children[a])
+          }
+        }
+      },
+      refresh() {
+        this.loading = true
+        this.loadTree()
+      },
+      // 右键操作方法
+      rightHandle(node) {
+        this.dropTrigger = 'contextmenu'
+        console.log(node.node.eventKey)
+        this.rightClickSelectedKey = node.node.eventKey
+        this.rightClickSelectedOrgCode = node.node.dataRef.orgCode
+      },
+      onExpand(expandedKeys) {
+        console.log('onExpand', expandedKeys)
+        // if not set autoExpandParent to false, if children expanded, parent can not collapse.
+        // or, you can remove all expanded children keys.
+        this.iExpandedKeys = expandedKeys
+        this.autoExpandParent = false
+      },
+      backFlowList() {
+        this.$router.back(-1)
+      },
+      // 右键点击下拉框改变事件
+      dropStatus(visible) {
+        if (visible == false) {
+          this.dropTrigger = ''
+        }
+      },
+      // 右键店家下拉关闭下拉框
+      closeDrop() {
+        this.dropTrigger = ''
+      },
+      addRootNode() {
+        this.$refs.nodeModal.add(this.currFlowId, '')
+      },
+      batchDel: function () {
+        console.log(this.checkedKeys)
+        if (this.checkedKeys.length <= 0) {
+          this.$message.warning('请选择一条记录!')
+        } else {
+          var ids = ''
+          for (var a = 0; a < this.checkedKeys.length; a++) {
+            ids += this.checkedKeys[a] + ','
+          }
+          var that = this
+          this.$confirm({
+            title: '确认删除',
+            content: '确定要删除所选中的 ' + this.checkedKeys.length + ' 条数据,以及子节点数据吗?',
+            onOk: function () {
+              deleteAction(that.url.deleteBatch, {
+                ids: ids
+              }).then((res) => {
+                if (res.success) {
+                  that.$message.success(res.message)
+                  that.loadTree()
+                  that.onClearSelected()
+                } else {
+                  that.$message.warning(res.message)
+                }
+              })
+            }
+          })
+        }
+      },
+      onSearch(value) {
+        let that = this
+        if (value) {
+          searchByKeywords({
+            keyWord: value
+          }).then((res) => {
+            if (res.success) {
+              that.departTree = []
+              for (let i = 0; i < res.result.length; i++) {
+                let temp = res.result[i]
+                that.departTree.push(temp)
+              }
+            } else {
+              that.$message.warning(res.message)
+            }
+          })
+        } else {
+          that.loadTree()
+        }
+
+      },
+      nodeModalOk() {
+        this.loadTree()
+      },
+      nodeModalClose() {},
+      hide() {
+        console.log(111)
+        this.visible = false
+      },
+      onCheck(checkedKeys, info) {
+        console.log('onCheck', checkedKeys, info)
+        this.hiding = false
+        //this.checkedKeys = checkedKeys.checked
+        // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
+        if (this.checkStrictly) {
+          this.checkedKeys = checkedKeys.checked;
+        } else {
+          this.checkedKeys = checkedKeys
+        }
+        // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
+      },
+      onSelect(selectedKeys, e) {
+        console.log('selected', selectedKeys, e)
+        this.hiding = false
+        let record = e.node.dataRef
+        console.log('onSelect-record', record)
+        this.currSelected = Object.assign({}, record)
+        this.model = this.currSelected
+        this.selectedKeys = [record.key]
+        this.model.parentId = record.parentId
+        this.setValuesToForm(record)
+
+      },
+      // 触发onSelect事件时,为部门树右侧的form表单赋值
+      setValuesToForm(record) {
+        // if (record.orgCategory == '1') {
+        //   this.orgCategoryDisabled = true;
+        // } else {
+        //   this.orgCategoryDisabled = false;
+        // }
+        console.log(record)
+        this.$nextTick(() => {
+          //   this.form.getFieldDecorator('fax', {
+          //     initialValue: ''
+          //   })
+
+          //   this.form.setFieldsValue(pick(dataJson, ['appId', 'urlType', 'url', 'dayBudget', 'speed',
+          //     'showMode'
+          //   ]))
+          this.form.setFieldsValue(pick(record, ['tagName', 'tagCode', 'description']))
+        })
+      },
+      getCurrSelectedTitle() {
+        return !this.currSelected.title ? '' : this.currSelected.title
+      },
+      onClearSelected() {
+        this.hiding = true
+        this.checkedKeys = []
+        this.currSelected = {}
+        this.form.resetFields()
+        this.selectedKeys = []
+      },
+      handleNodeTypeChange(val) {
+        this.currSelected.nodeType = val
+      },
+      notifyTriggerTypeChange(value) {
+        this.currSelected.notifyTriggerType = value
+      },
+      receiptTriggerTypeChange(value) {
+        this.currSelected.receiptTriggerType = value
+      },
+      submitCurrForm() {
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            if (!this.currSelected.id) {
+              this.$message.warning('请点击选择要修改部门!')
+              return
+            }
+
+            let formData = Object.assign(this.currSelected, values)
+            console.log('Received values of form: ', formData)
+            httpAction(this.url.edit, formData, 'post').then((res) => {
+              if (res.success) {
+                this.$message.success('保存成功!')
+                this.loadTree()
+              } else {
+                this.$message.error(res.message)
+              }
+            })
+          }
+        })
+      },
+      emptyCurrForm() {
+        this.form.resetFields()
+      },
+      nodeSettingFormSubmit() {
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            console.log('Received values of form: ', values)
+          }
+        })
+      },
+      openSelect() {
+        this.$refs.sysDirectiveModal.show()
+      },
+      handleAdd(num) {
+        console.log(this.currSelected)
+        if (num == 1) {
+          this.$refs.departModal.add()
+          this.$refs.departModal.title = '新增'
+        } else if (num == 2) {
+          if (this.currSelected.level == 3) {
+            this.$message.warning('标签最多只能存在三级')
+          } else {
+            let key = this.currSelected.key
+            if (!key) {
+              this.$message.warning('请先点击选中上级标签!')
+              return false
+            }
+            this.$refs.departModal.add(this.selectedKeys)
+            this.$refs.departModal.title = '新增'
+          }
+
+        } else {
+          this.$refs.departModal.add(this.rightClickSelectedKey)
+          this.$refs.departModal.title = '新增'
+        }
+      },
+      handleDelete() {
+        var that = this
+        this.$confirm({
+          title: '确认删除',
+          content: '确定要删除此标签以及子节点数据吗?',
+          onOk: function () {
+            httpAction('/ctop/tagInfo/edit', {
+              id: that.rightClickSelectedKey,
+              delFlag: 1
+            }, 'post').then(res => {
+              if (res.success) {
+                //删除成功后,去除已选中中的数据
+                that.checkedKeys.splice(that.checkedKeys.findIndex(key => key === that.rightClickSelectedKey),
+                  1);
+                that.$message.success('删除成功!')
+                that.loadTree()
+                //删除后同步清空右侧基本信息内容
+                let orgCode = that.form.getFieldValue("orgCode");
+                if (orgCode && orgCode === that.rightClickSelectedOrgCode) {
+                  that.onClearSelected()
+                }
+              } else {
+                that.$message.warning('删除失败!')
+              }
+            })
+            // deleteByDepartId({
+            //   id: that.rightClickSelectedKey
+            // }).then((resp) => {
+
+            // })
+          }
+        })
+      },
+      selectDirectiveOk(record) {
+        console.log('选中指令数据', record)
+        this.nodeSettingForm.setFieldsValue({
+          directiveCode: record.directiveCode
+        })
+        this.currSelected.sysCode = record.sysCode
+      },
+      getFlowGraphData(node) {
+        this.graphDatasource.nodes.push({
+          id: node.id,
+          text: node.flowNodeName
+        })
+        if (node.children.length > 0) {
+          for (let a = 0; a < node.children.length; a++) {
+            let temp = node.children[a]
+            this.graphDatasource.edges.push({
+              source: node.id,
+              target: temp.id
+            })
+            this.getFlowGraphData(temp)
+          }
+        }
+      },
+      // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
+      expandAll() {
+        this.iExpandedKeys = this.allTreeKeys
+      },
+      closeAll() {
+        this.iExpandedKeys = []
+      },
+      checkALL() {
+        this.checkStriccheckStrictlytly = false
+        this.checkedKeys = this.allTreeKeys
+      },
+      cancelCheckALL() {
+        //this.checkedKeys = this.defaultCheckedKeys
+        this.checkedKeys = []
+      },
+      switchCheckStrictly(v) {
+        if (v == 1) {
+          this.checkStrictly = false
+        } else if (v == 2) {
+          this.checkStrictly = true
+        }
+      },
+      getAllKeys(node) {
+        // console.log('node',node);
+        this.allTreeKeys.push(node.key)
+        if (node.children && node.children.length > 0) {
+          for (let a = 0; a < node.children.length; a++) {
+            this.getAllKeys(node.children[a])
+          }
+        }
+      }
+      // <!---- author:os_chengtgen -- date:20190827 --  for:切换父子勾选模式 =======------>
+
+    },
+    created() {
+      this.currFlowId = this.$route.params.id
+      this.currFlowName = this.$route.params.name
+      // this.loadTree()
+    },
+
+  }
+</script>
+<style scoped>
+  .ant-card-body .table-operator {
+    margin: 15px;
+  }
+
+  .anty-form-btn {
+    width: 100%;
+    text-align: center;
+  }
+
+  .anty-form-btn button {
+    margin: 0 5px;
+  }
+
+  .anty-node-layout .ant-layout-header {
+    padding-right: 0
+  }
+
+  .header {
+    padding: 0 8px;
+  }
+
+  .header button {
+    margin: 0 3px
+  }
+
+  .ant-modal-cust-warp {
+    height: 100%
+  }
+
+  .ant-modal-cust-warp .ant-modal-body {
+    height: calc(100% - 110px) !important;
+    overflow-y: auto
+  }
+
+  .ant-modal-cust-warp .ant-modal-content {
+    height: 90% !important;
+    overflow-y: hidden
+  }
+
+  #app .desktop {
+    height: auto !important;
+  }
+
+  /** Button按钮间距 */
+  .ant-btn {
+    margin-left: 3px
+  }
+
+  .drawer-bootom-button {
+    /*position: absolute;*/
+    bottom: 0;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: left;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>

+ 116 - 0
src/views/modules/material/modules/DepartDataruleModal.vue

@@ -0,0 +1,116 @@
+<template>
+  <a-drawer
+    title="数据规则/按钮权限配置"
+    width="365"
+    :closable="false"
+    @close="onClose"
+    :visible="visible"
+  >
+    <a-tabs defaultActiveKey="1">
+      <a-tab-pane tab="数据规则" key="1">
+
+        <a-checkbox-group v-model="dataruleChecked" v-if="dataruleList.length>0">
+          <a-row>
+            <a-col :span="24" v-for="(item,index) in dataruleList" :key=" 'dr'+index ">
+              <a-checkbox :value="item.id">{{ item.ruleName }}</a-checkbox>
+            </a-col>
+
+            <a-col :span="24">
+              <div style="width: 100%;margin-top: 15px">
+                <a-button @click="saveDataruleForRole" type="primary" size="small" icon="save">点击保存</a-button>
+              </div>
+            </a-col>
+          </a-row>
+        </a-checkbox-group>
+        <div v-else><h3>无配置信息!</h3></div>
+
+      </a-tab-pane>
+    </a-tabs>
+
+  </a-drawer>
+</template>
+
+<script>
+  import ARow from 'ant-design-vue/es/grid/Row'
+  import ACol from 'ant-design-vue/es/grid/Col'
+  import { getAction,postAction } from '@/api/manage'
+
+  export default {
+    name: 'DepartDataruleModal',
+    components: { ACol, ARow },
+    data(){
+      return {
+        functionId:'',
+        departId:'',
+        visible:false,
+        tabList: [{
+          key: '1',
+          tab: '数据规则',
+        }, {
+          key: '2',
+          tab: '按钮权限',
+        }],
+        activeTabKey: '1',
+        url:{
+          datarule:"/sys/sysDepartPermission/datarule",
+        },
+        dataruleList:[],
+        dataruleChecked:[]
+      }
+    },
+    methods:{
+      loadData(){
+        getAction(`${this.url.datarule}/${this.functionId}/${this.departId}`).then(res=>{
+          if(res.success){
+            this.dataruleList = res.result.datarule
+            let drChecked = res.result.drChecked
+            if(drChecked){
+              this.dataruleChecked = drChecked.split(",")
+            }
+          }
+        })
+      },
+      saveDataruleForRole(){
+        if(!this.dataruleChecked || this.dataruleChecked.length==0){
+          this.$message.warning("请注意,现未勾选任何数据权限!")
+        }
+        let params = {
+          permissionId:this.functionId,
+          departId:this.departId,
+          dataRuleIds:this.dataruleChecked.join(",")
+        }
+        postAction(this.url.datarule,params).then(res=>{
+          if(res.success){
+            this.$message.success(res.message)
+          }else{
+            this.$message.error(res.message)
+          }
+        })
+      },
+      show(functionId,departId){
+        this.onReset()
+        this.functionId = functionId
+        this.departId = departId
+        this.visible=true
+        this.loadData()
+      },
+      onClose(){
+        this.visible=false
+        this.onReset()
+      },
+      onTabChange (key) {
+        this.activeTabKey = key
+      },
+      onReset(){
+        this.functionId=''
+        this.departId=''
+        this.dataruleList=[]
+        this.dataruleChecked=[]
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 194 - 0
src/views/modules/material/modules/DepartModal.vue

@@ -0,0 +1,194 @@
+<template>
+  <a-modal :title="title" :width="800" :ok=false :visible="visible" :confirmLoading="confirmLoading"
+    :okButtonProps="{ props: {disabled: disableSubmit} }" @ok="handleOk" @cancel="handleCancel" cancelText="关闭">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签分类" :hidden="false" hasFeedback>
+          <a-select v-decorator="['tagCategoryId', {rules: [{ required: true, message: '请选择标签分类'}]} ]"
+            placeholder="请选择">
+            <a-select-option :value="1">形式</a-select-option>
+            <a-select-option :value="2">基调</a-select-option>
+            <a-select-option :value="3">内容</a-select-option>
+            <a-select-option :value="4">场景</a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签名称" :hidden="false" hasFeedback>
+          <a-input id="tagName" placeholder="请输入标签名称" v-decorator="['tagName', validatorRules.departName ]" />
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签编码">
+          <a-input placeholder="请输入标签编码,以字母加数字拼接,如A001" v-decorator="['tagCode',validatorRules.orgCode]" :maxLength="4" />
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签描述">
+          <a-input placeholder="请输入标签描述" v-decorator="['description']" />
+        </a-form-item>
+        <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="标签示例">
+          <a-input placeholder="请输入标签示例" v-decorator="['model']" />
+        </a-form-item>
+
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import {
+    httpAction
+  } from '@/api/manage'
+  import {
+    queryIdTree
+  } from '@/api/api'
+  import pick from 'lodash.pick'
+  import ATextarea from 'ant-design-vue/es/input/TextArea'
+  export default {
+    name: "SysDepartModal",
+    components: {
+      ATextarea
+    },
+    data() {
+      return {
+        departTree: [],
+        orgTypeData: [],
+        phoneWarning: '',
+        departName: "",
+        title: "操作",
+        seen: false,
+        visible: false,
+        condition: true,
+        disableSubmit: false,
+        model: {},
+        menuhidden: false,
+        menuusing: true,
+        labelCol: {
+          xs: {
+            span: 24
+          },
+          sm: {
+            span: 5
+          },
+        },
+        wrapperCol: {
+          xs: {
+            span: 24
+          },
+          sm: {
+            span: 16
+          },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules: {
+          departName: {
+            rules: [{
+              required: true,
+              message: '请输入标签名称!'
+            }]
+          },
+          orgCode: {
+            rules: [{
+              required: true,
+              message: '请输入标签编码!'
+            }], validator: this.validate
+          },
+          mobile: {
+            rules: [{
+              validator: this.validateMobile
+            }]
+          }
+        },
+        url: {
+          add: "/ctop/tagInfo/add",
+        },
+        dictDisabled: true,
+      }
+    },
+    created() {},
+    methods: {
+      validate(rule, value, callback) {
+        const regex = /^http(.*)$/
+        if (!regex.test(value)) {
+          callback('需要以 http 开头')
+        }
+        callback()
+      },
+      loadTreeData() {
+        var that = this;
+        queryIdTree().then((res) => {
+          if (res.success) {
+            that.departTree = [];
+            for (let i = 0; i < res.result.length; i++) {
+              let temp = res.result[i];
+              that.departTree.push(temp);
+            }
+          }
+
+        })
+      },
+      add(depart) {
+        this.edit(depart);
+      },
+      edit(record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, {});
+        this.visible = true;
+        // this.loadTreeData();
+        this.model = record
+        console.log(this.model)
+        //   if(this.seen){
+        //     this.model.orgCategory = '1';
+        //   }else{
+        //     this.model.orgCategory = '2';
+        //   }
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model, 'tagCategoryId'))
+        });
+      },
+      close() {
+        this.$emit('close');
+        this.disableSubmit = false;
+        this.visible = false;
+      },
+      handleOk() {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            console.log(formData)
+            httpAction(this.url.add, formData, "post").then((res) => {
+              if (res.success) {
+                that.$message.success(res.message);
+                that.loadTreeData();
+                that.$emit('ok');
+              } else {
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+          }
+        })
+      },
+      handleCancel() {
+        this.close()
+      },
+      validateMobile(rule, value, callback) {
+        if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)) {
+          callback();
+        } else {
+          callback("您的手机号码格式不正确!");
+        }
+
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 415 - 0
src/views/modules/material/modules/labelModal.vue

@@ -0,0 +1,415 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="drawerWidth"
+    @close="handleCancel"
+    :visible="visible"
+    :confirmLoading="confirmLoading">
+
+    <div :style="{width: '100%',border: '1px solid #e9e9e9',padding: '10px 16px',background: '#fff',}">
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+
+        <a-form-item label="菜单类型" :labelCol="labelCol" :wrapperCol="wrapperCol" >
+          <a-radio-group @change="onChangeMenuType" v-decorator="['menuType',{'initialValue':localMenuType}]">
+            <a-radio :value="0">一级菜单</a-radio>
+            <a-radio :value="1">子菜单</a-radio>
+            <a-radio :value="2">按钮/权限</a-radio>
+          </a-radio-group>
+        </a-form-item>
+
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          :label="menuLabel"
+          hasFeedback >
+          <a-input placeholder="请输入菜单名称" v-decorator="[ 'name', validatorRules.name]" :readOnly="disableSubmit"/>
+        </a-form-item>
+
+
+        <a-form-item
+          v-show="localMenuType!=0"
+          label="上级菜单"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          :validate-status="validateStatus"
+          :hasFeedback="true"
+          :required="true">
+          <span slot="help">{{ validateStatus=='error'?'请选择上级菜单':'&nbsp;&nbsp;' }}</span>
+          <a-tree-select
+            style="width:100%"
+            :dropdownStyle="{ maxHeight: '200px', overflow: 'auto' }"
+            :treeData="treeData"
+            v-model="model.parentId"
+            placeholder="请选择父级菜单"
+            :disabled="disableSubmit"
+            @change="handleParentIdChange">
+          </a-tree-select>
+        </a-form-item>
+
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="菜单路径">
+          <a-input placeholder="请输入菜单路径" v-decorator="[ 'url',validatorRules.url]" :readOnly="disableSubmit"/>
+        </a-form-item>
+
+        <a-form-item
+          v-show="show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="前端组件">
+          <a-input placeholder="请输入前端组件" v-decorator="[ 'component',validatorRules.component]" :readOnly="disableSubmit"/>
+        </a-form-item>
+
+        <a-form-item
+          v-show="localMenuType==0"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="默认跳转地址">
+          <a-input placeholder="请输入路由参数 redirect" v-decorator="[ 'redirect',{}]" :readOnly="disableSubmit"/>
+        </a-form-item>
+
+        <a-form-item
+          v-show="!show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="授权标识">
+          <a-input placeholder="多个用逗号分隔, 如: user:list,user:create" v-decorator="[ 'perms', {rules:[{ required: false, message: '请输入授权标识!' },{validator: this.validatePerms }]}]" :readOnly="disableSubmit"/>
+        </a-form-item>
+
+        <a-form-item
+          v-show="!show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="授权策略">
+          <j-dict-select-tag  v-decorator="['permsType', {}]" placeholder="请选择授权策略" :type="'radio'" :triggerChange="true" dictCode="global_perms_type"/>
+
+
+        </a-form-item>
+        <a-form-item
+          v-show="!show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="状态">
+          <j-dict-select-tag  v-decorator="['status', {}]" placeholder="请选择状态" :type="'radio'" :triggerChange="true" dictCode="valid_status"/>
+
+        </a-form-item>
+
+
+        <a-form-item
+          v-show="show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="排序">
+          <a-input-number placeholder="请输入菜单排序" style="width: 200px" v-decorator="[ 'sortNo',validatorRules.sortNo]" :readOnly="disableSubmit"/>
+        </a-form-item>
+
+        <a-form-item
+          v-show="show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="是否路由菜单">
+          <a-switch checkedChildren="是" unCheckedChildren="否" v-model="routeSwitch"/>
+        </a-form-item>
+
+        <a-form-item
+          v-show="show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="隐藏路由">
+          <a-switch checkedChildren="是" unCheckedChildren="否" v-model="menuHidden"/>
+        </a-form-item>
+
+        <a-form-item
+          v-show="show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="是否缓存路由">
+          <a-switch checkedChildren="是" unCheckedChildren="否" v-model="isKeepalive"/>
+        </a-form-item>
+
+
+        <a-form-item
+          v-show="show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="聚合路由">
+          <a-switch checkedChildren="是" unCheckedChildren="否" v-model="alwaysShow"/>
+        </a-form-item>
+
+        <!--update_begin author:wuxianquan date:20190908 for:增加组件,外链打开方式可选 -->
+        <a-form-item
+          v-show="show"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="打开方式">
+          <a-switch checkedChildren="外部" unCheckedChildren="内部" v-model="internalOrExternal"/>
+        </a-form-item>
+        <!--update_end author:wuxianquan date:20190908 for:增加组件,外链打开方式可选 -->
+
+
+      </a-form>
+
+      <!-- 选择图标 -->
+    </a-spin>
+      <a-row :style="{textAlign:'right'}">
+        <a-button :style="{marginRight: '8px'}" @click="handleCancel">
+          关闭
+        </a-button>
+        <a-button :disabled="disableSubmit" @click="handleOk" type="primary">确定</a-button>
+      </a-row>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+  import {addPermission,editPermission,queryTreeList, duplicateCheck} from '@/api/api'
+  import pick from 'lodash.pick'
+
+  export default {
+    name: "PermissionModal",
+    data () {
+      return {
+        drawerWidth:700,
+        treeData:[],
+        treeValue: '0-0-4',
+        title:"操作",
+        visible: false,
+        disableSubmit:false,
+        model: {},
+        localMenuType:0,
+        alwaysShow:false,//表单元素-聚合路由
+        menuHidden:false,//表单元素-隐藏路由
+        routeSwitch:true, //是否路由菜单
+        /*update_begin author:wuxianquan date:20190908 for:定义变量,初始值代表内部打开*/
+        internalOrExternal:false,//菜单打开方式
+        /*update_end author:wuxianquan date:20190908 for:定义变量,初始值代表内部打开*/
+        isKeepalive:true, //是否缓存路由
+        show:true,//根据菜单类型,动态显示隐藏表单元素
+        menuLabel:'菜单名称',
+        isRequrie:true,  // 是否需要验证
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+
+        iconChooseVisible: false,
+        validateStatus:""
+      }
+    },
+    computed:{
+      validatorRules:function() {
+        return {
+          name:{rules: [{ required: true, message: '请输入菜单标题!' }]},
+          component:{rules: [{ required: this.show, message: '请输入前端组件!' }]},
+          url:{rules: [{ required: this.show, message: '请输入菜单路径!' }]},
+          permsType:{rules: [{ required: true, message: '请输入授权策略!' }]},
+          sortNo:{initialValue:1.0},
+        }
+      }
+    },
+    created () {
+      this.initDictConfig();
+    },
+    methods: {
+      loadTree(){
+        var that = this;
+        queryTreeList().then((res)=>{
+          if(res.success){
+            console.log('----queryTreeList---')
+            console.log(res)
+            that.treeData = [];
+            let treeList = res.result.treeList
+            for(let a=0;a<treeList.length;a++){
+              let temp = treeList[a];
+              temp.isLeaf = temp.leaf;
+              that.treeData.push(temp);
+            }
+          }
+        });
+      },
+      add () {
+        // 默认值
+        this.edit({status:'1',permsType:'1',route:true});
+      },
+      edit (record) {
+        this.resetScreenSize(); // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        //--------------------------------------------------------------------------------------------------
+        //根据菜单类型,动态展示页面字段
+        console.log(record)
+        this.alwaysShow = !record.alwaysShow?false:true;
+        this.menuHidden = !record.hidden?false:true;
+
+        if(record.route!=null){
+          this.routeSwitch = record.route?true:false;
+        }
+
+        if(record.keepAlive!=null){
+          this.isKeepalive = record.keepAlive?true:false;
+        }else{
+          this.isKeepalive = false; // 升级兼容 如果没有(后台没有传过来、或者是新建)默认为false
+        }
+
+        /*update_begin author:wuxianquan date:20190908 for:编辑初始化数据*/
+        if(record.internalOrExternal!=null){
+          this.internalOrExternal = record.internalOrExternal?true:false;
+        }else{
+          this.internalOrExternal = false;
+        }
+        /*update_end author:wuxianquan date:20190908 for:编辑初始化数据*/
+
+
+        //console.log('record.menuType', record.menuType);
+        this.show = record.menuType==2?false:true;
+        this.menuLabel = record.menuType==2?'按钮/权限':'菜单名称';
+
+        if(this.model.parentId){
+          this.localMenuType = 1;
+        }else{
+          this.localMenuType = 0;
+        }
+        //----------------------------------------------------------------------------------------------
+
+        this.visible = true;
+        this.loadTree();
+        let fieldsVal = pick(this.model,'name','perms','permsType','component','url','sortNo','menuType','status');
+        this.$nextTick(() => {
+          this.form.setFieldsValue(fieldsVal)
+        });
+      },
+      close () {
+        this.$emit('close');
+        this.disableSubmit = false;
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            this.model.alwaysShow = this.alwaysShow;
+            this.model.hidden = this.menuHidden;
+            this.model.route = this.routeSwitch;
+            this.model.keepAlive = this.isKeepalive;
+            /*update_begin author:wuxianquan date:20190908 for:获取值*/
+            this.model.internalOrExternal = this.internalOrExternal;
+            /*update_end author:wuxianquan date:20190908 for:获取值*/
+
+            let formData = Object.assign(this.model, values);
+            if ((formData.menuType == 1 || formData.menuType == 2) && !formData.parentId) {
+              that.validateStatus = 'error';
+              that.$message.error("请检查你填的类型以及信息是否正确!");
+              return;
+            } else {
+              that.validateStatus = 'success';
+            }
+            that.confirmLoading = true;
+            console.log(formData);
+            let obj;
+            if (!this.model.id) {
+              obj = addPermission(formData);
+            } else {
+              obj = editPermission(formData);
+            }
+            obj.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()
+      },
+      validateNumber(rule, value, callback){
+        if(!value || new RegExp(/^[0-9]*[1-9][0-9]*$/).test(value)){
+          callback();
+        }else{
+          callback("请输入正整数!");
+        }
+      },
+      validatePerms(rule, value, callback){
+        if(value && value.length>0){
+          //校验授权标识是否存在
+          var params = {
+            tableName: 'sys_permission',
+            fieldName: 'perms',
+            fieldVal: value,
+            dataId: this.model.id
+          };
+          duplicateCheck(params).then((res) => {
+            if (res.success) {
+              callback()
+            } else {
+              callback("授权标识已存在!")
+            }
+          })
+        }else{
+          callback()
+        }
+      },
+      onChangeMenuType(e) {
+        //console.log('localMenuType checked', e.target.value)
+        this.localMenuType=e.target.value
+        if(e.target.value == 2){
+          this.show = false;
+          this.menuLabel = '按钮/权限';
+        }else{
+          this.show = true;
+          this.menuLabel = '菜单名称';
+        }
+        this.$nextTick(() => {
+          this.form.validateFields(['url','component'], { force: true });
+        });
+      },
+      handleIconCancel () {
+        this.iconChooseVisible = false
+      },
+      handleIconChoose (value) {
+        console.log(value)
+        this.model.icon = value
+        this.form.icon = value
+        this.iconChooseVisible = false
+      },
+      // 根据屏幕变化,设置抽屉尺寸
+      resetScreenSize(){
+        let screenWidth = document.body.clientWidth;
+        if(screenWidth < 500){
+          this.drawerWidth = screenWidth;
+        }else{
+          this.drawerWidth = 700;
+        }
+      },
+      initDictConfig() {
+      },
+      handleParentIdChange(value){
+        if(!value){
+          this.validateStatus="error"
+        }else{
+          this.validateStatus="success"
+        }
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 1 - 7
src/views/modules/material/modules/videoList.vue

@@ -99,7 +99,6 @@
           }
         ],
         url: {},
-        options: []
       }
     },
     computed: {
@@ -113,12 +112,7 @@
       },
     },
     mounted() {
-      getAction('/sys/user/getAllUserList', '').then(res => {
-        console.log(res)
-        if (res.success) {
-          this.options = res.result
-        }
-      })
+  
     },
   }
 </script>

+ 361 - 290
src/views/modules/material/scriptFile.vue

@@ -1,7 +1,7 @@
 <style>
-  #wps-iframe {
-    height: 100%
-  }
+#wps-iframe {
+  height: 100%;
+}
 </style>
 <template>
   <a-card :bordered="false">
@@ -20,28 +20,53 @@
           <a-col :md="6" :sm="8">
             <a-form-item label="创建人">
               <!-- <a-input placeholder="请输入创建人" v-model="queryParam.creator_dictText"></a-input> -->
-              <a-select v-model="queryParam.creator" showSearch allowClear placeholder="请选择创建人"
-                optionFilterProp="children" style="width: 100%" :filterOption="true">
-                <a-select-option v-for="appModel in options" :key="appModel.userId + new Date().getTime()"
-                  :value="appModel.userId">
+              <a-select
+                v-model="queryParam.creator"
+                showSearch
+                allowClear
+                placeholder="请选择创建人"
+                optionFilterProp="children"
+                style="width: 100%"
+                :filterOption="true"
+                @search="search"
+                @focus="getAllUserList"
+              >
+                <a-select-option
+                  v-for="appModel in options"
+                  :key="appModel.userId + new Date().getTime()"
+                  :value="appModel.userId"
+                >
                   {{ appModel.realName }}
-                  &#12288;&#12288;{{ appModel.roleName }}</a-select-option>
+                  &#12288;&#12288;{{ appModel.roleName }}
+                </a-select-option>
               </a-select>
             </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>
-              <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>
             </span>
           </a-col>
-
         </a-row>
       </a-form>
     </div>
     <div style="float:right;margin:0 0 20px 20px">
-      <a-upload name="file" :multiple="false" :action="uploadAction" :headers="tokenHeader" :showUploadList="false"
-        :beforeUpload="beforeUpload" @change="handleChange" style="margin-right:20px">
+      <a-upload
+        name="file"
+        :multiple="false"
+        :action="uploadAction"
+        :headers="tokenHeader"
+        :showUploadList="false"
+        :beforeUpload="beforeUpload"
+        @change="handleChange"
+        style="margin-right:20px"
+      >
         <a-button :disabled="loadingElse">
           <a-icon type="upload" />
           {{loadingElse?'上传中,请稍后':'文件上传'}}
@@ -51,13 +76,16 @@
         <a-button>新增</a-button>
         <a-menu slot="overlay">
           <a-menu-item>
-            <a-icon type="file-word" /><span style="text-align: center" @click="creatWps('word')">文字文档</span>
+            <a-icon type="file-word" />
+            <span style="text-align: center" @click="creatWps('word')">文字文档</span>
           </a-menu-item>
           <a-menu-item>
-            <a-icon type="file-excel" /><span style="text-align: center" @click="creatWps('excel')">表格文档</span>
+            <a-icon type="file-excel" />
+            <span style="text-align: center" @click="creatWps('excel')">表格文档</span>
           </a-menu-item>
           <a-menu-item>
-            <a-icon type="file-ppt" /><span style="text-align: center" @click="creatWps('ppt')">演示文档</span>
+            <a-icon type="file-ppt" />
+            <span style="text-align: center" @click="creatWps('ppt')">演示文档</span>
           </a-menu-item>
 
           <!-- <a-menu-item>
@@ -68,14 +96,23 @@
           </a-menu-item>
           <a-menu-item>
             <a target="_blank" rel="noopener noreferrer" href="http://www.tmall.com/">3rd menu item</a>
-          </a-menu-item> -->
+          </a-menu-item>-->
         </a-menu>
       </a-dropdown>
     </div>
     <div style="clear:both"></div>
     <div>
-      <a-table ref="table" size="middle" bordered rowKey="name" :columns="columns" :dataSource="dataSource"
-        :pagination="ipagination" :loading="loading" @change="handleTableChange">
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="name"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        @change="handleTableChange"
+      >
         <span slot="modifyTime" slot-scope="text">{{text|getDate}}</span>
         <span slot="size" slot-scope="text">{{text|sizeShow}}</span>
         <span slot="projectId_dictText" slot-scope="text">{{text?text:'-'}}</span>
@@ -90,26 +127,32 @@
             <a>删除</a>
           </a-popconfirm>
         </span>
-
       </a-table>
     </div>
     <!-- <div id="show"></div> -->
-    <a-modal :maskClosable="false" :title="type=='add'?'脚本新建':'脚本编辑'" v-model="visibleBind" :width="1200"
-      :footer="null">
-
+    <a-modal
+      :maskClosable="false"
+      :title="type=='add'?'脚本新建':'脚本编辑'"
+      v-model="visibleBind"
+      :width="1200"
+      :footer="null"
+    >
       <iframe :src="src" frameborder="0" style="width:100%;height:600px" v-if="type=='add'"></iframe>
       <div id="showWps" style="height:600px" v-show="type=='edit'"></div>
-
-
     </a-modal>
     <a-modal :maskClosable="false" title="绑定项目" v-model="visibleProject" @ok="handleOk">
       <span>项目选择:</span>
-      <a-select v-model="projectId" showSearch style="width:300px" optionFilterProp="children"
-        :filterOption="filterOption">
+      <a-select
+        v-model="projectId"
+        showSearch
+        style="width:300px"
+        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" ? '头条' :item.mediaId == "2"? '快手':item.mediaId == "3"?'头条内广':'快手内广'
-              }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ item.advertiserName }}
+          item.mediaId == "1" ? '头条' :item.mediaId == "2"? '快手':item.mediaId == "3"?'头条内广':'快手内广'
+          }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ item.advertiserName }}
         </a-select-option>
       </a-select>
     </a-modal>
@@ -117,296 +160,324 @@
 
     <!-- 表单区域 -->
     <wpsFile-modal ref="modalForm" @ok="modalFormOk"></wpsFile-modal>
-
   </a-card>
 </template>
 
 <script>
-  import {
-    getAction,
-    postAction,
-    postFile,
-    deleteAction,
-    putAction
-  } from '@/api/manage'
-  import selectTable from '@/views/modules/Statistics/components/selecTable.vue'
-  import WpsFileModal from './modules/WpsFileModal'
-  import {
-    mapGetters
-  } from 'vuex'
-  import {
-    JeecgListMixin
-  } from '@/mixins/JeecgListMixin'
-  import qs from 'qs';
-  const fileSuffix = [
-    'xls', 'xlt', 'et', 'xlsx', 'xltx', 'csv', 'xlsm', 'xltm',
-    'doc', 'dot', 'wps', 'wpt', 'docx', 'dotx', 'docm', 'dotm',
-    'ppt', 'pptx', 'pptm', 'ppsx', 'ppsm', 'pps', 'potx', 'potm', 'dpt', 'dps',
-    'pdf'
-  ];
-  export default {
-    name: "WpsFileList",
-    mixins: [JeecgListMixin],
-    components: {
-      WpsFileModal,
-      selectTable
-    },
-    data() {
-      return {
-        description: 'wps文件管理页面',
-        dataElse: [],
-        projectId: '',
-        visibleProject: false,
-        // 表头
-        visibleBind: false,
-        wpsType: 'word',
-        type: "add",
-        uploadAction: "http://api.tjyourong.com.cn/jeecg-boot/ctop/wpsFile/uploadFile",
-        columns: [{
-            title: '脚本名称',
-            align: "center",
-            dataIndex: 'name'
-          },
-          {
-            title: '文件大小(KB)',
-            align: "center",
-            dataIndex: 'size',
-            scopedSlots: {
-              customRender: 'size'
-            },
+import { getAction, postAction, postFile, deleteAction, putAction } from '@/api/manage'
+import selectTable from '@/views/modules/Statistics/components/selectPagination.vue'
+import WpsFileModal from './modules/WpsFileModal'
+import { mapGetters } from 'vuex'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import qs from 'qs'
+const fileSuffix = [
+  'xls',
+  'xlt',
+  'et',
+  'xlsx',
+  'xltx',
+  'csv',
+  'xlsm',
+  'xltm',
+  'doc',
+  'dot',
+  'wps',
+  'wpt',
+  'docx',
+  'dotx',
+  'docm',
+  'dotm',
+  'ppt',
+  'pptx',
+  'pptm',
+  'ppsx',
+  'ppsm',
+  'pps',
+  'potx',
+  'potm',
+  'dpt',
+  'dps',
+  'pdf',
+]
+export default {
+  name: 'WpsFileList',
+  mixins: [JeecgListMixin],
+  components: {
+    WpsFileModal,
+    selectTable,
+  },
+  data() {
+    return {
+      description: 'wps文件管理页面',
+      dataElse: [],
+      projectId: '',
+      visibleProject: false,
+      // 表头
+      visibleBind: false,
+      wpsType: 'word',
+      type: 'add',
+      uploadAction: 'http://api.tjyourong.com.cn/jeecg-boot/ctop/wpsFile/uploadFile',
+      columns: [
+        {
+          title: '脚本名称',
+          align: 'center',
+          dataIndex: 'name',
+        },
+        {
+          title: '文件大小(KB)',
+          align: 'center',
+          dataIndex: 'size',
+          scopedSlots: {
+            customRender: 'size',
           },
-          {
-            title: '绑定项目',
-            align: "center",
-            dataIndex: 'projectId_dictText',
-            scopedSlots: {
-              customRender: 'projectId_dictText'
-            },
+        },
+        {
+          title: '绑定项目',
+          align: 'center',
+          dataIndex: 'projectId_dictText',
+          scopedSlots: {
+            customRender: 'projectId_dictText',
           },
-          {
-            title: '创建人',
-            align: "center",
-            dataIndex: 'creator_dictText'
+        },
+        {
+          title: '创建人',
+          align: 'center',
+          dataIndex: 'creator_dictText',
+        },
+        {
+          title: '发布时间',
+          align: 'center',
+          dataIndex: 'modifyTime',
+          scopedSlots: {
+            customRender: 'modifyTime',
           },
-          {
-            title: '发布时间',
-            align: "center",
-            dataIndex: 'modifyTime',
-            scopedSlots: {
-              customRender: 'modifyTime'
-            },
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: {
+            customRender: 'action',
           },
-          {
-            title: '操作',
-            dataIndex: 'action',
-            align: "center",
-            scopedSlots: {
-              customRender: 'action'
-            },
-          }
-        ],
-        url: {
-          list: "/ctop/wpsFile/list",
-          delete: "/ctop/wpsFile/delete",
-          deleteBatch: "/ctop/wpsFile/deleteBatch",
-          exportXlsUrl: "ctop/wpsFile/exportXls",
-          importExcelUrl: "ctop/wpsFile/importExcel",
         },
-        src: "",
-        loadingElse: false,
-        fileId: '',
-        loadingOk: false,
-        options: []
-      }
+      ],
+      url: {
+        list: '/ctop/wpsFile/list',
+        delete: '/ctop/wpsFile/delete',
+        deleteBatch: '/ctop/wpsFile/deleteBatch',
+        exportXlsUrl: 'ctop/wpsFile/exportXls',
+        importExcelUrl: 'ctop/wpsFile/importExcel',
+      },
+      src: '',
+      loadingElse: false,
+      fileId: '',
+      loadingOk: false,
+      options: [],
+    }
+  },
+  computed: {
+    importExcelUrl: function () {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     },
-    computed: {
-      importExcelUrl: function () {
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+  },
+  watch: {
+    visibleBind(n, o) {
+      if (!n) {
+        this.src = ''
+        this.loadData(1)
       }
     },
-    watch: {
-      visibleBind(n, o) {
-        if (!n) {
-          this.src = ''
-          this.loadData(1)
-        }
-      }
+  },
+  filters: {
+    getDate(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
+      return y + '-' + MM + '-' + d
     },
-    filters: {
-      getDate(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
-        return y + '-' + MM + '-' + d
-      },
-      sizeShow(value) {
-        return (value / 1024).toFixed(2)
+    sizeShow(value) {
+      return (value / 1024).toFixed(2)
+    },
+  },
+  mounted() {
+    this.getParticipateList()
+    // getAction('/sys/user/getAllUserList', '').then((res) => {
+    //   if (res.success) {
+    //     this.options = res.result
+    //   }
+    // })
+  },
+  methods: {
+    search(value) {
+      this.options = []
+      if (value != '') {
+        // this.options = this.list.filter(item => {
+        //   var data = item.realName + ' ' + item.roleName
+        //   return data.toLowerCase().indexOf(value.toLowerCase()) > -1
+        // })
+        // this.options = [...this.options]
+        this.getAllUserList(value)
+      } else {
+        this.getAllUserList()
       }
     },
-    mounted() {
-      this.getParticipateList()
-      getAction('/sys/user/getAllUserList', '').then(res => {
+    getAllUserList(value) {
+      getAction('/sys/user/getAllUserList', { pageSize: 50, pageNo: 1, userName: value }).then((res) => {
         if (res.success) {
-          this.options = res.result
+          this.options = res.result.list
+        }
+      })
+    },
+    downLoad(item) {
+      let downloadElement = document.createElement('a')
+      downloadElement.href = item.downloadUrl
+      downloadElement.download = item.name //下载后文件名
+      document.body.appendChild(downloadElement)
+      downloadElement.click() //点击下载
+      document.body.removeChild(downloadElement) //下载完成移除元素
+    },
+    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
         }
       })
     },
-    methods: {
-      downLoad(item) {
-        let downloadElement = document.createElement('a')
-        downloadElement.href = item.downloadUrl
-        downloadElement.download = item.name //下载后文件名
-        document.body.appendChild(downloadElement)
-        downloadElement.click() //点击下载
-        document.body.removeChild(downloadElement) //下载完成移除元素
+    beforeUpload(file) {
+      this.loadingElse = true
+      const size = (Number(file.size) / (1024 * 1024)).toFixed(2)
+      const fileName = file.name
+      const fileStrArr = fileName.split('.')
+      const suffix = fileStrArr[fileStrArr.length - 1]
 
-      },
-      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
-          }
-        })
-      },
-      beforeUpload(file) {
-        this.loadingElse = true
-        const size = (Number(file.size) / (1024 * 1024)).toFixed(2);
-        const fileName = file.name;
-        const fileStrArr = fileName.split(".");
-        const suffix = fileStrArr[fileStrArr.length - 1];
+      let result = fileSuffix.some((item) => {
+        return item === suffix
+      })
 
-        let result = fileSuffix.some((item) => {
-          return item === suffix
-        });
+      if (!result) {
+        this.$message.error('不支持该文件类型')
+        this.loadingElse = false
+        return false
+      }
 
-        if (!result) {
-          this.$message.error("不支持该文件类型");
-          this.loadingElse = false
-          return false;
+      if (size > 10) {
+        this.$message.error('文件不能大于10MB')
+        this.loadingElse = false
+        return false
+      }
+    },
+    handleChange(info) {
+      if (info.file.status !== 'uploading') {
+        console.log(info.file, info.fileList)
+      }
+      if (info.file.status === 'done') {
+        this.$message.success(`${info.file.name} 上传成功`)
+        this.loadingElse = false
+        this.loadData(1)
+      } else if (info.file.status === 'error') {
+        this.$message.error(`${info.file.name} file upload failed.`)
+        this.loadingElse = false
+      }
+    },
+    handleOk(e) {
+      this.loadingOk = true
+      var params = qs.stringify({
+        projectId: this.projectId,
+        fileId: this.fileId,
+      })
+      postAction('/ctop/wpsFile/bindProject', params).then((res) => {
+        if (res.success) {
+          this.visibleProject = false
+          this.projectId = ''
+          this.loadingOk = false
+          this.loadData()
+        } else {
+          this.$message.error('绑定失败')
+          this.loadingOk = false
         }
-
-        if (size > 10) {
-          this.$message.error("文件不能大于10MB");
-          this.loadingElse = false
-          return false;
+      })
+    },
+    creatWps(type) {
+      console.log(type)
+      this.visibleBind = true
+      this.wpsType = type
+      this.type = 'add'
+      getAction('/ctop/wpsFile/createTemplateFile', {
+        template: type,
+      }).then((res) => {
+        console.log(res)
+        if (res.code == 200) {
+          this.src = res.msg
+          console.log(this.src)
+        } else {
+          this.$message.error('请求错误!')
         }
-      },
-      handleChange(info) {
+      })
+      // getCreateFilePath({
+      //   template: type
+      // }).then(res => {
+      //   console.log(res)
+      //   // if (res.data.data){
+      //   this.src = res.data.msg;
+      //   // }else {
+      //   // this.showErrMeg('请求错误!');
+      //   // }
+      // }).catch(() => {
+      //   this.showErrMeg('请求错误!');
+      // });
+    },
 
-        if (info.file.status !== 'uploading') {
-          console.log(info.file, info.fileList);
-        }
-        if (info.file.status === 'done') {
-          this.$message.success(`${info.file.name} 上传成功`);
-          this.loadingElse = false
-          this.loadData(1)
-        } else if (info.file.status === 'error') {
-          this.$message.error(`${info.file.name} file upload failed.`);
-          this.loadingElse = false
+    bindProject(item) {
+      this.visibleProject = true
+      this.projectId = ''
+      this.fileId = item.id
+      // this.getParticipateList()
+    },
+    getViewUrlDbPath(item) {
+      // this.loading = true;
+      const params = {
+        fileId: item.id,
+        userId: item.creator,
+      }
+      getAction('/v1/api/file/getViewUrlDbPath', params).then((res) => {
+        console.log(res)
+        if (res.data) {
+          let r = res.data
+          this.visibleBind = true
+          // this.src = r.wpsUrl;
+          this.type = 'edit'
+          this.openWps(r.wpsUrl, r.token)
+        } else {
+          this.$message.error('请求错误')
         }
-      },
-      handleOk(e) {
-        this.loadingOk = true
-        var params = qs.stringify({
-          projectId: this.projectId,
-          fileId: this.fileId
-        })
-        postAction('/ctop/wpsFile/bindProject', params).then(res => {
-          if (res.success) {
-            this.visibleProject = false
-            this.projectId = ""
-            this.loadingOk = false
-            this.loadData()
-          } else {
-            this.$message.error('绑定失败')
-            this.loadingOk = false
-          }
-        })
-      },
-      creatWps(type) {
-        console.log(type)
-        this.visibleBind = true
-        this.wpsType = type
-        this.type = 'add'
-        getAction('/ctop/wpsFile/createTemplateFile', {
-          template: type
-        }).then(res => {
-          console.log(res)
-          if (res.code == 200) {
-            this.src = res.msg;
-            console.log(this.src)
-          } else {
-            this.$message.error('请求错误!')
-          }
-        })
-        // getCreateFilePath({
-        //   template: type
-        // }).then(res => {
-        //   console.log(res)
-        //   // if (res.data.data){
-        //   this.src = res.data.msg;
-        //   // }else {
-        //   // this.showErrMeg('请求错误!');
-        //   // }
-        // }).catch(() => {
-        //   this.showErrMeg('请求错误!');
-        // });
-
-      },
-
-      bindProject(item) {
-        this.visibleProject = true
-        this.projectId = ''
-        this.fileId = item.id
-        // this.getParticipateList()
-      },
-      getViewUrlDbPath(item) {
-        // this.loading = true;
-        const params = {
-          fileId: item.id,
-          userId: item.creator
-        };
-        getAction('/v1/api/file/getViewUrlDbPath', params).then((res) => {
-          console.log(res)
-          if (res.data) {
-            let r = res.data;
-            this.visibleBind = true
-            // this.src = r.wpsUrl;
-            this.type = 'edit'
-            this.openWps(r.wpsUrl, r.token)
-
-          } else {
-            this.$message.error('请求错误')
-          }
+      })
+    },
+    openWps(url, token) {
+      this.$nextTick(() => {
+        let _this = this
+        const wps = _this.wps.config({
+          mode: 'simple',
+          mount: document.querySelector('#showWps'),
+          wpsUrl: url,
         })
-      },
-      openWps(url, token) {
-
-        this.$nextTick(() => {
-          let _this = this;
-          const wps = _this.wps.config({
-            mode: 'simple',
-            mount: document.querySelector('#showWps'),
-            wpsUrl: url,
-          });
-          wps.setToken({
-            "token": token
-          });
-          let app = wps.Application;
+        wps.setToken({
+          token: token,
         })
-      }
-    }
-  }
+        let app = wps.Application
+      })
+    },
+  },
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>

File diff suppressed because it is too large
+ 2068 - 1561
src/views/modules/material/videoMaterial.vue


+ 11 - 7
src/views/modules/material/videoTemplate.vue

@@ -157,10 +157,12 @@
       </template>
       <a-form :form="form">
         <a-form-item :label-col="labelCol" :wrapper-col="wrapperCol" label="视频素材上传">
-          <upload-to-ali v-model="urlList.url" :customDomain="customDomain" preview :region="region" :bucket="bucket"
+          <!-- <upload-to-ali v-model="urlList.url" :customDomain="customDomain" preview :region="region" :bucket="bucket"
             :accept="acceptVideo" :max="10" :size="1024000" :accessKeyId="accessKeyId"
             :accessKeySecret="accessKeySecret" :before-upload="file" :dir="dirVideo" @loaded="overUpload">
-          </upload-to-ali>
+          </upload-to-ali> -->
+          <uploadFile :value.sync="urlList.url" :fileCount="1" uploadType="video" :multiple="false"
+            @overUpload="overUpload" />
         </a-form-item>
         <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="模板标题">
           <a-input placeholder="请输入模板标题" v-decorator="['title',{ rules: [{ required: true, message: '请输入模板标题' }]}]" />
@@ -199,10 +201,12 @@
         </div>
         <div style="flex:3;padding:10px;box-sizing:border-box;">
           <span style="color:black;font-size:18px;text-align:center;width:100%">合成视频上传</span>
-          <upload-to-ali v-model="urlListMerge.url" :customDomain="customDomain" preview :region="region"
+          <!-- <uploadFile v-model="urlListMerge.url" :customDomain="customDomain" preview :region="region"
             :bucket="bucket" :accept="acceptVideo" :max="10" :size="1024000" :accessKeyId="accessKeyId"
             :accessKeySecret="accessKeySecret" :before-upload="file" :dir="dirMerge" @loaded="overUploadMerge">
-          </upload-to-ali>
+          </uploadFile> -->
+          <uploadFile :value.sync="urlListMerge.url" :fileCount="1" uploadType="video" :multiple="false"
+            @overUpload="overUploadMerge" />
         </div>
       </div>
     </a-modal>
@@ -221,7 +225,7 @@
     JeecgListMixin
   } from '@/mixins/JeecgListMixin'
   import BMF from 'browser-md5-file'
-  import UploadToAli from '@femessage/upload-to-ali'
+  import uploadFile from '@/components/uploadFile.vue'
   import {
     stopOtherVideo,
     closeAllVideoFun
@@ -229,7 +233,7 @@
   export default {
     mixins: [JeecgListMixin],
     components: {
-      UploadToAli,
+      uploadFile,
     },
 
     data() {
@@ -244,7 +248,7 @@
         url: {
           list: '/ctop/modelVideoInfo/list'
         },
-        columns:[],
+        columns: [],
         urlList: {
           url: '',
           md5: ''

+ 0 - 3
src/views/modules/yard/YardList.vue

@@ -1,7 +1,4 @@
 <style>
-  .ant-modal-body {
-    padding-top: 0px;
-  }
 
   li {
     list-style-type: none;

+ 0 - 3
src/views/modules/yard/modules/yardDetail.vue

@@ -12,9 +12,6 @@
 /* .ping-list:hover span {
   display: block;
 } */
-.ant-modal-body {
-  padding-top: 0px;
-}
 li {
   list-style-type: none;
 }

+ 1 - 1
src/views/system/modules/PasswordModal.vue

@@ -97,7 +97,7 @@
           if (!err) {
             this.confirmLoading = true;
             let formData = Object.assign(this.model, values);
-            changPassword(formData).then((res) => {
+            changePassword(formData).then((res) => {
               if (res.success) {
                 this.$message.success(res.message);
                 this.$emit('ok');

+ 76 - 24
src/views/ureport/UReportFileList.vue

@@ -12,18 +12,23 @@
           <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>
             </span>
           </a-col>
         </a-row>
       </a-form>
     </div>
     <a-row :gutter="24" style="margin-bottom:10px">
-        <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="addData">新增</a-button>
+          <a-button type="primary" @click="addData">新增</a-button>
         </span>
-        </a-col>
+      </a-col>
     </a-row>
     <!-- table区域-begin -->
     <div>
@@ -45,6 +50,8 @@
           <a @click="deleteParams(record)">解绑</a>
           <a-divider type="vertical" />
           <a @click="editData(record)">修改</a>
+          <a-divider type="vertical" />
+          <a @click="subscribe(record)">订阅</a>
         </span>
       </a-table>
     </div>
@@ -54,7 +61,13 @@
     <uReportFile-modal ref="modalForm" @ok="modalFormOk"></uReportFile-modal>
 
     <!--  查看成员,接触绑定 -->
-    <a-modal title="解除绑定" v-model="visible" @ok="handleOk" width="800px" class="close-account-my-project">
+    <a-modal
+      title="解除绑定"
+      v-model="visible"
+      @ok="handleOk"
+      width="800px"
+      class="close-account-my-project"
+    >
       <div style="display:flex;line-height:50px;flex-wrap: wrap;">
         <div style="width:25%;text-align:center;" v-for="(item, index) of memberList" :key="index">
           <a-tag color="#2db7f5" @close="log(item.userId)" closable>{{ item.userName }}</a-tag>
@@ -75,6 +88,7 @@
         style="width: 100%"
         :filterOption="filterOption"
         :maxTagCount="1"
+        @search="search"
       >
         <a-select-option
           v-for="appModel in options"
@@ -82,8 +96,8 @@
           :value="appModel.userId"
         >
           {{ appModel.realName }}
-          &#12288;&#12288;{{ appModel.roleName }}</a-select-option
-        >
+          &#12288;&#12288;{{ appModel.roleName }}
+        </a-select-option>
       </a-select>
     </a-modal>
   </a-card>
@@ -93,11 +107,13 @@
 import UReportFileModal from './modules/UReportFileModal'
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import { httpAction, getAction, deleteAction } from '@/api/manage'
+import { postAction } from '../../api/manage'
+import qs from 'qs'
 export default {
   name: 'UReportFileList',
   mixins: [JeecgListMixin],
   components: {
-    UReportFileModal
+    UReportFileModal,
   },
   data() {
     return {
@@ -107,21 +123,21 @@ export default {
         {
           title: '报表模板名称',
           align: 'center',
-          dataIndex: 'name'
+          dataIndex: 'name',
         },
         {
           title: '操作',
           dataIndex: 'action',
           align: 'center',
-          scopedSlots: { customRender: 'action' }
-        }
+          scopedSlots: { customRender: 'action' },
+        },
       ],
       url: {
         list: '/ctop/uReportFile/list',
         delete: '/ctop/uReportFile/delete',
         deleteBatch: '/ctop/uReportFile/deleteBatch',
         exportXlsUrl: 'ctop/uReportFile/exportXls',
-        importExcelUrl: 'ctop/uReportFile/importExcel'
+        importExcelUrl: 'ctop/uReportFile/importExcel',
       },
       visibleAdd: false,
       itemJson: null,
@@ -131,30 +147,66 @@ export default {
       appId: [],
       memberList: [],
       visible: false,
-      fileId: ''
+      fileId: '',
     }
   },
   computed: {
-    importExcelUrl: function() {
+    importExcelUrl: function () {
       return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
-    }
+    },
   },
   methods: {
+    subscribe(record) {
+      console.log(record)
+      postAction(
+        '/ctop/uReportFileBindUser/subscribe',
+        qs.stringify({
+          fileId: record.id,
+        })
+      ).then((res) => {
+        console.log(res)
+        if (res.success) {
+          this.$message.success('订阅成功')
+        }
+      })
+    },
     filterOption(input, option) {
       return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
     },
     addParams(item) {
       this.visibleAdd = true
       this.itemJson = item
-      getAction('/sys/user/getAllUserList', '').then(res => {
+      // getAction('/sys/user/getAllUserList', '').then(res => {
+      //   if (res.success) {
+      //     this.list = res.result
+      //     this.options = res.result
+      //   }
+      // })
+      this.getAllUserList()
+    },
+    getAllUserList(value) {
+      getAction('/sys/user/getAllUserList', { pageSize: 50, pageNo: 1, userName: value }).then((res) => {
         if (res.success) {
-          this.list = res.result
-          this.options = res.result
+          this.list = res.result.list
+          this.options = res.result.list
         }
       })
     },
+    search(value) {
+      this.options = []
+      if (value != '') {
+        // this.options = this.list.filter(item => {
+        //   var data = item.realName + ' ' + item.roleName
+        //   return data.toLowerCase().indexOf(value.toLowerCase()) > -1
+        // })
+        // this.options = [...this.options]
+        this.getAllUserList(value)
+      } else {
+        this.getAllUserList()
+      }
+    },
     log(id) {
-      httpAction('/ctop/uReportFile/unbindUser', { fileId: this.fileId, userId: id }, 'post').then(res => {
+      httpAction('/ctop/uReportFile/unbindUser', { fileId: this.fileId, userId: id }, 'post').then((res) => {
         if (res.success) {
           this.getMemberList(this.fileId)
           this.$message.success('删除成功')
@@ -171,7 +223,7 @@ export default {
       params.fileId = this.itemJson.id
       params.userIds = this.appId.join()
       this.confirmLoading = true
-      httpAction('/ctop/uReportFile/bindUser', params, 'post').then(res => {
+      httpAction('/ctop/uReportFile/bindUser', params, 'post').then((res) => {
         this.confirmLoading = false
         if (res.success) {
           this.visibleAdd = false
@@ -195,7 +247,7 @@ export default {
       }
       window.open(url, '_blank')
     },
-    addData(){
+    addData() {
       var url = ''
       if (process.env.NODE_ENV === 'development') {
         url = 'http://api.tjyourong.com.cn/jeecg-boot/ureport/designer'
@@ -206,14 +258,14 @@ export default {
     },
     getMemberList(id) {
       this.memberList = []
-      httpAction('/ctop/uReportFileBindUser/userList', { fileId: id }, 'post').then(res => {
+      httpAction('/ctop/uReportFileBindUser/userList', { fileId: id }, 'post').then((res) => {
         if (res.success) {
           this.visible = true
           this.memberList = res.data
         }
       })
-    }
-  }
+    },
+  },
 }
 </script>
 <style scoped>

+ 2 - 2
vue.config.js

@@ -58,9 +58,9 @@ module.exports = {
     open : true,
     proxy: {
       '/jeecg-boot': {
-         // target: 'http://192.168.1.90:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
+         target: 'http://192.168.1.90:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.0.59:8088', //请求本地 需要jeecg-boot后台项目  英豪
-        target: 'http://192.168.1.72:8088', //请求本地 需要jeecg-boot后台项目  英豪
+        // target: 'http://192.168.1.72:8088', //请求本地 需要jeecg-boot后台项目  英豪
         // target: 'http://192.168.2.115:8080', //请求本地 需要jeecg-boot后台项目  祚云
         // target: 'http://192.168.1.94:8088', //请求本地 需要jeecg-boot后台项目  孙震
         // target: 'http://192.168.0.230:8088', //请求本地 需要jeecg-boot后台项目  孙震