Quellcode durchsuchen

营销商机功能优化;商机阶段分析增加路由调整页面时缓存;

001295 vor 1 Jahr
Ursprung
Commit
97e7f631e8

+ 6 - 1
src/App.vue

@@ -1,6 +1,11 @@
 <template>
   <div id="app">
-    <router-view />
+    <!-- 缓存的页面,缓存$route.meta.keepAlive为true的组件 -->
+    <keep-alive>
+      <router-view v-if="$route.meta.keepAlive"></router-view>
+    </keep-alive>
+    <!-- 不缓存的页面,不缓存$route.meta.keepAlive为false的组件 -->
+    <router-view v-if="!$route.meta.keepAlive"></router-view>
     <theme-picker />
   </div>
 </template>

+ 8 - 3
src/router/index.js

@@ -150,8 +150,6 @@ export const constantRoutes = [
       }
     ]
   },
-
-
   // 物料申请单
   {
     path: '/material/requisition',
@@ -187,7 +185,14 @@ export const constantRoutes = [
     component: () => import('@/views/WMS/historical-route'),
     hidden: false
   },
-
+  {
+    path: '/business/spd/bo/statement',
+    component: () => import('@/views/business/spd/bo/statement'),
+    hidden: false,
+    meta: {
+      keepAlive: true // 需要缓存
+    }
+  },
 ]
 
 // 动态路由,基于用户权限动态去加载

+ 583 - 0
src/views/business/spd/bo/basic/behaviorList.vue

