Преглед на файлове

审核功能 权限 审核通过

XuZinan преди 3 години
родител
ревизия
249ff022dc
променени са 2 файла, в които са добавени 202 реда и са изтрити 125 реда
  1. 189 123
      pages/Project/detail.vue
  2. 13 2
      services/project.js

+ 189 - 123
pages/Project/detail.vue

@@ -1,128 +1,133 @@
 <template>
   <view class="content">
     <view class="title"> 项目详情 </view>
-    <view class="list">
-      <view class="detail">
-        <span class="subTitle">项目名称:</span>
-        <span class="detailContent">{{ currentProject.project_name }}</span>
-      </view>
-      <view class="detail" v-if="currentProject.TypeInfo">
-        <span class="subTitle">项目类别:</span>
-        <span class="detailContent">{{ currentProject.TypeInfo.name }}</span>
-      </view>
-      <view class="detail" v-if="currentProject.IndustryInfo">
-        <span class="subTitle">行业名称:</span>
-        <span class="detailContent">
-          {{ currentProject.IndustryInfo.name }}
-        </span>
-      </view>
-      <view class="detail">
-        <span class="subTitle">流程:</span>
-        <span class="detailContent">{{ currentProject.FlowInfo.name }}</span>
-      </view>
-      <view class="detail">
-        <span class="subTitle">状态:</span>
-        <span class="detailContent">
-          {{ status[currentProject.project_status] }}
-        </span>
-      </view>
-      <view class="detail">
-        <span class="subTitle">节点:</span>
-        <span class="detailContent">
-          {{ `${currentProject.NodeInfo.node}(` }}
-          <span v-if="currentProject.audit_status == 0">待提交</span>
-          <span
-            v-if="currentProject.audit_status == 1"
-            :style="{ color: '#1890ff' }"
-          >
-            审核中
+    <view class="main">
+      <view class="list">
+        <view class="detail">
+          <span class="subTitle">项目名称:</span>
+          <span class="detailContent">{{ currentProject.project_name }}</span>
+        </view>
+        <view class="detail" v-if="currentProject.TypeInfo">
+          <span class="subTitle">项目类别:</span>
+          <span class="detailContent">{{ currentProject.TypeInfo.name }}</span>
+        </view>
+        <view class="detail" v-if="currentProject.IndustryInfo">
+          <span class="subTitle">行业名称:</span>
+          <span class="detailContent">
+            {{ currentProject.IndustryInfo.name }}
           </span>
-          <span
-            v-if="currentProject.audit_status == 2"
-            :style="{ color: '#f5222d' }"
-          >
-            审核拒绝
+        </view>
+        <view class="detail">
+          <span class="subTitle">流程:</span>
+          <span class="detailContent">{{ currentProject.FlowInfo.name }}</span>
+        </view>
+        <view class="detail">
+          <span class="subTitle">状态:</span>
+          <span class="detailContent">
+            {{ status[currentProject.project_status] }}
           </span>
-          <span
-            v-if="currentProject.audit_status == 3"
-            :style="{ color: '#a0d911' }"
-          >
-            审核通过
+        </view>
+        <view class="detail">
+          <span class="subTitle">节点:</span>
+          <span class="detailContent">
+            {{ `${currentProject.NodeInfo.node}(` }}
+            <span v-if="currentProject.audit_status == 0">待提交</span>
+            <span
+              v-if="currentProject.audit_status == 1"
+              :style="{ color: '#1890ff' }"
+            >
+              审核中
+            </span>
+            <span
+              v-if="currentProject.audit_status == 2"
+              :style="{ color: '#f5222d' }"
+            >
+              审核拒绝
+            </span>
+            <span
+              v-if="currentProject.audit_status == 3"
+              :style="{ color: '#a0d911' }"
+            >
+              审核通过
+            </span>
+            <span>)</span>
           </span>
