yangbifan преди 2 години
родител
ревизия
168b1c78e4
променени са 49 файла, в които са добавени 12742 реда и са изтрити 1780 реда
  1. 5 4
      config/dev.env.js
  2. 1 0
      package.json
  3. 4 4
      public/index.html
  4. 8 0
      public/static/js/base64.min.js
  5. 1 1
      public/static/js/luckysheet/css/luckysheet.css
  6. 8 16
      public/static/js/luckysheet/expendPlugins/chart/chartmix.umd.min.js
  7. 4152 7
      public/static/js/luckysheet/luckysheet.umd.js
  8. 7 0
      public/static/js/luckysheet/luckysheet.umd.js.map
  9. 1 1
      public/static/js/luckysheet/plugins/js/plugin.js
  10. 1 1
      public/static/js/luckysheet/plugins/plugins.css
  11. 5 5
      src/assets/js/common.js
  12. 1 0
      src/assets/js/url.js
  13. 62 53
      src/components/deptTreeP.vue
  14. 11 0
      src/components/el-form.vue
  15. 166 0
      src/components/el-formid.vue
  16. 33 28
      src/components/newTree.vue
  17. 2 2
      src/components/uploadDown.vue
  18. 173 192
      src/components/workDeptThree.vue
  19. 90 24
      src/components/workflow.vue
  20. 302 106
      src/components/workflowBase.vue
  21. 53 44
      src/components/workflowEntrance.vue
  22. 2 2
      src/components/workflowUpload.vue
  23. 40 4
      src/http/api.js
  24. 64 5
      src/pages/main/badInfoGovern/index.vue
  25. 1 1
      src/pages/main/busitime/busiTimeout.vue
  26. 76 6
      src/pages/main/endToEnd/index.vue
  27. 62 3
      src/pages/main/integral/index.vue
  28. 2 2
      src/pages/main/iptv/uploadDown.vue
  29. 138 208
      src/pages/main/leader/components/deptThree.vue
  30. 8 0
      src/pages/main/leader/components/formTable.vue
  31. 331 49
      src/pages/main/leader/demand/demandHome.vue
  32. 8 4
      src/pages/main/leader/demand/demandHomes.vue
  33. 16 31
      src/pages/main/leader/index.vue
  34. 298 305
      src/pages/main/leader/leaderhomeTask.vue
  35. 1284 0
      src/pages/main/leader/risk/riskManagement.vue
  36. 1444 0
      src/pages/main/leader/risk/riskMaterials.vue
  37. 3 0
      src/pages/main/memberFamily/dataStatistics.vue
  38. 679 642
      src/pages/main/memberFamily/haveInHand.vue
  39. 2 1
      src/pages/main/memberFamily/index.vue
  40. 51 4
      src/pages/main/officialAccount/officialAccountadd.vue
  41. 62 3
      src/pages/main/outCallDemand/index.vue
  42. 1 1
      src/pages/main/performance/components/dialog.vue
  43. 1557 0
      src/pages/main/provincialWorkOrder/provincialWorkOrder.vue
  44. 1325 0
      src/pages/main/provincialWorkOrder/provincialWorkOrderArea.vue
  45. 92 13
      src/pages/main/vendor/Export2Excel.js
  46. 37 0
      src/router/index.js
  47. 49 1
      src/vendor/Export2Excel.js
  48. 7 7
      vue.config.js
  49. 17 0
      yarn.lock

+ 5 - 4
config/dev.env.js

@@ -6,10 +6,11 @@ module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
   ENV_CONFIG: '"dev"',
   ctx:'"http://127.0.0.1:8080"',
-  // ctxForm: '"http://10.149.85.91:8000"',//dev
-  // ctxForm: '"http://43.138.50.94:8880"',//test
-  // ctxForm: '"http://192.168.2.124:8880"',//test
-  ctxForm: '"http://10.230.15.228:8000"',//生产
+  // ctxForm: '"http://10.149.85.91:8000/api"',//dev
+  // ctxForm: '"http://43.138.50.94:8880/api"',//test
+  // ctxForm: '"http://192.168.2.92:8880/api"',//test
+  ctxForm: '"http://10.230.26.15:8000/api"',//生产
+
   excludeMeWhenSelectNextHandler:false,
   excludeFormerHanlder:false,
   envTitle:'"本地开发环境"'

+ 1 - 0
package.json

@@ -15,6 +15,7 @@
     "@tinymce/tinymce-vue": "^3.0.1",
     "axios": "^0.19.0",
     "canvg": "^3.0.7",
+    "console": "^0.7.2",
     "core-js": "^3.6.1",
     "echarts": "^4.7.0",
     "element-ui": "^2.15.7",

+ 4 - 4
public/index.html

@@ -19,7 +19,7 @@
   <link rel='stylesheet' href='/static/js/luckysheet/plugins/plugins.css' />
   <link rel='stylesheet' href='/static/js/luckysheet/css/luckysheet.css' />
   <link rel='stylesheet' href='/static/js/luckysheet/assets/iconfont/iconfont.css' />
-
+  <script src="./static/js/base64.min.js"></script>
   <script src="/static/js/ace.js"></script>
 </head>
 
@@ -31,9 +31,9 @@
   <div id="app"></div>
   <!-- built files will be auto injected -->
   <script type="text/javascript">
-    // window.staticHost = 'http://10.230.26.15:8000/mkt'; // 正式
-    window.staticHost = 'http://10.149.85.91:8000/spfm'; // 测试
-    // window.staticHost = 'http://192.168.0.103:9600/';
+    window.staticHost = 'http://10.230.26.15:8000/mkt'; // 正式
+    // window.staticHost = 'http://10.149.85.91:8000/spfm'; // 测试
+    // window.staticHost = 'http://192.168.2.92:9600';
     // window.staticHost = 'http://43.138.50.94:9600/';
 
     // document.title = "hello";

Файловите разлики са ограничени, защото са твърде много
+ 8 - 0
public/static/js/base64.min.js


Файловите разлики са ограничени, защото са твърде много
+ 1 - 1
public/static/js/luckysheet/css/luckysheet.css


Файловите разлики са ограничени, защото са твърде много
+ 8 - 16
public/static/js/luckysheet/expendPlugins/chart/chartmix.umd.min.js


Файловите разлики са ограничени, защото са твърде много
+ 4152 - 7
public/static/js/luckysheet/luckysheet.umd.js


Файловите разлики са ограничени, защото са твърде много
+ 7 - 0
public/static/js/luckysheet/luckysheet.umd.js.map


Файловите разлики са ограничени, защото са твърде много
+ 1 - 1
public/static/js/luckysheet/plugins/js/plugin.js


Файловите разлики са ограничени, защото са твърде много
+ 1 - 1
public/static/js/luckysheet/plugins/plugins.css


+ 5 - 5
src/assets/js/common.js