@@ -0,0 +1,583 @@
+<template>
+  <div class="app-container">
+    <div class="btn_grooup" v-if="bo.winningState == 0 && '0-1'.includes(boAuthority.post)">
+      <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+    </div>
+    <el-table size="mini" v-loading="loading" :data="behaviorList">
+      <el-table-column label="负责人" align="center" prop="staffName" />
+      <el-table-column label="行动日期" align="center" prop="time" />
+      <el-form-item label="行动日期" prop="time">
+        <el-date-picker clearable
+          v-model="form.time"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择行动日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-table-column label="联系人" align="center" prop="linkmanName" />
+      <el-table-column label="拜访效果" align="center" prop="result" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_behavior_res" :value="scope.row.result"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="是否上级协助" align="center" prop="assist" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.assist"/>
+        </template>
+      </el-table-column>
+      <el-table-column show-overflow-tooltip label="协助内容" align="center" prop="assistContent" />
+      <el-table-column show-overflow-tooltip label="洽谈内容" align="center" prop="content" />
+      <el-table-column label="行动类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_behavior_type" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="拜访目的" align="center" prop="purpose">
+        <template slot-scope="scope">
+            <dict-tag :options="dict.type.mk_bo_behavior_goal" :value="scope.row.purpose"/>
+        </template>
+      </el-table-column>
+      <el-table-column show-overflow-tooltip label="销售组织" align="center" prop="salesOrgName"/>
+      <el-table-column show-overflow-tooltip label="部门" align="center" prop="deptName"/>
+      <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="handleBrowse(scope.row)"
+          >查看</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改行动对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
+      <el-form size="mini" ref="form" :model="form" :rules="rules" label-width="80px" :disabled="this.operatingState == 'Browse'">
+        <el-divider content-position="left">
+          <dev style="width: 50px; height: 40px; font-size: 18px">基本信息</dev>
+        </el-divider>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="行动类型" prop="type">
+              <el-input :value="dict.label" v-for="dict in dict.type.mk_bo_behavior_type" v-if="dict.value == form.type" readonly/>
+              <!-- <el-select v-model="form.type" placeholder="请输入行动类型">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_behavior_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select> -->
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="行动日期" prop="time">
+              <el-date-picker clearable
+                v-model="form.time"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="客户" prop="customerName">
+              <el-input v-model="form.customerName" readonly/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="联系人" prop="linkmanName">
+              <dr-popover-select v-model="form.linkmanName" title="联系人" type="LINKMAN_PARAM" :dataMapping="{
+                  linkman: 'id',
+                  linkmanName: 'name',
+                }" :source.sync="form"
+                :queryParams="additionalCondition"
+              >
+              </dr-popover-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="拜访目的" prop="purpose">
+              <el-select v-model="form.purpose" placeholder="">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_behavior_goal"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col  :span="8">
+            <el-form-item label="拜访效果" prop="result">
+              <el-select v-model="form.result" placeholder="">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_behavior_res"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col  :span="8">
+            <el-form-item label="是否上级协助" prop="assist">
+              <el-select v-model="form.assist" placeholder="">
+                <el-option
+                  v-for="dict in dict.type.sys_yes_no"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col  :span="8">
+            <el-form-item label="协助内容" prop="assistContent" v-show="form.assist == 'Y'" :rules="form.assist == 'Y' ? rules.assistContent : [{require: false}]">
+              <el-input v-model="form.assistContent" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="销售区域" prop="marketingAreaName">
+              <dr-popover-select v-model="form.marketingAreaName" title="销售区域" type="MK_SALESAREA_PARAM" :dataMapping="{
+                  marketingArea: 'id',
+                  marketingAreaName: 'name',
+                }" :source.sync="form"
+              >
+              </dr-popover-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col  :span="8">
+            <el-form-item label="销售组织" prop="salesOrgName">
+              <el-input v-model="form.salesOrgName" readonly/>
+            </el-form-item>
+          </el-col>
+          <el-col  :span="8">
+             <el-form-item label="部门" prop="deptName">
+              <el-input v-model="form.deptName" readonly/>
+            </el-form-item>
+          </el-col>
+          <el-col  :span="8">
+            <el-form-item label="负责人" prop="staffName">
+              <el-input v-model="form.staffName" readonly/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-divider content-position="left">
+          <dev style="width: 50px; height: 40px; font-size: 18px">跟进内容</dev>
+        </el-divider>
+        <el-form-item label="内容" prop="content" >
+          <el-input
+            type="textarea"
+            :rows="2"
+            maxlength=900
+            placeholder="填写提示:今天拜访了谁,收集了什么述求,达成了什么结果,下一步计划。"
+            autosize
+            v-model="form.content">
+          </el-input>
+        </el-form-item>
+        <el-divider content-position="left">
+          <dev style="width: 50px; height: 40px; font-size: 18px">照片信息</dev>
+        </el-divider>
+
+        <el-upload
+          action="actionUrl"
+          list-type="picture-card"
+          :on-change="uploadPic"
+          :on-preview="handlePictureCardPreview"
+          :on-remove="handleRemove"
+          :auto-upload="false"
+          :file-list="fileList"
+          >
+          <i class="el-icon-plus"></i>
+        </el-upload>
+        <el-dialog :visible.sync="dialogVisible">
+          <img width="100%" :src="dialogImageUrl" alt="">
+        </el-dialog>
+
+        <div class="md-auditInfo">
+          <el-divider content-position="left">
+            <dev style="width: 50px; height: 40px; font-size: 18px">其它信息</dev>
+          </el-divider>
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="创建人">
+                <el-input v-model="form.createByName" readonly></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="创建时间">
+                <el-input v-model="form.createTime" readonly></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="修改人">
+                <el-input v-model="form.updateByName" readonly></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="修改时间">
+                <el-input v-model="form.updateTime" readonly></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </div>
+      </el-form>
+      <div slot="footer">
+        <el-button size="mini" type="primary" @click="submitForm" v-if="this.operatingState != 'Browse'" :disabled="submitButtonEditStatus">确 定</el-button>
+        <el-button size="mini" @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listBehavior, getBehavior, addBehavior, updateBehavior } from "@/api/business/spd/bo/behavior";
+import ContactRef from '@/views/business/spd/bo/refer/contact/index.vue';
+import SaleaeaRef from '@/views/business/spd/bo/refer/saleaea/index.vue';
+
+export default {
+  name: "BehaviorList",
+  props:["source","bo","boAuthority","task"],
+  dicts: ['mk_bo_behavior_res','mk_bo_behavior_type','sys_yes_no','mk_bo_behavior_goal'],
+  components: {ContactRef,SaleaeaRef},
+  data() {
+    return {
+      dialogImageUrl: '',
+      dialogVisible: false,
+      disabled: false,
+      actionUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址,
+      fileList: [],
+      // 遮罩层
+      loading: true,
+      // 总条数
+      total: 0,
+      // 行动表格数据
+      behaviorList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        bo: null,
+        boStage: null,
+        boName: null,
+        task: null,
+        taskCode: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        type: [
+          { required: true, message: "行动类型不能为空", trigger: "blur" }
+        ],
+        time: [
+          { required: true, message: "行动日期不能为空", trigger: "blur" }
+        ],
+        customerName: [
+          { required: true, message: "客户不能为空", trigger: "blur" }
+        ],
+        linkmanName: [
+          { required: true, message: "联系人不能为空", trigger: "blur" }
+        ],
+        purpose: [
+          { required: true, message: "拜访目的不能为空", trigger: "blur" }
+        ],
+        assist: [
+          { required: true, message: "是否需要上级协助不能为空", trigger: "blur" }
+        ],
+        assistContent: [
+          { required: true, message: "协助内容不能为空", trigger: "blur" }
+        ],
+        staffName: [
+          { required: true, message: "负责人不能为空", trigger: "blur" }
+        ],
+        content: [
+          { required: true, message: "洽谈内容不能为空", trigger: "blur" }
+        ],
+        result: [
+          { required: true, message: "拜访效果不能为空", trigger: "blur" }
+        ],
+      },
+      //当前操作状态
+      operatingState: '',
+      //确定按钮是否可点
+      submitButtonEditStatus:false,
+    };
+  },
+  created() {
+    //组件创建时初始化查询参数
+    if(this.source == "TASK"){
+      this.queryParams.task = this.task.id;
+    }
+    if(this.source == "BO"){
+      this.queryParams.bo = this.bo.id;
+      this.queryParams.boStage = this.bo.boStage;
+      let params = {"post":this.boAuthority.post};
+      this.queryParams.params = params;
+    }
+    //查询
+    this.getList();
+  },
+  methods: {
+    uploadPic(file, fileList) {
+      this.fileList = fileList
+    },
+    handleRemove(file) {
+      this.fileList = this.fileList.filter(item => item.uid !== file.uid)
+    },
+    handlePictureCardPreview(file) {
+      this.dialogImageUrl = file.url;
+      this.dialogVisible = true;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        console.log(this.form.photos.split(','));
+      });
+    },
+    /** 查询行动列表 */
+    getList() {
+      this.loading = true;
+      listBehavior(this.queryParams).then(response => {
+        this.behaviorList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        bo: null,
+        boName: null,
+        task: null,
+        taskCode: null,
+        type: null,
+        time: null,
+        customer: null,
+        customerName: null,
+        linkman: null,
+        linkmanName: null,
+        purpose: null,
+        result: null,
+        assist: null,
+        assistContent: null,
+        marketingArea: null,
+        marketingAreaName: null,
+        salesOrg: null,
+        salesOrgName: null,
+        dept: null,
+        deptName: null,
+        staff: null,
+        staffName: null,
+        content: null,
+        tenantId: null,
+        revision: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.fileList = [];
+      this.reset();
+      this.operatingState = "Insert";
+      //新增行动设置默认值
+      if(this.source == "TASK"){
+        this.form.bo = this.task.id;
+        this.form.boName = this.task.boName;
+        this.form.boStage = this.task.boStage;
+        this.form.customer = this.task.customer;
+        this.form.customerName = this.task.customerName;
+      }
+      if(this.source == "BO"){
+        this.form.bo = this.bo.id;
+        this.form.boName = this.bo.boName;
+        this.form.boStage = this.bo.boStage;
+        this.form.customer = this.bo.customer;
+        this.form.customerName = this.bo.customerName;
+      }
+      this.form.type = '0';
+      this.form.staff = this.$store.state.user.id;
+      this.form.staffName = this.$store.state.user.nickName;
+      this.form.dept = this.$store.state.user.deptId;
+      this.form.deptName = this.$store.state.user.deptName;
+      this.form.salesOrg = this.$store.state.user.orgId;
+      this.form.salesOrgName = this.$store.state.user.orgName;
+      this.form.time = new Date();
+      this.open = true;
+      this.title = "添加行动";
+    },
+    /** 查看按钮操作 */
+    handleBrowse(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getBehavior(id).then(response => {
+        this.form = response.data;
+        this.fileList = this.form.behaviorPs;
+        this.open = true;
+        this.operatingState = "Browse";
+        this.title = "基础信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.submitButtonEditStatus = true;
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let formData = new FormData();
+          formData.append("behavior", new Blob([JSON.stringify(this.form)], {type: "application/json"}));
+          if(this.fileList.length < 1){
+            formData.append('files', null);
+          }else{
+            this.fileList.forEach(el => {
+              formData.append('files', el.raw);
+            })
+          }
+          if (this.form.id != null) {
+            updateBehavior(formData).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+              this.submitButtonEditStatus = false;
+            });
+          } else {
+            addBehavior(formData).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+              this.submitButtonEditStatus = false;
+            });
+          }
+        }else{
+          this.submitButtonEditStatus = false;
+        }
+      });
+    },
+    additionalCondition(){
+      return {
+        parame:{
+          customer: this.form.customer ? this.form.customer : 'xxx'
+        }
+      }
+    },
+  }
+};
+</script>
+
+
+
+<style scoped>
+.md-content >>> .el-form-item {
+  margin-bottom: 10px;
+}
+
+.md-content >>> .el-tabs--border-card > .el-tabs__content {
+  padding-bottom: 8px;
+}
+
+.md-content .md-auditInfo >>> .el-form-item {
+  margin-bottom: 0px;
+}
+
+.md-main >>> .el-form-item,
+.md-vice >>> .el-form-item {
+  width: 100%;
+  box-sizing: border-box;
+}
+
+.md-main >>> .el-form-item__label,
+.md-vice >>> .el-form-item__label {
+  width: 40%;
+}
+
+.md-main >>> .el-form-item__content,
+.md-md-vice >>> .el-form-item__content {
+  width: 60%;
+}
+
+.md-content >>> .el-form-item__label {
+  font-weight: normal;
+  /* text-align: left;
+  width: 28%; */
+  white-space: nowrap;
+  /* IE6 需要定义宽度 */
+  overflow: hidden;
+
+  -o-text-overflow: ellipsis;
+  /* Opera */
+  text-overflow: ellipsis;
+  /* IE, Safari (WebKit) */
+  /* -moz-binding: url('ellipsis.xml#ellipsis'); */
+  /* Firefox */
+}
+
+.md-main >>> .material-table {
+  height: 100%;
+}
+
+.md-vice >>> .material-table {
+  height: 140px;
+  overflow-y: auto;
+  overflow-x: auto;
+}
+
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 17 - 11
src/views/business/spd/bo/basic/details.vue