-          <span>)</span>
-        </span>
-      </view>
-      <view class="detail" v-if="currentProject.audit_status == 2">
-        <span class="subTitle">拒绝原因:</span>
-        <span class="detailContent">
-          {{ currentProject.audit_comment }}
-        </span>
-      </view>
-      <view class="detail" v-if="currentProject.location">
-        <span class="subTitle">项目地区:</span>
-        <span class="detailContent">
-          {{ `${currentProject.location}(${currentProject.location_code})` }}
-        </span>
-      </view>
-      <view class="detail" v-if="currentProject.name">
-        <span class="subTitle">项目简称:</span>
-        <span class="detailContent">{{ currentProject.name }}</span>
-      </view>
-      <view class="detail" v-if="currentProject.version">
-        <span class="subTitle">项目批次:</span>
-        <span class="detailContent">{{ currentProject.version }}期</span>
-      </view>
-      <view class="detail" v-if="currentProject.AuthorUser">
-        <span class="subTitle">创建人:</span>
-        <span class="detailContent">{{ currentProject.AuthorUser.CName }}</span>
-      </view>
-      <view class="detail" v-if="currentProject.AuthorDepInfo">
-        <span class="subTitle">所属部门:</span>
-        <span class="detailContent">
-          {{ currentProject.AuthorDepInfo.Name }}
-        </span>
+        </view>
+        <view class="detail" v-if="currentProject.audit_status == 2">
+          <span class="subTitle">拒绝原因:</span>
+          <span class="detailContent">
+            {{ currentProject.audit_comment }}
+          </span>
+        </view>
+        <view class="detail" v-if="currentProject.location">
+          <span class="subTitle">项目地区:</span>
+          <span class="detailContent">
+            {{ `${currentProject.location}(${currentProject.location_code})` }}
+          </span>
+        </view>
+        <view class="detail" v-if="currentProject.name">
+          <span class="subTitle">项目简称:</span>
+          <span class="detailContent">{{ currentProject.name }}</span>
+        </view>
+        <view class="detail" v-if="currentProject.version">
+          <span class="subTitle">项目批次:</span>
+          <span class="detailContent">{{ currentProject.version }}期</span>
+        </view>
+        <view class="detail" v-if="currentProject.AuthorUser">
+          <span class="subTitle">创建人:</span>
+          <span class="detailContent">{{
+            currentProject.AuthorUser.CName
+          }}</span>
+        </view>
+        <view class="detail" v-if="currentProject.AuthorDepInfo">
+          <span class="subTitle">所属部门:</span>
+          <span class="detailContent">
+            {{ currentProject.AuthorDepInfo.Name }}
+          </span>
+        </view>
+        <view class="detail">
+          <span class="subTitle">项目编号:</span>
+          <span class="detailContent">
+            {{ currentProject.project_full_code }}
+          </span>
+        </view>
       </view>
-      <view class="detail">
-        <span class="subTitle">项目编号:</span>
-        <span class="detailContent">
-          {{ currentProject.project_full_code }}
-        </span>
+
+      <view class="title">审核详情 </view>
+      <view class="list">
+        <uni-steps
+          :options="nodeList.list"
+          :active="nodeList.currentIndex"
+          direction="column"
+        />
       </view>
-    </view>
 
-    <view class="title">审核详情 </view>
-    <view class="list">
-      <uni-steps
-        :options="nodeList.list"
-        :active="nodeList.currentIndex"
-        direction="column"
-      />
+      <uni-card title="操作" v-if="!this.auth">
+        <view class="editBtns" slot="actions">
+          <view class="edit" v-if="canEdit(0)" @click="onEdit()">编辑</view>
+          <view class="edit" v-if="canEdit(0)" @click="onDelete()">删除</view>
+          <view class="edit" v-if="canEdit(0)" @click="onSubmitAuth()">
+            提交审核
+          </view>
+          <view class="edit" v-if="canEdit(1)" @click="onMember()"
+            >成员管理
+          </view>
+          <view class="edit" v-if="canEdit(2)" @click="onExecute()">
+            转执行
+          </view>
+          <view class="edit" v-if="canEdit(3)" @click="onWarranty()">
+            转质保
+          </view>
+          <view class="edit" v-if="canEdit(3)" @click="onOperate()">
+            转运营
+          </view>
+        </view>
+      </uni-card>
     </view>
 
-    <uni-card title="操作">
-      <view class="editBtns" slot="actions">
-        <view class="edit" v-if="canEdit(0)" @click="onEdit()">编辑</view>
-        <view class="edit" v-if="canEdit(0)" @click="onDelete()">删除</view>
-        <view class="edit" v-if="canEdit(0)" @click="onSubmitAuth()"
-          >提交审核</view
-        >
-        <view class="edit" v-if="canEdit(1)" @click="onMember()">成员管理</view>
-        <view class="edit" v-if="canEdit(2)" @click="onExecute()">转执行</view>
-        <view class="edit" v-if="canEdit(3)" @click="onWarranty()">转质保</view>
-        <view class="edit" v-if="canEdit(3)" @click="onOperate()">转运营</view>
-      </view>
-    </uni-card>
-
-    <view class="group">
-      <button v-if="canAuth()" @click="onHandleAudit(0)" class="commit">
-        审核拒绝
-      </button>
-      <button
-        v-if="canAuth()"
-        @click="onHandleAudit(1)"
-        type="primary"
-        class="commit"
-      >
+    <view class="group" v-if="this.auth && canAuth()">
+      <button @click="onHandleAudit(0)" class="commit">审核拒绝</button>
+      <button @click="onHandleAudit(1)" type="primary" class="commit">
         审核通过
       </button>
     </view>
@@ -131,13 +136,21 @@
 
 <script>
 import { mapState } from "vuex";
