yangbifan 2 年之前
父節點
當前提交
8186f512de

+ 2 - 2
config/dev.env.js

@@ -6,10 +6,10 @@ module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
   ENV_CONFIG: '"dev"',
   ctx:'"http://127.0.0.1:8080"',
-  ctxForm: '"http://10.149.85.91:8880"',//dev
+  // 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:8880"',//生产
+  ctxForm: '"http://10.230.15.228:8000"',//生产
   excludeMeWhenSelectNextHandler:false,
   excludeFormerHanlder:false,
   envTitle:'"本地开发环境"'

二進制
dist (2).zip


二進制
dist (3).zip


二進制
dist (4).zip


二進制
dist (5).zip


二進制
dist.zip


+ 5 - 1
public/index.html

@@ -8,7 +8,11 @@
   <link rel="icon" href="<%= BASE_URL %>favicon.ico">
   <title>市场经营管理平台</title>
   <script src="static/js/crypoto-js.js"></script>
-
+ 
+  <link rel='xlsx' href='./static/a.xlsx' />
+  <link rel='xlsx' href='./static/b.xlsx' />
+  <link rel='xlsx' href='./static/c.xlsx' />
+  <link rel='pptx' href='./static/d.pptx' />
   <script src="/static/js/luckysheet/plugins/js/plugin.js"></script>
   <script src="/static/js/luckysheet/luckysheet.umd.js"></script>
   <link rel='stylesheet' href='/static/js/luckysheet/plugins/css/pluginsCss.css' />

二進制
public/static/a.xlsx


二進制
public/static/b.xlsx


二進制
public/static/c.xlsx


二進制
public/static/d.pptx


二進制
public/static/file/a.xlsx


二進制
public/static/file/b.xlsx


二進制
public/static/file/c.xlsx


二進制
public/static/file/d.pptx


二進制
src/assets/a.xlsx


二進制
src/assets/b.xlsx


二進制
src/assets/c.xlsx


二進制
src/assets/d.pptx


+ 8 - 3
src/assets/js/common.js

@@ -263,11 +263,16 @@ let common = {
                     if (!obj.disableLoading) {
                         loading.close()
                     }
-                    if (response.code === 1 ||response.code == '1') {
-                       bus.$message.success(response.message)
+                    if (response.data.code === 1 ||response.data.code == '1') {
+                       bus.$message.success(response.data.message)
                         loading.close()
-                        success(response.data)
+                        success(response.data.data)
                         return response
+                        // if (response.data === 1 ||response.data == '1') {
+                        //     bus.$message.success(response.message)
+                        //      loading.close()
+                        //      success(response.data)
+                        //      return response
                     } else {
                         if (obj.printMsg) {
                             if (response.message) {

+ 41 - 112
src/components/workflow.vue

@@ -171,7 +171,6 @@ export default {
     },
   },
   created() {
-
     this.getNextPath(this.list.resourceId, 1);
     this.getMetirialType();
   },
@@ -186,7 +185,6 @@ export default {
         },
         data: {},
       }).then((res) => {
-
         this.demand = res.data;
       });
     },
@@ -202,9 +200,7 @@ export default {
       };
 
       let res = await this.common.httpPost(obj, success);
-      function success(data) {
-
-      }
+      function success(data) {}
     },
     async nextWorks(lists, list) {
       let _this = this;
@@ -215,52 +211,52 @@ export default {
       };
       await this.common.httpPost(obj, success);
       function success(data) {
-    
         let updateList = {
           taskId: data.taskid,
           id: _this.list.id,
           resourceId: _this.nodes.currentShape[0].resourceId,
         };
-        list.taskid = data.taskid;
+        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) {
-        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 lists = {
-          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, //意见内容
-        };
-        if (this.manyPeopleStatus == true) {
-          if (this.backThree.length <= 1) {
-            this.$message.error("请选择多人");
-            return;
-          } else {
-            list.lastmanList = this.nextDealManList;
-          }
+        list.procinstid = this.list.processId;
+        if (this.backThree.length <= 1) {
+          this.$message.error("请选择多人");
+          return;
+        } else {
+          list.lastmanList = this.nextDealManList;
         }
         if (this.nodes.currentShape) {
-          lists.resolution = this.nodes.currentShape[0].condition.resolution;
-          lists.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.backThree.length > 0) {
-          lists.nextDealMan = "admin";
+          newlist.nextDealMan = "admin";
         }
-        this.nextWorks(lists, list);
+        this.nextWorks(newlist, list);
       } else {
+        console.log(456);
         //生成需求决策编号
         if (this.clicknextName === "起草人发送") {
           this.getDemand();
@@ -277,15 +273,6 @@ export default {
             return false;
           }
         } 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 || '', //下一步处理人
-          };
           if (this.treeCopyList.length) {
             //抄送
             list.copyman = this.treeCopyList[0].loginNoStrCopy;
@@ -310,10 +297,9 @@ export default {
           } else {
             if (this.clicknextName === "流程结束") {
             } else {
-              ror("请选择候选人");
+              this.$message.error("请选择候选人");
               return false;
             }
-            this.$message.er;
           }
           this.nextWork(list);
         }
@@ -385,54 +371,16 @@ export default {
         data: e,
       }).then((res) => {
         this.$emit("beforeClose", true);
-        // this.fromList.taskId = res.data.body.taskId;
-        // this.fromList.taskName = res.data.body.taskName;
-        // if (res.data.body.taskName === "起草") {
-        //   this.isSync = res.data.body.isSync;
-        // } else {
-        //   this.isSync = "1";
-        // }
-        // if (res.data.result === 0) {
-        //   this.$message.success("工作流更新成功");
-        // }
       });
     },
