Explorar o código

Merge branch 'master' of http://47.110.251.215:3000/web/saber into master

admin %!s(int64=3) %!d(string=hai) anos
pai
achega
782d9a652b

+ 135 - 0
src/components/tree-tree/main.vue

@@ -0,0 +1,135 @@
+<template>
+  <div class="flex pd-20">
+    <el-card class="box-card flex1">
+      <div slot="header" class="clearfix">
+        <span>{{leftNum}}项</span>
+      </div>
+      <div>
+        <el-scrollbar :style="scrollbarStyle">
+          <el-tree show-checkbox
+            :data="leftTreeData" @check-change="checkChange('leftTree')"
+            :props="defaultProps" :expand-on-click-node="false"
+            highlight-current node-key="id"
+            ref="leftTree" @node-expand="nodeExpand">
+          </el-tree>
+        </el-scrollbar>
+      </div>
+    </el-card>
+    <div class="flex flex-d-c flex-center" style="width:50px;">
+      <div><el-button @click="addTree" size="mini" icon="el-icon-arrow-right"></el-button></div>
+      <div><el-button @click="delTree" size="mini" icon="el-icon-arrow-left"></el-button></div>
+      
+    </div>
+    <el-card class="box-card flex1">
+      <div slot="header" class="clearfix">
+        <span>{{rightNum}}项</span>
+      </div>
+      <div>
+        <el-scrollbar :style="scrollbarStyle">
+          <el-tree show-checkbox
+            :data="rightTreeData" @check-change="checkChange('rightTree')"
+            :props="defaultProps" :expand-on-click-node="false"
+            highlight-current node-key="id"
+            ref="rightTree" :default-expanded-keys="rightExpands">
+          </el-tree>
+        </el-scrollbar>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "treeTree",
+  props: {
+    leftTreeData: {
+      type: Array,
+      default: function () {
+        return [];
+      }
+    },
+    scrollbarStyle:{
+      type:String,
+      default:'height:calc(100vh - 400px)'
+    }
+  },
+  computed: {
+    
+  },
+  data(){
+    return{
+      defaultProps: {
+        children: 'children',
+        label: 'title',
+      },
+      leftNum:0,
+      rightTreeData:[],
+      rightNum:0,
+      rightExpands:[],
+    }
+  },
+
+  methods:{
+    addTree(){
+      //console.log(this.$refs.leftTree.getCheckedNodes())
+      let allTree = JSON.parse(JSON.stringify(this.leftTreeData));
+
+      //把半选和选中的数组key合并
+      let keys = this.$refs.leftTree.getCheckedKeys().concat(this.$refs.leftTree.getHalfCheckedKeys());
+      //console.log(keys,'keys');
+      //console.log(allTree,'allTree');
+      this.getRightTree(allTree,keys);
+      this.rightTreeData = allTree;
+    },
+    getRightTree(arr,keys){
+      //对比所有的node和选中的key
+      for (let i = arr.length-1; i >= 0; i--) {
+        let isIn = false;
+        for (let j = keys.length-1; j >= 0; j--) {
+          if(keys[j] == arr[i].id){
+            isIn = true;
+            //已经匹配到的key移除,节省性能
+            keys.splice(j,1);
+            break;
+          }
+        }
+        if(isIn){
+          //包含在选中的节点,如果有childer继续递归判断
+          if(arr[i].children && arr[i].children.length){
+            this.getRightTree(arr[i].children,keys);
+          }
+        }else{
+          //不包含在选中key的node删除
+          arr.splice(i,1);
+        }
+      }
+    },
+    delTree(){
+      let delNodes = this.$refs.rightTree.getCheckedNodes();
+      //只把选中的节点移除
+      delNodes.forEach((node)=>{
+        //console.log(node)
+        this.$refs.rightTree.remove(node);
+        this.$refs.leftTree.setChecked(node.id,false);
+      })
+      this.rightNum = this.$refs.rightTree.getCheckedKeys().length;
+      this.leftNum = this.$refs.leftTree.getCheckedKeys().length;
+    },
+
+    nodeExpand(data){
+      this.rightExpands = this.rightExpands.concat([data.id]);
+    },
+
+    checkChange(treeName){
+      switch (treeName) {
+        case 'leftTree':
+          this.leftNum = this.$refs.leftTree.getCheckedKeys().length;
+          break;
+        case 'rightTree':
+          this.rightNum = this.$refs.rightTree.getCheckedKeys().length;
+          break;
+      }
+    },
+  }
+};
+</script>