@@ -4,12 +4,12 @@
     <!-- 头部信息 -->
     <div slot="header" class="clearfix">
       <span style="width: 200px; height: 60px; font-size: 18px"  v-show="!showCustomer">
-        商机详情-{{ form.basic.boName.split('-')[0] + '-' + form.basic.boName.split('-')[1].substring(0, 2) + '******' +
+        商机详情&nbsp;{{ form.basic.boCode }}&nbsp;{{ form.basic.boName.split('-')[0] + '-' + form.basic.boName.split('-')[1].substring(0, 2) + '******' +
                   form.basic.boName.split('-')[1].substring(form.basic.boName.split('-')[1].length -
                     2, form.basic.boName.split('-')[1].length) + '-' + form.basic.boName.split('-')[2] }}
       </span>
       <span style="width: 200px; height: 60px; font-size: 18px" v-show="showCustomer">
-        商机详情-{{ form.basic.boName }}
+        商机详情&nbsp;{{ form.basic.boCode }}&nbsp;{{ form.basic.boName }}
       </span>
       <el-button size="mini" type="text" icon="el-icon-view" @click="customerButton" />
       <div style="float: right; padding: 3px 0; display:flex;justify-content:space-between" type="text">
@@ -83,9 +83,9 @@
         <Process :key="timer" :form="form.basic" :boAuthority="boAuthority" :boStage="boStage" :dict="dict"
           @reload="reload" />
       </el-tab-pane>
-      <!-- 商机任务页签 -->
-      <el-tab-pane label="商机任务" name="second">
-        <TaskList :source="'BoDetails'" :bo="this.form.basic" :boAuthority="this.boAuthority"
+      <!-- 跟进记录 -->
+      <el-tab-pane label="跟进记录" name="second">
+        <BehaviorList :bo="this.form.basic" :boAuthority="boAuthority"
           v-if="masterTabs == 'second'" />
       </el-tab-pane>
       <!-- 联系人页签 -->
@@ -93,14 +93,19 @@
         <ContactList :source="'BoDetails'" :bo="this.form.basic" :boAuthority="this.boAuthority"
           v-if="masterTabs == 'third'" />
       </el-tab-pane>
+      <!-- 商机任务页签 -->
+      <el-tab-pane label="商机任务" name="fourth">
+        <TaskList :source="'BoDetails'" :bo="this.form.basic" :boAuthority="this.boAuthority"
+          v-if="masterTabs == 'fourth'" />
+      </el-tab-pane>
       <!-- 附件页签 -->
-      <el-tab-pane label="附件信息" name="fourth">
+      <el-tab-pane label="附件信息" name="five">
         <AccessoryList :source="'BoDetails'" :bo="this.form.basic" :boAuthority="this.boAuthority"
-          v-if="masterTabs == 'fourth'" />
+          v-if="masterTabs == 'five'" />
       </el-tab-pane>
       <!-- 模板文件页签 -->
-      <el-tab-pane label="模板文件下载" name="five">
-        <FileTemplate :botype="form.basic.boType" v-if="masterTabs == 'five'" />
+      <el-tab-pane label="模板文件下载" name="six">
+        <FileTemplate :botype="form.basic.boType" v-if="masterTabs == 'six'" />
       </el-tab-pane>
     </el-tabs>
     <!-- 其它信息 -->
@@ -211,17 +216,18 @@ import {
 import { getBoNodeListByType } from "@/api/business/spd/bo/boNode";
 import { getPsnPost } from "@/api/business/spd/bo/authority";
 import TaskList from "./taskList.vue";
-import ContactList from "./contactList.vue";
+import ContactList from "./bocontactList.vue";
 import AccessoryList from "../basic/accessoryList.vue";
 import FileTemplate from "../filetemplate/botabs.vue";
 import Process from '../basic/process.vue';
+import BehaviorList from "./bobehaviorList.vue";
 
 
 export default {
   //名称
   name: "BoDetails",
   //注册引入的组件
-  components: { TaskList, ContactList, AccessoryList, FileTemplate, Process,},
+  components: {Process,BehaviorList,ContactList,TaskList,AccessoryList,FileTemplate},
   //平台枚举
   dicts: [
     "mk_bo_type",

+ 0 - 152
src/views/business/spd/bo/basic/filemanager copy.vue

@@ -1,152 +0,0 @@
-<template>
-  <div>
-    <el-form :model="form">
-      <el-form-item :label="name">
-        <el-row>
-          <el-col :span="1.5">
-            <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-button>
-          </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">
-            <el-button size="small" type="danger" plain icon="el-icon-delete" @click="deleteAccessory(field)">
-              删除
-            </el-button>
-          </el-col>
-        </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">
-        <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 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",
-      },
-    };
-  },
-  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');
-    },
-    //下载附件
-    exportAccessory() {
-      let resUrl = "https://sy.derom.com/document-center/fastdfs/download?id=" + this.fileUrlid;
-      axios
-        .create({
-          timeout: 3000,
-          responseType: "blob", // 响应类型, 将响应数据转换为二进制数据
-          headers: {},
-        })
-        .get(resUrl)
-        .then((res) => {
-          console.log(res);
-          // 地址转换
-          let url = window.URL.createObjectURL(res.data);
-          const a = document.createElement("a");
-          a.setAttribute("href", url);
-          a.setAttribute("download", this.fileName);
-          document.body.append(a);
-          a.click();
-          document.body.removeChild(a);
-        });
-    },
-    //删除附件
-    deleteAccessory(f) {
-      this.$modal
-        .confirm("是否确认删除?")
-        .then(function () {})
-        .then(() => {
-          delAccessory(this.form.id, f, this.form.boType,this.fileUrlid).then((res) => {
-            console.log('删除返回',res);
-            this.$emit('reload');
-          });
-        })
-        .catch(() => {});
-    },
-  },
-};
-</script>