-import { queryFlow, deleteApproval, submitAudit } from "@/services/project";
+import {
+  queryFlow,
+  deleteApproval,
+  submitAudit,
+  queryUserDetail,
+  authApproval,
+} from "@/services/project";
 export default {
   data() {
     return {
       auth: false,
       status: ["售前", "转执行", "转运营", "转质保"],
       flowList: [],
+      depRole: [],
+      user: {},
     };
   },
   computed: {
@@ -166,16 +179,65 @@ export default {
   },
   methods: {
     async init() {
+      this.user = uni.getStorageSync("user");
       let res;
       res = await queryFlow();
       this.flowList = res.data;
+      res = await queryUserDetail(this.user);
+      let depId = this.user.DepId;
+      let dep = res.data.Dep.find((item) => item.ID == depId);
+      this.depRole = dep.Role;
     },
+
     canAuth() {
-      return this.auth;
+      let { NodeInfo, audit_status, project_status } = this.currentProject;
+      if (!NodeInfo || this.flowList.length == 0 || this.depRole.length == 0)
+        return false;
+      if (audit_status != 1) return false;
+
+      if (project_status == 2)
+        return this.currentProject.opt_manager_id == this.user.ID;
+      if (project_status == 3)
+        return this.currentProject.wty_manager_id == this.user.ID;
+
+      let flow = this.flowList.find((item) => item.id == NodeInfo.flow_id);
+      if (!flow) return false;
+      let { NodeAudits } = flow.Nodes.find((item) => item.id == NodeInfo.id);
+      const role = this.depRole.find((item) =>
+        NodeAudits.find((audit) => audit.audit_role == item.ID)
+      );
+      return Boolean(role);
     },
     onHandleAudit(value) {
-      if (value) console.log("审核通过");
-      else console.log("审核拒绝");
+      if (value) {
+        uni.showModal({
+          title: "审批通过",
+          content: "是否确认通过审批",
+          confirmText: "通过",
+          success: async (res) => {
+            if (res.confirm) {
+              let payload = {
+                id: this.currentProject.id,
+                project_full_code: this.currentProject.project_full_code,
+                flow_id: this.currentProject.flow_id,
+                node_id: this.currentProject.node_id,
+                audit_status: 3,
+                audit_comment: "",
+              };
+              await authApproval(payload);
+              uni.showToast({
+                title: "审核成功",
+              });
+              setTimeout(function () {
+                uni.hideToast();
+                uni.navigateTo({
+                  url: "./auth",
+                });
+              }, 1800);
+            }
+          },
+        });
+      } else console.log("审核拒绝");
     },
     getAudits(nodeInfo) {
       switch (nodeInfo.id) {
@@ -194,7 +256,6 @@ export default {
       }
     },
     canEdit(index) {
-      const user = uni.getStorageSync("user");
       let {
         audit_status,
         project_status,
@@ -212,7 +273,7 @@ export default {
           return (
             project_status == 0 &&
             (audit_status == 0 || audit_status == 2) &&
-            (user.ID == author || user.IsSuper)
+            (this.user.ID == author || this.user.IsSuper)
           );
         //成员管理
         case 1:
@@ -232,14 +293,16 @@ export default {
               manager = wty_manager_id;
               break;
           }
-          return audit_status == 3 && (user.ID == manager || user.IsSuper);
+          return (
+            audit_status == 3 && (this.user.ID == manager || this.user.IsSuper)
+          );
         //转执行
         case 2:
           //售前,审核通过,售前经理/管理员
           return (
             project_status == 0 &&
             audit_status == 3 &&
-            (user.ID == author || user.IsSuper)
+            (this.user.ID == author || this.user.IsSuper)
           );
         //转质保运营
         case 3:
@@ -247,7 +310,7 @@ export default {
           return (
             project_status == 1 &&
             audit_status == 3 &&
-            (user.ID == LeaderId || user.IsSuper)
+            (this.user.ID == LeaderId || this.user.IsSuper)
           );
       }
     },
@@ -328,6 +391,9 @@ export default {
   display: flex;
   flex-wrap: wrap;
 }
+.main {
+  padding-bottom: 60px;
+}
 .title {
   width: 100%;
   padding: 0 20px 20px 20px;

+ 13 - 2
services/project.js

@@ -33,5 +33,16 @@ export async function queryMember(params) {
 }
 
 export async function deleteMember(data) {
-  return request(`v2/project_code/user/${data.project_code_id}/${data.user_id}`, "DELETE");
-}
+  return request(
+    `v2/project_code/user/${data.project_code_id}/${data.user_id}`,
+    "DELETE"
+  );
+}
+
+export async function queryUserDetail(user) {
+  return request(`v2/user/detail/${user.ID}`, "GET");
+}
+
+export async function authApproval(data) {
+  return request(`v2/approval/auth`, "POST", data);
+}