+ 3 - 0
src/styles/common.scss

@@ -106,6 +106,9 @@ a{
   color: #f56c6c;
 }
 
+.text-success{color: #34c362;}
+.text-warning{color: #ec6421;}
+
 .text-align-c{text-align: center;}
 
 .custom-tree-node {

+ 16 - 113
src/views/manager/contractinfo/detail.vue

@@ -187,43 +187,7 @@
                 <el-option v-for="item in wbsList" :key="item.id" :label="item.wbsName" :value="item.id"></el-option>
               </el-select>
             </div>
-            <div class="flex pd-20">
-              <el-card class="box-card flex1">
-                <div slot="header" class="clearfix">
-                  <span>{{leftNum}}项</span>
-                </div>
-                <div>
-                  <el-scrollbar style="height:calc(100vh - 400px);">
-                    <el-tree show-checkbox
-                      :data="leftTreeData" @check-change="checkChange('leftTree')"
-                      :props="defaultProps" :expand-on-click-node="false"
-                      highlight-current node-key="id"
-                      ref="leftTree" @node-expand="nodeExpand">
-                    </el-tree>
-                  </el-scrollbar>
-                </div>
-              </el-card>
-              <div class="flex flex-d-c flex-center" style="width:50px;">
-                <div><el-button @click="addTree" size="mini" icon="el-icon-arrow-right"></el-button></div>
-                <div><el-button @click="delTree" size="mini" icon="el-icon-arrow-left"></el-button></div>
-                
-              </div>
-              <el-card class="box-card flex1">
-                <div slot="header" class="clearfix">
-                  <span>{{rightNum}}项</span>
-                </div>
-                <div>
-                  <el-scrollbar style="height:calc(100vh - 400px);">
-                    <el-tree show-checkbox
-                      :data="rightTreeData" @check-change="checkChange('rightTree')"
-                      :props="defaultProps" :expand-on-click-node="false"
-                      highlight-current node-key="id"
-                      ref="rightTree" :default-expanded-keys="rightExpands">
-                    </el-tree>
-                  </el-scrollbar>
-                </div>
-              </el-card>
-            </div>
+            <tree-tree :left-tree-data="leftTreeData"></tree-tree>
           </div>
         </el-tab-pane>
         <el-tab-pane label="分配项目人员" name="3">
@@ -305,7 +269,12 @@
   import {Base64} from 'js-base64';
   import {getToken} from '@/util/auth';
   import {mapGetters} from "vuex";
+
+  import treeTree from "@/components/tree-tree/main"
   export default {
+    components: {
+      treeTree
+    },
     data() {
       return {
         activeType:'1',
@@ -350,15 +319,7 @@
 
         wbsId:'',
         wbsList:[],
-        defaultProps: {
-          children: 'children',
-          label: 'title',
-        },
         leftTreeData:[],
-        leftNum:0,
-        rightTreeData:[],
-        rightNum:0,
-        rightExpands:[],
       }
     },
     computed: {
@@ -705,74 +666,16 @@
        })
      },
 
-      checkChange(treeName){
-        switch (treeName) {
-          case 'leftTree':
-            this.leftNum = this.$refs.leftTree.getCheckedKeys().length;
-            break;
-          case 'rightTree':
-            this.rightNum = this.$refs.rightTree.getCheckedKeys().length;
-            break;
-        }
-      },
-
-      getWBSList(){
-        getwbsList().then((res)=>{
-          this.wbsList = res.data.data.records;
-        })
-      },
-      wbsChange(wbsid){
-        getAlltree(this.userInfo.tenant_id,'',wbsid).then((res)=>{
-          this.leftTreeData = res.data.data;
-        })
-      },
-
-      addTree(){
-        //console.log(this.$refs.leftTree.getCheckedNodes())
-        let allTree = JSON.parse(JSON.stringify(this.leftTreeData));
-
-        //把半选和选中的数组key合并
-        let keys = this.$refs.leftTree.getCheckedKeys().concat(this.$refs.leftTree.getHalfCheckedKeys());
-        //console.log(keys,'keys');
-        //console.log(allTree,'allTree');
-        this.getRightTree(allTree,keys);
-        this.rightTreeData = allTree;
-      },
-      getRightTree(arr,keys){
-        //对比所有的node和选中的key
-        for (let i = arr.length-1; i >= 0; i--) {
-          let isIn = false;
-          for (let j = keys.length-1; j >= 0; j--) {
-            if(keys[j] == arr[i].id){
-              isIn = true;
-              //已经匹配到的key移除,节省性能
-              keys.splice(j,1);
-              break;
-            }
-          }
-          if(isIn){
-            //包含在选中的节点,如果有childer继续递归判断
-            if(arr[i].children && arr[i].children.length){
-              this.getRightTree(arr[i].children,keys);
-            }
-          }else{
-            //不包含在选中key的node删除
-            arr.splice(i,1);
-          }
-        }
-      },
-      delTree(){
-        let delNodes = this.$refs.rightTree.getCheckedNodes();
-        //只把选中的节点移除
-        delNodes.forEach((node)=>{
-          this.$refs.rightTree.remove(node);
-        })
-        this.rightNum = this.$refs.rightTree.getCheckedKeys().length;
-      },
-
-      nodeExpand(data){
-        this.rightExpands = this.rightExpands.concat([data.id]);
-      }
+    getWBSList(){
+      getwbsList().then((res)=>{
+        this.wbsList = res.data.data.records;
+      })
+    },
+    wbsChange(wbsid){
+      getAlltree(this.userInfo.tenant_id,'',wbsid).then((res)=>{
+        this.leftTreeData = res.data.data;
+      })
+    },
 
     }
   };

