Browse Source

营销-SPD-商机:商机流程优化;

001295 2 years ago
parent
commit
8bb2f460c6

+ 12 - 0
src/api/business/spd/bo/basic.js

@@ -59,6 +59,18 @@ export function delBasic(id) {
   })
 }
 
+//新增商机附件
+export function insertAccessory(data) {
+  return request({
+    url: '/mk/bo/basic/upload',
+    method: 'post',
+    data: data,
+    headers: {
+      'Content-Type': 'multipart/form-data'
+    }
+  })
+}
+
 // 删除商机附件
 export function delAccessory(boId,f,boType,fileId) {
   return request({

+ 1 - 1
src/api/business/spd/bo/boNode.js

@@ -1,7 +1,7 @@
 import request from '@/utils/request'
 
 // 查询节点
-export function getBoNodeList(boType) {
+export function getBoNodeListByType(boType) {
   return request({
     url: '/mk/bo/node/type/' + boType,
     method: 'get'

+ 4 - 3
src/views/business/spd/bo/basic/details.vue

@@ -245,7 +245,7 @@ import {
   delAccessory,
   updateWinningState,
 } from "@/api/business/spd/bo/basic";
-import { getBoNodeList } from "@/api/business/spd/bo/boNode";
+import { getBoNodeListByType } from "@/api/business/spd/bo/boNode";
 import { getPsnPost } from "@/api/business/spd/bo/authority";
 import TaskList from "../task/taskList.vue";
 import ContactList from "../contact/contactList.vue";
@@ -387,7 +387,7 @@ export default {
           this.boAuthority = response.data;
         });
         //加载流程节点数据
-        getBoNodeList(this.form.basic.boType).then(response => {
+        getBoNodeListByType(this.form.basic.boType).then(response => {
           this.boStage = response.rows;
           //赢丢单按钮显示逻辑
           var auditNode = 999;
@@ -436,8 +436,9 @@ export default {
         this.boAuthority = response.data;
       });
       //加载流程节点数据
-      getBoNodeList(this.form.basic.boType).then(response => {
+      getBoNodeListByType(this.form.basic.boType).then(response => {
         this.boStage = response.rows;
+        console.log('this.boStage',this.boStage);
         //赢丢单按钮显示逻辑
         var auditNode = 999;
         var curNode = 0;

+ 45 - 73
src/views/business/spd/bo/basic/filemanager.vue

@@ -7,8 +7,24 @@
             <el-input v-model="fileName" placeholder="待上传" readonly />
           </el-col>
           <el-col :span="1.5" v-show="!fileUrlid">
-            <el-button type="info" plain icon="el-icon-upload2" size="small" @click="uploadAccessory(field)">
-              上传
+            <el-upload
+              class="upload-demo"
+              ref="upload"
+              action="123"
+              :show-file-list="false"
+              :on-change="fileChange"
+              :file-list="fileList"
+              accept=".xlsx, .xls, .doc, .docx, .word, .wordx, .png, .jpg, .gif, .txt"
+              :auto-upload="false"
+              >
+              <el-button type="info" plain icon="el-icon-upload2" size="small">
+                上传
+              </el-button>
+            </el-upload>
+          </el-col>
+          <el-col :span="1.5" v-show="fileUrlid" >
+            <el-button type="success" plain icon="el-icon-download" size="small" @click="exportAccessory">
+              下载
             </el-button>
           </el-col>
           <el-col :span="1.5" v-show="fileUrlid" >
@@ -24,93 +40,49 @@
         </el-row>
       </el-form-item>
     </el-form>
-    <!-- 上传对话框 -->
-    <el-dialog
-      :title="upload.title"
-      :visible.sync="upload.open"
-      width="400px"
-      append-to-body
-    >
-      <el-upload
-        ref="upload"
-        :limit="1"
-        accept=".xlsx, .xls, .doc, .docx, .word, .wordx, .png, .jpg, .gif, .txt"
-        :headers="upload.headers"
-        :action="upload.url + '?boId=' + form.id + '&flag=' + upload.flag + '&boType=' + form.boType"
-        :disabled="upload.isUploading"
-        :on-progress="handleFileUploadProgress"
-        :on-success="handleFileSuccess"
-        :auto-upload="false"
-        drag
-      >
-        <i class="el-icon-upload"></i>
-        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-      </el-upload>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitFileForm">确 定</el-button>
-        <el-button @click="upload.open = false">取 消</el-button>
-      </div>
-    </el-dialog>
   </div>
 </template>
 
 <script>
-import {delAccessory} from "@/api/business/spd/bo/basic";
+import {insertAccessory,delAccessory} from "@/api/business/spd/bo/basic";
 import axios from "axios";
-import { getToken } from "@/utils/auth";
 
 export default {
   name: "filemanager",
   props: ["form","name","fileName","fileUrlid","field"],
   data() {
     return {
-      // 上传参数
-      upload: {
-        // 是否显示弹出层
-        open: false,
-        // 弹出层标题
-        title: "",
-        // 是否禁用上传
-        isUploading: false,
-        // 上传类型
-        flag: "",
-        // 设置上传的请求头部
-        headers: { Authorization: "Bearer " + getToken() },
-        // 上传的地址
-        url: process.env.VUE_APP_BASE_API + "/mk/bo/basic/upload",
-      },
+      //文件
+      fileList: [],
     };
   },
   created() {
   },
   methods: {
-    //上传附件公共方法
-    uploadAccessory(f) {
-      // this.upload.title = "上传附件";
-      this.upload.open = true;
-      this.upload.flag = f;
-    },
-    // 提交上传文件
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },
-    // 文件上传中处理
-    handleFileUploadProgress(event, file, fileList) {
-      this.upload.isUploading = true;
-    },
-    // 文件上传成功处理
-    handleFileSuccess(response, file, fileList) {
-      this.upload.open = false;
-      this.upload.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.$alert(
-        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
-          response.msg +
-          "</div>",
-        "上传结果",
-        { dangerouslyUseHTMLString: true }
-      );
-      this.$emit('reload');
+    fileChange (file, fileList) {
+      if (fileList.length > 0) {
+        this.fileList = [fileList[fileList.length - 1]]
+        console.log('this.fileList',this.fileList);
+        let formData = new FormData();
+        if(this.fileList.length < 1){
+          formData.append('file', null);
+        }else{
+          this.fileList.forEach(el => {
+            formData.append('file', el.raw);
+          })
+        }
+        formData.append("boId",this.form.id);
+        formData.append("flag",this.field);
+        formData.append("boType",this.form.boType);
+        insertAccessory(formData).then(response => {
+          console.log('response',response);
+          if(response.code == 200){
+            this.$emit('reload');
+          }else{
+
+          }
+        });
+      }
     },
     //下载附件
     exportAccessory() {

+ 18 - 5
src/views/business/spd/bo/basic/index.vue

@@ -21,6 +21,7 @@
         <el-select
           v-model="queryParams.boType"
           placeholder="请输入商机类型"
+          @change="boTypeChange"
           clearable
         >
           <el-option
@@ -66,10 +67,10 @@
           clearable
         >
           <el-option
-            v-for="dict in dict.type.mk_bo_stage"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
+            v-for="item in mk_bo_stage"
+            :key="item.code"
+            :label="item.name"
+            :value="item.code"
           ></el-option>
         </el-select>
       </el-form-item>
@@ -489,13 +490,13 @@ import SaleaeaRef from "@/views/business/spd/bo/refer/saleaea/index.vue";
 import OrgRef from "@/views/business/spd/bo/refer/org/index.vue";
 import DeptRef from "@/views/business/spd/bo/refer/dept/index.vue";
 import StaffRef from "@/views/business/spd/bo/refer/staff/index.vue";
+import { getBoJobListByType } from "@/api/business/spd/bo/boNode";
 
 export default {
   name: "Basic",
   dicts: [
     "mk_bo_type",
     "mk_bo_state",
-    "mk_bo_stage",
     "mk_bo_source",
     "mk_bo_total_revenue",
     "mk_bo_winstate",
@@ -590,6 +591,8 @@ export default {
           { required: true, message: "商机内容不能为空", trigger: "blur" },
         ],
       },
+      //阶段列表
+      mk_bo_stage:[],
     };
   },
   created() {
@@ -797,6 +800,16 @@ export default {
           break;
       }
     },
+    //查询参数商机类型改变后
+    boTypeChange(boType){
+      if(boType){
+        getBoJobListByType(boType).then(response => {
+          this.mk_bo_stage = response.rows;
+        });
+      }else{
+        this.mk_bo_stage = [];
+      }
+    },
     // 触发客户参照列表
     refereCustomer() {
       this.$refs.customerSelect.init();

+ 26 - 21
src/views/business/spd/bo/basic/process.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-steps :active="activeConversion(form.boStage)" finish-status="success" process-status="process-status">
+    <el-steps :active="activeConversion(form.boStage)" finish-status="success" process-status="process-status" >
       <el-step v-for="item in boStage" :title="item.name" @click.native="viewingProcedure(item)"/>
     </el-steps>
     <!-- 提交、下一步按钮 -->
@@ -13,6 +13,7 @@
         <el-button
         style="margin-top: 12px"
         @click="next"
+        v-show="!isUpdate"
         v-if="(showNext && form.winningState == 0) && this.boAuthority.boAuthority.boNext"
         >变更为下一阶段</el-button>
     </div>
@@ -58,25 +59,25 @@
               </el-col>
             </el-row>
           </el-form-item>
+          <Filemanager
+            @reload="reload"
+            :form="form"
+            :name="'商机审议会'"
+            :fileName="form.boFlow.businessCouncilAccessoryName"
+            :fileUrlid="form.boFlow.businessCouncilAccessoryUrlId"
+            :field="'business_council_accessory'"
+            v-if="form.boFlow.projectApproval == 1"
+          />
+          <Filemanager
+            @reload="reload"
+            :form="form"
+            :name="'立项书'"
+            :fileName="form.boFlow.projectProposalAccessoryName"
+            :fileUrlid="form.boFlow.projectProposalAccessoryUrlId"
+            :field="'project_proposal_accessory'"
+            v-if="form.boFlow.projectApproval == 1"
+          />
         </el-form>
-        <Filemanager
-          @reload="reload"
-          :form="form"
-          :name="'商机审议会'"
-          :fileName="form.boFlow.businessCouncilAccessoryName"
-          :fileUrlid="form.boFlow.businessCouncilAccessoryUrlId"
-          :field="'business_council_accessory'"
-          v-if="form.boFlow.projectApproval == 1"
-        />
-        <Filemanager
-          @reload="reload"
-          :form="form"
-          :name="'立项书'"
-          :fileName="form.boFlow.projectProposalAccessoryName"
-          :fileUrlid="form.boFlow.projectProposalAccessoryUrlId"
-          :field="'project_proposal_accessory'"
-          v-if="form.boFlow.projectApproval == 1"
-        />
       </el-tab-pane>
       <!-- 售前提案/邀请考察 -->
       <el-tab-pane label="售前提案" name="t00301" style="height: 200px; overflow-y: scroll" v-if="tabsName.t00301">
@@ -325,7 +326,7 @@
             @reload="reload"
             :form="form"
             :name="'商机审议会'"
-            :fileName="form.consumablesBoFlow.contractDocumentAccessoryName"
+            :fileName="form.consumablesBoFlow.businessCouncilAccessoryName"
             :fileUrlid="form.consumablesBoFlow.businessCouncilAccessoryUrlId"
             :field="'business_council_accessory'"
             v-if="form.consumablesBoFlow.projectApproval == 1"
@@ -1177,7 +1178,7 @@
     <!-- 编辑按钮组 -->
     <dev>
       <el-row type="flex" class="row-bg" justify="end">
-        <el-col :span="2" v-show="!isUpdate" v-if="this.boAuthority.boAuthority.boEdit">
+        <el-col :span="2" v-show="!isUpdate && showStage.code == form.boStage && winningState == 0" v-if="this.boAuthority.boAuthority.boEdit">
           <div class="grid-content bg-purple">
             <el-button
               @click="modifyButton"
@@ -1309,6 +1310,7 @@ export default {
       this.showNext = true;
       this.showSubmit = false;
     }
+    this.showStage = {code:this.form.boStage}
     //控制初始化时展示哪些页签
     this.showTabs(this.form.boStage);
   },
@@ -1320,6 +1322,9 @@ export default {
     },
     //查看阶段时触发
     viewingProcedure(stage) {
+      this.showStage = stage;
+      console.log(this.showStage,this.form.boStage);
+      if(this.isUpdate) return;
       let arr = this.boStage.filter(item=>item.code == this.form.boStage);
       this.showStage = stage;
       if(stage.orderNum > arr[0].orderNum){

+ 1 - 1
src/views/business/spd/bo/behavior/behaviorList.vue

@@ -35,7 +35,7 @@
     </el-row>
 
     <el-table v-loading="loading" :data="behaviorList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号" width="55" align="center"/>
       <el-table-column label="负责人" align="center" prop="staffName" />
       <el-table-column label="行动日期" align="center" prop="time" />
       <el-form-item label="行动日期" prop="time">

+ 3 - 61
src/views/business/spd/bo/contact/contactList.vue

@@ -11,38 +11,8 @@
           v-if="this.boAuthority.boAuthority.contactAdd"
         >新增</el-button>
       </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-        >删除</el-button>
-      </el-col> -->
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-        >导出</el-button>
-      </el-col> -->
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
-
     <el-table v-loading="loading" :data="contactList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="编号" align="center" prop="code" />
@@ -72,37 +42,6 @@
           <dict-tag :options="dict.type.mk_bo_contact_state" :value="scope.row.state"/>
         </template>
       </el-table-column>
-      <!-- <el-table-column label="商机id" align="center" prop="boId" /> -->
-      <!-- <el-table-column label="创建日期" align="center" prop="createDate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createDate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="部门编码" align="center" prop="departmentCode" />
-      <el-table-column label="销售区域" align="center" prop="area" />
-      <el-table-column label="销售组织" align="center" prop="organization" />
-      <el-table-column label="最佳拜访地点" align="center" prop="visitPlace" />
-      <el-table-column label="最佳拜访时间" align="center" prop="visitTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.visitTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="邮件" align="center" prop="mail" />
-      <el-table-column label="关键决策人" align="center" prop="decisionMaker" />
-      <el-table-column label="擅长领域" align="center" prop="fieldExpertise" />
-      <el-table-column label="支持度" align="center" prop="support" />
-      <el-table-column label="职称" align="center" prop="jobTitle" />
-      <el-table-column label="任职科室" align="center" prop="section" />
-      <el-table-column label="上级联系人" align="center" prop="superiorContact" />
-      <el-table-column label="籍贯" align="center" prop="birthplace" />
-      <el-table-column label="生日" align="center" prop="birthday" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="联系人分类" align="center" prop="contactClassification" />
-
-      <el-table-column label="所属客户编码" align="center" prop="customerCode" /> -->
       <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width" v-if="this.source == 'BoDetails' ? this.bo.winningState == 0 ? true : false : true">
         <template slot-scope="scope">
           <el-button
@@ -514,6 +453,7 @@ export default {
     if(this.source == 'Contact'){
       this.queryParams = this.bo;
     }
+    console.log('this.boAuthority',this.boAuthority);
     this.getList();
   },
   methods: {
@@ -527,6 +467,8 @@ export default {
           for (var i = 0; i < this.contactList.length; i++) {
             this.contactList[i].telephone = this.contactList[i].telephone.substring(0,3) + '******' + this.contactList[i].telephone.substring(this.contactList[i].telephone.length - 4,this.contactList[i].telephone.length);
             this.contactList[i].customerName = this.contactList[i].customerName.substring(0,2) + '******' + this.contactList[i].customerName.substring(this.contactList[i].customerName.length - 2,this.contactList[i].customerName.length);
+            const start = new Array(this.contactList[i].name.length).join('*');
+            this.contactList[i].name = start + this.contactList[i].name.slice(-1);
           }
         }
         this.total = response.total;

+ 1 - 6
src/views/business/spd/bo/filetemplate/botabs.vue

@@ -1,12 +1,7 @@
 <template>
   <div class="app-container">
     <el-table v-loading="loading" :data="filetemplateList" @selection-change="handleSelectionChange">
-      <el-table-column
-            type="index"
-            label="序号"
-            width="55"
-            align="center"
-          />
+      <el-table-column type="index" label="序号" width="55" align="center"/>
       <el-table-column label="模板名称" align="center" prop="name" />
       <el-table-column label="上传者" align="center" prop="createByName" />
       <el-table-column label="上传时间" align="center" prop="createTime" />

+ 21 - 15
src/views/business/spd/bo/pojpsn/pojpsnList.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-row :gutter="10" class="mb8">
+    <el-row :gutter="10" class="mb8" v-if="this.source == 'BoDetails' ? this.bo.winningState == 0 ? true : false : true">
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -34,10 +34,10 @@
           >删除</el-button
         >
       </el-col> -->
-      <right-toolbar
+      <!-- <right-toolbar
         :showSearch.sync="showSearch"
         @queryTable="getList"
-      ></right-toolbar>
+      ></right-toolbar> -->
     </el-row>
 
     <el-table
@@ -45,8 +45,7 @@
       :data="pojpsnList"
       @selection-change="handleSelectionChange"
     >
-      <el-table-column type="selection" width="55" align="center" />
-      <!-- <el-table-column label="主键" align="center" prop="id" /> -->
+      <el-table-column type="index" label="序号" width="55" align="center"/>
       <el-table-column
         label="商机名称"
         align="center"
@@ -66,10 +65,10 @@
         <template slot-scope="scope">
           <el-select v-model="scope.row.jobs" multiple disabled size="medium">
             <el-option
-              v-for="dict in dict.type.mk_bo_pojpsn_job"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
+              v-for="item in mk_bo_pojpsn_job"
+              :key="item.code"
+              :label="item.name"
+              :value="item.code"
             >
             </el-option>
           </el-select>
@@ -80,6 +79,7 @@
         fixed="right"
         align="center"
         class-name="small-padding fixed-width"
+        v-if="this.source == 'BoDetails' ? this.bo.winningState == 0 ? true : false : true"
       >
         <template slot-scope="scope">
           <el-button
@@ -142,10 +142,10 @@
         <el-form-item label="职责" prop="jobs">
           <el-select v-model="form.jobs" multiple placeholder="请选择职责">
             <el-option
-              v-for="dict in dict.type.mk_bo_pojpsn_job"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
+              v-for="item in mk_bo_pojpsn_job"
+              :key="item.code"
+              :label="item.name"
+              :value="item.code"
             >
             </el-option>
           </el-select>
@@ -174,11 +174,12 @@ import {
   updatePojpsn,
 } from "@/api/business/spd/bo/pojpsn";
 import StaffRef from "@/views/business/spd/bo/refer/staff/index.vue";
+import { getBoJobListByType } from "@/api/business/spd/bo/boJob";
 
 export default {
   name: "pojpsnList",
   props: ["source", "bo","boAuthority"],
-  dicts: ["mk_bo_pojpsn_post", "mk_bo_pojpsn_job"],
+  dicts: ["mk_bo_pojpsn_post",],
   components: { StaffRef },
   data() {
     return {
@@ -228,6 +229,8 @@ export default {
         pojpsnEdit:true,
         pojpsnView:true,
       },
+      //职责列表
+      mk_bo_pojpsn_job:[],
     };
   },
   created() {
@@ -238,7 +241,10 @@ export default {
       this.queryParams.bo = this.bo.id;
       this.pojpsnAuthority = this.boAuthority.boAuthority;
     }
-    this.getList();
+    getBoJobListByType(this.bo.boType).then((response) => {
+      this.mk_bo_pojpsn_job = response.rows;
+      this.getList();
+    });
   },
   methods: {
     /** 查询项目成员列表 */