Browse Source

专题库新增

zhuliu 1 năm trước cách đây
mục cha
commit
f1a75e96c8

+ 0 - 5
src/directives/permission.js

@@ -1,5 +0,0 @@
-import Store from '@/store'
-
-export const hasPermission = (sign) => {
-    return (Store.state.admin.permission).indexOf(sign) !== -1
-  }

+ 5 - 9
src/main.js

@@ -13,7 +13,6 @@ import Particles from 'vue-particles'
 import { formatTableDate } from "./utils";
 import Config from './config'
 import Storage from './utils/storage'
-import { hasRole } from './utils/permissions'
 require('./assets/css/fix.scss')
 require('./assets/css/layout.less')
 import './icons'
@@ -24,13 +23,11 @@ import "@/assets/css/theme.css"
 import "@/assets/css/main.scss"
 
 
-//是否有功能权限
-import {hasPermission} from './directives/permission';
-Vue.prototype.$permission = hasPermission
-
-//报告的权限
-import {reportPermission} from '@/utils/reportPermission'
-Vue.prototype.$reportPermission = reportPermission
+//专题库权限、报告的权限、是否有功能权限
+import permission from './utils/permissions'
+Vue.prototype.$r = permission.hasRole
+Vue.prototype.$permission = permission.hasPermission
+Vue.prototype.$reportPermission = permission.reportPermission
 
 //组件库
 import model from './utils/model'
@@ -63,7 +60,6 @@ Vue.prototype.$d = formatTableDate//格式化时间
 Vue.prototype.$c = Config//配置信息
 Vue.prototype.$s = Storage//本地存储
 Vue.prototype.$_ = lodash
-Vue.prototype.$r = hasRole//专题库权限
 Vue.use(Charts)
 Vue.use(Particles)
 

+ 1 - 1
src/utils/axios.js

@@ -62,7 +62,7 @@ _axios.interceptors.response.use(
     }
     if (code === 401) {
       Router.push({
-        path: `${Store.getters.prefix}/login`
+        path: `/login`
       }).then(r => {})
       return Promise.reject(response.data)
     }

+ 95 - 45
src/utils/model/RichText/index.vue