+ 23 - 3
src/views/manager/projectinfo/detail.vue

@@ -58,9 +58,21 @@
             </el-form>
           </div>
         </el-tab-pane>
-        <el-tab-pane label="分配试验模版" name="2">
+        <el-tab-pane label="分配WBS模版" name="2">
           <div>
-            
+            <div class="text-align-c">
+              <el-radio-group v-model="templateType">
+                <el-radio :label="1">试验</el-radio>
+                <el-radio :label="2">质检</el-radio>
+              </el-radio-group>
+            </div>
+            <div class="text-align-c mg-t-20">
+              <span class="mg-r-20">选择WBS</span>
+              <el-select v-model="wbsId" @change="wbsChange" placeholder="请选择WBS" style="width:500px;">
+                <el-option v-for="item in wbsList" :key="item.id" :label="item.wbsName" :value="item.id"></el-option>
+              </el-select>
+            </div>
+            <tree-tree :left-tree-data="leftTreeData" scrollbarStyle="height:calc(100vh - 500px)"></tree-tree>
           </div>
         </el-tab-pane>
         <el-tab-pane label="分配系统维护人员" name="3">
@@ -130,7 +142,12 @@
   import {getRoleTree} from "@/api/system/role";
   import {getDictionary} from "@/api/system/dict";
   import {mapGetters} from "vuex";