-    // async getqueryMultiTaskId() {
-    //   let list = {
-    //     procinstid: this.list.processId,
-    //     userId: JSON.parse(window.sessionStorage.userInfo).loginNo,
-    //     // procinstid:this.fromList.processId
-
-    //     // taskId:e.taskId
-    //   };
-    //   let _this = this;
-    //   let obj = {
-    //     url: this.$url.formList.getQueryMultiTaskId, //流程追踪接口
-    //     data: list,
-    //     headers: {
-    //       "Content-Type": "application/json",
-    //     },
-    //   };
-    //   let res = await this.common.httpPost(obj, success);
-    //   function success(data) {
-    //     console.log(data);
-    //     _this.list.taskId = data.taskid;
-    //   }
-    // },
     //查询路径接口
     getNextPath(e, status) {
+      let { fresourceId, processDefinitionKey } = this.requestForm;
       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,
+        fresourceId: fresourceId,
+        processId: processDefinitionKey,
       };
-      if (e) {
-        // this.propsList = [];
-        list.resourceId = e;
-      }
+      e ? (list.resourceId = e) : list;
       this.$http({
         url: "/market/waf/queryPath",
         method: "post",
@@ -485,17 +433,16 @@ 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;
+          } else {
+            this.manyPeopleStatus = false;
           }
-
         }
       });
     },