+ 0 - 10
src/views/business/spd/bo/basic/index.vue

@@ -59,16 +59,6 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <!-- <el-form-item label="商机状态" prop="boState" clearable>
-        <el-select size="mini" v-model="queryParams.boState" clearable>
-          <el-option
-            v-for="dict in dict.type.mk_bo_state"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          ></el-option>
-        </el-select>
-      </el-form-item> -->
       <el-form-item size="mini" label="商机来源" prop="boSource">
         <el-select v-model="queryParams.boSource" placeholder="" clearable>
           <el-option

+ 3 - 22
src/views/business/spd/bo/basic/process.vue

@@ -1409,20 +1409,7 @@
 
       <!-- 公用页签 -->
       <el-tab-pane label="项目成员" name="tB" style="height: 200px; overflow-y: scroll" v-if="tabsName.B">
-        <PojpsnList
-          :source="'BoDetails'"
-          :bo="form"
-          :boAuthority="boAuthority"
-          v-if="activeName == 'tB'"
-        />
-      </el-tab-pane>
-      <el-tab-pane label="跟进记录" name="tA" style="height: 200px; overflow-y: scroll" v-if="tabsName.A">
-        <BehaviorList
-          :source="'BO'"
-          :bo="form"
-          :boAuthority="boAuthority"
-          v-if="activeName == 'tA'"
-        />
+        <PojpsnList :bo="form" :boAuthority="boAuthority" v-if="activeName == 'tB'" />
       </el-tab-pane>
     </el-tabs>
     <!-- 编辑按钮组 -->
