zhuxinbo 4 лет назад
Родитель
Сommit
2869da4632

+ 109 - 70
src/components/layouts/TabLayout.vue

@@ -1,19 +1,11 @@
 <template>
-  <global-layout @dynamicRouterShow="dynamicRouterShow">
+  <global-layout @dynamicRouterShow="dynamicRouterShow" @removeTab="remove">
     <!-- update-begin- author:sunjianlei --- date:20191009 --- for: 提升右键菜单的层级 -->
-    <contextmenu :itemList="menuItemList" :visible.sync="menuVisible" style="z-index: 9999;" @select="onMenuSelect"/>
+    <contextmenu :itemList="menuItemList" :visible.sync="menuVisible" style="z-index: 9999;" @select="onMenuSelect" />
     <!-- update-end- author:sunjianlei --- date:20191009 --- for: 提升右键菜单的层级 -->
-    <a-tabs
-      @contextmenu.native="e => onContextmenu(e)"
-      v-if="multipage"
-      :active-key="activePage"
-      class="tab-layout-tabs"
-      style="height:52px"
-      :hide-add="true"
-      type="editable-card"
-      @change="changePage"
-      @tabClick="tabCallBack"
-      @edit="editPage">
+    <a-tabs @contextmenu.native="e => onContextmenu(e)" v-if="multipage" :active-key="activePage"
+      class="tab-layout-tabs" style="height:52px" :hide-add="true" type="editable-card" @change="changePage"
+      @tabClick="tabCallBack" @edit="editPage">
       <a-tab-pane :id="page.fullPath" :key="page.fullPath" v-for="page in pageList">
         <span slot="tab" :pagekey="page.fullPath">{{ page.meta.title }}</span>
       </a-tab-pane>
@@ -21,10 +13,10 @@
     <div style="margin: 12px 12px 0;">
       <transition name="page-toggle">
         <keep-alive v-if="multipage">
-          <router-view v-if="reloadFlag"/>
+          <router-view v-if="reloadFlag" @removeTab="remove" />
         </keep-alive>
         <template v-else>
-          <router-view v-if="reloadFlag"/>
+          <router-view v-if="reloadFlag" @removeTab="remove" />
         </template>
       </transition>
     </div>
@@ -34,8 +26,13 @@
 <script>
   import GlobalLayout from '@/components/page/GlobalLayout'
   import Contextmenu from '@/components/menu/Contextmenu'
-  import { mixin, mixinDevice } from '@/utils/mixin.js'
-  import { triggerWindowResizeEvent } from '@/utils/util'
+  import {
+    mixin,
+    mixinDevice
+  } from '@/utils/mixin.js'
+  import {
+    triggerWindowResizeEvent
+  } from '@/utils/util'
 
   const indexKey = '/dashboard/analysis'
 
@@ -52,19 +49,34 @@
         linkList: [],
         activePage: '',
         menuVisible: false,
-        menuItemList: [
-          { key: '4', icon: 'reload', text: '刷 新' },
-          { key: '1', icon: 'arrow-left', text: '关闭左侧' },
-          { key: '2', icon: 'arrow-right', text: '关闭右侧' },
-          { key: '3', icon: 'close', text: '关闭其它' }
+        menuItemList: [{
+            key: '4',
+            icon: 'reload',
+            text: '刷 新'
+          },
+          {
+            key: '1',
+            icon: 'arrow-left',
+            text: '关闭左侧'
+          },
+          {
+            key: '2',
+            icon: 'arrow-right',
+            text: '关闭右侧'
+          },
+          {
+            key: '3',
+            icon: 'close',
+            text: '关闭其它'
+          }
         ],
-        reloadFlag:true
+        reloadFlag: true
       }
     },
     /* update_begin author:wuxianquan date:20190828 for: 关闭当前tab页,供子页面调用 ->望菜单能配置外链,直接弹出新页面而不是嵌入iframe #428 */