+
+  import treeTree from "@/components/tree-tree/main"
   export default {
+    components: {
+      treeTree
+    },
     data() {
       return {
         activeType:'1',
@@ -165,7 +182,10 @@
         treeProps:{
           label:"title",
           value:"id"
-        }
+        },
+
+        templateType:2,
+
       }
     },
     computed: {

+ 1 - 1
src/views/manager/projectinfo/list.vue

@@ -62,7 +62,7 @@
 <script>
   import {getProjectList} from "@/api/manager/projectinfo";
   import {findContractByProjectId,removeContractInfo} from "@/api/manager/contractinfo";
-  import {getDictionary} from "@/api/system/dict";
+  // import {getDictionary} from "@/api/system/dict";
   import {mapGetters} from "vuex";
   export default {
     data() {

+ 160 - 12
src/views/manager/wbsinfo/edit.vue

@@ -29,6 +29,7 @@
                         <el-dropdown-item @click.native="setLeftType(3,data,node)" icon="el-icon-document-copy">复制节点</el-dropdown-item>
                         <el-dropdown-item @click.native="setLeftType(4,data,node)" icon="iconfont hcicon-danganziliao-biaogetianxie" class="font-s-12">元素公式</el-dropdown-item>
                         <el-dropdown-item @click.native="setLeftType(5,data,node)" icon="el-icon-coin">元素设置</el-dropdown-item>
+                        <el-dropdown-item @click.native="nodeInfo(data,node)" icon="el-icon-help">节点参数</el-dropdown-item>
                         <el-dropdown-item @click.native="importTemplate(data,node)" v-if="node.level == 2" icon="el-icon-upload">导入划分</el-dropdown-item>
                       </el-dropdown-menu>
                     </el-dropdown>
@@ -55,6 +56,7 @@
                         <el-dropdown-item @click.native="setLeftType(3,data,node)" icon="el-icon-document-copy">复制节点</el-dropdown-item>
                         <el-dropdown-item @click.native="setLeftType(4,data,node)" icon="iconfont hcicon-danganziliao-biaogetianxie" class="font-s-12">元素公式</el-dropdown-item>
                         <el-dropdown-item @click.native="setLeftType(5,data,node)" icon="el-icon-coin">元素设置</el-dropdown-item>
+                        <el-dropdown-item @click.native="nodeInfo(data,node)" icon="el-icon-help">节点参数</el-dropdown-item>
                         <el-dropdown-item @click.native="importTemplate(data,node)" v-if="node.level == 2" icon="el-icon-upload">导入划分</el-dropdown-item>
                       </el-dropdown-menu>
                     </el-dropdown>
@@ -253,17 +255,17 @@
         <el-button size="small" type="primary">本地上传</el-button>
       </div>
       <el-table :data="tempList" border style="width: 100%" >
-            <el-table-column align="center" prop="eName" label="元素名称" >
-            </el-table-column>
-            <el-table-column align="center" prop="eType" label="数据类型" width="120">
-            </el-table-column>
-            <el-table-column align="center" prop="eLength" label="长度" width="120">
-            </el-table-column>
-            <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
-            </el-table-column>
-            <el-table-column align="center" prop="eInspectionMethod" label="检查方法和频率">
-            </el-table-column>
-          </el-table>
+        <el-table-column align="center" prop="eName" label="元素名称" >
+        </el-table-column>
+        <el-table-column align="center" prop="eType" label="数据类型" width="120">
+        </el-table-column>
+        <el-table-column align="center" prop="eLength" label="长度" width="120">
+        </el-table-column>
+        <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
+        </el-table-column>
+        <el-table-column align="center" prop="eInspectionMethod" label="检查方法和频率">
+        </el-table-column>
+      </el-table>
       <span slot="footer" class="dialog-footer">
         <el-button @click="importVisible = false">取 消</el-button>
         <el-button type="primary" @click="importHandle">确 定</el-button>
@@ -360,6 +362,119 @@
         <el-button type="primary" @click="importTemplateHandle" :loading="importLoading">导 入</el-button>
       </span>
     </el-dialog>
+
+    <el-dialog title="节点参数" :visible.sync="nodeInfoVisible" width="800px" append-to-body :close-on-click-modal="false" :show-close="false">
+      <div>
+        <el-button
+          type="text" icon="el-icon-s-operation" class="right-btn"
+          @click="infoNameVisible = true"></el-button>
+        <el-table :data="nodeInfoTable" border style="width: 100%" height="400">
+          <el-table-column align="center" prop="name" label="参数名称">
+            <template slot-scope="scope">
+              <template v-if="scope.row.isEdit">
+                <el-select v-model="scope.row.name" placeholder="请选择" class="w-100p">
+                  <el-option v-for="item in namelist" :key="item.id" :label="item.dictValue"  :value="item.dictKey"></el-option>
+                </el-select>
+              </template>
+              <template v-else>
+                {{scope.row.name}}
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="value" label="参数值设置">
+            <template slot-scope="scope">
+              <template v-if="scope.row.isEdit">
+                <el-input v-model="scope.row.value"></el-input>
+              </template>
+              <template v-else>
+                {{scope.row.value}}
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="describe" label="描述">
+            <template slot-scope="scope">
+              <template v-if="scope.row.isEdit">
+                <el-input v-model="scope.row.describe"></el-input>
+              </template>
+              <template v-else>
+                {{scope.row.describe}}
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="120" align="center">
+            <template slot-scope="scope">
+              <el-button
+                type="text" size="small" v-show="scope.row.isEdit"
+                @click="saveNodeInfoHandle(scope.$index, scope.row)">保存</el-button>
+              <el-button
+                type="text" size="small" v-show="!scope.row.isEdit"
+                @click="editNodeInfo(scope.$index, scope.row)">编辑</el-button>
+              <el-button
+                type="text" size="small" class="text-icon-danger"
+                @click="delNodeInfo(scope.$index, scope.row)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="nodeInfoVisible = false">取 消</el-button>
+        <el-button type="primary" @click="nodeInfoSave">保 存</el-button>
+      </span>
+    </el-dialog>
+
+    <el-dialog title="设置参数名称" :visible.sync="infoNameVisible" width="800px" append-to-body :close-on-click-modal="false">
+      <div>
+        <el-table :data="namelist" border style="width: 100%" height="400">
+          <el-table-column align="center" prop="name" label="参数名称">
+            <template slot-scope="scope">
+              <template v-if="scope.row.isEdit">
+                <el-input v-model="scope.row.name"></el-input>
+              </template>
+              <template v-else>
+                {{scope.row.name}}
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="key" label="参数值KEY">
+            <template slot-scope="scope">
+              <template v-if="scope.row.isEdit">
+                <el-input v-model="scope.row.key"></el-input>
+              </template>
+              <template v-else>
+                {{scope.row.key}}
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column align="center" prop="describe" label="描述">
+            <template slot-scope="scope">
+              <template v-if="scope.row.isEdit">
+                <el-input v-model="scope.row.describe"></el-input>
+              </template>
+              <template v-else>
+                {{scope.row.describe}}
+              </template>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="120" align="center">
+            <template slot-scope="scope">
+              <el-button
+                type="text" size="small" v-show="scope.row.isEdit"
+                @click="saveNodeInfoHandle(scope.$index, scope.row)">保存</el-button>
+              <el-button
+                type="text" size="small" v-show="!scope.row.isEdit"
+                @click="editNodeInfo(scope.$index, scope.row)">编辑</el-button>
+              <el-button
+                type="text" size="small" class="text-icon-danger"
+                @click="delNodeInfo(scope.$index, scope.row)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="infoNameVisible = false">关 闭</el-button>
+      </span>
+    </el-dialog>
+
 </basic-container>
 </template>
 
@@ -436,6 +551,12 @@
         fileUrl:'',
         upFile:null,
         importLoading:false,
+
+        nodeInfoVisible:false,
+        nodeInfoTable:[],
+        namelist:[],
+
+        infoNameVisible:false,
       };
     },
     computed: {
@@ -469,7 +590,11 @@
           pid = node.data.id
         }
         getLazytree(this.id ,pid,this.userInfo.tenant_id).then((res)=>{
-          return resolve(res.data.data);
+          let arr = [];
+          if(Array.isArray(res.data.data)){
+            arr = res.data.data;
+          }
+          return resolve(arr);
         })
       },
 