@@ -1459,14 +1446,13 @@
 
 <script>
 import {submit, changeNextStage, updateBasicFlow} from "@/api/business/spd/bo/basic";
-import BehaviorList from "./behaviorList.vue";
-import PojpsnList from "./pojpsnList.vue";
+import PojpsnList from "./bopojpsnList.vue";
 import Filemanager from './filemanager.vue';
 
 export default {
   name: "process",
   props: ["form","boAuthority","boStage","dict"],
-  components: {BehaviorList,PojpsnList,Filemanager},
+  components: {PojpsnList,Filemanager},
   data() {
     return {
       //选择的选项卡
@@ -1636,11 +1622,6 @@ export default {
     tabsSwitch(e) {
       console.log("当前查看的页签是",e.name);
       switch(e.name) {
-        case 'tA':
-          this.behaviorParame = JSON.parse(JSON.stringify(this.form));
-          this.behaviorParame.boStage = this.showStage.code;
-          //跟进记录
-          break;
         case 'tB':
           //项目成员
           break;

+ 639 - 0
src/views/business/spd/bo/basic/taskList.vue

@@ -0,0 +1,639 @@
+<template>
+  <div class="app-container">
+    <div class="btn_grooup" v-if="bo.winningState == 0 && '0-1'.includes(boAuthority.post)">
+      <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          >新增</el-button>
+    </div>
+    <el-table size="mini" v-loading="loading" :data="taskList" @selection-change="handleSelectionChange">
+      <el-table-column label="序号" type="index" width="50" align="center" fixed/>
+      <el-table-column label="商机阶段" align="center" prop="boStageName"/>
+      <el-table-column width="150" show-overflow-tooltip label="任务编码" align="center" prop="code" />
+      <el-table-column width="200" show-overflow-tooltip label="任务名称" align="center" prop="name" />
+      <el-table-column label="任务类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.mk_bo_tasktype"
+            :value="scope.row.type"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column label="任务状态" align="center" prop="state">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.mk_bo_taskstate"
+            :value="scope.row.state"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column label="联系人" align="center" prop="linkmanName" />
+      <el-table-column
+        width="200" 
+        show-overflow-tooltip
+        label="销售组织名称"
+        align="center"
+        prop="salesOrgName"
+      />
+      <el-table-column width="200" show-overflow-tooltip label="部门名称" align="center" prop="deptName" />
+      <el-table-column label="负责人名称" align="center" prop="staffName" />
+      <el-table-column
+        label="截止时间"
+        align="center"
+        prop="deadlineTime"
+        width="180"
+      >
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deadlineTime, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column width="200" show-overflow-tooltip label="任务内容" align="center" prop="content" />
+      <el-table-column
+        width="250"
+        label="操作"
+        fixed="right"
+        align="center"
+        class-name="small-padding fixed-width"
+        v-if="bo.winningState == 0 ? true : false"
+      >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-search"
+            @click="handleBrowse(scope.row)"
+            >查看</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-top"
+            @click="submitTask(scope.row)"
+            v-if="scope.row.state == 0 && '0-1'.includes(boAuthority.post) && scope.row.createBy == $store.state.user.name"
+            >提交</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-if="scope.row.state == 0 && '0-1'.includes(boAuthority.post) && scope.row.createBy == $store.state.user.name"
+            >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-if="scope.row.state == 0 && '0-1'.includes(boAuthority.post) && scope.row.createBy == $store.state.user.name"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改任务对话框 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      append-to-body
+    >
+      <el-form
+        size="mini"
+        ref="form"
+        :model="form"
+        :rules="rules"
+        label-width="80px"
+        :disabled="operatingState == 'Browse'"
+      >
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="商机名称" prop="boName">
+              <el-input
+                v-model="form.boName"
+                readonly
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="商机阶段" prop="boStage">
+              <el-input v-model="form.boStage" readonly/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="客户" prop="customerName">
+              <el-input
+                v-model="form.customerName"
+                readonly
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="任务编码" prop="code">
+              <el-input
+                v-model="form.code"
+                placeholder="系统自动生成编码"
+                readonly
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="任务名称" prop="name">
+              <el-input v-model="form.name" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="任务状态" prop="state">
+              <el-select v-model="form.state" placeholder="请输入任务状态">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_taskstate"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="开始时间" prop="startTime">
+              <el-date-picker
+                clearable
+                v-model="form.startTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+                :picker-options="editStartOptions"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="截止时间" prop="deadlineTime">
+              <el-date-picker
+                clearable
+                v-model="form.deadlineTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+                :picker-options="editStopOptions"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="任务类型" prop="type">
+              <el-select v-model="form.type" placeholder="">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_tasktype"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="联系人" prop="linkmanName">
+              <dr-popover-select
+                v-model="form.linkmanName"
+                title="联系人选择"
+                type="LINKMAN_PARAM"
+                :dataMapping="{
+                  linkman: 'id',
+                  linkmanName: 'name',
+                }"
+                :source.sync="form"
+                :queryParams="additionalCondition"
+              >
+              </dr-popover-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="销售组织" prop="salesOrgName">
+              <el-input
+                v-model="form.salesOrgName"
+                readonly
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="部门" prop="deptName">
+              <el-input
+                v-model="form.deptName"
+                readonly
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="负责人" prop="staffName">
+              <el-input v-model="form.staffName">
+                <el-button
+                  slot="append"
+                  icon="el-icon-more"
+                  @click="refereStaff"
+                ></el-button>
+              </el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="任务内容" prop="content">
+          <el-input
+            type="textarea"
+            :rows="2"
+            placeholder="请输入任务内容"
+            autosize
+            v-model="form.content"
+          >
+          </el-input>
+        </el-form-item>
+        <el-divider content-position="left">其它信息</el-divider>
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="创建人">
+              <el-input
+                v-model="form.createByName"
+                readonly
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="创建时间">
+              <el-input
+                v-model="form.createTime"
+                readonly
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="修改人">
+              <el-input
+                v-model="form.updateByName"
+                readonly
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="修改时间">
+              <el-input
+                v-model="form.updateTime"
+                readonly
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <BehaviorList
+          :key="timer"
+          :source="'TASK'"
+          :task="form"
+          v-if="operatingState == 'Browse'"
+        />
+        
+      <div slot="footer">
+        <el-button
+          size="mini"
+          type="primary"
+          @click="submitForm"
+          v-if="operatingState != 'Browse'"
+          :disabled="submitButtonEditStatus"
+          >确 定</el-button
+        >
+        <el-button size="mini" @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 员工参照 -->
+    <StaffRef
+      ref="staffSelect"
+      @doSubmit="staffSelectionsToInput"
+      :single="true"
+    />
+  </div>
+</template>
+
+<script>
+import {
+  getTask,
+  delTask,
+  addTask,
+  updateTask,
+  submit
+} from "@/api/business/spd/bo/task";
+import {listTask} from "@/api/business/spd/bo/basic";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import StaffRef from "@/views/business/spd/bo/refer/staff/index.vue";
+import BehaviorList from "./behaviorList.vue";
+
+export default {
+  name: "TaskList",
+  props: ["bo", "boAuthority"],
+  dicts: ["mk_bo_taskstate", "mk_bo_tasktype", "mk_bo_stage"],
+  components: {
+    StaffRef,
+    BehaviorList,
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 任务表格数据
+      taskList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        bo: null,
+        boStage: null,
+        code: null,
+        name: null,
+        type: null,
+        state: null,
+        customer: null,
+        customerName: null,
+        linkman: null,
+        linkmanName: null,
+        salesOrg: null,
+        salesOrgName: null,
+        dept: null,
+        deptName: null,
+        staff: null,
+        staffName: null,
+        startTime: null,
+        deadlineTime: null,
+        content: null,
+        tenantId: null,
+        revision: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        customerName: [
+          { required: true, message: "客户不能为空", trigger: "blur" },
+        ],
+        name: [
+          { required: true, message: "任务名称不能为空", trigger: "blur" },
+        ],
+        state: [
+          { required: true, message: "任务状态不能为空", trigger: "blur" },
+        ],
+        type: [
+          { required: true, message: "任务类型不能为空", trigger: "blur" },
+        ],
+        linkmanName: [
+          { required: true, message: "联系人不能为空", trigger: "blur" },
+        ],
+        staffName: [
+          { required: true, message: "负责人不能为空", trigger: "blur" },
+        ],
+        startTime: [
+          { required: true, message: "开始时间不能为空", trigger: ["blur", "change"] },
+        ],
+        deadlineTime: [
+          { required: true, message: "截止时间不能为空", trigger: ["blur", "change"] },
+        ],
+        content: [
+          { required: true, message: "任务内容不能为空", trigger: "blur" },
+        ],
+      },
+      //重新加载子组件参数
+      timer: "",
+      //当前操作状态
+      operatingState: "",
+      editStartOptions: {
+        disabledDate: time => {
+          if (!this.form.deadlineTime) {
+            return time.getTime() < new Date(1970 - 1 - 1).getTime();   //禁止选择1970年以前的日期
+          } else {
+            return time.getTime() > new Date(this.form.deadlineTime);
+          }
+        }
+      },
+      editStopOptions: {
+        disabledDate: time => {
+          return (
+            time.getTime() < new Date(this.form.startTime) ||
+            time.getTime() < new Date(1970 - 1 - 1).getTime()    //禁止选择1970年以前的日期
+          );
+        }
+      },
+      //确定按钮是否可点
+      submitButtonEditStatus:false,
+      //提交任务
+      submitTask(row){
+        submit(row.id).then((response) => {
+          if(response.code == 200){
+            this.$modal.msgSuccess("提交成功");
+            this.getList();
+          }
+        });
+      },
+    };
+  },
+  created() {
+    this.queryParams.id = this.bo.id;
+    let params = {"post":this.boAuthority.post};
+    this.queryParams.params = params;
+    this.getList();
+  },
+  methods: {
+    /** 查询任务列表 */
+    getList() {
+      this.loading = true;
+      listTask(this.queryParams).then((response) => {
+        this.taskList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        bo: null,
+        boStage: null,
+        code: null,
+        name: null,
+        type: null,
+        state: null,
+        customer: null,
+        customerName: null,
+        linkman: null,
+        linkmanName: null,
+        salesOrg: null,
+        salesOrgName: null,
+        dept: null,
+        deptName: null,
+        staff: null,
+        staffName: null,
+        startTime: null,
+        deadlineTime: null,
+        content: null,
+        tenantId: null,
+        revision: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.operatingState = "Insert";
+      this.reset();
+      this.form.bo = this.bo.id;
+      this.form.boName = this.bo.boName;
+      this.form.boStage = this.bo.boStage;
+      this.form.customer = this.bo.customer;
+      this.form.customerName = this.bo.customerName;
+      this.form.startTime = new Date();
+      this.form.state = "0";
+      this.open = true;
+      this.title = "添加任务";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.operatingState = "Update";
+      this.reset();
+      const id = row.id || this.ids;
+      getTask(id).then((response) => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改任务";
+        this.timer = new Date().getTime();
+      });
+    },
+    /** 查看按钮操作 */
+    handleBrowse(row) {
+      this.reset();
+      const id = row.id || this.ids;
+      getTask(id).then((response) => {
+        this.form = response.data;
+        this.open = true;
+        this.operatingState = "Browse";
+        this.title = "基础信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.submitButtonEditStatus = true;
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTask(this.form).then((response) => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+              this.submitButtonEditStatus = false;
+            });
+          } else {
+            addTask(this.form).then((response) => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+              this.submitButtonEditStatus = false;
+            });
+          }
+        }else{
+          this.submitButtonEditStatus = false;
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      this.$modal
+        .confirm('是否确认删除任务编号为"' + row.code + '"的数据项?')
+        .then(function () {
+          return delTask(row.id);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {});
+    },
+    //联系人弹窗附加查询条件
+    additionalCondition(){
+      return {
+        parame:{
+          customer: this.form.customer
+        }
+      }
+    },
+    // 触发员工参照列表
+    refereStaff() {
+      this.$refs.staffSelect.init();
+    },
+    //员工参照列表选择后
+    staffSelectionsToInput(selections) {
+      this.form.staff = selections[0].userName;
+      this.form.staffName = selections[0].nickName;
+      this.form.dept = selections[0].deptId;
+      this.form.deptName = selections[0].deptName;
+      this.form.salesOrg = selections[0].orgId;
+      this.form.salesOrgName = selections[0].orgName;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 0 - 219
src/views/business/spd/bo/pojpsn/index.vue

@@ -1,219 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="商机名称" prop="boName">
-        <el-input
-          v-model="queryParams.boName"
-          placeholder="请输入商机名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="员工名称" prop="staffName">
-        <el-input
-          v-model="queryParams.staffName"
-          placeholder="请输入员工名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="项目岗位" prop="post">
-        <el-select v-model="queryParams.post" placeholder="请选择项目岗位">
-          <el-option
-            v-for="dict in dict.type.mk_bo_pojpsn_post"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="责任" prop="job">
-        <el-select v-model="queryParams.job" placeholder="请选择责任">
-          <el-option
-            v-for="dict in dict.type.mk_bo_pojpsn_job"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-    <PojpsnList :key="timer" :source = "'Pojpsn'" :bo="queryParams" />
-  </div>
-</template>
-
-<script>
-import { listPojpsn, getPojpsn, delPojpsn, addPojpsn, updatePojpsn } from "@/api/business/spd/bo/pojpsn";
-import StaffRef from '@/views/business/spd/bo/refer/staff/index.vue'
-import PojpsnList from '../basic/pojpsnList.vue'
-
-export default {
-  name: "Pojpsn",
-  dicts: ['mk_bo_pojpsn_post','mk_bo_pojpsn_job'],
-  components: {StaffRef,PojpsnList},
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 项目成员表格数据
-      pojpsnList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        bo: null,
-        boName: null,
-        staff: null,
-        staffName: null,
-        post: null,
-        job: null,
-        tenantId: null,
-        revision: null,
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-      },
-      //重新加载子组件参数
-      timer: '',
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 查询项目成员列表 */
-    getList() {
-      this.loading = true;
-      listPojpsn(this.queryParams).then(response => {
-        this.pojpsnList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        bo: null,
-        boName: null,
-        staff: null,
-        staffName: null,
-        post: null,
-        job: null,
-        tenantId: null,
-        revision: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
-        delFlag: null
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.timer = new Date().getTime();
-      // this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加项目成员";
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getPojpsn(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改项目成员";
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != null) {
-            updatePojpsn(this.form).then(response => {
-              this.$modal.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addPojpsn(this.form).then(response => {
-              this.$modal.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$modal.confirm('是否确认删除项目成员编号为"' + ids + '"的数据项?').then(function() {
-        return delPojpsn(ids);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("删除成功");
-      }).catch(() => {});
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      this.download('system/pojpsn/export', {
-        ...this.queryParams
-      }, `pojpsn_${new Date().getTime()}.xlsx`)
-    },
-    // 触发员工参照列表
-    refereStaff() {
-      console.log('测试点击')
-      this.$refs.contractSelect.init()
-    },
-    //员工参照列表选择后
-    selectionsToInput (selections) {
-      this.form.staff = selections[0].userName;
-      this.form.staffName = selections[0].nickName;
-    }
-  }
-};
-</script>

+ 2 - 7
src/views/business/spd/bo/statement/index.vue

@@ -47,7 +47,6 @@
           <el-table-column label="部门" align="center" prop="deptName" />
           <el-table-column label="负责人" align="center" prop="principalName" />
           <el-table-column width="200" show-overflow-tooltip label="商机名称" align="center" prop="boName" />
-          <el-table-column label="商机编码" align="center" prop="boCode" />
           <el-table-column label="创建日期" align="center" prop="createTime" >
             <template slot-scope="scope">
               {{new Date(scope.row.createTime).Format("yyyy-MM-dd")}}
@@ -55,8 +54,8 @@
           </el-table-column>
           <el-table-column label="商机挖掘" align="center" prop="b000">
             <template slot-scope="scope">
+              <el-button size="medium" type="text" icon="el-icon-s-flag"/>
               <dev v-if="scope.row.b000">
-                <el-button size="medium" type="text" icon="el-icon-s-flag" />
                 {{scope.row.b000}}
               </dev>
             </template>
@@ -109,7 +108,6 @@
           <el-table-column label="部门" align="center" prop="deptName" />
           <el-table-column label="负责人" align="center" prop="principalName" />
           <el-table-column show-overflow-tooltip label="商机名称" align="center" prop="boName" />
-          <el-table-column label="商机编码" align="center" prop="boCode" />
           <el-table-column label="创建日期" align="center" prop="createTime" >
             <template slot-scope="scope">
               {{new Date(scope.row.createTime).Format("yyyy-MM-dd")}}
@@ -179,7 +177,6 @@
           <el-table-column label="部门" align="center" prop="deptName" />
           <el-table-column label="负责人" align="center" prop="principalName" />
           <el-table-column show-overflow-tooltip label="商机名称" align="center" prop="boName" />
-          <el-table-column label="商机编码" align="center" prop="boCode" />
           <el-table-column label="创建日期" align="center" prop="createTime" >
             <template slot-scope="scope">
               {{new Date(scope.row.createTime).Format("yyyy-MM-dd")}}
@@ -265,7 +262,6 @@
           <el-table-column label="部门" align="center" prop="deptName" />
           <el-table-column label="负责人" align="center" prop="principalName" />
           <el-table-column show-overflow-tooltip label="商机名称" align="center" prop="boName" />
-          <el-table-column label="商机编码" align="center" prop="boCode" />
           <el-table-column label="创建日期" align="center" prop="createTime" >
             <template slot-scope="scope">
               {{new Date(scope.row.createTime).Format("yyyy-MM-dd")}}
@@ -335,7 +331,6 @@
           <el-table-column label="部门" align="center" prop="deptName" />
           <el-table-column label="负责人" align="center" prop="principalName" />
           <el-table-column show-overflow-tooltip label="商机名称" align="center" prop="boName" />
-          <el-table-column label="商机编码" align="center" prop="boCode" />
           <el-table-column label="创建日期" align="center" prop="createTime" >
             <template slot-scope="scope">
               {{new Date(scope.row.createTime).Format("yyyy-MM-dd")}}
@@ -405,7 +400,6 @@
           <el-table-column label="部门" align="center" prop="deptName" />
           <el-table-column label="负责人" align="center" prop="principalName" />
           <el-table-column show-overflow-tooltip label="商机名称" align="center" prop="boName" />
-          <el-table-column label="商机编码" align="center" prop="boCode" />
           <el-table-column label="创建日期" align="center" prop="createTime" >
             <template slot-scope="scope">
               {{new Date(scope.row.createTime).Format("yyyy-MM-dd")}}
@@ -486,6 +480,7 @@
 import { listBasic } from "@/api/business/spd/bo/statement";
 
 export default {
+  name: "statement1",
   dicts: [
     "mk_bo_type",
     "mk_bo_source",