-    provide(){
-      return{
-        closeCurrent:this.closeCurrent
+    provide() {
+      return {
+        closeCurrent: this.closeCurrent
       }
     },
     /* update_end author:wuxianquan date:20190828 for: 关闭当前tab页,供子页面调用->望菜单能配置外链,直接弹出新页面而不是嵌入iframe #428 */
@@ -79,6 +91,7 @@
       }
     },
     created() {
+      this.$bus.$on('remove', this.remove)
       if (this.$route.path != indexKey) {
         this.addIndexToFirst()
       }
@@ -93,36 +106,36 @@
       this.linkList.push(this.$route.fullPath)
       this.activePage = this.$route.fullPath
 
-      if(!this.linkList.includes("/account/stepForm")){
-          
-          localStorage.removeItem("step")
-          localStorage.removeItem("campaignId")
-          localStorage.removeItem("pans")
-          localStorage.removeItem("pansKey")
-          localStorage.removeItem("appId")
+      if (!this.linkList.includes("/account/stepForm")) {
+
+        localStorage.removeItem("step")
+        localStorage.removeItem("campaignId")
+        localStorage.removeItem("pans")
+        localStorage.removeItem("pansKey")
+        localStorage.removeItem("appId")
       }
-      if(!this.linkList.includes("/account/advertisingGroup")&&!this.linkList.includes("/account/stepForm")){
-          localStorage.removeItem("advertisingGroup")
-          localStorage.removeItem("advertisingGroupKey")
+      if (!this.linkList.includes("/account/advertisingGroup") && !this.linkList.includes("/account/stepForm")) {
+        localStorage.removeItem("advertisingGroup")
+        localStorage.removeItem("advertisingGroupKey")
       }
     },
     watch: {
-      '$route': function(newRoute) {
+      '$route': function (newRoute) {
         //console.log("新的路由",newRoute)
         this.activePage = newRoute.fullPath
         if (!this.multipage) {
           this.linkList = [newRoute.fullPath]
-          this.pageList = [Object.assign({},newRoute)]
-        // update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
-        } else if(indexKey==newRoute.fullPath) {
+          this.pageList = [Object.assign({}, newRoute)]
+          // update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
+        } else if (indexKey == newRoute.fullPath) {
           //首页时 判断是否缓存 没有缓存 刷新之
           if (newRoute.meta.keepAlive === false) {
             this.routeReload()
           }
-        // update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
-        }else if (this.linkList.indexOf(newRoute.fullPath) < 0) {
+          // update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
+        } else if (this.linkList.indexOf(newRoute.fullPath) < 0) {
           this.linkList.push(newRoute.fullPath)
-          this.pageList.push(Object.assign({},newRoute))
+          this.pageList.push(Object.assign({}, newRoute))
           // update-begin-author:sunjianlei date:20200103 for: 如果新增的页面配置了缓存路由,那么就强制刷新一遍
           if (newRoute.meta.keepAlive) {
             this.routeReload()
@@ -131,32 +144,34 @@
         } else if (this.linkList.indexOf(newRoute.fullPath) >= 0) {
           let oldIndex = this.linkList.indexOf(newRoute.fullPath)
           let oldPositionRoute = this.pageList[oldIndex]
-          this.pageList.splice(oldIndex, 1, Object.assign({}, newRoute, {meta: oldPositionRoute.meta}))
+          this.pageList.splice(oldIndex, 1, Object.assign({}, newRoute, {
+            meta: oldPositionRoute.meta
+          }))
         }
-        if(!this.linkList.includes("/account/stepForm")){
+        if (!this.linkList.includes("/account/stepForm")) {
           localStorage.removeItem("step")
           localStorage.removeItem("campaignId")
           localStorage.removeItem("pans")
           localStorage.removeItem("pansKey")
           localStorage.removeItem("appId")
         }
-        if(!this.linkList.includes("/account/advertisingGroup")&&!this.linkList.includes("/account/stepForm")){
+        if (!this.linkList.includes("/account/advertisingGroup") && !this.linkList.includes("/account/stepForm")) {
           localStorage.removeItem("advertisingGroup")
           localStorage.removeItem("advertisingGroupKey")
         }
-        if(!this.linkList.includes("/account/originality")&&!this.linkList.includes("/account/stepForm")){
+        if (!this.linkList.includes("/account/originality") && !this.linkList.includes("/account/stepForm")) {
           localStorage.removeItem("originality")
           localStorage.removeItem("originalityKey")
         }
       },
-      'activePage': function(key) {
+      'activePage': function (key) {
         let index = this.linkList.lastIndexOf(key)
         let waitRouter = this.pageList[index]
-        this.$router.push(Object.assign({},waitRouter));
+        this.$router.push(Object.assign({}, waitRouter));
         this.changeTitle(waitRouter.meta.title)
       },
-      'multipage': function(newVal) {
-        if(this.reloadFlag){
+      'multipage': function (newVal) {
+        if (this.reloadFlag) {
           if (!newVal) {
             this.linkList = [this.$route.fullPath]
             this.pageList = [this.$route]
@@ -220,7 +235,28 @@
           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)
+        // index = index >= this.linkList.length ? this.linkList.length - 1 : index
+        // this.activePage = this.linkList[index]
+        if (key == "/account/advertisingGroup") {
+          localStorage.removeItem("advertisingGroup")
+          localStorage.removeItem("advertisingGroupKey")
+        }
+        if (key == "/account/stepForm") {
+          localStorage.removeItem("step")
+          localStorage.removeItem("pans")
+          localStorage.removeItem("pansKey")
+        }
+        if (key == "/account/originality") {
+          localStorage.removeItem("originality")
+          localStorage.removeItem("originalityKey")
+        }
+        if (key == "/modules/material/materialList") {
+          localStorage.removeItem("key")
+        }
         this.pageList = this.pageList.filter(item => item.fullPath !== key)
         let index = this.linkList.indexOf(key)
         this.linkList = this.linkList.filter(item => item !== key)
@@ -240,7 +276,8 @@
           return null
         }
         let pageKey = target.getAttribute('pagekey')
-        pageKey = pageKey || (target.previousElementSibling ? target.previousElementSibling.getAttribute('pagekey') : null)
+        pageKey = pageKey || (target.previousElementSibling ? target.previousElementSibling.getAttribute('pagekey') :
+          null)
         return pageKey || (target.firstElementChild ? this.getPageKey(target.firstElementChild, ++depth) : null)
       },
       onMenuSelect(key, target) {
@@ -263,13 +300,13 @@
         }
       },
       /* update_begin author:wuxianquan date:20190828 for: 关闭当前tab页,供子页面调用->望菜单能配置外链,直接弹出新页面而不是嵌入iframe #428 */
-      closeCurrent(){
+      closeCurrent() {
         this.remove(this.activePage);
       },
       /* update_end author:wuxianquan date:20190828 for: 关闭当前tab页,供子页面调用->望菜单能配置外链,直接弹出新页面而不是嵌入iframe #428 */
       closeOthers(pageKey) {
         let index = this.linkList.indexOf(pageKey)
-        if (pageKey == indexKey || pageKey.indexOf('?ticke=')>=0) {
+        if (pageKey == indexKey || pageKey.indexOf('?ticke=') >= 0) {
           this.linkList = this.linkList.slice(index, index + 1)
           this.pageList = this.pageList.slice(index, index + 1)
           this.activePage = this.linkList[0]
@@ -306,12 +343,16 @@
         }
       },
       //update-begin-author:taoyan date:20190430 for:动态路由title显示配置的菜单title而不是其对应路由的title
-      dynamicRouterShow(key,title){
+      dynamicRouterShow(key, title) {
         let keyIndex = this.linkList.indexOf(key)
-        if(keyIndex>=0){
+        if (keyIndex >= 0) {
           let currRouter = this.pageList[keyIndex]
-          let meta = Object.assign({},currRouter.meta,{title:title})
-          this.pageList.splice(keyIndex, 1, Object.assign({},currRouter,{meta:meta}))
+          let meta = Object.assign({}, currRouter.meta, {
+            title: title
+          })
+          this.pageList.splice(keyIndex, 1, Object.assign({}, currRouter, {
+            meta: meta
+          }))
           if (key === this.activePage) {
             this.changeTitle(title)
           }
@@ -320,12 +361,12 @@
       //update-end-author:taoyan date:20190430 for:动态路由title显示配置的菜单title而不是其对应路由的title
 
       //update-begin-author:taoyan date:20191008 for:路由刷新
-      routeReload(){
+      routeReload() {
         this.reloadFlag = false
         let ToggleMultipage = "ToggleMultipage"
-        this.$store.dispatch(ToggleMultipage,false)
-        this.$nextTick(()=>{
-          this.$store.dispatch(ToggleMultipage,true)
+        this.$store.dispatch(ToggleMultipage, false)
+        this.$nextTick(() => {
+          this.$store.dispatch(ToggleMultipage, true)
           this.reloadFlag = true
         })
       }
@@ -335,7 +376,6 @@
 </script>
 
 <style lang="less">
-
   /*
  * The following styles are auto-applied to elements with
  * transition="page-transition" when their visibility is toggled
@@ -406,15 +446,14 @@
 
   }
 
-  .ant-tabs.ant-tabs-card > .ant-tabs-bar {
+  .ant-tabs.ant-tabs-card>.ant-tabs-bar {
     .ant-tabs-tab {
       border: none !important;
       border-bottom: 1px solid transparent !important;
     }
-    .ant-tabs-tab-active {
-      border-color: @primary-color!important;
-    }
-  }
-
 
+    // .ant-tabs-tab-active {
+    //   border-color: @primary-color!important;
+    // }
+  }
 </style>

+ 5 - 5
src/components/menu/SideMenu.vue

@@ -154,11 +154,11 @@
     //     color: rgba(0, 0, 0, 0.65);
     //   }
 
-      &.ant-menu-item-selected {
-        & > a, & > a:hover {
-          color: @primary-color;
-        }
-      }
+    //   &.ant-menu-item-selected {
+    //     & > a, & > a:hover {
+    //       color: @primary-color;
+    //     }
+    //   }
     }
 
     &.ant-menu-dark > .ant-menu-item:first-child {

+ 8 - 8
src/components/tools/setting.js

@@ -62,11 +62,11 @@ const updateTheme = primaryColor => {
 
   if (!lessNodesAppended) {
     // insert less.js and color.less
-    // const lessStyleNode = document.createElement('link');
-    // const lessConfigNode = document.createElement('script');
-    // const lessScriptNode = document.createElement('script');
-    // lessStyleNode.setAttribute('rel', 'stylesheet/less');
-    // lessStyleNode.setAttribute('href', '/color.less');
+    const lessStyleNode = document.createElement('link');
+    const lessConfigNode = document.createElement('script');
+    const lessScriptNode = document.createElement('script');
+    lessStyleNode.setAttribute('rel', 'stylesheet/less');
+    lessStyleNode.setAttribute('href', '/color.less');
     lessConfigNode.innerHTML = `
       window.less = {
         async: true,
@@ -80,7 +80,7 @@ const updateTheme = primaryColor => {
       buildIt();
       lessScriptNode.onload = null;
     };
-    // document.body.appendChild(lessStyleNode);
+    document.body.appendChild(lessStyleNode);
     document.body.appendChild(lessConfigNode);
     document.body.appendChild(lessScriptNode);
     lessNodesAppended = true;
@@ -90,8 +90,8 @@ const updateTheme = primaryColor => {
 };
 
 const updateColorWeak = colorWeak => {
-  // document.body.className = colorWeak ? 'colorWeak' : '';
-//   colorWeak ? document.body.classList.add('colorWeak') : document.body.classList.remove('colorWeak')
+  document.body.className = colorWeak ? 'colorWeak' : '';
+  colorWeak ? document.body.classList.add('colorWeak') : document.body.classList.remove('colorWeak')
 };
 
 export {updateTheme, colorList, updateColorWeak}

+ 137 - 118
src/mixins/JeecgListMixin.js

@@ -3,22 +3,24 @@
  * 高级查询按钮调用 superQuery方法  高级查询组件ref定义为superQueryModal
  * data中url定义 list为查询列表  delete为删除单条记录  deleteBatch为批量删除
  */
-import { filterObj } from '@/utils/util';
-import { deleteAction, getAction,downFile,getFileAccessHttpUrl } from '@/api/manage'
+import {filterObj} from '@/utils/util';
+import moment from 'moment'
+import {deleteAction, getAction, downFile} from '@/api/manage'
 import Vue from 'vue'
-import { ACCESS_TOKEN } from "@/store/mutation-types"
-
+import {ACCESS_TOKEN} from "@/store/mutation-types"
+import { transformTozTreeFormat } from '@/utils/util.js'
 export const JeecgListMixin = {
-  data(){
+  data() {
     return {
       //token header
       tokenHeader: {'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)},
       /* 查询条件-请不要在queryParam中声明非字符串值的属性 */
       queryParam: {},
       /* 数据源 */
-      dataSource:[],
+      dataSource: [],
+      innerData:[],
       /* 分页参数 */
-      ipagination:{
+      ipagination: {
         current: 1,
         pageSize: 10,
         pageSizeOptions: ['10', '20', '30'],
@@ -26,63 +28,73 @@ export const JeecgListMixin = {
           return range[0] + "-" + range[1] + " 共" + total + "条"
         },
         showQuickJumper: true,
-        showSizeChanger: true,
+        // showSizeChanger: true,
         total: 0
       },
       /* 排序参数 */
-      isorter:{
+      isorter: {
         column: 'createTime',
         order: 'desc',
       },
       /* 筛选参数 */
       filters: {},
       /* table加载状态 */
-      loading:false,
+      loading: false,
       /* table选中keys*/
       selectedRowKeys: [],
       /* table选中records*/
       selectionRows: [],
       /* 查询折叠 */
-      toggleSearchStatus:false,
+      toggleSearchStatus: false,
       /* 高级查询条件生效状态 */
-      superQueryFlag:false,
+      superQueryFlag: false,
       /* 高级查询条件 */
-      superQueryParams: '',
-      /** 高级查询拼接方式 */
-      superQueryMatchType: 'and',
+      superQueryParams: ""
     }
   },
-  computed:{
-    scroll:function(){
-      var width = window.innerWidth;
-      //ant-table
-      let $antTable = window.document.getElementsByClassName("ant-table");
-      if ($antTable[0]){
-        width = $antTable[0].clientWidth;
-      }
-      console.log("$antTable",$antTable)
-      return {
-          // x:'max-content',
-          x:width,
-          y:window.innerHeight/2,
-      }
-    },
-    innerHeight:function(){
-      var innerHeight = window.innerHeight;
-      return  innerHeight;
-    },
-  },
-  created() {
-      if(!this.disableMixinCreated){
-        console.log(' -- mixin created -- ')
-        this.loadData();
-        //初始化字典配置 在自己页面定义
-        this.initDictConfig();
-      }
+  mounted() {
+    if(this.startList){
+
+    }else{
+       this.loadData();
+    }
+    //初始化字典配置 在自己页面定义
+    this.initDictConfig();
   },
-  methods:{
-    loadData(arg) {
-      if(!this.url.list){
+  methods: {
+    // 二级树
+    expand(expanded,record){
+        if(this.url.listTwo){
+            var param = {}
+            param.field = this.getQueryField();
+            param.pageNo = this.ipagination.current;
+            param.pageSize = this.ipagination.pageSize;
+            param.parentId = record.id
+            if(expanded){
+                getAction(this.url.listTwo, filterObj(param)).then((res) => {
+                    if (res.success) {
+                        record.innerData=res.result.records.map((item,index)=>{
+                            return {
+                                ...item,
+                                key:index
+                            }
+                        })
+                        console.log(record.innerData)
+                        record.innerData = transformTozTreeFormat( record.innerData)
+                    }
+                    if (res.code === 510) {
+                      this.$message.warning(res.message)
+                    }
+                    this.loading = false;
+                })
+            }else{
+                record.innerData = []
+            }
+        }
+    },
+    async loadData(arg) {
+      this.dataSource = []
+      if (!this.url.list) {
         this.$message.error("请设置url.list属性!")
         return
       }
@@ -91,45 +103,61 @@ export const JeecgListMixin = {
         this.ipagination.current = 1;
       }
       var params = this.getQueryParams();//查询条件
+      if(params.createTime){
+        params.createTime = moment(params.createTime).format('YYYY-MM-DD')
+      }
       this.loading = true;
-      getAction(this.url.list, params).then((res) => {
+      await getAction(this.url.list, params).then((res) => {
         if (res.success) {
-          this.dataSource = res.result.records;
-          this.ipagination.total = res.result.total;
+            this.dataSource = res.result.records.map(item=>{
+                return {
+                    ...item,
+                    innerData:[],
+                    showVideo:false
+                }
+            })
+            this.ipagination.total = res.result.total;
         }
-        if(res.code===510){
+        if (res.code === 510) {
           this.$message.warning(res.message)
         }
         this.loading = false;
       })
     },
-    initDictConfig(){
-      console.log("--这是一个假的方法!")
+    initDictConfig() {
+    //   console.log("--这是一个假的方法!")
     },
-    handleSuperQuery(params, matchType) {
+    handleSuperQuery(arg) {
       //高级查询方法
-      if(!params){
-        this.superQueryParams=''
+      if (!arg) {
+        this.superQueryParams = ''
         this.superQueryFlag = false
-      }else{
+      } else {
         this.superQueryFlag = true
-        this.superQueryParams=JSON.stringify(params)
-        this.superQueryMatchType = matchType
+        this.superQueryParams = JSON.stringify(arg)
       }
-      this.loadData(1)
+      this.loadData()
+    },
+    editDate(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
     },
     getQueryParams() {
       //获取查询条件
       let sqp = {}
-      if(this.superQueryParams){
-        sqp['superQueryParams']=encodeURI(this.superQueryParams)
-        sqp['superQueryMatchType'] = this.superQueryMatchType
+      if (this.superQueryParams) {
+        sqp['superQueryParams'] = encodeURI(this.superQueryParams)
       }
-      var param = Object.assign(sqp, this.queryParam, this.isorter ,this.filters);
-      param.field = this.getQueryField();
+      console.log(this.queryParam)
+      var param = {...this.queryParam,...this.isorter, ...this.filters}
       param.pageNo = this.ipagination.current;
       param.pageSize = this.ipagination.pageSize;
-      return filterObj(param);
+      return param
     },
     getQueryField() {
       //TODO 字段权限控制
@@ -159,7 +187,7 @@ export const JeecgListMixin = {
       this.loadData(1);
     },
     batchDel: function () {
-      if(!this.url.deleteBatch){
+      if (!this.url.deleteBatch) {
         this.$message.error("请设置url.deleteBatch属性!")
         return
       }
@@ -176,7 +204,6 @@ export const JeecgListMixin = {
           title: "确认删除",
           content: "是否删除选中数据?",
           onOk: function () {
-            that.loading = true;
             deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => {
               if (res.success) {
                 that.$message.success(res.message);
@@ -185,15 +212,13 @@ export const JeecgListMixin = {
               } else {
                 that.$message.warning(res.message);
               }
-            }).finally(() => {
-              that.loading = false;
             });
           }
         });
       }
     },
     handleDelete: function (id) {
-      if(!this.url.delete){
+      if (!this.url.delete) {
         this.$message.error("请设置url.delete属性!")
         return
       }
@@ -207,16 +232,30 @@ export const JeecgListMixin = {
         }
       });
     },
-    handleEdit: function (record) {
-      this.$refs.modalForm.edit(record);
+    handleEdit: function (record,sign) {
+        console.log(record,sign)
+      this.$refs.modalForm.edit(record,sign);
       this.$refs.modalForm.title = "编辑";
       this.$refs.modalForm.disableSubmit = false;
+      if(sign == 'preview'){
+        this.$refs.modalForm.title = "预览";
+      }
+    },
+    handleImagePreview: function (record) {
+        this.$refs.modalForm.imagePreview(record);
+        this.$refs.modalForm.title = "预览";
+        this.$refs.modalForm.disableSubmit = false;
     },
-    handleAdd: function () {
-      this.$refs.modalForm.add();
+    handleAdd: function (sign) {
+      this.$refs.modalForm.add(sign);
       this.$refs.modalForm.title = "新增";
       this.$refs.modalForm.disableSubmit = false;
     },
+    handleOpen: function () {
+      this.$refs.userForm.open();
+      this.$refs.userForm.title = "选择";
+      this.$refs.userForm.disableSubmit = false;
+    },
     handleTableChange(pagination, filters, sorter) {
       //分页、排序、筛选变化时触发
       //TODO 筛选
@@ -227,50 +266,46 @@ export const JeecgListMixin = {
       this.ipagination = pagination;
       this.loadData();
     },
-    handleToggleSearch(){
+    handleToggleSearch() {
       this.toggleSearchStatus = !this.toggleSearchStatus;
     },
-    // 给popup查询使用(查询区域不支持回填多个字段,限制只返回一个字段)
-    getPopupField(fields){
-      return fields.split(',')[0]
-    },
     modalFormOk() {
       // 新增/修改 成功时,重载列表
       this.loadData();
     },
-    handleDetail:function(record){
+    handleDetail: function (record) {
       this.$refs.modalForm.edit(record);
-      this.$refs.modalForm.title="详情";
+      this.$refs.modalForm.title = "详情";
       this.$refs.modalForm.disableSubmit = true;
     },
     /* 导出 */
-    handleExportXls2(){
+    handleExportXls2() {
       let paramsStr = encodeURI(JSON.stringify(this.getQueryParams()));
       let url = `${window._CONFIG['domianURL']}/${this.url.exportXlsUrl}?paramsStr=${paramsStr}`;
       window.location.href = url;
     },
-    handleExportXls(fileName){
-      if(!fileName || typeof fileName != "string"){
+    handleExportXls(fileName) {
+      if (!fileName || typeof fileName != "string") {
         fileName = "导出文件"
       }
       let param = {...this.queryParam};
-      if(this.selectedRowKeys && this.selectedRowKeys.length>0){
+      if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
         param['selections'] = this.selectedRowKeys.join(",")
       }
-      console.log("导出参数",param)
-      downFile(this.url.exportXlsUrl,param).then((data)=>{
+      console.log("导出参数", param)
+      downFile(this.url.exportXlsUrl, param).then((data) => {
         if (!data) {
           this.$message.warning("文件下载失败")
           return
         }
         if (typeof window.navigator.msSaveBlob !== 'undefined') {
-          window.navigator.msSaveBlob(new Blob([data],{type: 'application/vnd.ms-excel'}), fileName+'.xls')
-        }else{
-          let url = window.URL.createObjectURL(new Blob([data],{type: 'application/vnd.ms-excel'}))
+          window.navigator.msSaveBlob(new Blob([data]), fileName + '.xls')
+        } else {
+          let url = window.URL.createObjectURL(new Blob([data]))
           let link = document.createElement('a')
           link.style.display = 'none'
           link.href = url
-          link.setAttribute('download', fileName+'.xls')
+          link.setAttribute('download', fileName + '.xls')
           document.body.appendChild(link)
           link.click()
           document.body.removeChild(link); //下载完成移除元素
@@ -279,29 +314,14 @@ export const JeecgListMixin = {
       })
     },
     /* 导入 */
-    handleImportExcel(info){
+    handleImportExcel(info) {
       if (info.file.status !== 'uploading') {
         console.log(info.file, info.fileList);
       }
       if (info.file.status === 'done') {
         if (info.file.response.success) {
-          // this.$message.success(`${info.file.name} 文件上传成功`);
-          if (info.file.response.code === 201) {
-            let { message, result: { msg, fileUrl, fileName } } = info.file.response
-            let href = window._CONFIG['domianURL'] + fileUrl
-            this.$warning({
-              title: message,
-              content: (
-                `<div>
-                  <span>{msg}</span><br/>
-                  <span>具体详情请 <a href={href} target="_blank" download={fileName}>点击下载</a> </span>
-                </div>`
-              )
-            })
-          } else {
-            this.$message.success(info.file.response.message || `${info.file.name} 文件上传成功`)
-          }
-          this.loadData()
+          this.$message.success(`${info.file.name} 文件上传成功`);
+          this.loadData();
         } else {
           this.$message.error(`${info.file.name} ${info.file.response.message}.`);
         }
@@ -310,23 +330,22 @@ export const JeecgListMixin = {
       }
     },
     /* 图片预览 */
-    getImgView(text){
-      if(text && text.indexOf(",")>0){
-        text = text.substring(0,text.indexOf(","))
+    getImgView(text) {
+      if (text && text.indexOf(",") > 0) {
+        text = text.substring(0, text.indexOf(","))
       }
-      return getFileAccessHttpUrl(text)
+      return window._CONFIG['imgDomainURL'] + "/" + text
     },
     /* 文件下载 */
-    uploadFile(text){
-      if(!text){
+    uploadFile(text) {
+      if (!text) {
         this.$message.warning("未知的文件")
         return;
       }
-      if(text.indexOf(",")>0){
-        text = text.substring(0,text.indexOf(","))
+      if (text.indexOf(",") > 0) {
+        text = text.substring(0, text.indexOf(","))
       }
-      let url = getFileAccessHttpUrl(text)
-      window.open(url);
+      window.open(window._CONFIG['domianURL'] + "/sys/common/download/" + text);
     },
   }
 

+ 29 - 0
src/utils/util.js

@@ -478,3 +478,32 @@ export function replaceAll(text, checker, replacer) {
   }
   return text
 }
+
+
+export const transformTozTreeFormat = (sNodes, setting={}) => { 
+    var i, l,
+        key = setting.idKey || 'id',
+        parentKey = setting.parentKey || 'parentId',
+        childKey = setting.childKey || 'children';
+    if (!key || key == "" || !sNodes) return [];
+
+    if (isArray(sNodes)) {
+        var r = [];
+        var tmpMap = {};
+        for (i = 0, l = sNodes.length; i < l; i++) {
+            tmpMap[sNodes[i][key]] = sNodes[i];
+        }
+        for (i = 0, l = sNodes.length; i < l; i++) {
+            if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
+                if (!tmpMap[sNodes[i][parentKey]][childKey])
+                    tmpMap[sNodes[i][parentKey]][childKey] = [];
+                tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
+            } else {
+                r.push(sNodes[i]);
+            }
+        }
+        return r;
+    } else {
+        return [sNodes];
+    }
+}

+ 17 - 34
vue.config.js

@@ -1,10 +1,9 @@
 const path = require('path')
-const CompressionPlugin = require("compression-webpack-plugin")
 
 function resolve(dir) {
   return path.join(__dirname, dir)
 }
-var appData = require('./json/video.json')//加载本地数据文件
+// var appData = require('./json/video.json')//加载本地数据文件
 
 // vue.config.js
 module.exports = {
@@ -15,16 +14,16 @@ module.exports = {
    */
   // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
   productionSourceMap: false,
-
-
-  //打包app时放开该配置
-  //publicPath:'./',
-  configureWebpack: config => {
-    //生产环境取消 console.log
-    if (process.env.NODE_ENV === 'production') {
-      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
+  /*
+  pages: {
+    index: {
+      entry: 'src/main.js',
+      chunks: ['chunk-vendors', 'chunk-common', 'index']
     }
   },
+  */
+  configureWebpack: {},
+
   chainWebpack: (config) => {
     config.resolve.alias
       .set('@$', resolve('src'))
@@ -34,24 +33,6 @@ module.exports = {
       .set('@views', resolve('src/views'))
       .set('@layout', resolve('src/layout'))
       .set('@static', resolve('src/static'))
-      .set('@mobile', resolve('src/modules/mobile'))
-
-    //生产环境,开启js\css压缩
-    if (process.env.NODE_ENV === 'production') {
-        config.plugin('compressionPlugin').use(new CompressionPlugin({
-          test: /\.js$|.\css|.\less/, // 匹配文件名
-          threshold: 10240, // 对超过10k的数据压缩
-          deleteOriginalAssets: false // 不删除源文件
-        }))
-    }
-
-    // 配置 webpack 识别 markdown 为普通的文件
-    config.module
-      .rule('markdown')
-      .test(/\.md$/)
-      .use()
-      .loader('file-loader')
-      .end()
   },
 
   css: {
@@ -59,9 +40,12 @@ module.exports = {
       less: {
         modifyVars: {
           /* less 变量覆盖,用于自定义 ant design 主题 */
-          'primary-color': '#1890FF',
-          'link-color': '#1890FF',
+
+          /*
+          'primary-color': '#F5222D',
+          'link-color': '#F5222D',
           'border-radius-base': '4px',
+          */
         },
         javascriptEnabled: true,
       }
@@ -75,16 +59,15 @@ module.exports = {
         // target: 'http://192.168.1.90:8080', //请求本地 需要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:8804', //请求本地 需要jeecg-boot后台项目  孙震
+        // target: 'http://192.168.1.94:8088', //请求本地 需要jeecg-boot后台项目  孙震
         // target: 'http://192.168.0.230:8088', //请求本地 需要jeecg-boot后台项目  孙震
         // target: 'http://192.168.1.51:8088', //请求本地 需要jeecg-boot后台项目  毕洁泉
         // target: 'http://192.168.1.165:8848', //请求本地 需要jeecg-boot后台项目  毕洁泉
-        target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目 
+        // target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目 
         // target: 'https://trac.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目 
         // target: 'http://39.106.184.70:8088/', //请求本地 需要jeecg-boot后台项目 
         // target: 'http://adsp.tjyourong.com.cn/', //请求本地 需要jeecg-boot后台项目 
-        // target: 'http://192.168.1.251/', //请求本地 需要jeecg-boot后台项目 
-
+        target: 'http://192.168.1.251/', //请求本地 需要jeecg-boot后台项目 
 
         ws: false,
         changeOrigin: true,