@@ -822,6 +947,23 @@
         this.upFile = file;
       },
 
+      nodeInfo(){
+        this.nodeInfoVisible = true;
+      },
+      nodeInfoSave(){
+
+      },
+
+      delNodeInfo(){
+
+      },
+      editNodeInfo(index,row){
+        this.$set(row,'isEdit',true);
+      },
+      saveNodeInfoHandle(index,row){
+        row.isEdit = false;
+      },
+
       getDeptCategorylist(){
         if(this.deptCategorylist.length >1){
           return;
@@ -942,4 +1084,10 @@
   .el-popper[x-placement^=bottom]{
     margin-top: -6px;
   }
+  .right-btn{
+    position: absolute;
+    right: 20px;
+    top: 10px;
+    font-size: 20px;
+  }
 </style>

+ 171 - 0
src/views/news/news.vue

@@ -0,0 +1,171 @@
+<template>
+<basic-container>
+  <el-menu :default-active="activeIndex" mode="horizontal">
+    <el-menu-item index="1">我的消息</el-menu-item>
+    <el-menu-item index="2">所有消息</el-menu-item>
+  </el-menu>
+  <avue-crud :data="data" :option="option" :table-loading="showLoading" :page.sync="page" :permission="permissionList">
+    <template slot="picture" slot-scope="scope" >
+      <el-button size="small" @click="openPreview(scope)">图片</el-button>
+    </template>
+    <template slot="cz" slot-scope="scope" >
+      <el-button size="small" @click="changeProgres(scope.row)">提交进度</el-button>
+    </template>
+    <template slot="state" slot-scope="scope" >
+      <div class="icon-font">
+        <i class="el-icon-success text-success" v-if="scope.row.state == 1"></i>
+        <i class="el-icon-warning text-warning" v-if="scope.row.state == 2"></i>
+      </div>
+    </template>
+  </avue-crud>
+  <el-dialog :visible.sync="dialogVisible" width="600px" append-to-body :close-on-click-modal="false">
+    <div class="flex jc-al-c">
+      <span class="mg-r-20 titl-font">提交进度</span>
+      <el-select v-model="progres" placeholder="请选择">
+        <el-option label="已解决" :value="1"></el-option>
+        <el-option label="进入人工预处理环境" :value="2"></el-option>
+      </el-select>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="dialogVisible = false">取 消</el-button>
+      <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
+    </span>
+  </el-dialog>
+</basic-container>
+</template>
+
+<script>
+  import {mapGetters} from "vuex";
+  export default {
+    data() {
+      return {
+        activeIndex:"1",
+        curRow:{},
+        dialogVisible:false,
+        progres:1,
+
+        page:{
+          total:1,
+          currentPage: 1
+        },
+        showLoading:false,
+        data: [
+          {
+            time:'2022-05-26 16:20:30',
+            remainingTime:'80',
+            project:'项目',
+            contract:'合同段',
+            newType:'消息类型',
+            describe:'问题描述',
+            picture:[
+              {url:'https://img.alicdn.com/tfs/TB1uevcCrj1gK0jSZFuXXcrHpXa-1880-640.jpg'},
+              {url:'https://img.alicdn.com/tfs/TB1v28TC8v0gK0jSZKbXXbK2FXa-1880-640.jpg'},
+            ],
+            state:1,
+          }, {
+            time:'2022-05-26 16:20:31',
+            remainingTime:'79',
+            project:'项目',
+            contract:'合同段',
+            newType:'消息类型',
+            describe:'问题描述',
+            picture:[
+              {url:'https://img.alicdn.com/tfs/TB1uevcCrj1gK0jSZFuXXcrHpXa-1880-640.jpg'},
+              {url:'https://img.alicdn.com/tfs/TB1v28TC8v0gK0jSZKbXXbK2FXa-1880-640.jpg'},
+            ],
+            state:2,
+          }
+        ],
+        option:{
+          border:true,
+          align:'center',
+          menuAlign:'center',
+          menu:false,
+          column:[
+            {
+              label:'时间',
+              prop:'time',
+            },
+            {
+              label:'剩余反馈用户时间(分钟)',
+              prop:'remainingTime'
+            },
+            {
+              label:'项目',
+              prop:'project',
+            },
+            {
+              label:'合同段',
+              prop:'contract',
+            },
+            {
+              label:'消息类型',
+              prop:'newType',
+            },
+            {
+              label:'问题描述',
+              prop:'describe',
+            },
+            {
+              label:'图片',
+              prop:'picture',
+              slot:true,
+            },
+            {
+              label:'操作',
+              prop:'cz',
+              slot:true,
+            },
+            {
+              label:'处理状态',
+              prop:'state',
+              slot:true,
+            },
+          ]
+         }
+      };
+    },
+    computed: {
+      ...mapGetters(["userInfo"]),
+
+      permissionList() {
+        return {
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          editBtn: false
+        };
+      },
+    },
+    created() {
+      this.init();
+      //console.log(this.userInfo)
+    },
+    methods: {
+      init(){
+
+      },
+      openPreview(scope,index=0){
+        this.$ImagePreview(scope.row.picture, index,{
+        closeOnClickModal: true,
+        // beforeClose:()=>{
+        //   this.$message.success('关闭回调')
+        // }
+      });
+      },
+      changeProgres(row){
+        this.curRow = row;
+        this.dialogVisible = true;
+      }
+    }
+  };
+</script>
+
+<style scoped lang="scss">
+  .icon-font[class^="icon-"]{
+    font-size: 26px !important;
+  }
+  .titl-font{
+    font-size: 32px;
+  }
+</style>

+ 24 - 0
src/views/system/menu.vue

@@ -212,6 +212,30 @@
                 }
               ]
             },
+            {
+              label: "是否外层",
+              prop: "isLayout",
+              type: "radio",
+              disabled: false,
+              dicData: [
+                {
+                  label: "否",
+                  value: 1
+                },
+                {
+                  label: "是",
+                  value: 2
+                }
+              ],
+              value: 2,
+              rules: [
+                {
+                  required: true,
+                  message: "请选择新窗口打开",
+                  trigger: "blur"
+                }
+              ]
+            },
             {
               label: "菜单排序",
               prop: "sort",