@@ -264,11 +264,11 @@ let common = {
                         loading.close()
                     }
                     if (response.data.code === 1 ||response.data.code == '1') {
-                       bus.$message.success(response.data.message)
-                        loading.close()
-                        success(response.data.data)
-                        return response
-                        // if (response.data === 1 ||response.data == '1') {
+                        bus.$message.success(response.data.message)
+                         loading.close()
+                         success(response.data.data)
+                         return response
+                        // if (response.code === 1 ||response.code == '1') {
                         //     bus.$message.success(response.message)
                         //      loading.close()
                         //      success(response.data)

+ 1 - 0
src/assets/js/url.js

@@ -13,6 +13,7 @@ const urls = {
     //新需求申请单工作流接口
     formList: {
         startWork: ctxForm + '/startProcess',   //开始工作流
+        startWorkList: ctxForm + '/batchStartProcess',   //开始工作流多人
         nextWork: ctxForm + '/complateTask',  //工作流next流转
         getWorkId: ctxForm + '/getRunningProcessInstance', // 获取工作流任务id
         transferTask: ctxForm + '/process/transferTask/',//转派工作流接口

+ 62 - 53
src/components/deptTreeP.vue

@@ -1,64 +1,73 @@
 <template>
-    <div class="treebox">
-        <el-tree ref="tree" @node-expand="handleNodeClick" @node-click="handleCheckChange" :data="treeList" node-key="o"
-            :default-checked-keys="defaultListc" :default-expanded-keys="defaultList"></el-tree>
-    </div>
+  <div class="treebox">
+    <el-tree
+      ref="tree"
+      @node-expand="handleNodeClick"
+      @node-click="handleCheckChange"
+      :data="treeList"
+      node-key="o"
+      :default-checked-keys="defaultListc"
+      :default-expanded-keys="defaultList"
+    ></el-tree>
+  </div>
 </template>
 
 <script>
-    export default {
-        props: ["defaultList","type"],
-        data() {
-            return {
-                treeList: [],
-                opt: [],
-                defaultProps: {
-                    children: 'children',
-                    label: 'label'
-                },
-                defaultListc:[]
-            };
+export default {
+  props: ["defaultList", "type"],
+  data() {
+    return {
+      treeList: [],
+      opt: [],
+      defaultProps: {
+        children: "children",
+        label: "label",
+      },
+      defaultListc: [],
+    };
+  },
+  methods: {
+    getTree(v) {
+      this.$http({
+        url: "/sysmgr/csysdept/queryAllList",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
         },
-        methods: {
-            getTree(v) {
-                this.$http({
-                    url: "/sysmgr/csysdept/queryAllList",
-                    method: "post",
-                    headers: {
-                        "Content-Type": "application/json",
-                    },
-                    data: {
-                        parentorgid: v
-                    },
-                }).then((res) => {
-                    this.treeList = res.data;
-                });
-            },
-            handleCheckChange(v) {
-                let opt = [{
-					id:v.id,
-					o:v.o,
-					ou:v.ou,
-					displayname:v.displayname
-				}];
-                this.$emit("treeCheck",opt)
-            },
+        data: {
+          parentorgid: v,
         },
-        mounted() {},
-        created() {
-            this.getTree();
-            this.defaultListc = this.defaultList;
+      }).then((res) => {
+        this.treeList = res.data;
+      });
+    },
+    handleCheckChange(v) {
+      let opt = [
+        {
+          id: v.id,
+          o: v.o,
+          ou: v.ou,
+          displayname: v.displayname,
         },
-        watch:{
-            type(){
-                this.defaultListc = this.defaultList;
-            }
-        }
-    };
+      ];
+      this.$emit("treeCheck", opt);
+    },
+  },
+  mounted() {},
+  created() {
+    this.getTree();
+    this.defaultListc = this.defaultList;
+  },
+  watch: {
+    type() {
+      this.defaultListc = this.defaultList;
+    },
+  },
+};
 </script>
 
 <style scoped lang="scss">
-    .treebox {
-        border: 1px solid #ddd;
-    }
+.treebox {
+  border: 1px solid #ddd;
+}
 </style>

+ 11 - 0
src/components/el-form.vue

@@ -11,6 +11,8 @@
       @selection-change="selectionChange"
       empty-text="暂无数据"
       @cell-click="getRowList"
+      :cell-style="columnbackgroundStyle"
+      :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
     >
       <!-- 是否多选 -->
       <el-table-column
@@ -116,6 +118,15 @@ export default {
 
   },
   methods: {
+    columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
+      if (column.type == "default") {
+        if (column.type == "default") {
+        if (column.property === "need_name"||column.property === "needName"||column.property === "doc_title"||column.property === "document_title") {
+          return "color:#0682CD;";
+        }
+      }
+      }
+    },
     selectionChange(val) {
 
       //多选数字回调

+ 166 - 0
src/components/el-formid.vue

@@ -0,0 +1,166 @@
+<template>
+    <div>
+      <slot :name="list.name"></slot>
+      <el-table
+        ref="table"
+        style="width: 100%"
+        :data="list.data"
+        :height="list.height + 'px'"
+        :max-height="list.height + 'px'"
+        @row-click="getRowData"
+        @selection-change="selectionChange"
+        empty-text="暂无数据"
+        @cell-click="getRowList"
+        :cell-style="columnbackgroundStyle"
+        row-key="id"
+        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+      >
+        <!-- 是否多选 -->
+        <el-table-column
+          v-if="list.isSelection"
+          :selecttable="list"
+          type="selection"
+          :width="list.width || 50"
+          align="center"
+        />
+  
+        <!-- 是否需要序号 -->
+        <el-table-column
+          v-if="list.isIndex"
+          type="index"
+          label="序号"
+          width="55"
+          align="center"
+        />
+        <template v-for="item in list.titledata">
+          <el-table-column
+            :key="item.prop"
+            :prop="item.prop"
+            :label="item.label"
+            align="center"
+            show-overflow-tooltip
+            :width="item.width || 100"
+          />
+        </template>
+        <!-- 操作列 -->
+        <el-table-column
+          v-if="list.isOperation"
+          v-bind="list.data && list.data.length ? { fixed: 'right' } : null"
+          style="margin-right: 20px"
+          class-name="handle-td"
+          label-class-name="tc"
+          :label="list.operation.label"
+          align="center"
+        >
+          <!-- UI统一一排放3个,4个以上出现更多 -->
+          <template slot-scope="scope">
+            <!-- 三个一排的情况,去掉隐藏的按钮后的长度 -->
+            <template v-if="list.operation.data.length > 0">
+              <div class="btn">
+                <div v-for="item in list.operation.data" :key="item.label">
+                  <template v-if="item.type !== 'icon'">
+                    <el-button
+                      v-bind="item"
+                      :type="item.type ? item.type : ''"
+                      size="mini"
+                      @click.native.prevent="
+                        item.handleRow(scope.$index, scope.row, item.label)
+                      "
+                    >
+                      {{ item.label }}
+                    </el-button>
+                  </template>
+                  <template v-else>
+                    <i
+                      :class="[icon, item.icon]"
+                      v-bind="item"
+                      @click="item.handleRow(scope.$index, scope.row, item.label)"
+                    />
+                  </template>
+                </div>
+              </div>
+            </template>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="page">
+        <el-pagination
+          style="display: flex; flex-direction: row-reverse"
+          v-if="list.pageData.total > 0"
+          :current-page.sync="page"
+          :page-sizes="
+            list.pageData.pageSizes ? list.pageData.pageSizes : [5, 10, 15, 20]
+          "
+          :page-size="list.pageData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="list.pageData.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </template>
+  
+  <script>
+  export default {
+    data(){
+      return{
+       page:1
+      }
+    },
+    props: {
+      //  表格数据和表格部分属性的对象
+      // eslint-disable-next-line vue/require-default-prop
+      list: {
+        type: Object,
+      },
+    },
+    created() {
+  
+    },
+    methods: {
+      columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
+        if (column.type == "default") {
+          if (column.label === "文件标题"||column.label === "待办事项名称") {
+            return "color:#0682CD;";
+          }
+        }
+      },
+      selectionChange(val) {
+  
+        //多选数字回调
+        this.$emit("num", val);
+      },
+      handleAdd(name) {
+       
+        this.$emit("toolMsg", name);
+      },
+      handleRow(index, row, lable) {
+       
+      },
+      handleSizeChange(val) {
+        this.$emit("changeSize", val);
+        console.log(`每页 ${val} 条`);
+      },
+      handleCurrentChange(val) {
+        this.$emit("changeNum", val);
+        console.log(`当前页: ${val}`);
+      },
+      // 点击行即可选中
+      getRowData(row) {
+        this.$refs.table.toggleRowSelection(row);
+      },
+      getRowList(row, column, event, cell) {
+        this.$emit("clickDemand", column.label, row);
+      },
+    },
+  };
+  </script>
+  
+  <style lang="scss" scoped>
+  .btn{
+    display: flex;
+    justify-content: center;
+  }
+  </style>
+  

+ 33 - 28
src/components/newTree.vue

@@ -4,33 +4,17 @@
       <div class="tree-text">组织机构</div>
       <el-input placeholder="可按名字匹配所在部门" v-model="filterText">
       </el-input>
-      <el-tree
-        ref="tree"
-        @node-click="handleNodeClick"
-        :data="treeList"
-        node-key="o"
-        :indent="20"
-        :default-checked-keys="defaultListc"
-        :default-expanded-keys="defaultList"
-      >
+      <el-tree ref="tree" @node-click="handleNodeClick" :data="treeList" node-key="o" :indent="20"
+        :default-checked-keys="defaultListc" :default-expanded-keys="defaultList">
         <span class="span-ellipsis" slot-scope="{ node, data }">
-          <span :title="node.label"
-            ><i
-              v-if="data.children.length === 0"
-              class="el-icon-caret-right icon-right"
-            ></i>
-            {{ node.label }}</span
-          >
+          <span :title="node.label"><i v-if="data.children.length === 0" class="el-icon-caret-right icon-right"></i>
+            {{ node.label }}</span>
         </span>
       </el-tree>
     </div>
     <div class="flex-transfer">
-      <el-transfer
-        v-model="value"
-        :titles="['待选人员', '已选人员']"
-        @change="handleCheckChange"
-        :data="transferList"
-      ></el-transfer>
+      <el-transfer v-model="value" :titles="['待选人员', '已选人员']" @change="handleCheckChange"
+        :data="transferList"></el-transfer>
     </div>
   </div>
 </template>
@@ -59,13 +43,13 @@ export default {
   },
   methods: {
     handleNodeClick(v) {
-      for(let i = v.children.length-1;i>=0;i--){
-        if(v.children[i].haveUserFlag == "N"){
+      for (let i = v.children.length - 1; i >= 0; i--) {
+        if (v.children[i].haveUserFlag == "N") {
           v.children.splice(i, 1);
         }
       }
       // v.children.map((item,index) =>{
-        
+
       //   if(item.haveUserFlag == "N"){
       //     v.children.splice(index, 1);
       //   }
@@ -83,11 +67,16 @@ export default {
           for (let i = 0; i <= this.transferList.length - 1; i++) {
             for (let y = 0; y <= this.value.length; y++) {
               if (this.transferList[i].key === this.value[y]) {
+                console.log(this.transferList[i].key);
+                console.log(this.value[y]);
                 a.push(this.transferList[i]);
+
               }
             }
           }
+          console.log(a);
           this.transferList = a;
+          // console.log(this.transferList);
         } else {
           this.transferList = [];
         }
@@ -113,7 +102,7 @@ export default {
           headers: {
             "Content-Type": "application/json",
           },
-          data:list
+          data: list
         }).then((res) => {
           v.children = v.children ? v.children : [];
           this.treeId = v.o;
@@ -124,12 +113,18 @@ export default {
               key: item.loginNoStr,
             });
           });
+          const dalaoyang = (arr, key) => {
+            let map = new Map()
+            return arr.filter(item => !map.has(item[key]) && map.set(item[key], 1))
+          }
+          this.transferList = dalaoyang(this.transferList, "key")
+          console.log(this.transferList);
         });
       } else {
         console.log(this.transferList);
       }
     },
-    getTree(v,e) {
+    getTree(v, e) {
       let list = {
         parentorgid: v,
         // functionName: e,
@@ -203,33 +198,40 @@ export default {
 ::v-deep .el-checkbox.el-transfer-panel__item {
   display: block !important;
 }
+
 ::v-deep .el-transfer-panel__list.is-filterable {
   height: calc(100% - 110px);
 }
+
 ::v-deep .el-transfer-panel__body {
   height: 100%;
 }
+
 .tree-text {
   font-size: 20px;
   color: black;
   padding: 15px;
   font-weight: 600;
 }
+
 .flex-box {
   display: flex;
   width: 100%;
   justify-content: center;
   height: 80%;
 }
+
 ::v-deep .el-icon-caret-right {
   font-size: 12px;
   background-size: cover;
   margin-left: px;
 }
+
 .icon-right {
   margin-left: 5px;
   color: #fff;
 }
+
 .treebox {
   width: 30%;
   border: 1px solid #ddd;
@@ -238,16 +240,19 @@ export default {
   overflow: scroll;
   overflow-x: hidden;
 }
+
 .flex-transfer {
   width: 50%;
   height: 100%;
   margin-left: 30px;
 }
+
 ::v-deep .el-transfer-panel {
   width: 35%;
   height: 100%;
 }
+
 ::v-deep .el-transfer {
   height: 100%;
 }
-</style>
+</style>

+ 2 - 2
src/components/uploadDown.vue

@@ -42,8 +42,8 @@
                 }
             },
             uploadsee(v) {
-                let url = encodeURIComponent(v.callPath);
-                this.srcsc = 'http://114.215.71.182:8012/onlinePreview?url=' + url;
+                let url = encodeURIComponent(Base64.encode(v.callPath));
+                this.srcsc = 'http://10.230.15.228:8012/onlinePreview?url=' + url;
                 this.ifrshow=true;
                 // window.open('http://114.215.71.182:8012/onlinePreview?url=' + url);
             },

+ 173 - 192
src/components/workDeptThree.vue

@@ -1,42 +1,40 @@
 <template>
-  <div class="treebox" v-loading="loading" style="height: 30rem">
-    <el-checkbox-group v-model="userList">
-      <div v-for="(item, index) in treeList" :key="index">
-        <el-checkbox :label="item" @change="checkChange(item)">{{
-          item.loginNameStr
-        }}</el-checkbox>
-      </div>
-    </el-checkbox-group>
+  <div class="treebox" v-loading="loading">
     <!-- <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input> -->
-    <!--    <el-tree-->
-    <!--      :highlight-current="true"-->
-    <!--      :check-strictly="true"-->
-    <!--      ref="tree"-->
-    <!--      @check-change="handleCheckChange"-->
-    <!--      :data="treeList"-->
-    <!--      node-key="id"-->
-    <!--      :default-checked-keys="defaultListc"-->
-    <!--      :default-expanded-keys="defaultListc"-->
-    <!--      @node-click="handleNodeClick"-->
-    <!--      :filter-node-method="filterNode"-->
-    <!--    >-->
-    <!--      <span class="custom-tree-node" slot-scope="{ node }" @click="cs(node)">-->
-    <!--        <em-->
-    <!--          style="display: inline-block; width: 20px"-->
-    <!--          v-if="node.data.haveUserFlag == 'N' && node.data.children.length == 0"-->
-    <!--        ></em>-->
-    <!--        <i-->
-    <!--          class="el-icon-caret-right"-->
-    <!--          v-if="node.data.haveUserFlag == 'Y' && node.data.children.length == 0"-->
-    <!--        ></i>-->
-    <!--        <el-checkbox-->
-    <!--          style="margin-right: 10px"-->
-    <!--          v-model="node.checked"-->
-    <!--          v-if="node.data.type == 1"-->
-    <!--        ></el-checkbox>-->
-    <!--        <span>{{ node.label }}</span>-->
-    <!--      </span>-->
-    <!--    </el-tree>-->
+    <el-tree
+      :default-expand-all="expandAll"
+      :highlight-current="true"
+      :check-strictly="true"
+      ref="tree"
+      @check-change="handleCheckChange"
+      :data="treeList"
+      node-key="id"
+      :default-checked-keys="defaultListc"
+      :default-expanded-keys="defaultListc"
+      @node-click="handleNodeClick"
+      @node-expand="handleNodeClick"
+    >
+      <span
+        class="custom-tree-node"
+        slot-scope="{ node, data }"
+        @click="cs(node)"
+      >
+        <em
+          style="display: inline-block; width: 20px"
+          v-if="node.data.haveUserFlag == 'N' && node.data.children.length == 0"
+        ></em>
+        <i
+          class="el-icon-caret-right"
+          v-if="node.data.haveUserFlag == 'Y' && node.data.children.length == 0"
+        ></i>
+        <el-checkbox
+          style="margin-right: 10px"
+          v-model="node.checked"
+          v-if="node.data.type == 1"
+        ></el-checkbox>
+        <span>{{ node.label }}</span>
+      </span>
+    </el-tree>
   </div>
 </template>
 
@@ -45,8 +43,7 @@ export default {
   props: ["defaultList", "type", "closeList", "treeList"],
   data() {
     return {
-      userList: [],
-      // treeList: [],
+      expandAll: false,
       opt: [],
       defaultProps: {
         children: "children",
@@ -55,161 +52,152 @@ export default {
       defaultListc: [],
       loading: false,
       filterText: "",
-      list: [],
     };
   },
-//   watch: {
-//     immediate: true,
-//     treeList: {
-//       handler(oldVal,newVal) {
-//         console.log(oldVal);
-//         console.log(newVal);
-//       },
-//     },
-//   },
   methods: {
-    checkChange(e) {
-      // console.log(this.userList)
-      // let newList = []
-      // this.userList.map((item) =>{
-      //     let array =    {
-      //         userid:item,
-      //         taskid:e.id_,
-      //         nextid:e.id
-      //     }
-      //     newList.push(array)
-      //     // newList.map((items,i) =>{
-      //     //     if(item !== items.userid){
-      //     //         newList.splice(i,1)
-      //     //     }
-      //     //         })
-      //
-      // })
-      // this.list = newList
-      // this.userList.map((item) =>{
-      //     newList.map((items,i) =>{
-      //         if(item !==items.id){
-      //             newList.splice(i,1)
-      //         }
-      //     })
-      // })
-      // console.log(newList)
-      this.$emit("changeTree", this.userList);
-      this.$emit("changeUserName", e);
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    cs(v) {
+      // console.log(v)
+    },
+    // getTree(v) {
+    //     this.loading = true;
+    //     this.$http({
+    //         url: "/sysmgr/csysdept/queryAllList",
+    //         method: "post",
+    //         headers: {
+    //             "Content-Type": "application/json",
+    //         },
+    //         data: {
+    //             parentorgid: v,
+    //         },
+    //     }).then((res) => {
+    //         this.treeList = res.data;
+    //         this.loading = false;
+    //     });
+    // },
+    handleCheckChange(v) {
+      let opt = [];
+      let list = this.$refs.tree.getCheckedNodes();
+      for (let i = 0; i < list.length; i++) {
+        if (list[i].type == 1) {
+          opt.push({
+            receiveNo: list[i].loginNoStr,
+            receiveName: list[i].label,
+            deptName: list[i].displayname,
+            deptCode: list[i].groupId,
+            id: list[i].id,
+            type: list[i].type,
+            label: list[i].label,
+            loginNameStr:list[i].loginNameStr,
+            loginNoStr: list[i].loginNoStr,
+          });
+        }
+      }
+      this.$emit("changeTree", opt);
+    },
+    handleNodeClick(v) {
+      let s = false;
+      if (v.children && v.children.length == 0) {
+        s = true;
+      }
+      if (v.type) {
+        return;
+      }
+      if (
+        v.children &&
+        v.children.length > 0 &&
+        v.children[v.children.length - 1].type == 1
+      ) {
+        return;
+      }
+      this.$http({
+        url: "/sysmgr/sysuserinfo/queryList",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          groupId: v.o,
+        },
+      }).then((res) => {
+        res.data.forEach((item) => {
+          v.children.push({
+            id: item.id,
+            label: item.loginNameStr,
+            type: 1,
+            displayname: v.displayname,
+            groupId: item.groupId,
+            loginNoStr: item.loginNoStr,
+          });
+        });
+      });
+      for (let i = 0; i < this.$refs.tree.store._getAllNodes().length; i++) {
+        if (s && v.o == this.$refs.tree.store._getAllNodes()[i].data.o) {
+          this.$refs.tree.store._getAllNodes()[i].expanded = true;
+          return;
+        }
+      }
+    },
+  },
+  created() {
+    // this.getTree();
+    // console.log(this.treeList);
+    this.defaultListc = this.defaultList;
+  },
+  watch: {
+    treeList(newVal, oldVal) {
+      console.log(newVal);
+      this.$nextTick(() => {
+        if (newVal.length <= 1) {
+          this.isexpand = true;
+
+          for (
+            var i = 0;
+            i < this.$refs.tree.store._getAllNodes().length;
+            i++
+          ) {
+
+            this.$refs.tree.store._getAllNodes()[i].expanded = true;
+          }
+        } else {
+          for (
+            var i = 0;
+            i < this.$refs.tree.store._getAllNodes().length;
+            i++
+          ) {
+
+            this.$refs.tree.store._getAllNodes()[i].expanded =false;
+          }
+        }
+      });
+    },
+    filterText(val) {
+      this.$refs.tree.filter(val);
+    },
+    type() {
+      this.defaultListc = this.defaultList;
+      this.$forceUpdate();
+    },
+    defaultList() {
+      this.$forceUpdate();
+    },
+    closeList() {
+      this.$refs.tree.setCheckedNodes(this.closeList);
     },
   },
 };
-// filterNode(value, data) {
-//   if (!value) return true;
-//   return data.label.indexOf(value) !== -1;
-// },
-// cs(v) {
-//   // console.log(v)
-// },
-// getTree(v) {
-//     this.loading = true;
-//     this.$http({
-//         url: "/sysmgr/csysdept/queryAllList",
-//         method: "post",
-//         headers: {
-//             "Content-Type": "application/json",
-//         },
-//         data: {
-//             parentorgid: '00440089000000000000',
-//         },
-//     }).then((res) => {
-//         console.log(res);
-//         // this.treeList = res.data;
-//         // this.loading = false;
-//     });
-// },
-// handleCheckChange(v) {
-//     let opt = [];
-//     let list = this.$refs.tree.getCheckedNodes();
-//     for (let i = 0; i < list.length; i++) {
-//         if (list[i].type == 1) {
-//             opt.push({
-//                 receiveNo: list[i].loginNoStr,
-//                 receiveName: list[i].label,
-//                 deptName: list[i].displayname,
-//                 deptCode: list[i].groupId,
-//                 id: list[i].id,
-//                 type: list[i].type,
-//                 label: list[i].label,
-//             });
-//         }
-//     }
-//     this.$emit("treeCheck", opt);
-// },
-//   handleNodeClick(v) {
-//     console.log(v);
-//     let s = false;
-//     if (v.children && v.children.length == 0) {
-//       s = true;
-//     }
-//     if (v.type) {
-//       return;
-//     }
-//     if (
-//       v.children &&
-//       v.children.length > 0 &&
-//       v.children[v.children.length - 1].type == 1
-//     ) {
-//       return;
-//     }
-//     this.$http({
-//       url: "/sysmgr/sysuserinfo/queryList",
-//       method: "post",
-//       headers: {
-//         "Content-Type": "application/json",
-//       },
-//       data: {
-//         groupId: v.o,
-//       },
-//     }).then((res) => {
-//       res.data.forEach((item) => {
-//         v.children.push({
-//           id: item.id,
-//           label: item.loginNameStr,
-//           type: 1,
-//           displayname: v.displayname,
-//           groupId: item.groupId,
-//           loginNoStr: item.loginNoStr,
-//         });
-//       });
-//     });
-//     for (let i = 0; i < this.$refs.tree.store._getAllNodes().length; i++) {
-//       if (s && v.o == this.$refs.tree.store._getAllNodes()[i].data.o) {
-//         this.$refs.tree.store._getAllNodes()[i].expanded = true;
-//         return;
-//       }
-//     }
-//   },
-// },
-//   created() {
-//     console.log(this.treeList);
-//     // this.getTree();
-//     this.defaultListc = this.defaultList;
-//   },
-//   watch: {
-//     filterText(val) {
-//       this.$refs.tree.filter(val);
-//     },
-//     type() {
-//       this.defaultListc = this.defaultList;
-//       this.$forceUpdate();
-//     },
-//     defaultList() {
-//       this.$forceUpdate();
-//     },
-//     closeList() {
-//       this.$refs.tree.setCheckedNodes(this.closeList);
-//     },
-//   },
-// };
 </script>
 
 <style scoped lang="scss">
+// ::v-deep .el-tree--highlight-current {
+//
+// }
+::v-deep .el-tree--highlight-current {
+  height: 500px;
+}
 .el-icon-caret-right {
   color: #ccc;
   margin: 0 5px;
@@ -217,11 +205,4 @@ export default {
 .treebox {
   border: 1px solid #ddd;
 }
-::v-deep .el-checkbox-group {
-  display: flex;
-  flex-direction: column;
-  align-items: baseline;
-  /* font-size: 38px; */
-  margin-left: 20px;
-}
 </style>

+ 90 - 24
src/components/workflow.vue

@@ -9,7 +9,20 @@
               选择路径
 
               <div class="flex-path-list">
-                <div v-if="transferStatus" @click="clickTransfer(1)">转派</div>
+                <div
+                  v-if="manyReassignment"
+                  :class="actives"
+                  @click="clickManyTransfer(1)"
+                >
+                  转派
+                </div>
+                <div
+                  v-if="transferStatus"
+                  :class="active"
+                  @click="clickTransfer(1)"
+                >
+                  转派
+                </div>
                 <div v-if="copyStatus" @click="clickTransfer(2)">抄送</div>
                 <div
                   v-for="(item, index) in node.nextShapes"
@@ -136,13 +149,14 @@ export default {
   name: "workflow",
   data() {
     return {
+      active: "",
       transferStatus: false, //转派按钮控制
       manyPeopleStatus: false, //多人处理下发任务
       TransferStatus: false, //是否点击转派状态
       copyStatus: false, //抄送按钮控制
       CopyStatus: false, //是否点击抄送状态
       node: [], //路径列表
-      seleIndex: "", //点击路径下标
+      seleIndex: "1099", //点击路径下标
       commonlyList: [], //常用意见数组
       textarea: "未填写意见", //意见内容字段
       copyUser: "", //抄送人员列表
@@ -158,6 +172,8 @@ export default {
       demand: "",
       nextDealManList: "",
       isLastManStatus: false,
+      manyReassignment: false,
+      actives: "",
     };
   },
   props: {
@@ -169,12 +185,24 @@ export default {
     requestForm: {
       type: Object,
     },
+    adminResourceId: {
+      type: String,
+    },
   },
   created() {
+    if (this.adminResourceId) {
+      this.manyReassignment = true;
+    }
     this.getNextPath(this.list.resourceId, 1);
     this.getMetirialType();
   },
   methods: {
+    //多人转派
+    clickManyTransfer() {
+      (this.actives = this.actives != "" ? "" : "active"),
+        (this.seleIndex = "1099");
+      this.getNextPath(this.adminResourceId, 3);
+    },
     //生成需求决策编号接口
     getDemand() {
       this.$http({
@@ -203,25 +231,49 @@ export default {
       function success(data) {}
     },
     async nextWorks(lists, list) {
-      let _this = this;
-      let obj = {
-        url: _this.$url.formList.nextWork, //下一步工作流接口
-        data: lists,
-        status: "form",
-      };
-      await this.common.httpPost(obj, success);
-      function success(data) {
-        let updateList = {
-          taskId: data.taskid,
-          id: _this.list.id,
-          resourceId: _this.nodes.currentShape[0].resourceId,
+     let listss = {
+          userId:this.nextDealManList , //人员id
+          taskId: this.list.taskId, //表单标识
+          loginstr: JSON.parse(window.sessionStorage.userInfo).loginNoStr,
+          // taskName: this.clicknextName, //流程节点
+          content: this.textarea, //意见内容
+        };
+      if (this.manyReassignment == true) {
+        let _this = this;
+        let obj = {
+          url: _this.$url.formList.getNewTransferTask + _this.list.taskId, //下一步工作流接口
+          data: listss,
+          status: "form",
         };
-        list.taskId = data.taskid;
-        _this.setUpdate(updateList);
-        _this.getLastManList(list);
+        await this.common.httpPost(obj, success);
+        function success(data) {
+          _this.$emit("beforeClose", true);
+        }
+      } else {
+        let _this = this;
+        let obj = {
+          url: _this.$url.formList.nextWork, //下一步工作流接口
+          data: lists,
+          status: "form",
+        };
+        await this.common.httpPost(obj, success);
+        function success(data) {
+          console.log(data);
+          let updateList = {
+            taskId: data.taskid,
+            id: _this.list.id,
+            resourceId: _this.nodes.currentShape[0].resourceId,
+          };
+          list.taskId = data.taskid;
+          _this.setUpdate(updateList);
+          _this.getLastManList(list);
+        }
       }
     },
     submitWork() {
+      console.log(this.nodes);
+      //多人转派环节
+
       //多人会签处理环节
       let list = {
         userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
@@ -230,6 +282,7 @@ export default {
         taskName: this.clicknextName, //流程节点
         userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
         content: this.textarea, //意见内容
+        resourceId: this.nodes.currentShape[0].resourceId,
       };
       let newlist = {
         userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
@@ -239,14 +292,15 @@ export default {
         userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
         content: this.textarea, //意见内容
       };
+
       if (this.manyPeopleStatus == true) {
         list.procinstid = this.list.processId;
-        if (this.backThree.length <= 1) {
-          this.$message.error("请选择多人");
-          return;
-        } else {
-          list.lastmanList = this.nextDealManList;
-        }
+        // if (this.backThree.length <= 1) {
+        //   this.$message.error("请选择多人");
+        //   return;
+        // } else {
+        list.lastmanList = this.nextDealManList;
+        // }
         if (this.nodes.currentShape) {
           newlist.resolution = this.nodes.currentShape[0].condition.resolution;
           newlist.approve = this.nodes.currentShape[0].condition.approve;
@@ -467,21 +521,29 @@ export default {
         },
         data: "",
       }).then((res) => {
+        console.log(res);
         if (status === 2) {
+          console.log(777);
           this.treeCopyList = res.data; //抄送
           //  this.$refs.defTrees.treeList = res.data;
         } else {
-          this.treeList = res.data; //抄送
+          // let list = []
+          // list.push(res.data)
+          // this.treeList = list; //抄送
+          this.treeList = res.data;
           // this.$refs.defTree.treeList = res.data;
         }
       });
     },
+
     //转派按钮方法
     clickTransfer(e) {
       this.$refs.defTree.userList = [];
       this.backThree = [];
       this.treeList = [];
       if (e == 1) {
+        this.seleIndex = "";
+        this.active = this.active != "" ? "" : "active";
         this.manyPeopleStatus = false;
         this.TransferStatus = true;
       } else if (e == 2) {
@@ -491,12 +553,15 @@ export default {
     },
     //点击节点获取下一步的处理人字段
     clickGetTree(e, index) {
+      this.active = "";
+      this.actives = "";
       this.$refs.defTree.userList = [];
       this.backThree = [];
       // this.CopyStatus = false;
       this.TransferStatus = false;
       //   this.clickTaskName = e.properties.name;
       this.clicknextName = e.properties.name;
+      console.log(index);
       this.seleIndex = index;
       this.getNextPath(e.resourceId, 3); //1 为点击后获取线
     },
@@ -535,6 +600,7 @@ export default {
           }
         }
       }
+      console.log(this.backThree);
     },
     //获取字典表常用意见
     getMetirialType(e) {

+ 302 - 106
src/components/workflowBase.vue

@@ -8,14 +8,15 @@
               选择路径
 
               <div class="flex-path-list">
-                <div v-if="transferStatus" @click="clickTransfer(1)">转派</div>
+                <div v-if="manyReassignment" :class="actives" @click="clickManyTransfer(1)">
+                  转派
+                </div>
+                <div v-if="transferStatus" :class="active" @click="clickTransfer(1)">
+                  转派
+                </div>
                 <div v-if="copyStatus" @click="clickTransfer(2)">抄送</div>
-                <div
-                  v-for="(item, index) in node.nextShapes"
-                  :key="index"
-                  :class="seleIndex == index ? 'active' : ''"
-                  @click="clickGetTree(item, index)"
-                >
+                <div v-for="(item, index) in node.nextShapes" :key="index" :class="seleIndex == index ? 'active' : ''"
+                  @click="clickGetTree(item, index)">
                   {{ item.properties.name }}
                 </div>
               </div>
@@ -24,18 +25,11 @@
           <div class="flex-commons">
             <div class="flex-left-header-text">
               常用意见
-              <span @click="clickEdit" class="flex-icon"
-                ><i class="el-icon-edit"></i>修改</span
-              >
+              <span @click="clickEdit" class="flex-icon"><i class="el-icon-edit"></i>修改</span>
             </div>
             <div class="flex-slide">
-              <div
-                v-for="(item, index) in commonlyList"
-                :key="index"
-                ref="common"
-                class="flex-common"
-                @click="clickCommonly($event)"
-              >
+              <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common"
+                @click="clickCommonly($event)">
                 {{ item.dataName }}
               </div>
             </div>
@@ -43,34 +37,24 @@
         </div>
         <div class="flex-opinion">
           <div class="flex-left-header-text">意见内容</div>
-          <el-input
-            type="textarea"
-            autosize
-            placeholder="请输入内容"
-            v-model="textarea"
-          >
+          <el-input type="textarea" autosize placeholder="请输入内容" v-model="textarea">
           </el-input>
         </div>
       </div>
       <div class="flex-right" :class="{ copyClass: CopyStatus }">
-        <div
-          class="flex-left-header-text"
-          :class="{ 'flex-right-text': CopyStatus }"
-        >
+        <div class="flex-left-header-text" :class="{ 'flex-right-text': CopyStatus }">
           本部门人员办理
           <div style="display: flex">
             <div class="flex-header-text-tree">
               候选人
-              <deptTree
-                ref="defTree"
-                class="flex-slide"
-                :treeList="treeList"
-                @changeTree="changeTree"
-              />
+              <deptTree ref="defTree" class="flex-slide" :treeList="treeList" @changeTree="changeTree" />
             </div>
             <div class="flex-header-text-tree">
               已选人员
-              <div class="">{{ selectUser }}</div>
+              <!-- <div class="">{{ selectUser }}</div> -->
+              <div class="" v-for="(item, index) in backThree" :key="index">
+                {{ item.loginNameStr }}
+              </div>
             </div>
           </div>
         </div>
@@ -79,16 +63,13 @@
           <div style="display: flex">
             <div class="flex-header-text-tree">
               抄送人
-              <deptTree
-                ref="defTrees"
-                class="flex-slide"
-                :treeList="treeCopyList"
-                @changeTree="changeTreeCopy"
-              />
+              <deptTree ref="defTrees" class="flex-slide" :treeList="treeCopyList" @changeTree="changeTreeCopy" />
             </div>
             <div class="flex-header-text-tree">
               已选人员
-              <div class="">{{ copyUser }}</div>
+              <div class="" v-for="(item, index) in copyUser" :key="index">
+                {{ item.loginNameStr }}
+              </div>
             </div>
           </div>
         </div>
@@ -99,21 +80,10 @@
         <el-button type="primary" @click="submitWork()">提交</el-button>
       </div>
     </div>
-    <el-dialog
-      title="修改常用意见"
-      :visible.sync="editStatus"
-      width="100%"
-      :before-close="editCloses"
-      :modal="false"
-      :destroy-on-close="true"
-    >
+    <el-dialog title="修改常用意见" :visible.sync="editStatus" width="100%" :before-close="editCloses" :modal="false"
+      :destroy-on-close="true">
       <div style="overflow-y: scroll; overflow-x: hidden; height: 240px">
-        <div
-          v-for="(item, index) in commonlyList"
-          :key="index"
-          ref="common"
-          class="flex-common"
-        >
+        <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common">
           {{ item.dataName
           }}<i class="el-icon-circle-close" @click="deleStatus(item)"></i>
         </div>
@@ -134,12 +104,15 @@ export default {
   name: "workflow",
   data() {
     return {
+      active: "",
+      manyPeopleStatus: false, //多人处理下发任务
+      editStatus: false, //常用意见控制
       transferStatus: false, //转派按钮控制
       TransferStatus: false, //是否点击转派状态
       copyStatus: false, //抄送按钮控制
       CopyStatus: false, //是否点击抄送状态
       node: [], //路径列表
-      seleIndex: "", //点击路径下标
+      seleIndex: "1099", //点击路径下标
       commonlyList: [], //常用意见数组
       textarea: "未填写意见", //意见内容字段
       copyUser: "", //抄送人员列表
@@ -150,6 +123,12 @@ export default {
       initialList: [], //第一次进入是加载节点
       clicknextName: "", //获取的流程节点
       backThree: [],
+      treeCopyList: [],
+      demand: "",
+      nextDealManList: "",
+      isLastManStatus: false,
+      manyReassignment: false,
+      actives: "",
     };
   },
   props: {
@@ -161,57 +140,183 @@ export default {
     requestForm: {
       type: Object,
     },
+    adminResourceId: {
+      type: String,
+    },
   },
   created() {
+    console.log(this.list);
     this.getNextPath(this.list.resourceId, 1);
     this.getMetirialType();
   },
   methods: {
-    submitWork() {
-      if (this.TransferStatus === true) {
-        if (this.backThree.length > 0) {
-          this.nextWork();
-        } else {
-          this.$message.error("请选择候选人");
-          return false;
+    //多人转派
+    clickManyTransfer() {
+      (this.actives = this.actives != "" ? "" : "active"),
+        (this.seleIndex = "1099");
+      this.getNextPath(this.adminResourceId, 3);
+    },
+    async getLastManList(e) {
+      let _this = this;
+      let obj = {
+        url: _this.$url.formList.getComplateLastMan, //开始工作流接口
+        data: e,
+        // status: "form",
+        headers: {
+          "Content-Type": "application/json",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) { }
+    },
+    async nextWorks(lists, list) {
+      let listss = {
+        userId: this.nextDealManList, //人员id
+        taskId: this.list.taskId, //表单标识
+        loginstr: JSON.parse(window.sessionStorage.userInfo).loginNoStr,
+        // taskName: this.clicknextName, //流程节点
+        content: this.textarea, //意见内容
+      };
+      if (this.manyReassignment == true) {
+        let _this = this;
+        let obj = {
+          url: _this.$url.formList.getNewTransferTask + _this.list.taskId, //下一步工作流接口
+          data: listss,
+          status: "form",
+        };
+        await this.common.httpPost(obj, success);
+        function success(data) {
+          _this.$emit("beforeClose", true);
         }
       } else {
-        let list = {
-          userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
-          taskId: this.list.taskId, //表单标识
-          taskName: this.clicknextName, //流程节点
-          userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
-          content: this.textarea, //意见内容
-          // resolution: this.nodes.currentShape[0].condition.resolution, //流程图线节点
-          // nextDealMan: this.backThree[0].loginNoStr || '', //下一步处理人
+        let _this = this;
+        let obj = {
+          url: _this.$url.formList.nextWork, //下一步工作流接口
+          data: lists,
+          status: "form",
         };
-        if (this.copyUser) {
-          //抄送
-          list.copyman = this.backCopyThree[0].loginNoStr;
+        await this.common.httpPost(obj, success);
+        function success(data) {
+          console.log(data);
+          let updateList = {
+            taskId: data.taskid,
+            id: _this.list.id,
+            resourceId: _this.nodes.currentShape[0].resourceId,
+            tableName: _this.requestForm.processDefinitionKey,
+          };
+          list.taskId = data.taskid;
+          _this.setUpdate(updateList);
+          _this.getLastManList(list);
         }
+      }
+    },
+    submitWork() {
+      //多人会签处理环节
+      let list = {
+        userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
+        taskId: this.list.taskId, //表单标识
+        // procinstid: this.list.processId,
+        taskName: this.clicknextName, //流程节点
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
+        content: this.textarea, //意见内容
+      };
+      let newlist = {
+        userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
+        taskId: this.list.taskId, //表单标识
+        // procinstid: this.list.processId,
+        taskName: this.clicknextName, //流程节点
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
+        content: this.textarea, //意见内容
+      };
+      if (this.manyPeopleStatus == true) {
+        list.procinstid = this.list.processId;
+        // if (this.backThree.length <= 1) {
+        // this.$message.error("请选择多人");
+        // return;
+        // } else {
+        list.lastmanList = this.nextDealManList;
+        // }
         if (this.nodes.currentShape) {
-          list.resolution = this.nodes.currentShape[0].condition.resolution;
-          list.approve = this.nodes.currentShape[0].condition.approve;
+          newlist.resolution = this.nodes.currentShape[0].condition.resolution;
+          newlist.approve = this.nodes.currentShape[0].condition.approve;
         }
-        if (this.clicknextName === "") {
-          this.$message.error("请选择流程节点");
+        if (this.backThree.length > 0) {
+          newlist.nextDealMan = "admin";
+        }
+        this.nextWorks(newlist, list);
+      } else {
+        console.log(456);
+        //生成需求决策编号
+        if (this.clicknextName === "起草人发送") {
+          this.getDemand();
+        }
+        if (!this.list.taskId) {
+          this.$message.error("请先保存表单后处理");
           return false;
         }
-        if (this.backThree.length > 0) {
-          list.nextDealMan = this.backThree[0].loginNoStr;
-        } else {
-          if (this.clicknextName === "流程结束") {
+        if (this.TransferStatus === true) {
+          if (this.backThree.length > 0) {
+            this.nextWork();
           } else {
             this.$message.error("请选择候选人");
             return false;
           }
+        } else {
+          if (this.copyUser.length) {
+            //抄送
+            // list.copyman = this.treeCopyList[0].loginNoStrCopy;
+            // list.copyman = this.copyUser;
+            list.copyman = ''
+            this.copyUser.map((item) => {
+              list.copyman += item.loginNoStr + ','
+            })
+          }
+          if (this.isLastManStatus == true) {
+            list.lastman = "yes";
+          }
+          if (this.nodes.currentShape) {
+            list.resolution = this.nodes.currentShape[0].condition.resolution;
+            list.approve = this.nodes.currentShape[0].condition.approve;
+          }
+          if (this.clicknextName === "") {
+            this.$message.error("请选择流程节点");
+            return false;
+          }
+          if (this.backThree.length > 0) {
+            if (this.manyPeopleStatus == true) {
+              list.nextDealManList = this.nextDealManList;
+            } else {
+              list.nextDealMan = this.backThree[0].loginNoStr;
+            }
+          } else {
+            if (this.clicknextName === "流程结束" || this.clicknextName === "提交至任务发起人") {
+            } else {
+              this.$message.error("请选择候选人");
+              return false;
+            }
+          }
+          this.nextWork(list);
         }
-        this.nextWork(list);
       }
     },
+    //生成需求决策编号接口
+    getDemand() {
+      this.$http({
+        url: "/market/waf/getBusi",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.demand = res.data;
+      });
+    },
     async nextWork(list) {
       //e:yes||no,list:传入数组,title:结束标签,res:驳回标签,id:工单更新id
       let _this = this;
+      let copylist = list
       let obj = {
         url: _this.$url.formList.nextWork, //下一步工作流接口
         data: list,
@@ -222,7 +327,6 @@ export default {
           userId: _this.backThree[0].loginNoStr,
           taskId: _this.list.taskId,
           content: _this.textarea,
-          tableName: _this.requestForm.processDefinitionKey,
         };
         obj.url = _this.$url.formList.transferTask + _this.list.taskId;
         obj.data = lists;
@@ -248,8 +352,11 @@ export default {
             };
             if (data.copytaskid) {
               list.copytaskid = data.copytaskid;
-              list.copyman = _this.backCopyThree[0].loginNoStr;
-              // list.tableName = _this.requestForm.processDefinitionKey;
+              // list.copyman = _this.treeCopyList[0].loginNoStrCopy;
+              list.copyman = copylist.copyman;
+            }
+            if (_this.demand) {
+              list.needNo = _this.demand;
             }
             _this.setUpdate(list);
           }
@@ -261,8 +368,6 @@ export default {
           };
           _this.setUpdate(list);
         }
-        _this.dialogStatus = false;
-        _this.handleCloses();
       }
     },
     setUpdate(e) {
@@ -279,15 +384,12 @@ export default {
     },
     //查询路径接口
     getNextPath(e, status) {
+      let { fresourceId, processDefinitionKey } = this.requestForm;
       let list = {
-        // fresourceId: "bf79721c-33f3-11ed-ba0b-00505687dcd3", //测试环境
-        fresourceId: this.requestForm.fresourceId, // 本地环境
-        processId: this.requestForm.processDefinitionKey,
-        // resourceId: e,
+        fresourceId: fresourceId,
+        processId: processDefinitionKey,
       };
-      if (e) {
-        list.resourceId = e;
-      }
+      e ? (list.resourceId = e) : list;
       this.$http({
         url: "/market/waf/queryPath",
         method: "post",
@@ -299,6 +401,14 @@ export default {
         if (status === 1) {
           //第一次进入取路径
           this.initialList = res.data.body;
+          if (res.data.body.nextShapes[0].multi !== null) {
+            if (res.data.body.nextShapes[0].multi.multi === "true") {
+              // this.getqueryMultiTaskId();
+              this.isLastManStatus = true;
+            } else {
+              this.isLastManStatus = false;
+            }
+          }
           if (res.data.body.nextShapes[0].loop !== null) {
             if (res.data.body.nextShapes[0].loop.loop === "true") {
               this.transferStatus = true; //转派按钮生效
@@ -309,9 +419,9 @@ export default {
             this.transferStatus = false;
           }
           if (res.data.body.nextShapes[0].copy !== null) {
-            console.log(res.data.body.nextShapes[0].copy.copy);
             if (res.data.body.nextShapes[0].copy.copy === "true") {
               this.copyStatus = true; //抄送按钮生效
+              this.CopyStatus = true;
             } else {
               this.copyStatus = false;
             }
@@ -332,12 +442,22 @@ export default {
         if (status === 3) {
           this.nodes = res.data.body;
           this.getTreeLists(res.data.body, 1);
+
+          if (res.data.body.nextShapes[0].multi !== null) {
+            if (res.data.body.nextShapes[0].multi.multi === "true") {
+              this.manyPeopleStatus = true; //转派按钮生效
+            } else {
+              this.manyPeopleStatus = false;
+            }
+          } else {
+            this.manyPeopleStatus = false;
+          }
         }
       });
     },
     //查询候选人接口
     getTreeLists(e, status) {
-      let createdId = "createld";
+      let createdId = "createId";
       let id =
         e.nextShapes[0].properties.documentation === createdId
           ? this.list.createId
@@ -353,7 +473,7 @@ export default {
       }).then((res) => {
         console.log(status);
         if (status === 2) {
-          this.treeCopyList = res.data; //抄送
+          // this.treeCopyList = res.data; //抄送
           //  this.$refs.defTrees.treeList = res.data;
         } else {
           this.treeList = res.data; //抄送
@@ -361,6 +481,22 @@ export default {
           console.log(this.treeList);
         }
       });
+      if (this.copyStatus == true) {
+        this.$http({
+          url: "/market/api/user/info/queryNodePers?params=" + e.nextShapes[0].properties.formkeydefinition,
+          method: "post",
+          headers: {
+            "Content-Type": "application/json",
+          },
+          data: "",
+        }).then((res) => {
+          console.log(status);
+          this.treeCopyList = res.data; //抄送
+
+        });
+      } else {
+
+      }
     },
     //转派按钮方法
     clickTransfer(e) {
@@ -373,6 +509,11 @@ export default {
     },
     //点击节点获取下一步的处理人字段
     clickGetTree(e, index) {
+      this.$refs.defTree.userList = [];
+      this.backThree = [];
+      this.$refs.defTree.userList = [];
+      this.backThree = [];
+      this.copyUser = [];
       this.CopyStatus = false;
       this.TransferStatus = false;
       //   this.clickTaskName = e.properties.name;
@@ -390,18 +531,35 @@ export default {
     },
     //选择树的回调
     changeTree(e) {
-      if (e.length > 1) {
-        this.$message.error("只能选择一个人");
-        return;
-      } else {
+      if (this.manyPeopleStatus == true) {
         this.backThree = e;
-        if (e[0]) {
-          this.selectUser = e[0].loginNameStr;
+
+        let arr = [];
+        this.backThree.map((item) => {
+          arr.push(item.loginNoStr);
+        });
+        this.nextDealManList = arr.toString();
+      } else {
+        if (e.length > 1) {
+          this.$message.error("只能选择一个人");
+          return;
         } else {
-          this.selectUser = "暂无选择";
+          this.backThree = e;
+          if (this.CopyStatus === true) {
+            this.getTreeLists(e[0].loginNoStr, 2);
+          }
+          if (e[0]) {
+            this.selectUser = e[0].loginNameStr;
+          } else {
+            this.selectUser = "暂无选择";
+          }
         }
       }
     },
+    changeTreeCopy(e) {
+      console.log(e);
+      this.copyUser = e
+    },
     //获取字典表常用意见
     getMetirialType(e) {
       this.$http({
@@ -509,28 +667,40 @@ export default {
   width: 50%;
   text-align: center;
 }
+
+
 .flex-icon {
   float: right;
   margin-right: 20px;
   color: #4277a1;
 }
+
+
 .flex-handle {
   width: 100%;
   padding: 30px;
   display: flex;
+
+
   .flex-right {
     width: 50%;
     border: 1px solid #e1e1e1;
     margin-left: 20px;
   }
 }
+
+
 .flex-left {
   width: 50%;
   display: flex;
   flex-direction: column;
+
+
   .flex-left-header {
     display: flex;
     justify-content: space-around;
+
+
     .flex-path {
       height: 280px;
       border: 1px solid #e1e1e1;
@@ -538,10 +708,14 @@ export default {
     }
   }
 }
+
+
 .flex-common {
   padding: 10px 5%;
   font-size: 18px;
 }
+
+
 .flex-left-header-text {
   height: 40px;
   line-height: 40px;
@@ -551,42 +725,64 @@ export default {
   font-size: 18px;
   font-weight: bold;
 }
+
+
 .flex-path-list {
   overflow-y: scroll;
   overflow-x: hidden;
   height: 14rem;
 }
+
+
 .flex-slide {
   overflow-y: scroll;
   overflow-x: hidden;
 }
+
+
 .active {
   background-color: #f3faff;
 }
+
+
 .flex-opinion {
   height: 280px;
   border: 1px solid #e1e1e1;
   width: 100%;
   margin-top: 20px;
 }
+
+
 .flex-right-text {
   margin-right: 20px;
   width: 50%;
 }
+
+
 .flex-commons {
   height: 280px;
   border: 1px solid #e1e1e1;
   width: 30%;
 }
+
+
 .flex-footer-botton {
   display: flex;
   justify-content: space-evenly;
 }
+
+
 .flex-button {
   margin-top: 10px;
   margin-bottom: 10px;
+
+
   ::v-deep .el-button--primary {
     width: 222px;
   }
 }
-</style>
+
+.copyClass {
+  display: flex;
+}
+</style>

+ 53 - 44
src/components/workflowEntrance.vue

@@ -9,8 +9,8 @@
               选择路径
 
               <div class="flex-path-list">
-                <div @click="getTreeLists(9)">转派</div>
-                <div @click="getclose()">结束</div>
+                <div :class="active" @click="getTreeLists(9)">转派</div>
+                <div :class="actives" @click="getclose()">结束</div>
                 <!-- <div
                   v-for="(item, index) in node.nextShapes"
                   :key="index"
@@ -25,18 +25,11 @@
           <div class="flex-commons">
             <div class="flex-left-header-text">
               常用意见
-              <span @click="clickEdit" class="flex-icon"
-                ><i class="el-icon-edit"></i>修改</span
-              >
+              <span @click="clickEdit" class="flex-icon"><i class="el-icon-edit"></i>修改</span>
             </div>
             <div class="flex-slide">
-              <div
-                v-for="(item, index) in commonlyList"
-                :key="index"
-                ref="common"
-                class="flex-common"
-                @click="clickCommonly($event)"
-              >
+              <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common"
+                @click="clickCommonly($event)">
                 {{ item.dataName }}
               </div>
             </div>
@@ -44,12 +37,7 @@
         </div>
         <div class="flex-opinion">
           <div class="flex-left-header-text">意见内容</div>
-          <el-input
-            type="textarea"
-            autosize
-            placeholder="请输入内容"
-            v-model="textarea"
-          >
+          <el-input type="textarea" autosize placeholder="请输入内容" v-model="textarea">
           </el-input>
         </div>
       </div>
@@ -61,12 +49,7 @@
           <div style="display: flex">
             <div class="flex-header-text-tree">
               候选人
-              <deptTree
-                ref="defTree"
-                class="flex-slide"
-                :treeList="treeList"
-                @changeTree="changeTree"
-              />
+              <deptTree ref="defTree" class="flex-slide" :treeList="treeList" @changeTree="changeTree" />
             </div>
             <div class="flex-header-text-tree">
               已选人员
@@ -98,27 +81,15 @@
     </div>
     <div class="flex-footer-botton">
       <div class="flex-button">
-        <el-button type="primary" @click="getnewtransfertask(1)"
-          >提交</el-button
-        >
+        <el-button type="primary" @click="getnewtransfertask(1)">提交</el-button>
       </div>
     </div>
-    <el-dialog
-      title="修改常用意见"
-      :visible.sync="editStatus"
-      width="100%"
-      :before-close="editCloses"
-      :modal="false"
-      :destroy-on-close="true"
-    >
+    <el-dialog title="修改常用意见" :visible.sync="editStatus" width="100%" :before-close="editCloses" :modal="false"
+      :destroy-on-close="true">
       <div style="overflow-y: scroll; overflow-x: hidden; height: 240px">
-        <div
-          v-for="(item, index) in commonlyList"
-          :key="index"
-          ref="common"
-          class="flex-common"
-        >
-          {{ item.dataName
+        <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common">
+          {{
+            item.dataName
           }}<i class="el-icon-circle-close" @click="deleStatus(item)"></i>
         </div>
         <div class="flex-common">
@@ -138,6 +109,8 @@ export default {
   name: "workflow",
   data() {
     return {
+      active: '',
+      actives: '',
       MultipersonTransfer: false,
       transferStatus: false, //转派按钮控制
       TransferStatus: false, //是否点击转派状态
@@ -159,6 +132,7 @@ export default {
       treeCopyList: [],
       demand: "",
       close: "",
+      nextDealManLists: ''
     };
   },
   props: {
@@ -183,6 +157,8 @@ export default {
       this.backThree = [];
       this.treeList = [];
       this.close = "1";
+      this.actives = this.actives != "" ? "" : 'actives'
+      this.active = ""
     },
     // async getqueryMultiTaskId() {
     //   let list = {
@@ -217,6 +193,7 @@ export default {
         // taskName: this.clicknextName, //流程节点
         userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
         content: this.textarea, //意见内容
+        resourceId: this.list.resourceId
       };
       let obj = {};
       if (this.close == "1") {
@@ -225,7 +202,7 @@ export default {
           (obj.data = list);
       } else {
         let listss = {
-          userId: _this.backThree[0].loginNoStr, //人员id
+          userId: _this.nextDealManLists, //人员id
           taskId: this.list.taskId, //表单标识
           loginstr: JSON.parse(window.sessionStorage.userInfo).loginNoStr,
           // taskName: this.clicknextName, //流程节点
@@ -438,7 +415,6 @@ export default {
           //   this.initialList.nextShapes[0].multi?.multi &&
           //   res.data.body.nextShapes[0].multi.multi === "true"
           // ) {
-           
           // }
         }
         if (status === 2) {
@@ -457,6 +433,9 @@ export default {
     //查询候选人接口
     getTreeLists(e, status) {
       if (e === 9) {
+        this.close = ""
+        this.active = this.active != "" ? '' : 'active'
+        this.actives = ""
         this.MultipersonTransfer = true;
       } else {
         this.MultipersonTransfer = false;
@@ -530,6 +509,11 @@ export default {
           return;
         } else {
           this.backThree = e;
+          let arr = [];
+          this.backThree.map((item) => {
+            arr.push(item.loginNoStr);
+          });
+          this.nextDealManLists = arr.toString();
         }
       }
     },
@@ -636,32 +620,46 @@ export default {
 </script>
 
 <style lang='scss' scoped>
+.active {
+  background-color: #f3faff;
+}
+
+.actives {
+  background-color: #f3faff;
+}
+
 .flex-header-text-tree {
   width: 50%;
   text-align: center;
 }
+
 .flex-icon {
   float: right;
   margin-right: 20px;
   color: #4277a1;
 }
+
 .flex-handle {
   width: 100%;
   padding: 30px;
   display: flex;
+
   .flex-right {
     width: 50%;
     border: 1px solid #e1e1e1;
     margin-left: 20px;
   }
 }
+
 .flex-left {
   width: 50%;
   display: flex;
   flex-direction: column;
+
   .flex-left-header {
     display: flex;
     justify-content: space-around;
+
     .flex-path {
       height: 280px;
       border: 1px solid #e1e1e1;
@@ -669,10 +667,12 @@ export default {
     }
   }
 }
+
 .flex-common {
   padding: 10px 5%;
   font-size: 18px;
 }
+
 .flex-left-header-text {
   height: 40px;
   line-height: 40px;
@@ -682,40 +682,49 @@ export default {
   font-size: 18px;
   font-weight: bold;
 }
+
 .flex-path-list {
   overflow-y: scroll;
   overflow-x: hidden;
   height: 14rem;
 }
+
 .flex-slide {
   overflow-y: scroll;
   overflow-x: hidden;
 }
+
 .active {
   background-color: #f3faff;
 }
+
 .flex-opinion {
   height: 280px;
   border: 1px solid #e1e1e1;
   width: 100%;
   margin-top: 20px;
 }
+
 .flex-right-text {
   margin-right: 20px;
   width: 50%;
 }
+
 .flex-commons {
   height: 280px;
   border: 1px solid #e1e1e1;
   width: 30%;
 }
+
 .flex-footer-botton {
   display: flex;
   justify-content: space-evenly;
 }
+
 .flex-button {
   margin-top: 10px;
   margin-bottom: 10px;
+
   ::v-deep .el-button--primary {
     width: 222px;
   }

+ 2 - 2
src/components/workflowUpload.vue

@@ -44,8 +44,8 @@ export default {
     };
   },
   methods: {
-    clickDownload() {
-      this.$emit("clickDownload", true);
+    clickDownload(file) {
+      this.$emit("clickDownload", file);
     },
     signUpload() {},
     //删除

+ 40 - 4
src/http/api.js

@@ -13,7 +13,7 @@ export function getTodoBase(page, seach, idNo) {
         data: idNo,
     })
 }
-//通用方法
+//通用方法
 export function getDoneBase(page, seach, idNo) {
     return axios({
         url: "/market/waf/queryDoneBase",
@@ -26,7 +26,33 @@ export function getDoneBase(page, seach, idNo) {
         data: idNo,
     })
 }
-//通用方法待办
+//通用方法待阅
+export function queryReadBase(page, seach, idNo) {
+    return axios({
+        url: "/market/waf/queryReadBase",
+        method: "post",
+        method: "post",
+        headers: {
+            "Content-Type": "application/json",
+            page: '{"pageNo":"' + page + '","pageSize":"10"}',
+        },
+        data: idNo,
+    })
+}
+//通用方法已阅
+export function queryReadDoneBase(page, seach, idNo) {
+    return axios({
+        url: "/market/waf/queryReadDoneBase",
+        method: "post",
+        method: "post",
+        headers: {
+            "Content-Type": "application/json",
+            page: '{"pageNo":"' + page + '","pageSize":"10"}',
+        },
+        data: idNo,
+    })
+}
+//通用方法发起
 export function getInitiateBase(page, seach, idNo) {
     return axios({
         url: "/market/waf/queryInitiateBase",
@@ -45,9 +71,19 @@ export function updateBase(e) {
         url: "/market/waf/updateBase",
         method: "post",
         headers: {
-          "Content-Type": "application/json",
+            "Content-Type": "application/json",
         },
         data: e,
     })
 }
-export default { getTodoBase, getDoneBase, getInitiateBase,updateBase };
+export function getNowdata(e) {
+    let yy = new Date().getFullYear()
+    let mm = new Date().getMonth() + 1 < 10 ? '0' + (new Date().getMonth() + 1) : new Date().getMonth() + 1
+    let dd = new Date().getDate() < 10 ? '0' + new Date().getDate() : new Date().getDate()
+    let hh = new Date().getHours()
+    let mf = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes()
+    let ss = new Date().getSeconds() < 10 ? '0' + new Date().getSeconds() : new Date().getSeconds()
+    let time = yy + e.a + mm + e.a + dd + e.b + hh + e.c + mf + e.c + ss
+    return time
+}
+export default { getTodoBase, getDoneBase, getInitiateBase, updateBase, getNowdata, queryReadBase,queryReadDoneBase };

+ 64 - 5
src/pages/main/badInfoGovern/index.vue

@@ -110,7 +110,7 @@
 			</div>
 		</el-dialog>
 
-        <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+        <!-- <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
         	:modal-append-to-body="false" :close-on-click-modal="false">
         	<div>
 
@@ -134,8 +134,40 @@
         			<el-button @click="checkexa = false">取 消</el-button>
         		</div>
         	</div>
-        </el-dialog>
-
+        </el-dialog> -->
+          <el-dialog
+        title="选择审批人"
+        :visible.sync="checkexa"
+        width="100%"
+        style="height: 100%"
+        :fullscreen="true"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
+        :close-on-click-modal="false"
+      >
+        <div style="height: 100%">
+          <el-form :model="infolist" ref="infolist" style="height: 100%">
+            <el-form-item prop="visiblec" style="height: 100%">
+              <!-- <span style="width: 80px">审批人员</span> -->
+              <deptTreeOnly
+                @treeCheck="treeCheckonly"
+                :defaultList="defaultList"
+                :type="depttype"
+                :closeList="closeList"
+              ></deptTreeOnly>
+              <div style="text-align: center; margin-top: 30px">
+                <!-- <el-button type="primary" @click="checkProcessUser()"
+                  >确 定</el-button
+                > -->
+				<el-button type="primary" @click="checkProcessUser()" v-if="!visionchonly">确 定</el-button>
+        		<el-button type="primary" @click="checkProcessUser1()" v-if="visionchonly">确 定</el-button>
+                <el-button @click="checkexa = false">取 消</el-button>
+              </div>
+              
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-dialog>
 
 		<myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
 			v-if="centerDialogVisible"></myMessage>
@@ -148,8 +180,8 @@
 	import toolList from '../../../components/toolList'
 	import myUpload from '../../../components/upload'
 	import uploadDown from '../../../components/uploadDown.vue'
-    import deptTreeOnly from "../../../components/deptTreeOnly.vue"
-
+    // import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+    import deptTreeOnly from "../../../components/newTree.vue";
 	export default {
 		components: {
 			mySearch,
@@ -256,12 +288,36 @@
 			}
 		},
 		methods: {
+			checkProcessUser() {
+                let _this = this;
+                if (_this.treeListonly.length > 1) {
+                    _this.$message({
+                    message: "只能选择一个人",
+                    type: "error",
+                    });
+                } else {
+                    _this.dialogCliadd();
+                }
+                },
+					checkProcessUser1() {
+                let _this = this;
+                if (_this.treeListonly.length > 1) {
+                    _this.$message({
+                    message: "只能选择一个人",
+                    type: "error",
+                    });
+                } else {
+                    _this.dialogCli(2);
+                }
+                },
             deletes() {
             	this.treeListonly = {};
             	this.closeList = !this.closeList;
             },
             treeCheckonly(v) {
             	this.treeListonly = v;
+				this.treeListonly.leaderAuditName = v[0].label;
+				this.treeListonly.leaderAuditNo = v[0].key;
             },
 
 			closedia() {
@@ -648,6 +704,9 @@
 	}
 </script>
 <style scoped lang="scss">
+	 ::v-deep .el-dialog .flex-box{
+        height: 400px;
+    }
 	.onetab {
 		margin-bottom: 20px;
 		padding: 0 20px;

+ 1 - 1
src/pages/main/busitime/busiTimeout.vue

@@ -266,7 +266,7 @@ export default {
                   ]; // 导出的表头字段名
 
                   let list = exdata;
-
+                   
                   const data = that.formatJson(filterVal, list);
                   export_json_to_excel(tHeader, data, `report`); // 导出的表格名称,根据需要自己命名
               });

+ 76 - 6
src/pages/main/endToEnd/index.vue

@@ -194,8 +194,41 @@
         </el-dialog>
 
 
-
-        <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+        <el-dialog
+        title="选择审批人"
+        :visible.sync="checkexa"
+        width="100%"
+        style="height: 100%"
+        :fullscreen="true"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
+        :close-on-click-modal="false"
+      >
+        <div style="height: 100%">
+          <el-form :model="infolist" ref="infolist"  :rules="rules" style="height: 100%">
+            <el-form-item prop="visiblec" style="height: 100%" >
+             
+              <deptTreeOnly
+                @treeCheck="treeCheckonly"
+                :defaultList="defaultList"
+                :type="depttype"
+                :closeList="closeList"
+              ></deptTreeOnly>
+              <div style="text-align: center; margin-top: 30px">
+                <el-button type="primary" @click="checkProcessUser()"
+                  >确 定</el-button
+                >
+                <el-button @click="checkexa = false">取 消</el-button>
+                <!-- <el-button v-if="titname == '添加'" type="primary" @click="dialogCliadd">确 定</el-button>
+                    <el-button v-if="titname != '添加'" type="primary" @click="dialogCli(2)">确 定</el-button>
+                    <el-button @click="checkexa = false">取 消</el-button> -->
+              </div>
+              
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-dialog>
+        <!-- <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
             :modal-append-to-body="false" :close-on-click-modal="false">
             <div>
 
@@ -218,7 +251,7 @@
                     <el-button @click="checkexa = false">取 消</el-button>
                 </div>
             </div>
-        </el-dialog>
+        </el-dialog> -->
 
         <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
             v-if="centerDialogVisible"></myMessage>
@@ -231,7 +264,8 @@
     import toolList from '../../../components/toolList'
     import myUpload from '../../../components/upload'
     import uploadDown from '../../../components/uploadDown.vue'
-    import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+    // import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+    import deptTreeOnly from "../../../components/newTree.vue";
 
     export default {
         components: {
@@ -313,7 +347,7 @@
                 demandTypeopt: [],
                 carryChannelopt: [],
                 checkexa: false,
-                treeListonly: {},
+                treeListonly: [],
                 defaultList: [],
                 closeList: false,
                 depttype: 0,
@@ -362,6 +396,17 @@
             }
         },
         methods: {
+             checkProcessUser() {
+                let _this = this;
+                if (_this.treeListonly.length > 1) {
+                    _this.$message({
+                    message: "只能选择一个人",
+                    type: "error",
+                    });
+                } else {
+                    _this.dialogCliadd();
+                }
+                },
             //搜索数据
             searchInfo(v) {
                 this.params = {};
@@ -380,6 +425,25 @@
             },
             treeCheckonly(v) {
                 this.treeListonly = v;
+                console.log(v);
+                this.treeListonly.leaderAuditName = v[0].label;
+                this.treeListonly.leaderAuditNo = v[0].key;
+                // var val = {...v};
+                // console.log(val);
+                
+
+                //  let newArr=v.map(function (currentValue, index, ar) {
+                //     console.log(currentValue);//遍历打印1,2,3
+                //     // console.log(index);//遍历打印0,1,2
+                //     console.log(ar);//遍历打印三次[1, 2, 3]
+                //     // console.log(currentValue.key);
+                   
+                // //    this.treeListonly.leaderAuditName = currentValue.label;
+                // },)
+                // this.treeListonly.leaderAuditNo = newArr.currentValue.key;
+                // console.log(this.currentValue.key);
+
+
             },
             choline(v, n) {
                 if (v == 1) {
@@ -595,6 +659,7 @@
                     }
                     this.submitInfo("/bpm/api/submitTask", params);
                 } else if (v === 2) {
+                    console.log(222222)
                     let param = {
                         dealType: '0',
                         dealTypeDesc: '提交',
@@ -684,6 +749,7 @@
             },
             //添加
             dialogCliadd(v) {
+                console.log(11111)
                 let _this = this;
                 let info = {};
                 info.params = {};
@@ -710,7 +776,7 @@
                         return
                     }
                 }
-
+                console.log(123);
                 for (let i = 0; i < this.options.length; i++) {
                     if (this.terminal == this.options[i].procId) {
                         info.procName = this.options[i].procName;
@@ -782,6 +848,7 @@
                     data: {},
                 }).then((res) => {
                     this.options = res.data.data;
+                    console.log(res.data.data);
                 });
             },
             closeMessage(v) {
@@ -870,6 +937,9 @@
     }
 </script>
 <style scoped lang="scss">
+    ::v-deep .el-dialog .flex-box{
+        height: 400px;
+    }
     .onetab {
         margin-bottom: 20px;
         padding: 0 20px;

+ 62 - 3
src/pages/main/integral/index.vue

@@ -150,7 +150,43 @@
                 </div>
             </div>
         </el-dialog>
-        <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+        <el-dialog
+        title="选择审批人"
+        :visible.sync="checkexa"
+        width="100%"
+        style="height: 100%"
+        :fullscreen="true"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
+        :close-on-click-modal="false"
+      >
+        <div style="height: 100%">
+          <el-form :model="infolist" ref="infolist" style="height: 100%">
+            <el-form-item  style="height: 100%" >
+             
+              <deptTreeOnly
+                @treeCheck="treeCheckonly"
+                :defaultList="defaultList"
+                :type="depttype"
+                :closeList="closeList"
+              ></deptTreeOnly>
+              <div style="text-align: center; margin-top: 30px">
+                <el-button type="primary" @click="checkProcessUser()"
+                  >确 定</el-button
+                >
+				<!-- <el-button type="primary" @click="dialogCliadd" v-if="!visionchonly">确 定</el-button>
+        			<el-button type="primary" @click="dialogCli(2)" v-if="visionchonly">确 定</el-button> -->
+                <el-button @click="checkexa = false">取 消</el-button>
+                <!-- <el-button type="primary" @click="dialogCliadd" v-if="vision != '审批'">确 定</el-button>
+                    <el-button type="primary" @click="dialogCli(2)" v-if="vision == '审批'">确 定</el-button>
+                <el-button @click="checkexa = false">取 消</el-button> -->
+              </div>
+             
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-dialog>
+        <!-- <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
             :modal-append-to-body="false" :close-on-click-modal="false">
             <div>
 
@@ -173,7 +209,7 @@
                     <el-button @click="checkexa = false">取 消</el-button>
                 </div>
             </div>
-        </el-dialog>
+        </el-dialog> -->
 
         <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
             v-if="centerDialogVisible"></myMessage>
@@ -186,7 +222,8 @@
     import toolList from '../../../components/toolList'
     import myUpload from '../../../components/upload'
     import uploadDown from '../../../components/uploadDown.vue'
-    import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+    // import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+    import deptTreeOnly from "../../../components/newTree.vue";
 
     export default {
         components: {
@@ -276,12 +313,25 @@
             }
         },
         methods: {
+            checkProcessUser() {
+                let _this = this;
+                if (_this.treeListonly.length > 1) {
+                    _this.$message({
+                    message: "只能选择一个人",
+                    type: "error",
+                    });
+                } else {
+                    _this.dialogCliadd();
+                }
+                },
             deletes() {
                 this.treeListonly = {};
                 this.closeList = !this.closeList;
             },
             treeCheckonly(v) {
                 this.treeListonly = v;
+                this.treeListonly.leaderAuditName = v[0].label;
+                this.treeListonly.leaderAuditNo = v[0].key;
             },
             choline(v, n) {
                 if (v == 1) {
@@ -670,6 +720,15 @@
     }
 </script>
 <style scoped lang="scss">
+    ::v-deep .el-dialog__body {
+        max-height: calc(100vh - 70px) !important;
+        min-height: 100px;
+        height: 100%;
+        overflow-y: hidden;
+        }
+    ::v-deep .el-dialog .flex-box{
+        height: 400px;
+    }
     .onetab {
         margin-bottom: 20px;
         padding: 0 20px;

+ 2 - 2
src/pages/main/iptv/uploadDown.vue

@@ -41,8 +41,8 @@
                 }
             },
             uploadsee(v) {
-                let url = encodeURIComponent(v.callPath);
-                this.srcsc = 'http://114.215.71.182:8012/onlinePreview?url=' + url;
+                let url = encodeURIComponent(Base64.encode(v.callPath));
+            this.srcsc = 'http://10.230.15.228:8012/onlinePreview?url=' + url;
                 this.ifrshow=true;
                 // window.open('http://114.215.71.182:8012/onlinePreview?url=' + url);
             },

+ 138 - 208
src/pages/main/leader/components/deptThree.vue

@@ -1,219 +1,149 @@
 <template>
-  <div class="treebox" v-loading="loading" style="height: 30rem">
-      <el-checkbox-group v-model="userList">
-          <div v-for="(item,index) in treeList" :key="index">
-              <el-checkbox :label="item" @change="checkChange(item)">{{item.loginNameStr}}</el-checkbox> </div>
-      </el-checkbox-group>
-    <!-- <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input> -->
-<!--    <el-tree-->
-<!--      :highlight-current="true"-->
-<!--      :check-strictly="true"-->
-<!--      ref="tree"-->
-<!--      @check-change="handleCheckChange"-->
-<!--      :data="treeList"-->
-<!--      node-key="id"-->
-<!--      :default-checked-keys="defaultListc"-->
-<!--      :default-expanded-keys="defaultListc"-->
-<!--      @node-click="handleNodeClick"-->
-<!--      :filter-node-method="filterNode"-->
-<!--    >-->
-<!--      <span class="custom-tree-node" slot-scope="{ node }" @click="cs(node)">-->
-<!--        <em-->
-<!--          style="display: inline-block; width: 20px"-->
-<!--          v-if="node.data.haveUserFlag == 'N' && node.data.children.length == 0"-->
-<!--        ></em>-->
-<!--        <i-->
-<!--          class="el-icon-caret-right"-->
-<!--          v-if="node.data.haveUserFlag == 'Y' && node.data.children.length == 0"-->
-<!--        ></i>-->
-<!--        <el-checkbox-->
-<!--          style="margin-right: 10px"-->
-<!--          v-model="node.checked"-->
-<!--          v-if="node.data.type == 1"-->
-<!--        ></el-checkbox>-->
-<!--        <span>{{ node.label }}</span>-->
-<!--      </span>-->
-<!--    </el-tree>-->
-  </div>
+    <div class="treebox" v-loading="loading">
+        <!-- <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input> -->
+        <el-tree :highlight-current="true" :check-strictly="true" ref="tree" @check-change="handleCheckChange"
+            :data="treeList" node-key="id" :default-checked-keys="defaultListc" :default-expanded-keys="defaultListc"
+            @node-click="handleNodeClick" @node-expand="handleNodeClick" >
+            <span class="custom-tree-node" slot-scope="{ node, data }" @click="cs(node)">
+                <em style="display: inline-block;width: 20px;" v-if="node.data.haveUserFlag == 'N'&& node.data.children.length == 0"></em>
+                <i class="el-icon-caret-right" v-if="node.data.haveUserFlag == 'Y' && node.data.children.length == 0"></i>
+                <el-checkbox style="margin-right: 10px" v-model="node.checked" v-if="node.data.type == 1"></el-checkbox>
+                <span>{{ node.label }}</span>
+            </span>
+        </el-tree>
+    </div>
 </template>
 
 <script>
-export default {
-    props: ["defaultList", "type", "closeList", "treeList"],
-    data() {
-        return {
-            userList:[],
-            // treeList: [],
-            opt: [],
-            defaultProps: {
-                children: "children",
-                label: "label",
+    export default {
+        props: ["defaultList", "type", "closeList","treeList"],
+        data() {
+            return {
+                treeList: [],
+                opt: [],
+                defaultProps: {
+                    children: "children",
+                    label: "label",
+                },
+                defaultListc: [],
+                loading:false,
+                filterText: '',
+            };
+        },
+        methods: {
+            filterNode(value, data) {
+                if (!value) return true;
+                return data.label.indexOf(value) !== -1;
+            },
+            cs(v){
+                // console.log(v)
+            },
+            // getTree(v) {
+            //     this.loading = true;
+            //     this.$http({
+            //         url: "/sysmgr/csysdept/queryAllList",
+            //         method: "post",
+            //         headers: {
+            //             "Content-Type": "application/json",
+            //         },
+            //         data: {
+            //             parentorgid: v,
+            //         },
+            //     }).then((res) => {
+            //         this.treeList = res.data;
+            //         this.loading = false;
+            //     });
+            // },
+            handleCheckChange(v) {
+                let opt = [];
+                let list = this.$refs.tree.getCheckedNodes();
+                for (let i = 0; i < list.length; i++) {
+                    if (list[i].type == 1) {
+                        opt.push({
+                            receiveNo: list[i].loginNoStr,
+                            receiveName: list[i].label,
+                            deptName: list[i].displayname,
+                            deptCode: list[i].groupId,
+                            id: list[i].id,
+                            type: list[i].type,
+                            label: list[i].label,
+                        });
+                    }
+                }
+                this.$emit("treeCheck", opt);
+            },
+            handleNodeClick(v) {
+                let s = false;
+                if (v.children && v.children.length == 0) {
+                    s = true;
+                }
+                if (v.type) {
+                    return;
+                }
+                if (
+                    v.children &&
+                    v.children.length > 0 &&
+                    v.children[v.children.length - 1].type == 1
+                ) {
+                    return;
+                }
+                this.$http({
+                    url: "/sysmgr/sysuserinfo/queryList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {
+                        groupId: v.o,
+                    },
+                }).then((res) => {
+                    res.data.forEach((item) => {
+                        v.children.push({
+                            id: item.id,
+                            label: item.loginNameStr,
+                            type: 1,
+                            displayname: v.displayname,
+                            groupId: item.groupId,
+                            loginNoStr: item.loginNoStr,
+                        });
+                    });
+                });
+                for (let i = 0; i < this.$refs.tree.store._getAllNodes().length; i++) {
+                    if (s && v.o == this.$refs.tree.store._getAllNodes()[i].data.o) {
+                        this.$refs.tree.store._getAllNodes()[i].expanded = true;
+                        return;
+                    }
+                }
             },
-            defaultListc: [],
-            loading: false,
-            filterText: "",
-            list:[]
-        };
-    },
-    methods:{
-        checkChange(e){
-  
-  
-            // console.log(this.userList)
-            // let newList = []
-            // this.userList.map((item) =>{
-            //     let array =    {
-            //         userid:item,
-            //         taskid:e.id_,
-            //         nextid:e.id
-            //     }
-            //     newList.push(array)
-            //     // newList.map((items,i) =>{
-            //     //     if(item !== items.userid){
-            //     //         newList.splice(i,1)
-            //     //     }
-            //     //         })
-            //
-            // })
-            // this.list = newList
-            // this.userList.map((item) =>{
-            //     newList.map((items,i) =>{
-            //         if(item !==items.id){
-            //             newList.splice(i,1)
-            //         }
-            //     })
-            // })
-            // console.log(newList)
-            this.$emit('changeTree',this.userList)
-            this.$emit('changeUserName',e)
-
-
         },
-    }
-}
-    // filterNode(value, data) {
-    //   if (!value) return true;
-    //   return data.label.indexOf(value) !== -1;
-    // },
-    // cs(v) {
-    //   // console.log(v)
-    // },
-    // getTree(v) {
-    //     this.loading = true;
-    //     this.$http({
-    //         url: "/sysmgr/csysdept/queryAllList",
-    //         method: "post",
-    //         headers: {
-    //             "Content-Type": "application/json",
-    //         },
-    //         data: {
-    //             parentorgid: '00440089000000000000',
-    //         },
-    //     }).then((res) => {
-    //         console.log(res);
-    //         // this.treeList = res.data;
-    //         // this.loading = false;
-    //     });
-    // },
-    // handleCheckChange(v) {
-    //     let opt = [];
-    //     let list = this.$refs.tree.getCheckedNodes();
-    //     for (let i = 0; i < list.length; i++) {
-    //         if (list[i].type == 1) {
-    //             opt.push({
-    //                 receiveNo: list[i].loginNoStr,
-    //                 receiveName: list[i].label,
-    //                 deptName: list[i].displayname,
-    //                 deptCode: list[i].groupId,
-    //                 id: list[i].id,
-    //                 type: list[i].type,
-    //                 label: list[i].label,
-    //             });
-    //         }
-    //     }
-    //     this.$emit("treeCheck", opt);
-    // },
-  //   handleNodeClick(v) {
-  //     console.log(v);
-  //     let s = false;
-  //     if (v.children && v.children.length == 0) {
-  //       s = true;
-  //     }
-  //     if (v.type) {
-  //       return;
-  //     }
-  //     if (
-  //       v.children &&
-  //       v.children.length > 0 &&
-  //       v.children[v.children.length - 1].type == 1
-  //     ) {
-  //       return;
-  //     }
-  //     this.$http({
-  //       url: "/sysmgr/sysuserinfo/queryList",
-  //       method: "post",
-  //       headers: {
-  //         "Content-Type": "application/json",
-  //       },
-  //       data: {
-  //         groupId: v.o,
-  //       },
-  //     }).then((res) => {
-  //       res.data.forEach((item) => {
-  //         v.children.push({
-  //           id: item.id,
-  //           label: item.loginNameStr,
-  //           type: 1,
-  //           displayname: v.displayname,
-  //           groupId: item.groupId,
-  //           loginNoStr: item.loginNoStr,
-  //         });
-  //       });
-  //     });
-  //     for (let i = 0; i < this.$refs.tree.store._getAllNodes().length; i++) {
-  //       if (s && v.o == this.$refs.tree.store._getAllNodes()[i].data.o) {
-  //         this.$refs.tree.store._getAllNodes()[i].expanded = true;
-  //         return;
-  //       }
-  //     }
-  //   },
-  // },
-//   created() {
-//     console.log(this.treeList);
-//     // this.getTree();
-//     this.defaultListc = this.defaultList;
-//   },
-//   watch: {
-//     filterText(val) {
-//       this.$refs.tree.filter(val);
-//     },
-//     type() {
-//       this.defaultListc = this.defaultList;
-//       this.$forceUpdate();
-//     },
-//     defaultList() {
-//       this.$forceUpdate();
-//     },
-//     closeList() {
-//       this.$refs.tree.setCheckedNodes(this.closeList);
-//     },
-//   },
-// };
+        created() {
+            // this.getTree();
+            this.defaultListc = this.defaultList;
+        },
+        watch: {
+            filterText(val) {
+                this.$refs.tree.filter(val);
+            },
+            type() {
+                this.defaultListc = this.defaultList;
+                this.$forceUpdate();
+            },
+            defaultList() {
+                this.$forceUpdate();
+            },
+            closeList() {
+                this.$refs.tree.setCheckedNodes(this.closeList);
+            },
+        },
+    };
 </script>
 
 <style scoped lang="scss">
-.el-icon-caret-right {
-  color: #ccc;
-  margin: 0 5px;
-}
-.treebox {
-  border: 1px solid #ddd;
-}
-    ::v-deep .el-checkbox-group{
-        display: flex;
-        flex-direction: column;
-        align-items: baseline;
-        /* font-size: 38px; */
-        margin-left: 20px;
+    .el-icon-caret-right{
+        color: #ccc;
+        margin:0 5px;
+    }
+    .treebox {
+        border: 1px solid #ddd;
     }
 </style>

+ 8 - 0
src/pages/main/leader/components/formTable.vue

@@ -331,13 +331,21 @@
             >
             <a
               target="_blank"
+<<<<<<< HEAD
               href="./static/file/b.xlsx"
+=======
+              href="./static/file/c.xlsx"
+>>>>>>> cfc652501d2e3f961406c86f210ed803b1275d52
               download="业务需求模板.xlsx"
               >《业务需求模板.xlsx》、</a
             >
             <a
               target="_blank"
+<<<<<<< HEAD
               href="./static/file/c.xlsx"
+=======
+              href="./static/file/b.xlsx"
+>>>>>>> cfc652501d2e3f961406c86f210ed803b1275d52
               download="敏感信息范围说明.xlsx"
               >《敏感信息范围说明.xlsx》、</a
             >

+ 331 - 49
src/pages/main/leader/demand/demandHome.vue

@@ -44,6 +44,7 @@
       :before-close="handleClose"
       :modal="false"
       v-if="dialogStatus"
+      style="display: flex; flex-direction: column"
       :destroy-on-close="true"
     >
       <!-- 后期维护 -->
@@ -54,6 +55,7 @@
         <el-button type="primary" v-if="closeStatus" @click="handleClose"
           >关闭</el-button
         >
+
         <el-button
           type="primary"
           v-if="forwardStatus"
@@ -76,7 +78,9 @@
       />
       <div>
         <div class="table-title">流程追踪</div>
-        <Table :list="lables"></Table>
+        <div v-if="abc == true">
+          <Tables :list="lables"></Tables>
+        </div>
       </div>
     </el-dialog>
     <div v-if="destroy">
@@ -90,10 +94,21 @@
         :destroy-on-close="true"
       >
         <Workflow
+          ref="workflow"
           :list="fromList"
+          v-if="isWorkflowStatus == true"
           @beforeClose="beforeClose"
           :requestForm="requestForm"
+          :adminResourceId="adminResourceId"
         />
+        <WorkflowEntrance
+          :list="fromList"
+          v-else
+          :lastManList="lastManList"
+          @beforeClose="beforeClose"
+          :requestForm="requestForm"
+        />
+
         <!-- 后期维护 -->
       </el-dialog>
     </div>
@@ -123,14 +138,15 @@
     </el-dialog> -->
   </div>
 </template>
-
 <script>
 import Workflow from "../../../../components/workflow";
+import WorkflowEntrance from "../../../../components/workflowEntrance";
 import FormTable from "../components/formTable.vue";
 import Seach from "../components/search.vue";
 import Export from "../components/export.vue";
 import Tabs from "../components/tabs.vue";
 import Table from "../components/form.vue";
+import Tables from "../components/formTrace.vue";
 import deptTree from "../components/deptThree.vue";
 import Qs from "qs";
 export default {
@@ -142,13 +158,17 @@ export default {
     FormTable,
     deptTree,
     Workflow,
+    WorkflowEntrance,
+    Tables,
   },
   data() {
     return {
+      UserPermissionsList: [],
+      isWorkflowStatus: true, //默认展示模式组件,为true时展示多人处理组件
       buttonStatus: true,
       copyStatus: false,
       dialogTitle: "",
-      disabled: false,
+      disabled: true,
       destroy: false,
       //分页数据
       totalPage: "1", //默认第一页
@@ -178,9 +198,9 @@ export default {
         processDefinitionKey: "request_form_process",
       },
       requestForm: {
-        // fresourceId: "0d94de8a-0281-11ed-a302-4ae7da54db39", // 本地环境
-        fresourceId: "canvas", // 生产环境
+        fresourceId: "0d94de8a-0281-11ed-a302-4ae7da54db39", // 本地环境
         // fresourceId: "bf79721c-33f3-11ed-ba0b-00505687dcd3", //测试环境
+        // fresourceId:'81455799-600d-11ed-b399-e00084564cce',//生产环境
         processDefinitionKey: "request_form_process",
       },
       treeList: [], //候选人列表
@@ -277,7 +297,6 @@ export default {
       },
       firstTable: {
         name: "first",
-        height: "650",
         titledata: [
           {
             label: "需求名称",
@@ -568,6 +587,7 @@ export default {
                 this.disabled = true;
                 this.buttonStatus = false;
                 this.getReadList(r.copytaskid);
+                this.clickForm(r);
               }, // 自定义事件
             },
           ],
@@ -647,6 +667,7 @@ export default {
           ],
         },
       },
+      abc: false,
       lable: {},
       copyUser: "", //抄送人
       backThree: [],
@@ -655,26 +676,31 @@ export default {
         height: "400",
         titledata: [
           {
+            id: 1,
             label: "环节名称",
             prop: "taskName",
             width: 300,
           },
           {
+            id: 2,
             label: "处理人",
             prop: "assignee",
             width: 300,
           },
           {
+            id: 3,
             label: "到达时间",
             prop: "startTime",
             width: 300,
           },
           {
+            id: 4,
             label: "处理时间",
             prop: "endTime",
             width: 300,
           },
           {
+            id: 5,
             label: "回复意见",
             prop: "content",
             width: 300,
@@ -683,7 +709,7 @@ export default {
         data: [], //内容数据
         loading: true,
         pageData: {
-          total: 10, // 总条数
+          total: 0, // 总条数
           pageSize: 10, // 每页数量
           pageNum: 1, // 页码
         },
@@ -735,9 +761,77 @@ export default {
       clickTaskName: "",
       seachLists: {},
       timeList: {},
+      lastManList: [],
+      adminResourceId: "", //转派多人id
     };
   },
   created() {
+    this.getUserIndex();
+    // let A = [
+    //   {
+    //     id: 1,
+    //     b: "456",
+    //   },
+    //   {
+    //     id: 2,
+    //     b: "456",
+    //   },
+    // ];
+    // let B = [
+    //   {
+    //     a: 1,
+    //     b: "4567",
+    //   },
+    //   {
+    //     a: 1,
+    //     b: "4568",
+    //   },
+    //   {
+    //     a: 2,
+    //     b: "4567",
+    //   },
+    // ];
+    // A.map((item) => {
+    //   item.c = [];
+    //   let index = B.findIndex((items) => {
+    //     if (items.a == item.id) {
+    //       item.c.push(items);
+    //     }
+    //   });
+    //   console.log(index);
+    //  B.map((items,index) =>{
+    //   if(item.id == items.a){
+    //     item.c.push(items)
+    //   }
+
+    //  })
+    // });
+    // console.log(A);
+    // function getUserDescribe(name) {
+    //   const describeForNameMap = [
+    //     [
+    //       (name) => name.length > 3, // 判断条件
+    //       () => console.log("名字太长"), // 执行函数
+    //     ],
+    //     [(name) => name.length < 2, () => console.log("名字太短")],
+    //     [(name) => name[0] === "陈", () => console.log("小陈")],
+    //     [(name) => name === "大鹏", () => console.log("管理员")],
+    //     [
+    //       (name) => name[0] === "李" && name !== "李鹏",
+    //       () => console.log("小李"),
+    //     ],
+    //   ];
+    //   // 获取符合条件的子数组
+    //   const getDescribe = describeForNameMap.find((item) => item[0](name));
+    //   // 子数组存在则运行子数组中的第二个元素(执行函数)
+    //   getDescribe ? getDescribe[1]() : console.log("此人比较神秘!");
+    // }
+    // getUserDescribe('张元芳微软')
+    // const func = (name, age = "fatfish") => {
+    //   console.log(name);
+    // };
+    // func("123123123");
+
     //oa跳转回来显示
     let status = JSON.stringify(this.$route.query) == "{}";
     if (status) {
@@ -757,7 +851,7 @@ export default {
       }
       //待阅
       if (copy == 1) {
-        this.clickTagName = "four"
+        this.clickTagName = "four";
         this.getToBeRead(list, 1);
       }
     }
@@ -765,6 +859,39 @@ export default {
     this.lable = this.firstTable;
   },
   methods: {
+    //是否最后一个人
+    async getLastName() {
+      console.log(this.fromList);
+      let list = {
+        procinstid: this.fromList.processId,
+        taskid: this.fromList.taskId,
+
+        // taskId:e.taskId
+      };
+      let _this = this;
+      let obj = {
+        url: this.$url.formList.getLastName, //流程追踪接口
+        data: list,
+        // status: "form",
+        headers: {
+          "Content-Type": "application/json",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) {
+        console.log(data);
+        if (data.lastMan == true) {
+          _this.adminResourceId = data.adminResourceId;
+        }
+        _this.destroy = true;
+        _this.handleStatus = true;
+        _this.isWorkflowStatus = data.lastMan == false ? false : true;
+        _this.lastManList = data;
+
+        // console.log(_this.isWorkflowStatus);
+      }
+    },
     //添加面包屑
     setabList(n, p) {
       let params = {
@@ -862,10 +989,10 @@ export default {
         },
         data: this.$refs.formTable.form,
       }).then((res) => {
-        if (res.code === 0) {
-          this.$message.success("转需求管理平台成功!");
+        if (res.data.result === 1) {
+          this.$message.success(res.data.desc);
         } else {
-          this.$message.error("转需求管理平台错误!");
+          this.$message.error(res.data.desc);
         }
       });
     },
@@ -900,10 +1027,11 @@ export default {
           this.disabled = true;
           this.startStatus = false;
           this.saveStatus = false;
+          this.forwardStatus = false;
+          this.exportBtnStatus = false;
         }
         if (this.clickTagName === "three") {
           if (res.taskName === "起草") {
-            console.log(res);
             this.startStatus = true;
             this.disabled = false;
             this.saveStatus = true;
@@ -1047,30 +1175,32 @@ export default {
     },
     //选择树的回调
     changeTree(e) {
-      if (e.length > 1) {
-        this.$message.error("只能选择一个人");
-        return;
-      } else {
-        this.backThree = e;
-        if (e[0]) {
-          this.selectUser = e[0].loginNameStr;
-        } else {
-          this.selectUser = "暂无选择";
-        }
-      }
+      console.log(e);
+      // if (e.length > 1) {
+      //   this.$message.error("只能选择一个人");
+      //   return;
+      // } else {
+      //   this.backThree = e;
+      //   if (e[0]) {
+      //     this.selectUser = e[0].loginNameStr;
+      //   } else {
+      //     this.selectUser = "暂无选择";
+      //   }
+      // }
     },
     changeTreeCopy(e) {
-      if (e.length > 1) {
-        this.$message.error("只能选择一个人");
-        return;
-      } else {
-        this.backCopyThree = e;
-        if (e[0]) {
-          this.copyUser = e[0].loginNameStr;
-        } else {
-          this.copyUser = "暂无选择";
-        }
-      }
+      console.log(e);
+      // if (e.length > 1) {
+      //   this.$message.error("只能选择一个人");
+      //   return;
+      // } else {
+      //   this.backCopyThree = e;
+      //   if (e[0]) {
+      //     this.copyUser = e[0].loginNameStr;
+      //   } else {
+      //     this.copyUser = "暂无选择";
+      //   }
+      // }
     },
     //查询form表单数据
     getFromQuery(e) {
@@ -1084,6 +1214,7 @@ export default {
       }).then((res) => {
         // this.fromList = res.data;
         this.dialogStatus = true;
+        // this.fromList = e;
         // console.log(this.$refs.formTable);
         // this.$refs.formTable.fileInfo.fileList = res.data.mkFileShareAttachList;
         this.fromList.mkFileShareAttachList = res.data.mkFileShareAttachList;
@@ -1136,6 +1267,22 @@ export default {
         this.request_form.userId = res.data.data.rows[0].userCode;
       });
     },
+    getUserIndex() {
+      this.$http({
+        url: "/market/waf/queryRole",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          userCode: JSON.parse(window.sessionStorage.userInfo).loginNo,
+        },
+      }).then((res) => {
+        console.log(res.data.data);
+        let list = res.data.data.split(",");
+        this.UserPermissionsList = list;
+      });
+    },
     async clickSave() {
       this.$refs.formTable.$refs.form.validate((valid) => {
         if (valid) {
@@ -1200,15 +1347,55 @@ export default {
         this.clickHandle(res.data.body);
       });
     },
+    getNextPath(e) {
+      let list = {
+        // fresourceId: "bf79721c-33f3-11ed-ba0b-00505687dcd3", //测试环境
+        fresourceId: this.requestForm.fresourceId, // 本地环境
+        processId: this.requestForm.processDefinitionKey,
+        // fresourceId: "0d94de8a-0281-11ed-a302-4ae7da54db39", // 本地环境
+        // processId: "request_form_process",
+        // resourceId: e,
+      };
+      if (e) {
+        // this.propsList = [];
+        list.resourceId = e;
+      }
+      this.$http({
+        url: "/market/waf/queryPath",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: list,
+      }).then((res) => {
+        if (res.data.body.nextShapes[0].multi) {
+          console.log('这是mulit节点');
+          if (res.data.body.nextShapes[0].multi.multi === "true") {
+             console.log('这是mulit节点');
+            this.getLastName();
+          } else {
+            this.adminResourceId = ''
+            console.log('这不是mulit节点');
+            this.destroy = true;
+            this.handleStatus = true;
+            this.getMetirialType();
+          }
+        } else {
+          this.adminResourceId = ''
+          console.log('这不是mulit节点');
+          this.destroy = true;
+          this.handleStatus = true;
+          this.getMetirialType();
+        }
+        if (this.fromList.processId) {
+        } else {
+          this.$message.error("请先点击保存按钮");
+        }
+      });
+    },
     //处理按钮,开始工作流接口
     clickHandles() {
-      if (this.fromList.taskId) {
-        this.destroy = true;
-        this.handleStatus = true;
-      } else {
-        this.$message.error("请先点击保存按钮");
-      }
-      this.getMetirialType();
+      this.getNextPath(this.fromList.resourceId || "");
     },
 
     //批量审批
@@ -1244,11 +1431,43 @@ export default {
 
       let res = await this.common.httpPost(obj, success);
       function success(data) {
-        data.data.map((item) => {
+        console.log("[ 接口返回值第一曾 ] >", data);
+        let list = [];
+        list = data.data.data;
+        // list.map((item,index) => {
+        //     item.startTime = _this.$util.datetimeFormat(item.startTime);
+        //     item.endTime = _this.$util.datetimeFormat(item.endTime);
+        //     item.id = index + 1;
+        //   if (item.traceList) {
+        //     if (item.traceList.length > 0) {
+        //       item.children = item.traceList;
+        //     }
+        //   }
+        // });
+        // console.log(list);
+        if (data.data.lastmandata.length != 0) {
+          data.data.lastmandata.map((item, index) => {
+            item.id = index + 22;
+          });
+        }
+        list.map((item, index) => {
           item.startTime = _this.$util.datetimeFormat(item.startTime);
           item.endTime = _this.$util.datetimeFormat(item.endTime);
+          item.id = index + 1;
+          item.children = [];
+          if (data.data.lastmandata.length != 0) {
+            let indexs = data.data.lastmandata.findIndex((items) => {
+              if (items.taskId == item.taskId) {
+                item.children.push(items);
+              }
+            });
+          }
         });
-        _this.lables.data = data.data;
+        console.log(list);
+
+        _this.lables.data = list;
+        console.log("[ _this.lables.data ] >", _this.lables.data);
+        _this.abc = true;
       }
     },
     async clickHandle(e) {
@@ -1264,12 +1483,13 @@ export default {
 
       let res = await this.common.httpPost(obj, success);
       function success(data) {
-        _this.fromList.taskId = data.data;
+        console.log(data);
+        _this.fromList.processId = data.data;
         _this.taskId = data.data;
         let list = {
           id: e,
           // taskId:_this.formId,
-          processId: _this.fromList.taskId,
+          processId: _this.fromList.processId,
           // resourceId: _this.nextPath.currentShape[0].resourceId,
         };
         _this.setUpdate(list);
@@ -1286,8 +1506,10 @@ export default {
         },
         data: e,
       }).then((res) => {
+        this.$message.success("工单更新成功");
         this.fromList.taskId = res.data.body.taskId;
         this.fromList.taskName = res.data.body.taskName;
+        this.fromList.processId = res.data.body.processId;
         if (res.data.body.taskName === "起草") {
           this.isSync = res.data.body.isSync;
         } else {
@@ -1298,6 +1520,47 @@ export default {
         // }
       });
     },
+    //添加字典表常用意见
+    geaddctType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/add",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+    //删除字典表常用意见
+    geDelectType(e) {
+      this.$http({
+        url: "/market/cfgDataDicts/del",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+    //获取字典表常用意见
+    getMetirialType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/queryList",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "approval",
+        },
+      }).then((res) => {
+        this.commonlyList = res.data;
+      });
+    },
     //获取待阅接口
     getToBeRead(e, status) {
       this.$http({
@@ -1368,6 +1631,7 @@ export default {
         },
         data: e || {},
       }).then((res) => {
+        console.log(res);
         if (status === 0) {
           this.clickDemand("需求名称", res.data.data[0]);
         } else {
@@ -1390,8 +1654,15 @@ export default {
     getNum(e) {
       //多选数组
       this.batchList = e;
+      console.log(e);
       if (e.length > 0) {
-        this.exportStatus = true;
+        let user = this.UserPermissionsList.findIndex(
+          (item) => item === "市场需求管理员"
+        );
+        console.log(user);
+        if (user != -1) {
+          this.exportStatus = true;
+        }
       } else {
         this.exportStatus = false;
       }
@@ -1456,6 +1727,7 @@ export default {
       this.saveStatus = false;
       this.startStatus = true;
       this.closeStatus = true;
+      this.abc = false;
       // this.fromList = {};
     },
     handleCloses() {
@@ -1474,6 +1746,12 @@ export default {
 .copyClass {
   display: flex;
 }
+.flex-count {
+  // overflow-y: auto;
+  //     overflow-x: initial;
+
+  // height: au;
+}
 .flex-header-text-tree {
   width: 50%;
   text-align: center;
@@ -1539,11 +1817,14 @@ export default {
 ::v-deep .el-dialog {
   margin-top: 0 !important;
 }
-::v-deep .el-table__fixed-body-wrapper {
-  top: 50px !important;
-}
+// ::v-deep .el-table__fixed-body-wrapper {
+//   top: 50px !important;
+// }
 .flex-box {
   display: flex;
+  // overflow: auto;
+  overflow-y: auto;
+  overflow-x: hidden;
   width: calc(100% - 40px);
   border-radius: 20px;
   background-color: #fff;
@@ -1551,6 +1832,7 @@ export default {
   margin-top: 20px;
   position: relative;
   flex-direction: column;
+  // height: 100%;
   .flex-header {
     display: flex;
     width: 100%;

+ 8 - 4
src/pages/main/leader/demand/demandHomes.vue

@@ -82,7 +82,7 @@
         </div>
       </div>
     </el-dialog>
-    <div v-if="destroy">
+    <div >
       <el-dialog
         title="处理操作"
         width="100%"
@@ -94,17 +94,21 @@
       >
         <Workflow
           :list="fromList"
+<<<<<<< HEAD
           v-if="isWorkflowStatus == true"
+=======
+   
+>>>>>>> cfc652501d2e3f961406c86f210ed803b1275d52
           @beforeClose="beforeClose"
           :requestForm="requestForm"
         />
-        <WorkflowEntrance
+        <!-- <WorkflowEntrance
           :list="fromList"
           v-else
           :lastManList="lastManList"
           @beforeClose="beforeClose"
           :requestForm="requestForm"
-        />
+        /> -->
 
         <!-- 后期维护 -->
       </el-dialog>
@@ -209,7 +213,7 @@ export default {
       textarea: "未填写意见",
       num: 0,
       dialogStatus: false, //新建dialog显示
-      handleStatus: false, //处理按钮状态
+      handleStatus: true, //处理按钮状态
       tabList: [
         {
           index: "first",

+ 16 - 31
src/pages/main/leader/index.vue

@@ -6,29 +6,29 @@
           <el-row>
             <el-col :span="24">
               <div class="car-line">
-                <el-carousel height="40px" direction="vertical" trigger="click">
-                  <el-carousel-item
-                    v-for="item in noticeData"
-                    :key="item.noticeId"
-                  >
+                <el-carousel height="40px" direction="vertical" trigger="click" v-if="noticeData.length != '0'">
+                  <el-carousel-item v-for="item in noticeData" :key="item.noticeId">
                     <div class="car-box">
                       <i class="el-icon-message-solid"></i>
                       <span>公告</span>
                       <span style="color: #0b82ff" @click="uploadsee(item)">{{
-                        item.noticeTitle
-                      }}</span>
+    item.noticeTitle
+}}</span>
                       <span @click="jNotice">更多</span>
                     </div>
                   </el-carousel-item>
                 </el-carousel>
+                <div height="40px" direction="vertical" trigger="click" v-if="noticeData.length == '0'">
+
+                  <div class="car-box" style="text-align: center;">
+                    暂无公告
+                  </div>
+                </div>
               </div>
             </el-col>
           </el-row>
           <el-row>
-            <el-col
-              :span="24"
-              style="background: #fff; margin-top: 10px; border-radius: 5px"
-            >
+            <el-col :span="24" style="background: #fff; margin-top: 10px; border-radius: 5px">
               <leaderTag :dynamicTags="dynamicTags"></leaderTag>
             </el-col>
           </el-row>
@@ -38,10 +38,7 @@
                 <hometask></hometask>
               </el-col>
               <el-col :span="6">
-                <numberhits
-                  :numHits="numHits"
-                  :numHits1="numHits1"
-                ></numberhits>
+                <numberhits :numHits="numHits" :numHits1="numHits1"></numberhits>
               </el-col>
             </div>
             <div v-else>
@@ -56,24 +53,11 @@
         </div>
       </div>
     </div>
-    <el-dialog
-      title="公告"
-      :visible.sync="dialogStatus"
-      width="50%"
-      :close-on-press-escape="false"
-      :show-close="true"
-      :destroy-on-close="true"
-      :modal-append-to-body="false"
-      :close-on-click-modal="false"
-      :fullscreen="true"
-    >
+    <el-dialog title="公告" :visible.sync="dialogStatus" width="50%" :close-on-press-escape="false" :show-close="true"
+      :destroy-on-close="true" :modal-append-to-body="false" :close-on-click-modal="false" :fullscreen="true">
       <el-form :model="infolist" ref="infolist">
         <div style="height: calc(100vh - 180px); overflow-y: scroll">
-          <notiCheck
-            :infolist="infolist"
-            :datalist="datalist"
-            :dialogInfo="dialogStatus"
-          ></notiCheck>
+          <notiCheck :infolist="infolist" :datalist="datalist" :dialogInfo="dialogStatus"></notiCheck>
         </div>
       </el-form>
       <div class="myfooter" style="text-align: right; margin: 20px 20px 0 0">
@@ -294,6 +278,7 @@ export default {
     overflow-y: scroll;
   }
 }
+
 .car-line {
   height: 40px;
   background: #fff;

+ 298 - 305
src/pages/main/leader/leaderhomeTask.vue

@@ -2,9 +2,7 @@
   <div style="display: flex; justify-content: space-between">
     <div class="taskbox">
       <div class="tit">
-        <span class="span1" @click="tabboxclick1"
-          >我的待办 ({{ this.niticList.length }})</span
-        >
+        <span class="span1" @click="tabboxclick1">我的待办 ({{ this.daitotal }})</span>
         <span class="span2" @click="tabboxclick2">我的已办</span>
         <span class="span3" @click="tabboxclick3">我的发起</span>
         <!-- <span class="span" @click="more">更多>></span> -->
@@ -12,300 +10,173 @@
       <div class="fatherbox">
         <div class="tabbox">
           <!-- 我的待办列表 -->
-          <el-table
-            :header-cell-style="{
-              background: '#F2F2F2',
-              'text-align': 'center',
-            }"
-            :cell-style="{ background: '#FaFaFa' }"
-            v-if="tabbox1"
-            class="com-table"
-            ref="multipleTable"
-            :data="niticList"
-            tooltip-effect="dark"
-            size="small"
-            style="width: 100%; font-size: 16px; background: '#FaFaFa'"
-            height="442px"
-          >
-            <el-table-column
-              prop="woTitle"
-              label="工单标题"
-              align="left"
-              :show-overflow-tooltip="true"
-            >
+          <el-table :header-cell-style="{
+            background: '#F2F2F2',
+            'text-align': 'center',
+          }" :cell-style="{ background: '#FaFaFa' }" v-if="tabbox1" class="com-table" ref="multipleTable"
+            :data="niticList" tooltip-effect="dark" size="small"
+            style="width: 100%; font-size: 16px; background: '#FaFaFa'" height="442px">
+            <el-table-column prop="woTitle" label="工单标题" align="left" :show-overflow-tooltip="true">
               <template slot-scope="scope">
-                <span
-                  :title="scope.row.woTitle"
-                  @click="RowTitle(scope.row)"
-                  :style="
-                    scope.row.woTypeDesc == '预警工单'
-                      ? 'cursor: pointer;color:red;'
-                      : 'cursor: pointer;color:blue;'
-                  "
-                >
+                <span :title="scope.row.woTitle" @click="RowTitle(scope.row)" :style="
+                  scope.row.woTypeDesc == '预警工单'
+                    ? 'cursor: pointer;color:red;'
+                    : 'cursor: pointer;color:blue;'
+                ">
                   <!-- <span style="float: left; color: #afb2d8;margin-right:5px"
                   >•</span> -->
-                  {{ scope.row.woTitle }}</span
-                >
+                  {{ scope.row.woTitle }}
+                </span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="procName"
-              label="流程名称"
-              align="center"
-              width="180"
-              :show-overflow-tooltip="true"
-            >
+            <el-table-column prop="procName" label="流程名称" align="center" width="180" :show-overflow-tooltip="true">
               <template slot-scope="scope">
                 <span :title="scope.row.procName">{{
-                  scope.row.procName
+                    scope.row.procName
                 }}</span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="assigneName"
-              label="上一步处理人"
-              align="center"
-              width="120"
-              :show-overflow-tooltip="true"
-            >
+            <el-table-column prop="assigneName" label="上一步处理人" align="center" width="120" :show-overflow-tooltip="true">
               <template slot-scope="scope">
                 <span :title="scope.row.assigneName">{{
-                  scope.row.assigneName
+                    scope.row.assigneName
                 }}</span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="clsj"
-              label="上一步处理时间"
-              align="center"
-              width="140"
-              :show-overflow-tooltip="true"
-            >
+            <el-table-column prop="clsj" label="上一步处理时间" align="center" width="135" :show-overflow-tooltip="true">
               <template slot-scope="scope">
-                <span>{{ scope.row.clsj }}</span>
+                <span  :title="scope.row.clsj">{{ scope.row.clsj }}</span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="opName"
-              label="发起姓名"
-              align="center"
-              width="100"
-            >
+            <el-table-column prop="opName" label="发起人" align="center" width="100">
               <template slot-scope="scope">
                 <span>{{ scope.row.opName }}</span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="createTime"
-              label="发起时间"
-              align="center"
-              width="120"
-              :show-overflow-tooltip="true"
-            >
+            <el-table-column prop="createTime" label="发起时间" align="center" width="130" :show-overflow-tooltip="true">
               <template slot-scope="scope">
-                <span>{{ scope.row.createTime }}</span>
+                <span  :title="scope.row.createTime">{{ scope.row.createTime }}</span>
               </template>
             </el-table-column>
           </el-table>
-          <el-pagination
-            class="pageBox"
-            @current-change="currchangeDdaiban"
-            layout="total,prev, pager, next"
-            background
-            :page-size="pagesize"
-            :total="totalDaiban"
-            v-if="tabbox1"
-          >
+          <!-- <el-pagination class="pageBox" @current-change="currchangeDdaiban" layout="total,prev, pager, next" background
+            page-size="10" :total="totalDaiban" v-if="tabbox1">
+          </el-pagination> -->
+          <el-pagination @current-change="currchangeDdaiban" :current-page="daipage" :page-size="daisize"
+            layout="total,prev, pager, next" :total="daitotal" v-if="tabbox1">
           </el-pagination>
         </div>
         <div class="tabbox">
           <!-- 我的已办列表 -->
-          <el-table
-            :header-cell-style="{
-              background: '#F2F2F2',
-              'text-align': 'center',
-            }"
-            :cell-style="{ background: '#FaFaFa' }"
-            class="com-table"
-            ref="tableDatayj"
-            v-if="tabbox2"
-            :data="tableDatayj"
-            tooltip-effect="dark"
-            size="small"
-            style="width: 100%; font-size: 16px; background: '#FaFaFa'"
-            height="442px"
-          >
-            <el-table-column
-              prop="woTitle"
-              label="工单标题"
-              align="left"
-              :show-overflow-tooltip="true"
-            >
+          <el-table :header-cell-style="{
+            background: '#F2F2F2',
+            'text-align': 'center',
+          }" :cell-style="{ background: '#FaFaFa' }" class="com-table" ref="tableDatayj" v-if="tabbox2"
+            :data="tableDatayj" tooltip-effect="dark" size="small"
+            style="width: 100%; font-size: 16px; background: '#FaFaFa'" height="442px">
+            <el-table-column prop="woTitle" label="工单标题" align="left" :show-overflow-tooltip="true">
               <template slot-scope="scope">
                 <!-- <span style="float: left; color: #afb2d8;margin-right:5px"
                   >•</span
                 > -->
-                <span
-                  @click="RowDoneTitle(scope.row)"
-                  :title="scope.row.woTitle"
-                  style="cursor: pointer; color: blue"
-                  >{{ scope.row.woTitle }}</span
-                >
+                <span @click="RowDoneTitle(scope.row)" :title="scope.row.woTitle"
+                  style="cursor: pointer; color: blue">{{ scope.row.woTitle }}</span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="procName"
-              label="流程名称"
-              align="center"
-              width="180"
-              :show-overflow-tooltip="true"
-            >
+            <el-table-column prop="procName" label="流程名称" align="center" width="180" :show-overflow-tooltip="true">
               <template slot-scope="scope">
                 <span :title="scope.row.procName">{{
-                  scope.row.procName
+                    scope.row.procName
                 }}</span>
               </template>
             </el-table-column>
 
-            <el-table-column
-              prop="opName"
-              label="发起姓名"
-              align="center"
-              width="120"
-            >
+            <el-table-column prop="opName" label="发起人" align="center" width="120">
               <template slot-scope="scope">
                 <span>{{ scope.row.opName }}</span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="createTime"
-              label="发起时间"
-              align="center"
-              width="180"
-            >
+            <el-table-column prop="createTime" label="发起时间" align="center" width="180">
               <template slot-scope="scope">
                 <span>{{ scope.row.createTime }}</span>
               </template>
             </el-table-column>
           </el-table>
-          <el-pagination
-            class="pageBox"
-            v-if="tabbox2"
-            @current-change="currchangeDone"
-            layout="total,prev, pager, next"
-            background
-            :total="totalDone"
-            :page-size="pagesize"
-          >
+          <!-- <el-pagination class="pageBox"  @current-change="currchangeDone"
+            layout="total,prev, pager, next" background :total="totalDone" page-size="10">
+          </el-pagination> -->
+          <el-pagination @current-change="currchangeDyiban" :current-page="yibanpage" :page-size="yibansize"
+            layout="total,prev, pager, next" :total="yibantotal" v-if="tabbox2">
           </el-pagination>
         </div>
         <div class="tabbox">
           <!-- 我的发起列表 -->
-          <el-table
-            :header-cell-style="{
-              background: '#F2F2F2',
-              'text-align': 'center',
-            }"
-            :cell-style="{ background: '#FaFaFa' }"
-            class="com-table"
-            ref="OpList"
-            :data="OpList"
-            v-if="tabbox3"
-            tooltip-effect="dark"
-            size="small"
-            style="width: 100%; font-size: 16px; background: '#FaFaFa'"
-            height="442px"
-          >
-            <el-table-column
-              prop="woTitle"
-              label="工单标题"
-              align="left"
-              :show-overflow-tooltip="true"
-            >
+          <el-table :header-cell-style="{
+            background: '#F2F2F2',
+            'text-align': 'center',
+          }" :cell-style="{ background: '#FaFaFa' }" class="com-table" ref="OpList" :data="OpList" v-if="tabbox3"
+            tooltip-effect="dark" size="small" style="width: 100%; font-size: 16px; background: '#FaFaFa'"
+            height="442px">
+            <el-table-column prop="woTitle" label="工单标题" align="left" :show-overflow-tooltip="true">
               <template slot-scope="scope">
                 <!-- <span style="float: left; color: #afb2d8;margin-right:5px"
                   >•</span
                 > -->
-                <span
-                  :title="scope.row.woTitle"
-                  @click="RowlaunchTitle(scope.row)"
-                  style="cursor: pointer; color: blue"
-                  >{{ scope.row.woTitle }}</span
-                >
+                <span :title="scope.row.woTitle" @click="RowlaunchTitle(scope.row)"
+                  style="cursor: pointer; color: blue">{{ scope.row.woTitle }}</span>
               </template>
             </el-table-column>
-            <el-table-column
-              prop="procName"
-              label="流程名称"
-              align="center"
-              :show-overflow-tooltip="true"
-            >
+            <el-table-column prop="procName" label="流程名称" align="center" :show-overflow-tooltip="true">
               <template slot-scope="scope">
                 <span :title="scope.row.procName">{{
-                  scope.row.procName
+                    scope.row.procName
                 }}</span>
               </template>
             </el-table-column>
 
-            <el-table-column
-              prop="createTime"
-              label="发起时间"
+            <el-table-column prop="createTime" label="发起时间" align="center" width="180">
+              <template slot-scope="scope">
+                <span>{{ scope.row.createTime }}</span>
+              </template>
+            </el-table-column>
+             <el-table-column 
               align="center"
-              width="180"
+              width="80"
+              label="操作"
             >
               <template slot-scope="scope">
-                <span>{{ scope.row.createTime }}</span>
+                <el-button
+                  size="mini"
+                  
+                  :disabled="scope.row.flag == '1' ? true : false"
+                  @click="handleEdit(scope.$index, scope.row)">催办</el-button>
+                
               </template>
             </el-table-column>
+
           </el-table>
-          <el-pagination
-            class="pageBox"
-            @current-change="currchangeOp"
-            layout="total,prev, pager, next"
-            background
-            :total="totalOp"
-            v-if="tabbox3"
-            :page-size="pagesize"
-          >
+          <!-- <el-pagination class="pageBox" @current-change="currchangeOp" layout="total,prev, pager, next" background
+            :total="totalOp" v-if="tabbox3" page-size="10">
+          </el-pagination> -->
+          <el-pagination @current-change="currchangefaqi" :current-page="faqipage" :page-size="faqisize"
+            layout="total,prev, pager, next" :total="faqitotal" v-if="tabbox3">
           </el-pagination>
         </div>
       </div>
       <!-- 查看待办弹窗 -->
-      <el-dialog
-        title="查看"
-        :visible.sync="WorkOrderStatus"
-        width="50%"
-        :close-on-press-escape="false"
-        :show-close="true"
-        :destroy-on-close="true"
-        :modal-append-to-body="false"
-        :close-on-click-modal="false"
-      >
+      <el-dialog title="查看" :visible.sync="WorkOrderStatus" width="50%" :close-on-press-escape="false"
+        :show-close="true" :destroy-on-close="true" :modal-append-to-body="false" :close-on-click-modal="false">
         <div>
           <el-form :inline="true" :model="StatusList" class="demo-form-inline">
             <el-form-item label="工单标题">
-              <el-input
-                v-model="StatusList.woTitle"
-                placeholder="工单标题"
-                disabled
-              />
+              <el-input v-model="StatusList.woTitle" placeholder="工单标题" disabled />
             </el-form-item>
             <el-form-item label="流程名称">
-              <el-input
-                v-model="StatusList.procName"
-                placeholder="流程名称"
-                disabled
-              />
+              <el-input v-model="StatusList.procName" placeholder="流程名称" disabled />
             </el-form-item>
           </el-form>
           <h3>流程轨迹</h3>
-          <el-table
-            :data="WorkOrderList"
-            style="width: 100%"
-            max-height="350"
-            height="300"
-          >
+          <el-table :data="WorkOrderList" style="width: 100%" max-height="350" height="300">
             <el-table-column prop="createTime" label="节点开始时间" />
             <el-table-column prop="stepName" label="节点名称" width="180" />
             <el-table-column prop="assigneeName" label="处理角色" width="180" />
@@ -317,40 +188,19 @@
         </div>
       </el-dialog>
       <!-- 查看已办弹窗 -->
-      <el-dialog
-        title="查看"
-        :visible.sync="DoneStatus"
-        width="50%"
-        :close-on-press-escape="false"
-        :show-close="true"
-        :destroy-on-close="true"
-        :modal-append-to-body="false"
-        :close-on-click-modal="false"
-      >
+      <el-dialog title="查看" :visible.sync="DoneStatus" width="50%" :close-on-press-escape="false" :show-close="true"
+        :destroy-on-close="true" :modal-append-to-body="false" :close-on-click-modal="false">
         <div>
           <el-form :inline="true" :model="StatusList" class="demo-form-inline">
             <el-form-item label="工单标题">
-              <el-input
-                v-model="StatusList.woTitle"
-                placeholder="工单标题"
-                disabled
-              />
+              <el-input v-model="StatusList.woTitle" placeholder="工单标题" disabled />
             </el-form-item>
             <el-form-item label="流程名称">
-              <el-input
-                v-model="StatusList.procName"
-                placeholder="流程名称"
-                disabled
-              />
+              <el-input v-model="StatusList.procName" placeholder="流程名称" disabled />
             </el-form-item>
           </el-form>
           <h3>流程轨迹</h3>
-          <el-table
-            :data="DoneList"
-            style="width: 100%"
-            max-height="350"
-            height="300"
-          >
+          <el-table :data="DoneList" style="width: 100%" max-height="350" height="300">
             <el-table-column prop="createTime" label="节点开始时间" />
             <el-table-column prop="stepName" label="节点名称" width="180" />
             <el-table-column prop="assigneeName" label="处理角色" width="180" />
@@ -362,40 +212,19 @@
         </div>
       </el-dialog>
       <!-- 查看发起弹窗 -->
-      <el-dialog
-        title="查看"
-        :visible.sync="launchStatus"
-        width="50%"
-        :close-on-press-escape="false"
-        :show-close="true"
-        :destroy-on-close="true"
-        :modal-append-to-body="false"
-        :close-on-click-modal="false"
-      >
+      <el-dialog title="查看" :visible.sync="launchStatus" width="50%" :close-on-press-escape="false" :show-close="true"
+        :destroy-on-close="true" :modal-append-to-body="false" :close-on-click-modal="false">
         <div>
           <el-form :inline="true" :model="StatusList" class="demo-form-inline">
             <el-form-item label="工单标题">
-              <el-input
-                v-model="StatusList.woTitle"
-                placeholder="工单标题"
-                disabled
-              />
+              <el-input v-model="StatusList.woTitle" placeholder="工单标题" disabled />
             </el-form-item>
             <el-form-item label="流程名称">
-              <el-input
-                v-model="StatusList.procName"
-                placeholder="流程名称"
-                disabled
-              />
+              <el-input v-model="StatusList.procName" placeholder="流程名称" disabled />
             </el-form-item>
           </el-form>
           <h3>流程轨迹</h3>
-          <el-table
-            :data="launchList"
-            style="width: 100%"
-            max-height="350"
-            height="300"
-          >
+          <el-table :data="launchList" style="width: 100%" max-height="350" height="300">
             <el-table-column prop="createTime" label="节点开始时间" />
             <el-table-column prop="stepName" label="节点名称" width="180" />
             <el-table-column prop="assigneeName" label="处理角色" width="180" />
@@ -404,25 +233,47 @@
         </div>
       </el-dialog>
       <!-- 处理弹窗 -->
-      <el-dialog
-        title="处理"
-        :visible.sync="WorkOrderStatus1"
-        width="40%"
-        :close-on-press-escape="false"
-        :show-close="true"
-        :destroy-on-close="true"
-        :modal-append-to-body="false"
-        :close-on-click-modal="false"
-      >
+      <el-dialog title="处理" :visible.sync="WorkOrderStatus1" width="40%" :close-on-press-escape="false"
+        :show-close="true" :destroy-on-close="true" :modal-append-to-body="false" :close-on-click-modal="false">
         <div style="height: 450px">
-          <iframe
-            height="100%"
-            width="100%"
-            :src="dialogdiv"
-            frameborder="0"
-          ></iframe>
+          <iframe height="100%" width="100%" :src="dialogdiv" frameborder="0"></iframe>
         </div>
       </el-dialog>
+      <div>
+      <el-dialog title="有您的催办工单" :visible.sync="dialogTableVisible"  :modal="false" >
+        <el-table :data="gridData">
+          <el-table-column property="woTitle" 
+          label="工单标题" width="625" 
+          show-overflow-tooltip=true 
+           >
+           <template slot-scope="scope">
+                <span 
+                  @click="urgedDeal(scope.row)"
+                  :title="scope.row.woTitle"
+                  style="cursor: pointer; color: blue"
+                  >{{ scope.row.woTitle }}</span
+                >
+              </template>
+           </el-table-column>
+          
+          <el-table-column 
+              align="center"
+              width="100"
+              label="操作"
+            >
+            <!-- <el-form-item> -->
+              <template slot-scope="scope">
+                
+                <el-button
+                  size="mini"
+                  @click="handleEdit1(scope.$index, scope.row)">已阅</el-button>
+                
+              </template>
+              <!-- </el-form-item> -->
+            </el-table-column>
+        </el-table>
+      </el-dialog>
+    </div>
     </div>
   </div>
 </template>
@@ -432,6 +283,8 @@ export default {
   // props:["tableDatayj","niticList"],
   data() {
     return {
+      gridData:[],//催办列表
+      dialogTableVisible: false,//催办弹窗是否显示
       tabbox1: true, //待办
       tabbox2: false, //已办
       tabbox3: false, //发起
@@ -457,6 +310,15 @@ export default {
       pageSizeDone: 1,
       pageSizeDdaiban: 1,
       pageSizeOp: 1,
+      daipage: 1, //第几页
+      daisize: 10, //一页多少条
+      daitotal: 0, //总条目数
+      yibanpage: 1, //第几页
+      yibansize: 10, //一页多少条
+      yibantotal: 0, //总条目数
+      faqipage: 1, //第几页
+      faqisize: 10, //一页多少条
+      faqitotal: 0, //总条目数
     };
   },
   methods: {
@@ -471,7 +333,7 @@ export default {
     RowTitle(v) {
       this.StatusList = v;
       console.log(v.actionUrl);
-      if (v.procName) {
+      if (v.taskName) {
         this.WorkOrderStatus = true;
         this.$http({
           url: "/market/cwo/queryProcStepByWono",
@@ -510,7 +372,7 @@ export default {
     RowDoneTitle(v) {
       this.StatusList = v;
       console.log(v.actionUrl);
-      if (v.procName) {
+      if (v.taskName) {
         this.DoneStatus = true;
         this.$http({
           url: "/market/cwo/queryProcStepByWono",
@@ -550,7 +412,7 @@ export default {
     RowlaunchTitle(v) {
       this.StatusList = v;
       console.log(v.actionUrl);
-      if (v.procName) {
+      if (v.taskName) {
         this.launchStatus = true;
         this.$http({
           url: "/market/cwo/queryProcStepByWono",
@@ -564,16 +426,112 @@ export default {
         }).then((res) => {
           this.launchList = res.data;
         });
-      }else {
+      } else {
         this.$router.push(v.actionUrl);
       }
     },
+     //催办按钮
+     handleEdit(index, row) {
+        this.open(row);
+  
+      },
+      //已阅按钮
+     handleEdit1(index, row) {
+        this.haveRead(row);   //点已阅后返回数据给后台
+        
+      },
+      
+    //催办按钮弹窗
+    open(row) {
+        this.$confirm('催办此条工单, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.urgedDeal(row);
+          
+          this.$message({
+            type: 'success',
+            message: '催办成功!'
+          });
+        }).catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消催办'
+          });          
+        });
+      },
+     
+     //催办向后台返回数据
+     urgedDeal(row) {
+      let list = {}
+      list.id = row.id;
+      list.woNo = row.woNo;
+      list.woTitle = row.woTitle;
+      list.nextNo = row.assigneeNo;
+      list.nextName = row.assigneeName;
+      list.sts = row.sts;
+      list.actionUrl = row.actionUrl;
+      console.log(row); 
+        this.$http({
+        url: "/market/remind/add",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+         },
+        data: list,
+      }).then((res) => {
+        
+      });
+     },
+     //已阅向后台返回数据
+     haveRead(row) {
+      let list = {}
+      list.id = row.id;
+      list.woNo = row.woNo;
+      list.woTitle = row.woTitle;
+      list.nextNo = row.assigneeNo;
+      list.nextName = row.assigneeName;
+      list.sts = row.sts;
+      console.log(row); 
+        this.$http({
+        url: "/market/remind/update",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+         },
+        data: list,
+      }).then((res) => {
+        this.popupWindow();
+      });
+     },
 
+      //接收数据判断是否弹窗
+    popupWindow(){
+       this.$http({
+        url: "/market/remind/queryListByNo",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+         },
+        
+      }).then((res) => {
+        console.log(res);
+        console.log(res.data.length);
+        if(res.data.length == 0){
+          this.dialogTableVisible = false;
+        }else{
+          this.dialogTableVisible = true;
+        }
+        this.gridData = res.data
+      });
+    },
     //更多按钮
     more() {
       console.log(11);
     },
 
+
     //待办列表初始化
     daiban(v, n) {
       this.pageSizeDdaiban = n;
@@ -582,12 +540,18 @@ export default {
         method: "post",
         headers: {
           "Content-Type": "application/json",
-          page: '{"pageNo":"' + n + '","pageSize":"10"}',
+          page: '{"pageNo":"' + '1' + '","pageSize":"100"}',
         },
-        data: '{"pageNo":"' + n + '","pageSize":"10"}',
+        data: '{"pageNo":"' + '1' + '","pageSize":"100"}',
       }).then((res) => {
-        this.niticList = res.data.data;
-        this.totalDaiban = res.data.totalRecord;
+       // this.niticList = res.data.data;
+       let data = JSON.parse(JSON.stringify(res.data.data))
+        this.niticList = data.splice(
+          (this.daipage - 1) * this.daisize,
+          this.daisize
+        );
+        this.daitotal = res.data.data.length
+        // this.totalDaiban = res.data.totalRecord;
       });
     },
 
@@ -600,27 +564,38 @@ export default {
         method: "post",
         headers: {
           "Content-Type": "application/json",
-          page: '{"pageNo":"' + n + '","pageSize":"10"}',
+          page: '{"pageNo":"' + '1' + '","pageSize":"100"}',
         },
-        data: '{"pageNo":"' + n + '","pageSize":"10"}',
+        data: '{"pageNo":"' + '1' + '","pageSize":"100"}',
       }).then((res) => {
-        this.tableDatayj = res.data.data;
-        this.totalDone = res.data.totalRecord;
+         // this.tableDatayj = res.data.data;
+        // this.totalDone = res.data.totalRecord;
+        let data = JSON.parse(JSON.stringify(res.data.data))
+        this.tableDatayj = data.splice(
+          (this.yibanpage - 1) * this.yibansize,
+          this.yibansize
+        );
+        this.yibantotal = res.data.data.length
       });
     },
     //待办分页
-    currchangeDdaiban(v) {
-      this.pageSizeDdaiban = v;
+    currchangeDdaiban(val) {
+      console.log("翻页,当前为第几页", val);
+      this.daipage = val;
+      // this.getTabelData2();
+      // this.pageSizeDdaiban = v;
       this.daiban(this.params, this.pageSizeDdaiban);
     },
     //已办分页
-    currchangeDone(v) {
-      this.pageSizeDone = v;
+    currchangeyiban(val) {
+      // this.pageSizeDone = v;
+      this.yibanpage = val;
       this.getListyj(this.params, this.pageSizeDone);
     },
     //发起分页
-    currchangeOp(v) {
-      this.pageSizeOp = v;
+    currchangefaqi(val) {
+      // this.pageSizeOp = v;
+      this.faqipage = val;
       this.getOPlist(this.params, this.pageSizeOp);
     },
     //我的发起列表初始化
@@ -631,12 +606,18 @@ export default {
         method: "post",
         headers: {
           "Content-Type": "application/json",
-          page: '{"pageNo":"' + n + '","pageSize":"10"}',
+          page: '{"pageNo":"' + '1' + '","pageSize":"100"}',
         },
-        data: '{"pageNo":"' + n + '","pageSize":"10"}',
+        data: '{"pageNo":"' + '1' + '","pageSize":"100"}',
       }).then((res) => {
-        this.OpList = res.data.data;
-        this.totalOp = res.data.totalRecord;
+      // this.OpList = res.data.data;
+        // this.totalOp = res.data.totalRecord;
+        let data = JSON.parse(JSON.stringify(res.data.data))
+        this.OpList = data.splice(
+          (this.faqipage - 1) * this.faqisize,
+          this.faqisize
+        );
+        this.faqitotal = res.data.data.length
       });
     },
     tabboxclick1() {
@@ -682,7 +663,9 @@ export default {
     this.getOPlist({}, 1);
     this.userInfo = JSON.parse(window.sessionStorage.userInfo);
   },
-  created() {},
+  created() {
+     this.popupWindow();
+  },
 };
 </script>
 
@@ -694,6 +677,7 @@ export default {
   //     justify-content: end;
   margin-top: 10px;
 }
+
 .taskbox {
   width: 100%;
   display: inline-block;
@@ -711,13 +695,16 @@ export default {
   border-top-left-radius: 5px;
   border-top-right-radius: 5px;
   justify-content: space-between;
+
   .com-table {
     background: "#FaFaFa";
   }
+
   .span {
     float: right;
     color: orange;
   }
+
   .span1 {
     display: inline-block;
     color: blue;
@@ -727,6 +714,7 @@ export default {
     width: 120px;
     border-bottom: 2px solid blue;
   }
+
   .span2 {
     display: inline-block;
     text-align: center;
@@ -734,6 +722,7 @@ export default {
     width: 120px;
     font-weight: 900;
   }
+
   .span3 {
     display: inline-block;
     text-align: center;
@@ -741,6 +730,7 @@ export default {
     width: 120px;
     font-weight: 900;
   }
+
   span {
     cursor: pointer;
   }
@@ -776,6 +766,7 @@ export default {
     margin-left: 20px;
   }
 }
+
 .fatherbox {
   background: #fafafa;
   padding: 10px;
@@ -784,11 +775,13 @@ export default {
   border-bottom-right-radius: 5px;
   width: 100%;
 }
-.pageBox {
-}
+
+.pageBox {}
+
 ::v-deep .gutter {
   background: #fafafa;
 }
+
 ::v-deep .is-scrolling-none {
   background: #fafafa;
 }

Файловите разлики са ограничени, защото са твърде много
+ 1284 - 0
src/pages/main/leader/risk/riskManagement.vue


Файловите разлики са ограничени, защото са твърде много
+ 1444 - 0
src/pages/main/leader/risk/riskMaterials.vue


+ 3 - 0
src/pages/main/memberFamily/dataStatistics.vue

@@ -30,6 +30,9 @@
 						</template>
 					</el-table-column>
 				</el-table>
+				<el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
 			</div>
 		</div>
 	</fullscreen>

Файловите разлики са ограничени, защото са твърде много
+ 679 - 642
src/pages/main/memberFamily/haveInHand.vue


+ 2 - 1
src/pages/main/memberFamily/index.vue

@@ -17,7 +17,8 @@
 						
 
 					</div>
-					<div @click="advmaterial(typeList[1])" v-if="roleStatus <= 1">
+					<!-- <div @click="advmaterial(typeList[1])" v-if="roleStatus <= 1"> -->
+					<div @click="advmaterial(typeList[1])" v-if="roleStatus <= 2">
 						
 							<span><i class="el-icon-folder-opened"></i></span>
 							<span>信息汇总</span>

+ 51 - 4
src/pages/main/officialAccount/officialAccountadd.vue

@@ -62,7 +62,7 @@
 				</div>
 			</el-form>
 		</div>
-		<el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+		<!-- <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
 			:modal-append-to-body="false" :close-on-click-modal="false">
 			<div>
 
@@ -85,14 +85,45 @@
 					<el-button @click="checkexa = false">取 消</el-button>
 				</div>
 			</div>
-		</el-dialog>
+		</el-dialog> -->
+		<el-dialog
+        title="选择审批人"
+        :visible.sync="checkexa"
+        width="100%"
+        style="height: 100%"
+        :fullscreen="true"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
+        :close-on-click-modal="false"
+      >
+        <div style="height: 100%">
+          <el-form :model="infolist" ref="infolist" style="height: 100%">
+            <el-form-item prop="visiblec" style="height: 100%">
+              <!-- <span style="width: 80px">审批人员</span> -->
+              <deptTreeOnly
+                @treeCheck="treeCheckonly"
+                :defaultList="defaultList"
+                :type="depttype"
+                :closeList="closeList"
+              ></deptTreeOnly>
+              <div style="text-align: center; margin-top: 30px">
+                <el-button type="primary" @click="checkProcessUser()"
+                  >确 定</el-button
+                >
+                <el-button @click="checkexa = false">取 消</el-button>
+              </div>
+              
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-dialog>
 	</div>
 </template>
 <script>
 	import mySearch from "../../../components/search.vue";
 	import myUpload from "../../../components/upload.vue";
-	import deptTreeOnly from "../../../components/deptTreeOnly.vue"
-
+	// import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+	import deptTreeOnly from "../../../components/newTree.vue";
 	export default {
 		components: {
 			mySearch,
@@ -141,12 +172,25 @@
 			}
 		},
 		methods: {
+				checkProcessUser() {
+                let _this = this;
+                if (_this.treeListonly.length > 1) {
+                    _this.$message({
+                    message: "只能选择一个人",
+                    type: "error",
+                    });
+                } else {
+                    _this.dialogCli(2);
+                }
+                },
 			deletes() {
 				this.treeListonly = {};
 				this.closeList = !this.closeList;
 			},
 			treeCheckonly(v) {
 				this.treeListonly = v;
+				this.treeListonly.leaderAuditName = v[0].label;
+				this.treeListonly.leaderAuditNo = v[0].key;
 			},
 			chocomp(v) {
 				this.company = [];
@@ -337,6 +381,9 @@
 	}
 </script>
 <style scoped lang="scss">
+	  ::v-deep .el-dialog .flex-box{
+        height: 400px;
+    }
 	.img-box {
 		height: calc(100vh - 240px);
 		overflow-y: scroll;

+ 62 - 3
src/pages/main/outCallDemand/index.vue

@@ -230,7 +230,49 @@
 				</div>
 			</div>
 		</el-dialog>
-        <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+		 <el-dialog
+        title="选择审批人"
+        :visible.sync="checkexa"
+        width="100%"
+        style="height: 100%"
+        :fullscreen="true"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
+        :close-on-click-modal="false"
+      >
+        <div style="height: 100%">
+          <el-form :model="infolist" ref="infolist" style="height: 100%">
+            <el-form-item prop="visiblec" style="height: 100%">
+              <!-- <span style="width: 80px">审批人员</span> -->
+              <deptTreeOnly
+                @treeCheck="treeCheckonly"
+                :defaultList="defaultList"
+                :type="depttype"
+                :closeList="closeList"
+              ></deptTreeOnly>
+              <div style="text-align: center; margin-top: 30px">
+                <el-button type="primary" @click="checkProcessUser()"
+                  >确 定</el-button
+                >
+				<!-- <el-button type="primary" @click="dialogCliadd" v-if="!visionchonly">确 定</el-button>
+        			<el-button type="primary" @click="dialogCli(2)" v-if="visionchonly">确 定</el-button> -->
+                <el-button @click="checkexa = false">取 消</el-button>
+              </div>
+              <!-- <div class="tree treeUser">
+                <p>
+                  {{ treeListonly.leaderAuditName }}
+                  <i
+                    v-if="treeListonly.leaderAuditName"
+                    @click="treeDelete()"
+                    class="el-icon-error"
+                  ></i>
+                </p>
+              </div> -->
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-dialog>
+        <!-- <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
         	:modal-append-to-body="false" :close-on-click-modal="false">
         	<div>
 
@@ -254,7 +296,7 @@
         			<el-button @click="checkexa = false">取 消</el-button>
         		</div>
         	</div>
-        </el-dialog>
+        </el-dialog> -->
 
 	</fullscreen>
 
@@ -265,7 +307,8 @@
 	import toolList from '../../../components/toolList'
 	import myUpload from '../../../components/upload'
 	import uploadDown from '../../../components/uploadDown.vue'
-    import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+    // import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+	import deptTreeOnly from "../../../components/newTree.vue";
 
 	export default {
 		components: {
@@ -532,12 +575,25 @@
 			}
 		},
 		methods: {
+			checkProcessUser() {
+                let _this = this;
+                if (_this.treeListonly.length > 1) {
+                    _this.$message({
+                    message: "只能选择一个人",
+                    type: "error",
+                    });
+                } else {
+                    _this.dialogCliadd();
+                }
+                },
             deletes() {
             	this.treeListonly = {};
             	this.closeList = !this.closeList;
             },
             treeCheckonly(v) {
             	this.treeListonly = v;
+				this.treeListonly.leaderAuditName = v[0].label;
+				this.treeListonly.leaderAuditNo = v[0].key;
             },
 			closedia() {
 				this.infolist = {
@@ -937,6 +993,9 @@
 	}
 </script>
 <style scoped lang="scss">
+	::v-deep .el-dialog .flex-box{
+        height: 400px;
+    }
 	.onetab {
 		margin-bottom: 20px;
 		padding: 0 20px;

+ 1 - 1
src/pages/main/performance/components/dialog.vue

@@ -16,7 +16,7 @@
     <div slot="footer">
       <slot name="footer">
         <el-button @click="handleCancel" size="small">取消</el-button>
-        <el-button @click="handleConfirm" type="primary" size="small" :disabled="this.BtnDisabled"
+        <el-button @click="handleConfirm" type="primary" size="small" :disabled="BtnDisabled"
           >确定</el-button
         >
       </slot>

Файловите разлики са ограничени, защото са твърде много
+ 1557 - 0
src/pages/main/provincialWorkOrder/provincialWorkOrder.vue


Файловите разлики са ограничени, защото са твърде много
+ 1325 - 0
src/pages/main/provincialWorkOrder/provincialWorkOrderArea.vue


+ 92 - 13
src/pages/main/vendor/Export2Excel.js

@@ -1,8 +1,38 @@
 /* eslint-disable */
 require('script-loader!file-saver');
 // require('script-loader!./Blob');
-const {blob} = require('./Blob')
+const { blob } = require('./Blob')
+// /static/js/util.js?v=1.0.0
 require('script-loader!xlsx/dist/xlsx.core.min');
+const getNowDate = () => {
+    var date = new Date();
+    var sign2 = ":";
+    var year = date.getFullYear() // 年
+    var month = date.getMonth() + 1; // 月
+    var day = date.getDate(); // 日
+    var hour = date.getHours(); // 时
+    var minutes = date.getMinutes(); // 分
+    var seconds = date.getSeconds() //秒
+    var weekArr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'];
+    var week = weekArr[date.getDay()];
+    // 给一位数的数据前面加 “0”
+    if (month >= 1 && month <= 9) {
+        month = "0" + month;
+    }
+    if (day >= 0 && day <= 9) {
+        day = "0" + day;
+    }
+    if (hour >= 0 && hour <= 9) {
+        hour = "0" + hour;
+    }
+    if (minutes >= 0 && minutes <= 9) {
+        minutes = "0" + minutes;
+    }
+    if (seconds >= 0 && seconds <= 9) {
+        seconds = "0" + seconds;
+    }
+    return year + "-" + month + "-" + day + " " + hour + sign2 + minutes + sign2 + seconds;
+}
 function generateArray(table) {
     var out = [];
     var rows = table.querySelectorAll('tr');
@@ -29,7 +59,7 @@ function generateArray(table) {
             if (rowspan || colspan) {
                 rowspan = rowspan || 1;
                 colspan = colspan || 1;
-                ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});
+                ranges.push({ s: { r: R, c: outRow.length }, e: { r: R + rowspan - 1, c: outRow.length + colspan - 1 } });
             }
             ;
 
@@ -52,16 +82,16 @@ function datenum(v, date1904) {
 
 function sheet_from_array_of_arrays(data, opts) {
     var ws = {};
-    var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};
+    var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } };
     for (var R = 0; R != data.length; ++R) {
         for (var C = 0; C != data[R].length; ++C) {
             if (range.s.r > R) range.s.r = R;
             if (range.s.c > C) range.s.c = C;
             if (range.e.r < R) range.e.r = R;
             if (range.e.c < C) range.e.c = C;
-            var cell = {v: data[R][C]};
+            var cell = { v: data[R][C] };
             if (cell.v == null) continue;
-            var cell_ref = XLSX.utils.encode_cell({c: C, r: R});
+            var cell_ref = XLSX.utils.encode_cell({ c: C, r: R });
 
             if (typeof cell.v === 'number') cell.t = 'n';
             else if (typeof cell.v === 'boolean') cell.t = 'b';
@@ -93,6 +123,7 @@ function s2ab(s) {
 }
 
 export function export_table_to_excel(id) {
+
     var theTable = document.getElementById(id);
     var oo = generateArray(theTable);
     var ranges = oo[1];
@@ -112,20 +143,29 @@ export function export_table_to_excel(id) {
     wb.SheetNames.push(ws_name);
     wb.Sheets[ws_name] = ws;
 
-    var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
+    var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
 
-    saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
+    saveAs(new Blob([s2ab(wbout)], { type: "application/octet-stream" }), "test.xlsx")
+    ajaxJson("数据加载中", '/market/clickCurrenLog/add', {//导出请求日志接口
+        "opName": JSON.parse(window.sessionStorage.userInfo).loginNo,
+        "fileName": "test.xlsx",
+        "opTime": getNowDate(),
+    }, function (res) {
+        console.log(res)
+    });
 }
 
 function formatJson(jsonData) {
     console.log(jsonData)
 }
-export function export_json_to_excel(th, jsonData, defaultTitle,   autoWidth = true,
-                                     bookType = 'xlsx',
-                                     myRowFont = '1') {
 
-    /* original data */
 
+export function export_json_to_excel(th, jsonData, defaultTitle, autoWidth = true,
+    bookType = 'xlsx',
+    myRowFont = '1') {
+
+    /* original data */
+    console.log('11111')
     var data = jsonData;
     data.unshift(th);
     var ws_name = "SheetJS";
@@ -167,7 +207,46 @@ export function export_json_to_excel(th, jsonData, defaultTitle,   autoWidth = t
     wb.SheetNames.push(ws_name);
     wb.Sheets[ws_name] = ws;
 
-    var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
+    var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
     var title = defaultTitle || '列表'
-    saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
+    saveAs(new Blob([s2ab(wbout)], { type: "application/octet-stream" }), title + ".xlsx")
+    ajaxJson("数据加载中", '/market/clickCurrenLog/add', {//导出请求日志接口
+        "opName": JSON.parse(window.sessionStorage.userInfo).loginNo,
+        "fileName": title + ".xlsx",
+        "opTime": getNowDate(),
+    }, function (res) {
+        console.log(res)
+    });
+}
+
+
+function ajaxJson(msg, url, param, callBack, beforeSend, async) {
+    $.ajax({
+        type: "POST",
+        url: url,
+        global: true,
+        data: JSON.stringify(param),
+        contentType: "application/json;charset=UTF-8",
+        beforeSend: function (req) {
+
+            req.setRequestHeader("agileauthtoken", JSON.parse(window.sessionStorage.agileauthtoken).replace(/"/g, ''));
+
+            if ($.isFunction(beforeSend)) {
+
+                beforeSend.call(this, req);
+            }
+
+
+        },
+        xhrFields: {
+            withCredentials: false //跨域session保持
+        },
+        async: async == undefined ? true : async,
+        dataType: "json",
+        success: function (page) {
+        },
+        error: function (xhr, textStatus, errorThrow) {
+        }
+    });
+
 }

+ 37 - 0
src/router/index.js

@@ -2108,6 +2108,16 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcel/index'], resolve)
         },
         {
+
+            meta: {
+                name: '协同编辑',
+                keepAlive: false
+            },
+            path: '/editOnline',
+            name: 'editOnline',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcel/index'], resolve)
+        },
+        {
             meta: {
                 name: '在线文档(市场)',
                 keepAlive: false
@@ -2152,6 +2162,33 @@ const routes = [{
             component: resolve => require(['../pages/main/processruns/processruns.vue'], resolve),
             meta: { title: '运行流程' }
         }
+        , {
+            meta: { name: '风险防控管理', keepAlive: false },
+            path: '/riskMaterials',
+            name: 'riskMaterials',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/leader/risk/riskMaterials.vue'], resolve)
+        }, {
+            meta: { name: '风险防控管理', keepAlive: false },
+            path: '/riskManagement',
+            name: 'riskManagement',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/leader/risk/riskManagement.vue'], resolve)
+        },
+        {
+            path: '/provincialWorkOrder',
+            name: 'provincialWorkOrder',
+            component: resolve => require(['../pages/main/provincialWorkOrder/provincialWorkOrder.vue'], resolve),
+            meta: { title: '省-通用工单' }
+        },
+        {
+            path: '/provincialWorkOrderArea',
+            name: 'provincialWorkOrderArea',
+            component: resolve => require(['../pages/main/provincialWorkOrder/provincialWorkOrderArea.vue'], resolve),
+            meta: { title: '地市-通用工单' }
+        }
+
+
     ]
 },
 {

+ 49 - 1
src/vendor/Export2Excel.js

@@ -115,13 +115,20 @@ export function export_table_to_excel(id) {
     var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
 
     saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
+    ajaxJson("数据加载中", '/market/clickCurrenLog/add', {//导出请求日志接口
+        "opName": JSON.parse(window.sessionStorage.userInfo).loginNo,
+        "fileName": "test.xlsx",
+        "opTime": getNowDate(),
+    }, function (res) {
+        console.log(res)
+    });
+    
 }
 
 function formatJson(jsonData) {
     console.log(jsonData)
 }
 export function export_json_to_excel(th, jsonData, defaultTitle) {
-
     /* original data */
 
     var data = jsonData;
@@ -138,4 +145,45 @@ export function export_json_to_excel(th, jsonData, defaultTitle) {
     var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
     var title = defaultTitle || '列表'
     saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
+    
+    ajaxJson("数据加载中", '/market/clickCurrenLog/add', {//导出请求日志接口
+        "opName": JSON.parse(window.sessionStorage.userInfo).loginNo,
+        "fileName":  title + ".xlsx",
+        "opTime": getNowDate(),
+    }, function (res) {
+        console.log(res)
+    });
 }
+
+
+function ajaxJson(msg, url, param, callBack, beforeSend, async) {
+    $.ajax({
+        type: "POST",
+        url: url,
+        global: true,
+        data: JSON.stringify(param),
+        contentType: "application/json;charset=UTF-8",
+        beforeSend: function (req) {
+
+            req.setRequestHeader("agileauthtoken", JSON.parse(window.sessionStorage.agileauthtoken).replace(/"/g, ''));
+
+            if ($.isFunction(beforeSend)) {
+
+                beforeSend.call(this, req);
+            }
+
+
+        },
+        xhrFields: {
+            withCredentials: false //跨域session保持
+        },
+        async: async == undefined ? true : async,
+        dataType: "json",
+        success: function (page) {
+        },
+        error: function (xhr, textStatus, errorThrow) {
+        }
+    });
+
+}
+

+ 7 - 7
vue.config.js

@@ -93,7 +93,7 @@ module.exports = {
         proxy: {
             // 开发环境变化可注释 ⬇️⬇️
             "/market/CMK": {
-                target: "http://124.223.66.248:9600",
+                target: "http://192.168.2.124:9113",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -101,7 +101,7 @@ module.exports = {
                 },
             },
             "/market/mk": {
-                target: "http://124.223.66.248:9600",
+                target: "http://192.168.2.124:9113",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -109,7 +109,7 @@ module.exports = {
                 },
             },
             "/market/techcentergj": {
-                target: "http://124.223.66.248:9600",
+                target: "http://192.168.2.124:9113",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -117,7 +117,7 @@ module.exports = {
                 },
             },
             "/mkWangge": {
-                target: "http://124.223.66.248:9600",
+                target: "http://192.168.2.124:9113",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -133,10 +133,10 @@ module.exports = {
                 // target: 'http://192.168.1.9:9600/spfm',
                 // target: 'http://127.0.0.1:9600/',
                 // target: 'http://192.168.0.156:9600/',
-                // target: 'http://192.168.2.238:9600/',
-                // target: 'http://192.168.2.124:9600/',
+                // target: 'http://192.168.2.44:9600/',
+                target: 'http://192.168.2.124:9600',
                 // target: "http://124.223.66.248:9600",
-                target: "http://43.138.50.94:9600",
+                // target: "http://43.138.50.94:9600",
                 changeOrigin: true,
             },
         },

+ 17 - 0
yarn.lock

@@ -3177,6 +3177,11 @@ console-browserify@^1.1.0:
   resolved "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
   integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
 
+console@^0.7.2:
+  version "0.7.2"
+  resolved "https://registry.yarnpkg.com/console/-/console-0.7.2.tgz#f9a4331249291591b7bf9bffa8e205356f20a9f0"
+  integrity sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==
+
 consolidate@^0.15.1:
   version "0.15.1"
   resolved "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
@@ -3983,6 +3988,18 @@ element-ui@^2.13.0:
     resize-observer-polyfill "^1.5.0"
     throttle-debounce "^1.0.1"
 
+element-ui@^2.15.7:
+  version "2.15.12"
+  resolved "https://registry.yarnpkg.com/element-ui/-/element-ui-2.15.12.tgz#fdde927a54078b17a85541ff7c0f0dad32488b8e"
+  integrity sha512-Y5FMT2BPOindU2GkDEQ5ZKUVxDawKONRNMh2eL3uBx1FOtvUJ+L6IxXLVsNxq4WnaX/UnVNgWXebl7DobygZMg==
+  dependencies:
+    async-validator "~1.8.1"
+    babel-helper-vue-jsx-merge-props "^2.0.0"
+    deepmerge "^1.2.0"
+    normalize-wheel "^1.0.1"
+    resize-observer-polyfill "^1.5.0"
+    throttle-debounce "^1.0.1"
+
 elliptic@^6.5.3:
   version "6.5.4"
   resolved "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"