@@ -50,11 +50,11 @@ export default {
   created() {},
   mounted() {},
   methods: {
-    open(){
-      console.log(1)
-    },
-   async handlePaste(event){
-      
+
+    //粘贴
+   async handlePaste(e){
+    var event = e || window.event
+    event.preventDefault();
       const items = (event.clipboardData || window.clipboardData).items;
       let file = null;
       if (!items || items.length === 0) {
@@ -62,20 +62,13 @@ export default {
         return;
       }
       for (let i = 0; i < items.length; i++) {
-        // if (items[i].type.indexOf("text") !== -1) {
-        //   var text =  (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本');
-        //   //清除回车
-        //   text = text.replace(/\[\d+\]|\n|\r/ig,"")
-        //   var content = event.target.innerHTML
-        //   var str2 = content.slice(0, index.endOffset) + text + content.slice(index.endOffset);
-        //   event.target.innerHTML = str2
-        //   this.saveValue(event)
-        //   // this.$forceUpdate()
-        //   // if(this.tableHeight){
-        //   //   this.setHeight()
-        //   // }
-        //   break;
-        // }
+        if (items[i].type.indexOf("text") !== -1) {
+          var text =  (event.originalEvent || event).clipboardData.getData('text/plain') ||'';
+          text = text.replace(/\n{1,}/g,'</br>')
+          var text2 = `<span>${text}</span>`
+          this.setCursor(event,text2,1)
+          break;
+        }
         if (items[i].type.indexOf("image") !== -1) {
           var e = event || window.event
           e.preventDefault();
@@ -86,7 +79,6 @@ export default {
       if (!file) {
         return;
       }
-      var content = event.target.innerHTML
       var str = await this.fileToBase64(file)
       var randNum=Math.floor(Math.random()*(9999-1000))+1000;;
       var new_img = '<img key="'+ randNum +'" src="' + str + '" style="width:80px;height: 80px;border: 1px solid #f9f6f675;vertical-align:middle">';
@@ -106,29 +98,31 @@ export default {
 //                 selection.addRange(range);
 // console.log(event.target.innerHTML)
       var index = window.getSelection().getRangeAt(0)
-      var indexText = this.getColumn(event.target,window.getSelection())
-      var index2 = 0
-      var str2 = content.slice(0, indexText) + new_img + content.slice(indexText);
-      event.target.innerHTML = str2
-      this.$nextTick(()=>{
-        var selectedText = window.getSelection();
-      var selectedRange = document.createRange();
-      try{
-        for(var i=0;i<event.target.childNodes.length;i++){
-          if(event.target.childNodes[i].outerHTML == new_img){
-            index2 = i
-            throw new Error()
-          }
-        }
-      }catch{
 
-      }
-      selectedRange.setStart(event.target,index2+1);
-      selectedRange.collapse(true);
-      selectedText.removeAllRanges();
-      selectedText.addRange(selectedRange);
-      event.target.parentNode.focus(); 
-      })
+      this.setCursor(event,new_img,2)
+      // var indexText = this.getColumn(event.target,window.getSelection())
+      // var index2 = 0
+      // var str2 = content.slice(0, indexText) + new_img + content.slice(indexText);
+      // event.target.innerHTML = str2
+      // this.$nextTick(()=>{
+      //   var selectedText = window.getSelection();
+      // var selectedRange = document.createRange();
+      // try{
+      //   for(var i=0;i<event.target.childNodes.length;i++){
+      //     if(event.target.childNodes[i].outerHTML == new_img){
+      //       index2 = i
+      //       throw new Error()
+      //     }
+      //   }
+      // }catch{
+
+      // }
+      // selectedRange.setStart(event.target,index2+1);
+      // selectedRange.collapse(true);
+      // selectedText.removeAllRanges();
+      // selectedText.addRange(selectedRange);
+      // event.target.parentNode.focus(); 
+      // })
       
       // this.saveValue(event)
       // var selection = window.getSelection()
@@ -136,6 +130,61 @@ export default {
       // console.log(window.getSelection().getRangeAt(0))
      
     },
+    //设置光标位置
+    setCursor(event,str,type){
+          var content = event.target.innerHTML
+          // previousSibling
+          var indexText = this.getColumn(event.target,window.getSelection())
+          var index2 = 0
+          var childNodes = event.target.childNodes
+          if(!content){
+            if(event.target.nodeName == 'BR'){
+              event.target.parentNode.innerHTML = str
+              var selectedRange = document.createRange();
+              selectedRange.setStart(event.target,index2);
+              return false
+            }else{
+              event.target.innerHTML = str
+            }
+          }else{
+            content = content.replace(/&nbsp;/g,'\r')
+            var str2 = content.slice(0, indexText) + str + content.slice(indexText);
+            event.target.innerHTML = str2.replace(/\r/g,'&nbsp;')
+          }
+          
+            // console.log(event.currentTarget.childNodes)
+            // if(event.target.nodeName == 'BR'){
+            //   event.target.nodeName = 'SPAN'
+            //   event.target.innerHTML = '</br>' + str2
+            // }
+          this.$nextTick(()=>{
+            var selectedText = window.getSelection();
+          var selectedRange = document.createRange();
+          try{
+            for(var i=0;i<childNodes.length;i++){
+                var html = childNodes[i].outerHTML
+                if(type == 1){
+                  if(html){
+                    html = html.replace(/\r{1,}|\n{1,}|\r\n{1,}/g,'')
+                    str = html.replace(/\r{1,}|\n{1,}|\r\n{1,}/g,'')
+                  }
+                }
+                if(html == str){
+                  index2 = i
+                  throw new Error()
+                }
+              
+            }
+          }catch{
+
+          }
+          selectedRange.setStart(event.target,index2+1);
+          selectedRange.collapse(true);
+          selectedText.removeAllRanges();
+          selectedText.addRange(selectedRange);
+          event.target.parentNode.focus(); 
+          })
+    },
     getColumn(node, selectObj) {
       var baseNode = node;
       var anchorNodePosition = this.getPosition(baseNode, selectObj.anchorNode, selectObj.anchorOffset);
@@ -172,6 +221,7 @@ export default {
           }
         }
       }
+      return retIdx
     },
     // 将file文件上传转化为base64进行显示
     fileToBase64(file) {
@@ -198,9 +248,9 @@ export default {
 .edit-box{
   overflow-x: hidden;
     text-overflow: ellipsis;
-  padding: 0 15px;
-    min-height:40px;
-    line-height: 40px;
+    padding: 10px 15px;
+    // min-height:27px;
+    line-height: 1.5;
     outline: #dcdfe6;
     border:1px solid #DCDFE6;
     border-radius:5px;

+ 40 - 7
src/utils/permissions.js

@@ -1,10 +1,43 @@
 import Store from '@/store'
 
-export const hasRole = (projectId, roles) => {
-  if (!projectId) {
-    return true
+export default {
+  //专题库权限
+  hasRole(projectId, roles){
+    if (!projectId) {
+      return true
+    }
+    const permissions = Store.getters && Store.getters.permissions
+    const p = permissions[projectId]
+    return p === 0 || roles.indexOf(p) !== -1
+  },
+  //专题库权限
+  hasPermission(sign){
+    return (Store.state.admin.permission).indexOf(sign) !== -1
+  },
+  //报告权限
+  reportPermission(reportId, roles){
+    if(!reportId){
+        return true
+    }
+  const role = Store.state.user.userinfo
+    if(role.roleType === 1){
+        return true
+    }
+    const permissions = Store.getters && Store.getters.permissions
+    if(Object.keys(permissions).length==0){
+        return true
+    }
+    const reportRole = permissions[reportId]
+    if(!reportRole){
+        return true
+    }
+        var result = false
+        for(var item of reportRole){
+            if(roles.includes(item)){
+                result = true
+                break
+            }
+        }
+    return result
   }
-  const permissions = Store.getters && Store.getters.permissions
-  const p = permissions[projectId]
-  return p === 0 || roles.indexOf(p) !== -1
-}
+}

+ 0 - 27
src/utils/reportPermission.js

@@ -1,27 +0,0 @@
-import Store from '@/store'
-
-export const reportPermission = (reportId, roles) => {
-    if(!reportId){
-        return true
-    }
-  const role = Store.state.user.userinfo
-    if(role.roleType === 1){
-        return true
-    }
-    const permissions = Store.getters && Store.getters.permissions
-    if(Object.keys(permissions).length==0){
-        return true
-    }
-    const reportRole = permissions[reportId]
-    if(!reportRole){
-        return true
-    }
-        var result = false
-        for(var item of reportRole){
-            if(roles.includes(item)){
-                result = true
-                break
-            }
-        }
-    return result
-  }

+ 1 - 4
src/views/event/components/index.vue

@@ -221,10 +221,7 @@ export default {
           }
         }
       })
-      this.showView = false
-      this.$nextTick(() => {
-        this.showView = true
-      })
+      this.showViews()
     },
     //获取检索条件检索
     search(val) {

+ 0 - 25
src/views/home/components/showDialog.js

@@ -1,25 +0,0 @@
-import showDialog from './visualDialog.vue'
-import Vue from 'vue'
-import router from '@/router'
-const Toast = {};
-
-// 注册Toast
-
-Toast.install = function(Vue) {
-    const ToastConstructor = Vue.extend(showDialog)
-
-    const instance = new ToastConstructor({ router });
-
-    instance.$mount()
-    document.body.appendChild(instance.$el)
-
-
-    Vue.prototype.$showDialog = (msg, flag, id, duration = 1500) => {
-        instance.visuals = msg;
-        instance.dialogVisible = flag;
-        instance.id = id
-    }
-
-}
-
-export default Toast

+ 5 - 1
src/views/product/components/dialog/addEditProduct.vue

@@ -6,6 +6,7 @@
         <el-form-item label="所属产品类别" prop="categoryId">
           <el-select
             v-model="form.categoryId"
+            :disabled="!form.id"
             filterable
             remote
             reserve-keyword
@@ -188,7 +189,10 @@ export default {
         }
        await this.getProductCategory(params,1)
       }
-      this.getProductCategory(this.productCategoryList.queryParams);
+      if(!this.form.id){
+        this.getProductCategory(this.productCategoryList.queryParams);
+      }
+      
       this.dialogVisible = true;
     },
     // 弹窗确定

+ 12 - 5
src/views/product/components/index.vue

@@ -15,7 +15,8 @@
             </el-select>
           </div> -->
           <div style="margin:0 10px;">
-            <el-dropdown trigger="click" split-button type="primary" size="small" >
+            <el-button type="primary" size="small" @click="handleCommand('0')">新增类别</el-button>
+            <!-- <el-dropdown trigger="click" split-button type="primary" size="small" >
               <span @click="handleCommand('0')">新增类别</span>
               <el-dropdown-menu slot="dropdown" class="text-align_center">
                 <el-dropdown-item>
@@ -28,7 +29,7 @@
                   </el-dropdown>
                 </el-dropdown-item>
               </el-dropdown-menu>
-            </el-dropdown>
+            </el-dropdown> -->
           </div>
         </div>
       </el-header>
@@ -193,6 +194,12 @@ export default {
         case '5'://删 除
           this.deletes(row)
           break;
+        case '7':
+          this.handleCommand('1',row.id)
+          break;
+        case '8':
+          this.handleCommand('2',row.id)
+          break;
         default:
           break;
       }
@@ -285,13 +292,13 @@ export default {
       });
     },
     // 右侧新增类别、产品
-    handleCommand(event) {
+    handleCommand(event,categoryId) {
       if (event == '0') {//新增类别
         this.$refs.addEditCategory.open({})
       } else if (event == '1') {//新增本公司产品
-        this.$refs.addEditProduct.open({isTheCompany:'1'})
+        this.$refs.addEditProduct.open({isTheCompany:'1',categoryId:categoryId})
       } else {//新增外公司产品
-        this.$refs.addEditProduct.open({isTheCompany:'2'})
+        this.$refs.addEditProduct.open({isTheCompany:'2',categoryId:categoryId})
       }
     },
     //获取子组件信息

+ 9 - 0
src/views/product/components/view/categoryTable.vue

@@ -25,6 +25,15 @@
             @command="handleCommand($event, scope.row)">
             <span>编 辑</span>
             <el-dropdown-menu slot="dropdown" style="text-align:center">
+              <el-dropdown-item>
+                  <el-dropdown trigger="hover" placement="left-start" @command="handleCommand($event,scope.row)">
+                    <span class="el-dropdown-link">新增产品</span>
+                    <el-dropdown-menu  class="text-align_center">
+                      <el-dropdown-item command="7">新增本公司产品</el-dropdown-item>
+                      <el-dropdown-item command="8">新增外公司产品</el-dropdown-item>
+                    </el-dropdown-menu>
+                  </el-dropdown>
+                </el-dropdown-item>
               <el-dropdown-item command="1">趋势图</el-dropdown-item>
               <el-dropdown-item command="2">预览图片</el-dropdown-item>
               <el-dropdown-item command="3">分类架构</el-dropdown-item>

+ 11 - 6
src/views/project/components/drawer/form.vue

@@ -31,7 +31,7 @@
               <mySelectTree style="width:100%" v-model="ruleForm.departmentId" :options="departmentList"></mySelectTree>
             </el-form-item>
             <el-form-item label="负责人" prop="person">
-              <el-select style="width:100%" v-model="ruleForm.headId" filterable remote clearable placeholder="请选择"
+              <el-select style="width:100%" v-model.number="ruleForm.headId" filterable remote clearable placeholder="请选择"
                 :loading="personnelList.loading" v-SelectLazyLoading="loadHead" :remote-method="remoteMethod">
                 <el-option v-for="item in personnelList.data" :key="item.id" :label="item.name" :value="item.id">
                 </el-option>
@@ -150,8 +150,7 @@
             </el-form-item>
           </el-form>
         </el-main>
-        <el-footer class="footer-common"
-          v-if="($permission('/workspace/project/modify') || $permission('/workspace/project/add')) && ($r(ruleForm.id, [2]) || userinfo.id == ruleForm.createBy)">
+        <el-footer class="footer-common">
           <el-button @click="close">取 消</el-button>
           <el-button type="primary" @click="submit" :loading="loading">确 定</el-button>
         </el-footer>
@@ -347,6 +346,14 @@ export default {
       this.ruleForm = JSON.parse(JSON.stringify(form))
       //获取部门列表
       this.getDepartment()
+      if(this.ruleForm.scenarioIds && this.ruleForm.scenarioIds.length!=0){
+        this.show=true
+        this.onChange()
+      }else{
+        this.ruleForm.scenarioIds = []
+        this.show=false
+      }
+      this.personnelList.data = []
       if(this.ruleForm.headId){
         this.personnelList.queryParams.id = this.ruleForm.headId
         await this.getPersonnelList(1)
@@ -354,8 +361,6 @@ export default {
       }
       //获取人员列表
       this.getPersonnelList()
-     
-      
       this.title = title
       this.drawer = true
     },
@@ -389,7 +394,7 @@ export default {
           this.personnelList.loading = false;
           if(!type){
             var index = response.data.findIndex(item=>{
-                return item.id == this.form.headId
+                return item.id == this.ruleForm.headId
               })
               if(index!=-1){
                 response.data.splice(index,1)

+ 2 - 2
src/views/project/components/mixins/index.js

@@ -32,7 +32,7 @@ export const workspaceOptions = {
     //操作列
     handleCommand(event, row) {
       var isLast = false
-      if(option == 10){
+      if(event == 10){
         this.action={
           type:'1',
           id:row.id
@@ -41,7 +41,7 @@ export const workspaceOptions = {
           isLast = true
         }
       }
-      if(option == 'e'){
+      if(event == 'e'){
         this.action={
           type:'2',
           id:row.id

+ 3 - 3
src/views/project/components/view/table.vue

@@ -1,7 +1,7 @@
 <template>
-  <div class="height_100"  v-DivHeight="getDivHeight">
+  <div class="height_100">
       <el-table :data="tableData" border style="width: 100%" header-row-class-name="custom-table-header"
-        @sort-change="sortChange"  v-if="showTable" :maxHeight="tableHeight" v-el-table-infinite-scroll="getList" :infinite-scroll-distance="10" 
+        @sort-change="sortChange"  v-el-table-infinite-scroll="getList" :infinite-scroll-distance="10" 
         :infinite-scroll-disabled="disabled">
         <el-table-column label="#" width="60" type="index" align="center">
           <template slot-scope="scope">
@@ -9,7 +9,7 @@
           </template>
         </el-table-column>
 
-        <el-table-column v-for="item in column" :key="item.value" :prop="item.value" :label="item.name" sortable="custom" align="center">
+        <el-table-column v-for="item in column.filter(item=>!item.ifHidden)" :key="item.value" :prop="item.value" :label="item.name" sortable="custom" align="center">
           <template slot-scope="scope">
             <div v-if="['name', 'eventNumber', 'projectNumber'].includes(item.value)">
               <el-link @click="handleItem(scope.row, item.value)">{{ scope.row[item.value] }}</el-link>

+ 26 - 8
src/views/project/index.vue

@@ -50,7 +50,7 @@
           </el-header>
           <el-main class="workspace-main">
             <div v-loading="loading">
-              <component :is="viewType" v-bind="$attrs" v-on="$listeners" :isOperate="isOperate" :tableData="dataList" :group="group" :queryParams="queryParams" :column="fieldList" @option="handleOption"
+              <component v-if="showView" :is="viewType" v-bind="$attrs" v-on="$listeners" :isOperate="isOperate" :tableData="dataList" :group="group" :queryParams="queryParams" :column="fieldList" @option="handleOption"
                 @on-sort="handleSort"></component>
             </div>
             <div class="pagination" v-if="[2].indexOf(isOperate) == -1">
@@ -158,6 +158,8 @@ export default {
       fieldList: [],
       //接受子组件消息
       handleMessage:'',
+      //显示视图
+      showView: false,
     };
   },
   watch: {},
@@ -189,8 +191,16 @@ export default {
 
     //获取专题库列表
     this.getList()
+    this.showViews()
   },
   methods: {
+    //显示视图?
+    showViews() {
+      this.showView = false
+      this.$nextTick(() => {
+        this.showView = true
+      })
+    },
     //获取自定义栏位
     getFieldList(data){
       this.fieldList  = data
@@ -435,15 +445,23 @@ export default {
     },
     //删除专题库
     deletePatentProject(ids){
-      this.$api.deletePatentProject(ids).then(response=>{
-        if(response.code == 200){
-          this.handleMessage = '删除成功'
-          if(!this.group){
-            this.getList()
+      this.$confirm('此操作将删除该产品类别, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$api.deletePatentProject(ids).then(response=>{
+          if(response.code == 200){
+            this.handleMessage = '删除成功'
+            this.$message.success('删除成功!');
+            if(!this.group){
+              this.getList()
+            }
+            this.clearMessage()
           }
-          this.clearMessage()
-        }
+        })
       })
+      
     },
     //编辑专题库
     handleEdit(row) {