@@ -526,15 +473,14 @@ export default {
         } else {
           this.treeList = res.data; //抄送
           // this.$refs.defTree.treeList = res.data;
-
         }
       });
     },
     //转派按钮方法
     clickTransfer(e) {
       this.$refs.defTree.userList = [];
-      this.backThree = []
-      this.treeList = []
+      this.backThree = [];
+      this.treeList = [];
       if (e == 1) {
         this.manyPeopleStatus = false;
         this.TransferStatus = true;
@@ -546,7 +492,7 @@ export default {
     //点击节点获取下一步的处理人字段
     clickGetTree(e, index) {
       this.$refs.defTree.userList = [];
-      this.backThree = []
+      this.backThree = [];
       // this.CopyStatus = false;
       this.TransferStatus = false;
       //   this.clickTaskName = e.properties.name;
@@ -565,17 +511,14 @@ export default {
     //选择树的回调
     changeTree(e) {
       if (this.manyPeopleStatus == true) {
-
         this.backThree = e;
- 
+
         let arr = [];
         this.backThree.map((item) => {
           arr.push(item.loginNoStr);
         });
         this.nextDealManList = arr.toString();
-
       } else {
-    
         if (e.length > 1) {
           this.$message.error("只能选择一个人");
           return;
@@ -605,7 +548,6 @@ export default {
           dictCodePks: "approval",
         },
       }).then((res) => {
-
         this.commonlyList = res.data;
       });
     },
@@ -692,19 +634,6 @@ export default {
       this.editStatus = false;
     },
   },
-  //  watch: {
-  //   "backThree": {
-  //     handler(newVal) {
-  //       if (newVal) {
-  //         console.log('[ newVal ] >', newVal)
-  //       //  console.log(newVal);
-  //        if(newVal.length === 0){
-  //         this.backThree.push({loginNameStr:'暂无选择'})
-  //        }
-  //       }
-  //     },
-  //   },
-  //  }
 };
 </script>
 

+ 3 - 42
src/components/workflowEntrance.vue

@@ -212,7 +212,7 @@ export default {
       let list = {
         userId: "",
         userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
-        taskid: this.list.taskId, //表单标识
+        taskId: this.list.taskId, //表单标识
         procinstid: this.list.processId,
         // taskName: this.clicknextName, //流程节点
         userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
@@ -433,52 +433,13 @@ export default {
         if (status === 1) {
           //第一次进入取路径
           this.initialList = res.data.body;
-          console.log(this.initialList);
-          if (
-            this.initialList.nextShapes[0].multi?.multi &&
-            res.data.body.nextShapes[0].multi.multi === "true"
-          ) {
-            // this.getqueryMultiTaskId();
-          }
-          // this.getTreeLists(this.initialList)
+          // console.log(this.initialList);
           // if (
           //   this.initialList.nextShapes[0].multi?.multi &&
           //   res.data.body.nextShapes[0].multi.multi === "true"
           // ) {
-          //   this.transferStatus = true;
-          // } else {
-          //   this.transferStatus = false;
-          // }
-          // if (
-          //   res.data.body.nextShapes[0].copy?.copy &&
-          //   res.data.body.nextShapes[0].copy.copy === "true"
-          // ) {
-          //   this.CopyStatus = true;
-          // } else {
-          //   this.CopyStatus = false;
-          // }
-          // if (res.data.body.nextShapes[0].loop !== null) {
-          //   if (res.data.body.nextShapes[0].loop.loop === "true") {
-          //     this.transferStatus = true; //转派按钮生效
-          //   } else {
-          //     this.transferStatus = false;
-          //   }
-          // } else {
-          //   this.transferStatus = false;
-          // }
-          // if (res.data.body.nextShapes[0].copy !== null) {
-          //   if (res.data.body.nextShapes[0].copy.copy === "true") {
-          //     // this.copyStatus = true; //抄送按钮生效
-          //     this.CopyStatus = true;
-          //   } else {
-          //     this.copyStatus = false;
-          //   }
-          // } else {
-          //   this.copyStatus = false;
+           
           // }
-          // res.data.body.currentShape.map((item, index) => {
-          //   this.getNextPath(item.resourceId, 2);
-          // });
         }
         if (status === 2) {
           if (res.data.body.nextShapes[0].condition !== null) {

+ 0 - 0
src/components/workflowPath/workflowPath.vue


+ 21 - 29
src/pages/main/leader/components/export.vue

@@ -2,21 +2,18 @@
   <div class="flex-count">
     <div class="flex-num">
       <div class="time-title">已选({{ num }})项</div>
-      <div v-if="!approvalStatus" class="flex-time">
+      <div v-if="exportStatusList" class="flex-time">
         <div class="time-title">时间:</div>
- <el-date-picker
-      v-model="seachList"
-      type="daterange"
-      start-placeholder="开始日期"
-      end-placeholder="结束日期"
-      value-format="yyyy-MM-dd"
-      :default-time="['00:00:00', '23:59:59']">
-      size="small"
-    </el-date-picker>
-        <el-button
-          type="primary"
-          @click="clickSeach"
-          plain
+        <el-date-picker
+          v-model="seachList"
+          type="daterange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          value-format="yyyy-MM-dd"
+          :default-time="['00:00:00', '23:59:59']"
+        >
+        </el-date-picker>
+        <el-button type="primary" size="small" @click="clickSeach" plain
           >搜索</el-button
         >
       </div>
@@ -43,14 +40,14 @@ export default {
       type: Number,
       default: () => [],
     },
-      exportStatusList: {
-          type:Boolean,
-          default: () => [],
-      },
+    exportStatusList: {
+      type: Boolean,
+      default: () => [],
+    },
   },
   data() {
     return {
-      seachList:'',
+      seachList: "",
       approvalStatus: true,
       exportStatus: true,
     };
@@ -65,18 +62,13 @@ export default {
       }
     },
     clickApproval() {
-        this.$emit('clickApproval',true)
-
+      this.$emit("clickApproval", true);
+    },
+    clickSeach() {
+      this.$emit("seachExportList", this.seachList);
     },
-    clickSeach(){
-
-
-        this.$emit('seachExportList',this.seachList)
-    }
-  },
-  created() {
-
   },
+  created() {},
 };
 </script>
 

+ 112 - 120
src/pages/main/leader/components/form.vue

@@ -1,124 +1,105 @@
 <template>
-  <div>
-    <slot :name="list.name"></slot>
-    <!-- <el-table
-    :data="list.data"
-    style="width: 100%;margin-bottom: 20px;"
-    row-key="id"
-    border
-    default-expand-all
-    :tree-props="{children: 'children'}">
-    <el-table-column
-      prop="date"
-      label="日期"
-      sortable
-      width="180">
-    </el-table-column>
-    <el-table-column
-      prop="name"
-      label="姓名"
-      sortable
-      width="180">
-    </el-table-column>
-    <el-table-column
-      prop="address"
-      label="地址">
-    </el-table-column>
-  </el-table> -->
-    <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"
-      :cell-style="columnbackgroundStyle"
-      empty-text="暂无数据"
-      @cell-click="getRowList"
-      row-key="id"
-     :tree-props="{children: 'children',hasChildren:'hasChildren'}"
-    >
-      <!-- 是否多选 -->
-      <el-table-column
-        v-if="list.isSelection"
-        :selecttable="list"
-        type="selection"
-        :width="100"
-        align="center"
-      />
+  <div class="container">
+    <div class="table">
+      <slot :name="list.name"></slot>
+      <el-table
+        ref="table"
+        style="width: 100%"
+        :data="list.data"
+        @row-click="getRowData"
+        @selection-change="selectionChange"
+        :cell-style="columnbackgroundStyle"
+        empty-text="暂无数据"
+        @cell-click="getRowList"
+        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+      >
+        <!-- 是否多选 -->
+        <el-table-column
+          v-if="list.isSelection"
+          :selecttable="list"
+          type="selection"
+          :width="100"
+          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"
+          v-if="list.isIndex"
+          type="index"
+          label="序号"
+          width="55"
           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>
+        <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>
-            </div>
+            </template>
           </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 : [10]"
-        :page-size="list.pageData.pageSize"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="list.pageData.total"
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-      />
+        </el-table-column>
+      </el-table>
+      <div class="page">
+        <el-pagination
+          style="
+            display: flex;
+            flex-direction: row-reverse;
+            background-color: #fff;
+          "
+          v-if="list.pageData.total > 0"
+          :current-page.sync="page"
+          :page-sizes="list.pageData.pageSizes ? list.pageData.pageSizes : [10]"
+          :page-size="list.pageData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="list.pageData.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
     </div>
   </div>
 </template>
@@ -139,15 +120,10 @@ export default {
   },
   created() {
     console.log(this.list);
-    // this.columnbackgroundStyle()
   },
   mounted() {},
   methods: {
     columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
-      // console.log(row);
-      // console.log(column);
-      // console.log(rowIndex);
-      // console.log(columnIndex);
       if (column.type == "default") {
         if (column.label === "需求名称") {
           return "color:#0682CD;";
@@ -185,9 +161,25 @@ export default {
 };
 </script>
 
-<style>
+<style lang="scss" scoped>
 .btn {
   display: flex;
   justify-content: center;
 }
+.container {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  height: 100%;
+  overflow: hidden;
+  margin-bottom: 4%;
+  .table {
+    flex: 1;
+    position: relative;
+    ::v-deep.el-table {
+      position: absolute;
+      overflow-y: auto;
+    }
+  }
+}
 </style>

+ 112 - 67
src/pages/main/leader/components/formTable.vue

@@ -6,15 +6,15 @@
         ref="form"
         :model="form"
         :rules="rule"
-        label-width="130px"
-        style="margin-top: 30px"
         :disabled="disabled"
+        label-width="200px"
       >
         <div class="flex-header">
           <el-form-item
-            style="width: 40%; margin-right: 10%"
+            style="width: 44%"
             label="需求名称:"
             prop="needName"
+            label-width="140px"
           >
             <el-input v-model="form.needName"></el-input>
           </el-form-item>
@@ -47,11 +47,7 @@
           </el-form-item>
         </div>
         <div class="flex-input-tare flex-header">
-          <el-form-item
-            label="需求背景及目的"
-            label-width="120px"
-            prop="needBackdrop"
-          >
+          <el-form-item label="需求背景及目的" prop="needBackdrop">
             <el-input
               type="textarea"
               maxlength="300"
@@ -61,7 +57,7 @@
           </el-form-item>
         </div>
         <div class="flex-input-tare flex-header">
-          <el-form-item label="需求内容" label-width="120px" prop="needContent">
+          <el-form-item label="需求内容" prop="needContent">
             <el-input
               type="textarea"
               maxlength="300"
@@ -79,8 +75,8 @@
           </el-form-item>
           <el-form-item
             label="是否数智化需求:"
-            label-width="130px"
             prop="isDigitization"
+            label-width="200px"
           >
             <el-select v-model="form.isDigitization" placeholder="请选择">
               <el-option label="是" value="是"></el-option>
@@ -89,15 +85,15 @@
           </el-form-item>
           <el-form-item
             label="是否七大工程需求:"
-            label-width="140px"
             prop="isSevenProject"
+            label-width="220px"
           >
             <el-select v-model="form.isSevenProject" placeholder="请选择">
               <el-option label="是" value="是"></el-option>
               <el-option label="否" value="否"></el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="是否需求目录框架需求:" label-width="160px">
+          <el-form-item label="是否需求目录框架需求:" label-width="280px">
             <el-select v-model="form.isMarketMeeting" placeholder="请选择">
               <el-option label="是" value="是"></el-option>
               <el-option label="否" value="否"></el-option>
@@ -183,15 +179,15 @@
           </el-form-item>
         </div>
         <div class="flex-header">
-          <el-form-item label="功能开发承载平台:" label-width="130px">
+          <el-form-item label="功能开发承载平台:" label-width="200px">
             <el-input v-model="form.functionBearPlatform"></el-input>
           </el-form-item>
-          <el-form-item label="功能展示应用平台:" label-width="130px">
+          <el-form-item label="功能展示应用平台:" label-width="200px">
             <el-input v-model="form.functionShowPlatform"></el-input>
           </el-form-item>
         </div>
         <div class="flex-header">
-          <el-form-item label="需求类型:">
+          <el-form-item label="需求类型:" prop="needType">
             <el-select
               v-model="form.needType"
               placeholder="请选择"
@@ -218,6 +214,7 @@
               :disabled="timeStatus"
               placeholder="选择日期"
               v-model="form.dueTime"
+              :picker-options="pickerOptions"
               value-format="yyyy-MM-dd"
               style="width: 100%"
             ></el-date-picker>
@@ -228,7 +225,7 @@
             功能开发类,数智类填写
           </div>
           <div class="flex-header">
-            <el-form-item label="是否涉及敏感信息:" label-width="130px">
+            <el-form-item label="是否涉及敏感信息:" label-width="200px">
               <el-select v-model="form.isSensitiveData" placeholder="请选择">
                 <el-option label="是" value="是"></el-option>
                 <el-option label="否" value="否"></el-option>
@@ -242,27 +239,28 @@
             </el-form-item>
           </div>
           <div class="flex-header">
-            <el-form-item label="上线配合测试地市:" label-width="130px">
+            <el-form-item label="上线配合测试地市:" label-width="200px">
               <el-input v-model="form.onlineTestCity"></el-input>
             </el-form-item>
           </div>
           <div class="flex-header">
-            <el-form-item label="功能完成时间:" label-width="130px">
+            <el-form-item label="功能完成时间:" label-width="200px">
               <el-date-picker
                 type="date"
                 placeholder="选择日期"
                 v-model="form.doneTime"
+                :picker-options="pickerOptions"
                 value-format="yyyy-MM-dd"
                 style="width: 100%"
               ></el-date-picker>
             </el-form-item>
-            <el-form-item label="是否需要模糊化:" label-width="120px">
+            <el-form-item label="是否需要模糊化:" label-width="200px">
               <el-select v-model="form.isVaguev" placeholder="请选择">
                 <el-option label="是" value="是"></el-option>
                 <el-option label="否" value="否"></el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="是否需要纳入金库模式:" label-width="160px">
+            <el-form-item label="是否需要纳入金库模式:" label-width="280px">
               <el-select v-model="form.isVaultMode" placeholder="请选择">
                 <el-option label="是" value="是"></el-option>
                 <el-option label="否" value="否"></el-option>
@@ -303,8 +301,15 @@
             </el-form-item>
           </div>
         </div>
-        <div class="flex-header" style="display: flex; flex-direction: column">
-          <el-form-item label="附件:" prop="mkFileShareAttachList">
+        <div
+          class="flex-header flex-upload"
+          style="display: flex; flex-direction: column"
+        >
+          <el-form-item
+            label="附件:"
+            prop="mkFileShareAttachList"
+            label-width="120px"
+          >
             <my-upload
               ref="upload"
               @uploadBack="uploadBack"
@@ -312,12 +317,36 @@
               @clickDownload="download"
               :fileInfo="fileInfo"
               :fileList="list.mkFileShareAttachList"
-              style="width: 30% !important"
             ></my-upload>
           </el-form-item>
-          <div @click="downExcel" class="el-upload__tip" slot="tip">
-            备注内容:PPT(非市场部需求以及市场部非框架内需求需要通过市场决策会决议,请上传ppt)、《业务需求模板.xlsx》《后评估模板.xlsx》
-            《敏感信息范围说明.xlsx》填写并上传。
+          <div class="el-upload__tip" slot="tip">
+            备注内容:PPT(非市场部需求以及市场部非框架内需求需要通过市场决策会决议,请上传ppt。
+          </div>
+          <div class="el-upload__tip" slot="tip">
+            <a
+              href="./static/file/a.xlsx"
+              target="_blank"
+              download="后评估模板.xlsx"
+              >《后评估模板.xlsx》、</a
+            >
+            <a
+              target="_blank"
+              href="./static/file/b.xlsx"
+              download="业务需求模板.xlsx"
+              >《业务需求模板.xlsx》、</a
+            >
+            <a
+              target="_blank"
+              href="./static/file/c.xlsx"
+              download="敏感信息范围说明.xlsx"
+              >《敏感信息范围说明.xlsx》、</a
+            >
+            <a
+              target="_blank"
+              href="./static/file/d.pptx"
+              download="关于系统开发需求的汇报(第十期).pptx"
+              >《关于系统开发需求的汇报(第十期).pptx》</a
+            >
           </div>
         </div>
         <!-- 处理人意见模块 -->
@@ -346,6 +375,11 @@ export default {
         url: "/market/waf/upload",
         fileList: [],
       },
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() < Date.now() - 8.64e7;
+        },
+      },
       oneList: [],
       childrenList: [],
       twoList: [],
@@ -463,9 +497,9 @@ export default {
         needName: [
           { required: true, message: "请输入需求名称", trigger: "blur" },
         ],
-        mkFileShareAttachList: [
-          { required: true, validator: this.validateFiles },
-        ],
+        // mkFileShareAttachList: [
+        //   { required: true, validator: this.validateFiles },
+        // ],
         applyDept: [
           { required: true, message: "请输入申请部门", trigger: "blur" },
         ],
@@ -478,6 +512,7 @@ export default {
         needSource: [
           { required: true, message: "请输入需求来源", trigger: "change" },
         ],
+
         needBackdrop: [
           { required: true, message: "请输入需求背景", trigger: "blur" },
           {
@@ -502,41 +537,14 @@ export default {
         isDigitization: [
           { required: true, message: "请选择", trigger: "change" },
         ],
+        needType: [
+          { required: true, message: "请选择需求类型", trigger: "change" },
+        ],
         isSevenProject: [
           { required: true, message: "请选择七大工程需求", trigger: "change" },
         ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
-        needName: [
-          { required: true, message: "请输入需求名称", trigger: "blur" },
-        ],
       },
-      copyRule:{},
+      copyRule: {},
       isList: [],
     };
   },
@@ -616,7 +624,7 @@ export default {
       handler(newVal, oldVal) {
         if (newVal === "是") {
           this.rule = { ...this.rule, ...this.rules };
-        }else{
+        } else {
           this.rule = this.copyRule;
         }
         console.log(this.rule);
@@ -799,6 +807,9 @@ export default {
     },
   },
   methods: {
+    disableDate(time) {
+      return time.getTime() < Date.now() - 8.64e7;
+    },
     validateFiles(rule, value, callback) {
       let num = 3;
 
@@ -1032,6 +1043,9 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+a {
+  text-decoration: none;
+}
 ::v-deep .el-upload-list {
   width: 23rem;
 }
@@ -1039,17 +1053,22 @@ export default {
   text-align: center;
   font-size: 24px;
   line-height: 60px;
-  border-bottom: 1px solid #e1e1e1;
+
   font-weight: bold;
 }
 .flex-header {
   margin-top: 20px;
   display: flex;
   //   justify-content: space-between;
-  border-bottom: 1px solid #e1e1e1;
+
   ::v-deep .el-form-item {
     width: 20%;
-    margin-right: 5%;
+    margin-right: 60px;
+  }
+}
+.flex-upload {
+  ::v-deep .el-form-item {
+    width: 100%;
   }
 }
 .flex-input-tare {
@@ -1057,17 +1076,43 @@ export default {
     width: 100%;
     margin-right: 5%;
   }
+  ::v-deep .el-form-item__label {
+    width: 9rem !important;
+  }
 }
 .el-upload__tip {
   color: red;
 }
-::v-deep .el-input--suffix .el-input__inner {
-  width: 119% !important;
-}
+// ::v-deep .el-input--suffix .el-input__inner {
+//   width: 119% !important;
+// }
 ::v-deep .el-input__inner {
   color: black !important;
 }
 ::v-deep .el-textarea.is-disabled .el-textarea__inner {
   color: black !important;
 }
+::v-deep .el-form-item {
+  display: flex;
+}
+::v-deep .el-form-item__label {
+  // width:100%;
+  height: 50px;
+  line-height: 40px !important;
+  width: 130px;
+  font-size: 0.5rem;
+}
+::v-deep .el-form-item__content {
+  width: 100%;
+  margin-left: 0% !important;
+}
+.el-select,
+::v-deep.el-input_inner {
+  width: 100%;
+}
+::v-deep.el-form-item.foldLabel .el-form-item__label {
+  white-space: pre-line; /*换行显示*/
+  height: 10px; /*设置lable高度,input高度一样*/
+  line-height: 30px !important;
+}
 </style>

+ 186 - 0
src/pages/main/leader/components/formTrace.vue

@@ -0,0 +1,186 @@
+<template>
+  <div class="container">
+    <div class="table">
+      <slot :name="list.name"></slot>
+      <el-table
+        ref="table"
+        style="width: 100%"
+        :data="list.data"
+        row-key="id"
+        @row-click="getRowData"
+        @selection-change="selectionChange"
+        :cell-style="columnbackgroundStyle"
+        empty-text="暂无数据"
+        @cell-click="getRowList"
+        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+      >
+        <!-- 是否多选 -->
+        <el-table-column
+          v-if="list.isSelection"
+          :selecttable="list"
+          type="selection"
+          :width="100"
+          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;
+            background-color: #fff;
+          "
+          v-if="list.pageData.total > 0"
+          :current-page.sync="page"
+          :page-sizes="list.pageData.pageSizes ? list.pageData.pageSizes : [10]"
+          :page-size="list.pageData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="list.pageData.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      page: 1,
+    };
+  },
+  props: {
+    //  表格数据和表格部分属性的对象
+    // eslint-disable-next-line vue/require-default-prop
+    list: {
+      type: Object,
+    },
+  },
+  created() {
+    console.log(this.list);
+  },
+  mounted() {},
+  methods: {
+    columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
+      if (column.type == "default") {
+        if (column.label === "需求名称") {
+          return "color:#0682CD;";
+        }
+      }
+      //   if (columnIndex == 1) {
+      // 	//让下标为1的列数背景颜色显示为红色(颜色自定义根据大家需求来)
+      //     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;
+}
+.container {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  height: 100%;
+  overflow: hidden;
+  margin-bottom: 4%;
+  .table {
+    flex: 1;
+    position: relative;
+    ::v-deep.el-table {
+      position: absolute;
+      overflow-y: auto;
+    }
+  }
+}
+</style>

+ 2 - 3
src/pages/main/leader/components/tabs.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-tabs v-model="activeName" @tab-click="handleClick">
+  <el-tabs v-model="activeName" @tab-click="handleClick" style="width:80%" >
     <!-- <el-tab-pane
     class="flex-tabs"
       v-for="item in tabList"
@@ -37,8 +37,7 @@ export default {
       activeName: "first",
     };
   },
-  created() {
-  },
+  created() {},
   methods: {
     handleClick(tab, event) {
       this.$emit("status", tab._props.name);

+ 70 - 16
src/pages/main/leader/demand/demandHomes.vue

@@ -44,6 +44,7 @@
       :before-close="handleClose"
       :modal="false"
       v-if="dialogStatus"
+      style="display: flex; flex-direction: column"
       :destroy-on-close="true"
     >
       <!-- 后期维护 -->
@@ -77,7 +78,7 @@
       <div>
         <div class="table-title">流程追踪</div>
         <div v-if="abc == true">
-          <Table :list="lables"></Table>
+          <Tables :list="lables"></Tables>
         </div>
       </div>
     </el-dialog>
@@ -142,6 +143,7 @@ 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 {
@@ -154,9 +156,11 @@ export default {
     deptTree,
     Workflow,
     WorkflowEntrance,
+    Tables
   },
   data() {
     return {
+      UserPermissionsList: [],
       isWorkflowStatus: true, //默认展示模式组件,为true时展示多人处理组件
       buttonStatus: true,
       copyStatus: false,
@@ -289,7 +293,6 @@ export default {
       },
       firstTable: {
         name: "first",
-        height: "650",
         titledata: [
           {
             label: "需求名称",
@@ -580,6 +583,7 @@ export default {
                 this.disabled = true;
                 this.buttonStatus = false;
                 this.getReadList(r.copytaskid);
+                this.clickForm(r)
               }, // 自定义事件
             },
           ],
@@ -701,7 +705,7 @@ export default {
         data: [], //内容数据
         loading: true,
         pageData: {
-          total: 10, // 总条数
+          total: 0, // 总条数
           pageSize: 10, // 每页数量
           pageNum: 1, // 页码
         },
@@ -757,6 +761,7 @@ export default {
     };
   },
   created() {
+    this.getUserIndex();
     // let A = [
     //   {
     //     id: 1,
@@ -972,11 +977,7 @@ export default {
         },
         data: this.$refs.formTable.form,
       }).then((res) => {
-        if (res.code === 0) {
-          this.$message.success("转需求管理平台成功!");
-        } else {
-          this.$message.error("转需求管理平台错误!");
-        }
+        this.$message.success("转需求管理平台成功!");
       });
     },
     //批量导出搜索
@@ -1010,10 +1011,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;
@@ -1249,6 +1251,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) {
@@ -1387,8 +1405,20 @@ export default {
 
       let res = await this.common.httpPost(obj, success);
       function success(data) {
+        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;
@@ -1398,13 +1428,19 @@ export default {
           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) {
-            if (item.taskId == data.data.lastmandata[0].taskId) {
-              item.children = data.data.lastmandata;
-            }
+            let indexs = data.data.lastmandata.findIndex((items) => {
+              if (items.taskId == item.taskId) {
+                item.children.push(items);
+              }
+            });
           }
         });
+        console.log(list);
+
         _this.lables.data = list;
+        console.log("[ _this.lables.data ] >", _this.lables.data);
         _this.abc = true;
       }
     },
@@ -1443,6 +1479,7 @@ 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;
@@ -1589,8 +1626,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;
       }
@@ -1674,6 +1718,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;
@@ -1739,11 +1789,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;
@@ -1751,6 +1804,7 @@ export default {
   margin-top: 20px;
   position: relative;
   flex-direction: column;
+  // height: 100%;
   .flex-header {
     display: flex;
     width: 100%;

+ 4 - 1
src/pages/main/leader/demand/supportState.vue

@@ -190,13 +190,15 @@ export default {
         headers: {
           "Content-Type": "application/json",
         },
+        // 20221214001
         data: {
-          needNo: this.needNo,
+          needNo:this.needNo,
         },
       }).then((res) => {
         this.firstTable.data.push(res.data);
         this.listTable = res.data.cwfInfo;
         this.listTable.map((item) => {
+          console.log(item);
           item.state.map((items, index) => {
             if (items.status === false) {
               items.imgUrl = require("../../../../assets/b_img" +
@@ -260,6 +262,7 @@ export default {
           .flex-time {
             margin-top: 5px;
             margin-bottom: 10%;
+            height: 16px;
           }
         }
       }

+ 1 - 1
vue.config.js

@@ -133,7 +133,7 @@ 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.170:9600/',
+                // target: 'http://192.168.2.238:9600/',
                 // target: 'http://192.168.2.124:9600/',
                 // target: "http://124.223.66.248:9600",
                 target: "http://43.138.50.94:9600",