Prechádzať zdrojové kódy

营销-SPD-商机:dev代码合并;

001295 2 rokov pred
rodič
commit
6eead537d9

+ 10 - 1
src/api/business/spd/bo/statement.js

@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-// 查询商机基础信息列表
+// 查询商机阶段信息列表
 export function listBasic(query) {
   return request({
     url: '/mk/bo/statement/list',
@@ -8,3 +8,12 @@ export function listBasic(query) {
     params: query
   })
 }
+
+// 查询商机百分比列表
+export function listProportion(query) {
+  return request({
+    url: '/mk/bo/statement/listCollect',
+    method: 'get',
+    params: query
+  })
+}

+ 18 - 0
src/components/input-dialog/api/index.js

@@ -0,0 +1,18 @@
+import request from "@/utils/request";
+
+export function list(url, params) {
+  return request({
+    url: `/pu/contract/${url}/list`,
+    method: "get",
+    params: params,
+  });
+}
+
+export function refer(data, params) {
+  return request({
+    url: "/refer/query",
+    method: "POST",
+    data: data,
+    params: params,
+  });
+}

+ 30 - 0
src/components/input-dialog/components/CURRENCY_PARAM.js

@@ -0,0 +1,30 @@
+export default [
+  {
+    key: "name",
+    title: "币种",
+    type: "Input",
+    search: true,
+  },
+  {
+    key: "code",
+    title: "币种简称",
+    type: "Input",
+    search: true,
+  },
+  {
+    key: "",
+    title: "单价精度",
+  },
+  {
+    key: "",
+    title: "单价舍入规则",
+  },
+  {
+    key: "",
+    title: "金额精度",
+  },
+  {
+    key: "",
+    title: "金额舍入规则",
+  },
+];

+ 14 - 0
src/components/input-dialog/components/DEPT_PARAM.js

@@ -0,0 +1,14 @@
+export default [
+  {
+    key: "code",
+    title: "组织编码",
+    type: "Input",
+    search: true,
+  },
+  {
+    key: "name",
+    title: "组织名称",
+    type: "Input",
+    search: true,
+  },
+];

+ 14 - 0
src/components/input-dialog/components/MATERIAL_PARAM.js

@@ -0,0 +1,14 @@
+export default [
+  {
+    key: "code",
+    title: "物料编码",
+    type: "Input",
+    search: true,
+  },
+  {
+    key: "name",
+    title: "物料名称",
+    type: "Input",
+    search: true,
+  },
+];

+ 14 - 0
src/components/input-dialog/components/ORG_PARAM.js

@@ -0,0 +1,14 @@
+export default [
+    {
+      key: "code",
+      title: "组织编码",
+      type: "Input",
+      search: true,
+    },
+    {
+      key: "name",
+      title: "组织名称",
+      type: "Input",
+      search: true,
+    },
+  ]

+ 14 - 0
src/components/input-dialog/components/PAYAGREEMENT_PARAM.js

@@ -0,0 +1,14 @@
+export default [
+  {
+    key: "code",
+    title: "付款协议编码",
+    type: "Input",
+    search: true,
+  },
+  {
+    key: "name",
+    title: "付款协议名称",
+    type: "Input",
+    search: true,
+  },
+];

+ 14 - 0
src/components/input-dialog/components/SUPPLIER_PARAM.js

@@ -0,0 +1,14 @@
+export default [
+  {
+    key: "code",
+    title: "供应商编码",
+    type: "Input",
+    search: true,
+  },
+  {
+    key: "name",
+    title: "供应商名称",
+    type: "Input",
+    search: true,
+  },
+];

+ 183 - 0
src/components/input-dialog/components/index.vue

@@ -0,0 +1,183 @@
+<script>
+import { refer } from "../api/index";
+import InitColumnHooks from "./init-column";
+import { initParams } from "../index";
+
+export default {
+  name: "InputDialog",
+  props: ["title", "type"],
+  components: {},
+  data() {
+    const { type } = this.$props;
+    const { TableColumns, SearchColumns } = InitColumnHooks(type);
+    return {
+      // global
+      size: "mini",
+      width: "50%",
+      showKey: "name",
+      page: { pageNum: 1, pageSize: 25, total: 0 },
+      layout: "total, prev, pager, next, sizes, jumper",
+      pageSizes: [25, 50, 100],
+      // dialog
+      visible: false,
+      loading: false,
+      // search
+      params: initParams(SearchColumns),
+      searchColumns: SearchColumns,
+      // table
+      data: [],
+      tableColumns: TableColumns,
+      currentData: null,
+    };
+  },
+  computed: {},
+  watch: {},
+  methods: {
+    // set dialog visible
+    setVisible(prop) {
+      this.visible = prop;
+    },
+    // do something before dialog open
+    beforeOpen() {
+      this.fetchList(this.params, this.page);
+    },
+    // fetch table data
+    async fetchList(prop, page) {
+      try {
+        this.loading = true;
+        const { type } = this.$props;
+        const { pageNum, pageSize } = page;
+        const { code, msg, rows, total } = await refer(
+          {
+            ...prop,
+            type: type,
+            isPage: true,
+          },
+          { pageNum, pageSize }
+        );
+        if (code === 200) {
+          this.data = rows;
+          this.page.total = total;
+          this.$notify.success({ title: msg });
+        } else {
+          this.$notify.warning({ title: msg });
+        }
+      } catch (err) {
+        this.$notify.error({ title: "error", message: err });
+      } finally {
+        this.loading = false;
+      }
+    },
+    // setting up to fetch table data
+    queryList() {
+      this.fetchList(this.params, this.page);
+    },
+    // reset to fetch table data
+    resetList() {
+      this.page.pageNum = 1;
+      this.params = initParams(this.searchColumns);
+      this.fetchList(this.params, this.page);
+    },
+    // size change to fetch table data
+    pageSizeChange(prop) {
+      this.page.pageSize = prop;
+      this.fetchList(this.params, this.page);
+    },
+    // number change to fetch table data
+    pageNumberChange(prop) {
+      this.page.pageNum = prop;
+      this.fetchList(this.params, this.page);
+    },
+    // click select row data
+    clickSelectCurrentData(row) {
+      this.currentData = row;
+    },
+    // double click select row data and confirm
+    dblclickSelectCurrentData(row) {
+      this.confirm(row);
+    },
+    //
+    confirm(prop) {
+      if (prop) {
+        this.$emit("confirm", prop);
+      }
+      this.setVisible(false);
+    },
+  },
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="visible"
+    :width="width"
+    append-to-body
+    @open="beforeOpen"
+  >
+    <el-form :size="size" :inline="true" :model="params">
+      <el-form-item
+        v-for="(column, index) in searchColumns"
+        :key="index"
+        :label="column.title"
+      >
+        <el-input v-model="params[column.key]" @change="queryList"> </el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button icon="el-icon-refresh" @click="resetList"></el-button>
+      </el-form-item>
+    </el-form>
+    <el-table
+      v-loading="loading"
+      :data="data"
+      :size="size"
+      height="45vh"
+      highlight-current-row
+      style="width: 100%; margin-bottom: 20px"
+      @row-click="clickSelectCurrentData"
+      @row-dblclick="dblclickSelectCurrentData"
+    >
+      <el-table-column
+        v-for="(column, index) in tableColumns"
+        :key="index"
+        :prop="column.key"
+        :label="column.title"
+        :width="column.width"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+    </el-table>
+    <div
+      style="display: flex; justify-content: space-between; align-items: center"
+    >
+      <p>
+        <span style="font-size: 12px">已选择 :</span>
+        <el-tag v-if="currentData" :size="size">{{
+          currentData[showKey]
+        }}</el-tag>
+        <span v-else>无</span>
+      </p>
+      <el-pagination
+        :layout="layout"
+        :total="page.total"
+        :page-sizes="pageSizes"
+        :page-size="page.pageSize"
+        :current-page="page.pageNum"
+        :small="size === 'mini'"
+        background
+        @size-change="pageSizeChange"
+        @current-change="pageNumberChange"
+      >
+      </el-pagination>
+    </div>
+    <div style="margin-top: 20px; text-align: right">
+      <el-button :size="size" @click="visible = false">取 消</el-button>
+      <el-button :size="size" type="primary" @click="confirm(currentData)"
+        >确 定</el-button
+      >
+    </div>
+  </el-dialog>
+</template>
+<style scoped></style>

+ 12 - 0
src/components/input-dialog/components/init-column.js

@@ -0,0 +1,12 @@
+export default function InitColumnsHooks(prop) {
+  //
+  const TableColumns = require(`./${prop}`).default.filter(
+    (element) => element.key
+  );
+  //
+  const SearchColumns = require(`./${prop}`).default.filter(
+    (element) => element.search
+  );
+  //
+  return { TableColumns, SearchColumns };
+}

+ 62 - 0
src/components/input-dialog/index.js

@@ -0,0 +1,62 @@
+const arr2obj = (data, keyName, valueName) =>
+  Object.fromEntries(data.map((item) => [item[keyName], item[valueName]]));
+
+export const initColumns = (
+  arr,
+  prop = { disabled: false, readonly: false, clearable: false }
+) => {
+  return arr.map((element) => {
+    element.config = element.config || {};
+    if (element.type === "Input") {
+    }
+    if (element.type === "InputDialog") {
+      prop.readonly = true;
+    }
+    if (element.type === "InputNumber") {
+      element.config = { controlsPosition: "right", ...element.config };
+    }
+    if (element.type === "Select") {
+    }
+    if (element.type === "DatePicker") {
+      element.config = { type: "date", ...element.config };
+    }
+    if (element.type === "Upload") {
+      element.value = [];
+    }
+    return { ...element, ...prop };
+  });
+};
+
+// 初始化参数
+export const initParams = (prop, key = "key", value = "value") =>
+  arr2obj(prop, key, value);
+// 初始化字典
+export const initDicts = (prop) =>
+  prop
+    .filter((column) => column.type === "Select")
+    .map((column) => column.config.optionsName);
+// 初始化校验
+export const initRules = (prop) => {
+  const rules = {};
+  prop
+    .filter((column) => column.require)
+    .forEach((column) => {
+      const message = `${column.title}不能为空`;
+      rules[column.key] = [
+        { required: true, message: message, trigger: "change" },
+      ];
+    });
+  return rules;
+};
+
+const pageSizes = [25, 50, 100];
+
+const layout = "total, prev, pager, next, sizes, jumper";
+
+const page = { pageNum: 1, pageSize: 25, total: 0 };
+
+export const initPageSizes = () => pageSizes;
+
+export const initLayout = () => layout;
+
+export const initPage = () => page;

+ 73 - 0
src/components/input-dialog/index.vue

@@ -0,0 +1,73 @@
+<script>
+export default {
+  name: "DrInputDialog",
+  props: [
+    "value",
+    "title",
+    "type",
+    "dataMapping",
+    "source",
+    "placeholder",
+    "clearable",
+    "disabled",
+    "readonly",
+    "size",
+  ],
+  components: {
+    InputDialog: () => import("./components/index.vue"),
+  },
+  data() {
+    return {};
+  },
+  computed: {},
+  watch: {},
+  methods: {
+    handleAsyncOpenDialog() {
+      this.$nextTick(() => {
+        const { setVisible } = this.$refs.InputDialogFef;
+        setVisible(true);
+      });
+    },
+    handleUpdateSource(prop) {
+      const { source, dataMapping } = this.$props;
+      for (let key in dataMapping) {
+        source[key] = prop[dataMapping[key]];
+      }
+      this.$emit("update:source", source);
+    },
+  },
+  created() {
+    console.log("prop", this.$props);
+  },
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<template>
+  <el-input
+    v-model="value"
+    :placeholder="placeholder"
+    :clearable="clearable"
+    :disabled="disabled"
+    :readonly="readonly"
+    :size="size"
+    style="width: 100%; cursor: pointer"
+    @click.native.stop="handleAsyncOpenDialog"
+  >
+    <template #suffix>
+      <el-icon class="el-icon-thumb"></el-icon>
+      <input-dialog
+        ref="InputDialogFef"
+        :title="title"
+        :type="type"
+        @confirm="handleUpdateSource"
+      ></input-dialog>
+    </template>
+  </el-input>
+</template>
+<style scoped>
+::v-deep.el-input .el-input__suffix {
+  display: flex;
+  align-items: center;
+}
+</style>

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 110 - 1144
src/views/business/spd/bo/basic/details.vue


+ 115 - 58
src/views/business/spd/bo/basic/index.vue

@@ -12,7 +12,20 @@
       <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="customerName">
+        <el-input
+          v-model="queryParams.customerName"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="商机负责人" prop="principalName">
+        <el-input
+          v-model="queryParams.principalName"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -20,7 +33,6 @@
       <el-form-item label="商机类型" prop="boType">
         <el-select
           v-model="queryParams.boType"
-          placeholder="请输入商机类型"
           @change="boTypeChange"
           clearable
         >
@@ -32,12 +44,18 @@
           ></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="商机阶段" prop="boStage">
+        <el-select v-model="queryParams.boStage" clearable>
+          <el-option
+            v-for="item in mk_bo_stage"
+            :key="item.code"
+            :label="item.name"
+            :value="item.code"
+          ></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="商机状态" prop="boState" clearable>
-        <el-select
-          v-model="queryParams.boState"
-          placeholder="请输入商机状态"
-          clearable
-        >
+        <el-select v-model="queryParams.boState" clearable>
           <el-option
             v-for="dict in dict.type.mk_bo_state"
             :key="dict.value"
@@ -47,11 +65,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="商机来源" prop="boSource">
-        <el-select
-          v-model="queryParams.boSource"
-          placeholder="请输入商机来源"
-          clearable
-        >
+        <el-select v-model="queryParams.boSource" clearable>
           <el-option
             v-for="dict in dict.type.mk_bo_source"
             :key="dict.value"
@@ -60,20 +74,6 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="商机阶段" prop="boStage">
-        <el-select
-          v-model="queryParams.boStage"
-          placeholder="请输入商机阶段"
-          clearable
-        >
-          <el-option
-            v-for="item in mk_bo_stage"
-            :key="item.code"
-            :label="item.name"
-            :value="item.code"
-          ></el-option>
-        </el-select>
-      </el-form-item>
       <!-- <el-form-item label="赢单状态" prop="winningState">
         <el-select v-model="queryParams.winningState" placeholder="请输入赢单状态" clearable>
           <el-option
@@ -84,22 +84,6 @@
           ></el-option>
         </el-select>
       </el-form-item> -->
-      <el-form-item label="客户名称" prop="customerName">
-        <el-input
-          v-model="queryParams.customerName"
-          placeholder="请输入客户名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="商机负责人" prop="principalName">
-        <el-input
-          v-model="queryParams.principalName"
-          placeholder="请输入负责人"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button
           type="primary"
@@ -239,6 +223,13 @@
             @click="handleBrowse(scope.row)"
             >查看</el-button
           >
+          <!-- <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-user"
+            @click="allocation(scope.row)"
+            >分配</el-button
+          > -->
           <el-button
             size="mini"
             type="text"
@@ -289,7 +280,7 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="商机来源" prop="boSource">
-              <el-select v-model="form.boSource" placeholder="商机来源">
+              <el-select v-model="form.boSource">
                 <el-option
                   v-for="dict in dict.type.mk_bo_source"
                   :key="dict.value"
@@ -308,7 +299,7 @@
                 form.boSource == '2' ? rules.referrer : [{ require: false }]
               "
             >
-              <el-input v-model="form.referrerName" placeholder="请输入推荐人">
+              <el-input v-model="form.referrerName">
                 <el-button
                   slot="append"
                   icon="el-icon-more"
@@ -323,7 +314,6 @@
             <el-form-item label="商机类型" prop="boType">
               <el-select
                 v-model="form.boType"
-                placeholder="商机类型"
                 :disabled="this.operatingState == 'Update'"
               >
                 <el-option
@@ -339,7 +329,6 @@
             <el-form-item label="客户名称" prop="customerName">
               <el-input
                 v-model="form.customerName"
-                placeholder="请输入客户"
                 :disabled="this.operatingState == 'Update'"
               >
                 <el-button
@@ -355,7 +344,6 @@
             <el-form-item label="医院营收总额" prop="totalHosRevenue">
               <el-select
                 v-model="form.totalHosRevenue"
-                placeholder="请输入医院营收总额"
                 @change="totalHosRevenueChange"
               >
                 <el-option
@@ -374,11 +362,12 @@
               label="医院耗材预估值(万元)"
               prop="hosDiscreetValue"
             >
-              <el-input
+              <el-input-number
                 type="number"
+                :controls="false"
                 v-model="form.hosDiscreetValue"
-                placeholder="请输入医院耗材预估值"
-              />
+                :precision="2"
+              ></el-input-number>
             </el-form-item>
           </el-col>
         </el-row>
@@ -389,7 +378,6 @@
                 type="textarea"
                 maxlength="900"
                 rows="2"
-                placeholder="请输入商机内容"
                 autosize
                 v-model="form.boContent"
               >
@@ -448,6 +436,50 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
+    <!-- 分配商机负责人对话框 -->
+    <el-dialog
+      title="分配商机负责人"
+      :visible.sync="allocationPopover"
+      width="500px"
+      append-to-body
+    >
+      <el-form
+        :model="allocationForm"
+        label-width="150px"
+        :disabled="
+          this.form.winningState > 0 || this.operatingState == 'Browse'
+        "
+      >
+        <el-form-item label="新负责人" prop="allocationStaff">
+          <dr-input-dialog
+            v-model="allocationForm.allocationStaffName"
+            title="员工"
+            type="SUPPLIER_PARAM"
+            :dataMapping="{
+              allocationStaff: 'id',
+              allocationStaffName: 'name',
+            }"
+            :source="allocationForm"
+          ></dr-input-dialog>
+        </el-form-item>
+        <el-form-item label="是否将您作为参与人" prop="isParticipant">
+          <el-radio v-model="allocationForm.isParticipant" label="1"
+            >是</el-radio
+          >
+          <el-radio v-model="allocationForm.isParticipant" label="0"
+            >否</el-radio
+          >
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitAllocationForm"
+          >确 定</el-button
+        >
+        <el-button @click="cancelAllocation">取 消</el-button>
+      </div>
+    </el-dialog>
+
     <!-- 客户参照 -->
     <CustomerRef
       ref="customerSelect"
@@ -491,6 +523,7 @@ 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 { getBoNodeListByType } from "@/api/business/spd/bo/boNode";
+import DrInputDialog from "@/components/input-dialog/index.vue";
 
 export default {
   name: "Basic",
@@ -501,7 +534,14 @@ export default {
     "mk_bo_total_revenue",
     "mk_bo_winstate",
   ],
-  components: { CustomerRef, SaleaeaRef, OrgRef, DeptRef, StaffRef },
+  components: {
+    CustomerRef,
+    SaleaeaRef,
+    OrgRef,
+    DeptRef,
+    StaffRef,
+    DrInputDialog,
+  },
   data() {
     return {
       // 遮罩层
@@ -592,7 +632,14 @@ export default {
         ],
       },
       //阶段列表
-      mk_bo_stage:[],
+      mk_bo_stage: [],
+      //分配参数
+      allocationForm: {
+        allocationStaff: null,
+        isParticipant: "1",
+      },
+      //分配弹窗
+      allocationPopover: false,
     };
   },
   created() {
@@ -635,6 +682,10 @@ export default {
       this.open = false;
       this.reset();
     },
+    //取消分配
+    cancelAllocation() {
+      this.allocationPopover = false;
+    },
     // 表单重置
     reset() {
       this.form = {
@@ -691,7 +742,8 @@ export default {
       this.reset();
       this.open = true;
       this.operatingState = "Insert";
-      const { id, orgId, deptId, nickName, deptName, orgName } = this.$store.state.user;
+      const { id, orgId, deptId, nickName, deptName, orgName } =
+        this.$store.state.user;
       this.form.principal = id;
       this.form.principalName = nickName;
       this.form.dept = deptId;
@@ -727,6 +779,9 @@ export default {
         this.title = "基础信息";
       });
     },
+    allocation(row) {
+      this.allocationPopover = true;
+    },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate((valid) => {
@@ -747,6 +802,8 @@ export default {
         }
       });
     },
+    //提交分配表单
+    submitAllocationForm() {},
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids;
@@ -801,12 +858,12 @@ export default {
       }
     },
     //查询参数商机类型改变后
-    boTypeChange(boType){
-      if(boType){
-        getBoNodeListByType(boType).then(response => {
+    boTypeChange(boType) {
+      if (boType) {
+        getBoNodeListByType(boType).then((response) => {
           this.mk_bo_stage = response.rows;
         });
-      }else{
+      } else {
         this.mk_bo_stage = [];
       }
     },

+ 2 - 14
src/views/business/spd/bo/basic/process.vue

@@ -35,7 +35,7 @@
       </el-tab-pane>
       <!-- 项目立项 -->
       <el-tab-pane label="阶段动作" name="t00201" style="height: 200px; overflow-y: scroll" v-if="tabsName.t00201">
-        <el-form :disabled="!isUpdate" :model="form.boFlow">
+        <el-form :disabled="!isUpdate" :model="form.boFlow" ref="form">
           <el-form-item label="项目立项是否通过" prop="projectApproval">
             <el-radio
               v-model="form.boFlow.projectApproval"
@@ -48,7 +48,7 @@
               >否</el-radio
             >
           </el-form-item>
-          <el-form-item label="项目未通过原因:" prop="noPassCause"  v-if="form.boFlow.projectApproval == 0">
+          <el-form-item label="项目未通过原因:" prop="noPassCause" v-if="form.boFlow.projectApproval == 0">
             <el-row>
               <el-col
                 :span="8"
@@ -167,7 +167,6 @@
               >
                 <el-input
                   v-model="form.boFlow.hospitalApprovalInitiator"
-                  placeholder="选择院内立项牵头人"
                 />
               </el-form-item>
             </el-col>
@@ -184,7 +183,6 @@
                   value-format="yyyy-MM-dd"
                   v-model="form.boFlow.researchTime"
                   type="datetime"
-                  placeholder="选择日期时间"
                 >
                 </el-date-picker>
               </el-form-item>
@@ -248,7 +246,6 @@
               <el-form-item label="我方优势" prop="ourAdvantage">
                 <el-input
                   v-model="form.boFlow.ourAdvantage"
-                  placeholder="我方优势"
                 />
               </el-form-item>
             </el-col>
@@ -258,7 +255,6 @@
               <el-form-item label="我方劣势" prop="ourAdvantage">
                 <el-input
                   v-model="form.boFlow.ourAdvantage"
-                  placeholder="我方劣势"
                 />
               </el-form-item>
             </el-col>
@@ -451,7 +447,6 @@
               <el-form-item label="我方优势" prop="ourAdvantage">
                 <el-input
                   v-model="form.consumablesBoFlow.ourAdvantage"
-                  placeholder="我方优势"
                 />
               </el-form-item>
             </el-col>
@@ -461,7 +456,6 @@
               <el-form-item label="我方劣势" prop="ourAdvantage">
                 <el-input
                   v-model="form.consumablesBoFlow.ourAdvantage"
-                  placeholder="我方劣势"
                 />
               </el-form-item>
             </el-col>
@@ -680,7 +674,6 @@
               <el-form-item label="我方优势" prop="ourAdvantage">
                 <el-input
                   v-model="form.medicalBoFlow.ourAdvantage"
-                  placeholder="我方优势"
                 />
               </el-form-item>
             </el-col>
@@ -690,7 +683,6 @@
               <el-form-item label="我方劣势" prop="ourAdvantage">
                 <el-input
                   v-model="form.medicalBoFlow.ourAdvantage"
-                  placeholder="我方劣势"
                 />
               </el-form-item>
             </el-col>
@@ -912,7 +904,6 @@
               <el-form-item label="我方优势" prop="ourAdvantage">
                 <el-input
                   v-model="form.armariumBoFlow.ourAdvantage"
-                  placeholder="我方优势"
                 />
               </el-form-item>
             </el-col>
@@ -922,7 +913,6 @@
               <el-form-item label="我方劣势" prop="ourAdvantage">
                 <el-input
                   v-model="form.armariumBoFlow.ourAdvantage"
-                  placeholder="我方劣势"
                 />
               </el-form-item>
             </el-col>
@@ -1142,7 +1132,6 @@
               <el-form-item label="我方优势" prop="ourAdvantage">
                 <el-input
                   v-model="form.amfBoFlow.ourAdvantage"
-                  placeholder="我方优势"
                 />
               </el-form-item>
             </el-col>
@@ -1152,7 +1141,6 @@
               <el-form-item label="我方劣势" prop="ourAdvantage">
                 <el-input
                   v-model="form.amfBoFlow.ourAdvantage"
-                  placeholder="我方劣势"
                 />
               </el-form-item>
             </el-col>

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

@@ -407,6 +407,7 @@ export default {
     }
     if(this.source == 'TaskList'){
       this.queryParams.taskCode = this.bo.code;
+      console.log("this.bo", this.bo);
     }
     console.log("this.queryParams", this.queryParams);
     this.getList();

+ 10 - 3
src/views/business/spd/bo/filetemplate/index.vue

@@ -81,8 +81,8 @@
       width="400px"
       append-to-body
     >
-      <el-form ref="form" :model="form" label-width="80px">
-        <el-form-item label="商机类型">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="商机类型" prop="boType">
           <el-select v-model="form.boType">
             <el-option
               v-for="dict in dict.type.mk_bo_type"
@@ -167,6 +167,9 @@ export default {
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/mk/bo/filetemplate/upload",
       },
+      rules:{
+        boType :[{required: true, message: '请选择商机类型', trigger: 'blur'}],
+      },
     };
   },
   created() {
@@ -188,7 +191,11 @@ export default {
     },
     // 提交上传文件
     submitFileForm() {
-      this.$refs.upload.submit();
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          this.$refs.upload.submit();
+        }
+      });
     },
     // 文件上传中处理
     handleFileUploadProgress(event, file, fileList) {

+ 230 - 0
src/views/business/spd/bo/statement/proportion/index.vue

@@ -0,0 +1,230 @@
+<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="code">
+        <el-input
+          v-model="queryParams.code"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="商机类型" prop="boType">
+        <el-select
+          v-model="queryParams.boType"
+          @change="boTypeChange"
+          clearable
+        >
+          <el-option
+            v-for="dict in dict.type.mk_bo_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="商机来源" prop="boSource">
+        <el-select
+          v-model="queryParams.boSource"
+          clearable
+        >
+          <el-option
+            v-for="dict in dict.type.mk_bo_source"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="商机部门" prop="deptName">
+        <el-input
+          v-model="queryParams.deptName"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </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>
+
+    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
+      <el-table-column label="中心部门" align="center" prop="deptName" />
+      <el-table-column label="当月新增商机数(个)" align="center" prop="sumTotal" />
+      <el-table-column label="当月审核通过数(个)" align="center" prop="passAudit" />
+      <el-table-column label="当月审核通过率%" align="center" prop="passAuditRate" />
+      <el-table-column label="当月立项成功数(个)" align="center" prop="approveInitiateProject" />
+      <el-table-column label="当月立项成功率%" align="center" prop="approveInitiateProjectRate" />
+      <el-table-column label="当月挂网数(个)" align="center" prop="hanging" />
+      <el-table-column label="当月挂网率%" align="center" prop="hangingRate" />
+      <el-table-column label="当月合同签订数(个)" align="center" prop="contractSigning" />
+      <el-table-column label="当月合同签订率%" align="center" prop="contractSigningRate" />
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import { listProportion } from "@/api/business/spd/bo/statement";
+
+export default {
+  name: "proportion",
+  dicts: [
+    "mk_bo_type",
+    "mk_bo_source",
+  ],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 职责表格数据
+      list: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        boType: null,
+        boSource: null,
+        deptName: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.queryParams.boType = 0;
+    this.getList();
+  },
+  methods: {
+    /** 查询职责列表 */
+    getList() {
+      this.loading = true;
+      listProportion(this.queryParams).then(response => {
+        this.list = response.rows;
+        for(let item of this.list) {
+          if(item.passAuditRate){item.passAuditRate = (item.passAuditRate * 100) + '%';}
+          if(item.approveInitiateProjectRate){item.approveInitiateProjectRate = (item.approveInitiateProjectRate * 100) + '%';}
+          if(item.hangingRate){item.hangingRate = (item.hangingRate * 100) + '%';}
+          if(item.contractSigningRate){item.contractSigningRate = (item.contractSigningRate * 100) + '%';}
+        }
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        code: null,
+        name: null,
+        boType: 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.reset();
+      this.open = true;
+      this.title = "添加职责";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getJob(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) {
+            updateJob(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addJob(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 delJob(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('pu/job/export', {
+        ...this.queryParams
+      }, `job_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 487 - 35
src/views/business/spd/bo/task/index.vue

@@ -1,18 +1,9 @@
 <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="code">
         <el-input
           v-model="queryParams.code"
-          placeholder="请输入任务编码"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -20,23 +11,13 @@
       <el-form-item label="任务名称" prop="name">
         <el-input
           v-model="queryParams.name"
-          placeholder="请输入任务名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="商机阶段" prop="boStage">
-        <el-input
-          v-model="queryParams.boStage"
-          placeholder="请输入商机阶段"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="任务状态" prop="state">
+      <el-form-item label="商机名称" prop="boName">
         <el-input
-          v-model="queryParams.state"
-          placeholder="请输入任务状态"
+          v-model="queryParams.boName"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -44,17 +25,410 @@
       <el-form-item label="客户名称" prop="customerName">
         <el-input
           v-model="queryParams.customerName"
-          placeholder="请输入客户名称"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="任务状态" prop="state">
+        <el-select
+          v-model="queryParams.state"
+          clearable
+        >
+          <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-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>
-    <TaskList :key="timer" :source = "'Task'" :bo="queryParams" />
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          >新增</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+          >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+          >删除</el-button
+        >
+      </el-col> -->
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-loading="loading"
+      :data="taskList"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="任务编码" align="center" prop="code" />
+      <el-table-column label="任务名称" align="center" prop="name" />
+      <el-table-column
+        label="商机名称"
+        align="center"
+        prop="boName"
+      />
+      <el-table-column label="商机阶段" align="center" prop="boStageName"/>
+      <el-table-column
+        label="客户名称"
+        align="center"
+        prop="customerName"
+      />
+      <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
+        label="销售组织名称"
+        align="center"
+        prop="salesOrgName"
+      />
+      <el-table-column 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 label="任务内容" align="center" prop="content" />
+      <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-s-promotion"
+            @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
+        ref="form"
+        :model="form"
+        :rules="rules"
+        label-width="80px"
+        :disabled="this.operatingState == 'Browse'"
+      >
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="商机名称" prop="boName">
+              <el-input
+                v-model="form.boName"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item
+              label="商机阶段"
+              prop="boStage"
+            >
+              <el-select v-model="form.boStage">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_stage"
+                  :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="customerName">
+              <el-input
+                v-model="form.customerName"
+              >
+                <el-button
+                  slot="append"
+                  icon="el-icon-more"
+                  @click="refereCustomer"
+                ></el-button>
+              </el-input>
+            </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"
+                :disabled="true"
+              />
+            </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" >
+                <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"
+              >
+              </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"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="任务类型" prop="type">
+              <el-select v-model="form.type" >
+                <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">
+              <el-input v-model="form.linkmanName">
+                <el-button
+                  slot="append"
+                  icon="el-icon-more"
+                  @click="refereContact"
+                ></el-button>
+              </el-input>
+            </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" :disabled="true">
+                <el-button
+                  slot="append"
+                  icon="el-icon-more"
+                  @click="refereOrg"
+                  :disabled="true"
+                ></el-button>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="部门" prop="deptName">
+              <el-input v-model="form.deptName" :disabled="true">
+                <el-button
+                  slot="append"
+                  icon="el-icon-more"
+                  @click="refereDept"
+                  :disabled="true"
+                ></el-button>
+              </el-input>
+            </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"
+            autosize
+            v-model="form.content"
+          >
+          </el-input>
+        </el-form-item>
+        
+        <div class="md-auditInfo">
+          <el-divider content-position="left">其它信息</el-divider>
+          <el-form :inline="true" label-position="right" :model="form">
+            <el-row>
+              <el-col :span="6">
+                <el-form-item label="创建人">
+                  <el-input
+                    v-model="form.createByName"
+                    size="small"
+                    readonly
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="创建时间">
+                  <el-input
+                    v-model="form.createTime"
+                    size="small"
+                    readonly
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="修改人">
+                  <el-input
+                    v-model="form.updateByName"
+                    size="small"
+                    readonly
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="修改时间">
+                  <el-input
+                    v-model="form.updateTime"
+                    size="small"
+                    readonly
+                  ></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+        </div>
+      </el-form>
+
+      <BehaviorList
+          :key="timer"
+          :source="'TaskList'"
+          :bo="this.form"
+          :boAuthority="boAuthority"
+          v-if="this.operatingState != 'Insert'"
+        />
+        
+      <div slot="footer" class="dialog-footer">
+        <el-button
+          type="primary"
+          @click="submitForm"
+          v-if="this.operatingState != 'Browse'"
+          >确 定</el-button
+        >
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 客户参照 -->
+    <CustomerRef
+      ref="customerSelect"
+      @doSubmit="customerSelectionsToInput"
+      :single="true"
+    />
+    <!-- 联系人参照 -->
+    <ContactRef
+      ref="contactSelect"
+      @doSubmit="contactSelectionsToInput"
+      :single="true"
+      :outerQueryParams="this.bo"
+    />
+    <!-- 组织参照 -->
+    <OrgRef ref="orgSelect" @doSubmit="orgSelectionsToInput" :single="true" />
+    <!-- 部门参照 -->
+    <DeptRef
+      ref="deptSelect"
+      @doSubmit="deptSelectionsToInput"
+      :single="true"
+    />
+    <!-- 员工参照 -->
+    <StaffRef
+      ref="staffSelect"
+      @doSubmit="staffSelectionsToInput"
+      :single="true"
+    />
   </div>
 </template>
 
@@ -62,12 +436,25 @@
 <script>
 import { listTask, getTask, delTask, addTask, updateTask } from "@/api/business/spd/bo/task";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-import TaskList from '../task/taskList.vue'
+import CustomerRef from "@/views/business/spd/bo/refer/customer/index.vue";
+import ContactRef from "@/views/business/spd/bo/refer/contact/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 BehaviorList from "../behavior/behaviorList.vue";
+import { getPsnPost } from "@/api/business/spd/bo/authority";
 
 export default {
   name: "Task",
-  dicts: ['mk_bo_taskstate','mk_bo_tasktype'],
-  components: {TaskList},
+    dicts: ["mk_bo_taskstate", "mk_bo_tasktype", "mk_bo_stage"],
+    components: {
+      CustomerRef,
+      ContactRef,
+      OrgRef,
+      DeptRef,
+      StaffRef,
+      BehaviorList,
+    },
   data() {
     return {
       // 遮罩层
@@ -124,6 +511,12 @@ export default {
       },
       //重新加载子组件参数
       timer: '',
+      // 操作撞他
+      operatingState:'',
+      // 所选商机
+      curBo:{},
+      // 权限
+      boAuthority:{},
     };
   },
   created() {
@@ -133,6 +526,7 @@ export default {
     /** 查询任务列表 */
     getList() {
       this.loading = true;
+      this.queryParams.staff = this.$store.state.user.id;
       listTask(this.queryParams).then(response => {
         this.taskList = response.rows;
         this.total = response.total;
@@ -179,8 +573,7 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
-      this.timer = new Date().getTime();
-      // this.getList();
+      this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
@@ -193,6 +586,22 @@ export default {
       this.single = selection.length!==1
       this.multiple = !selection.length
     },
+    /** 查看按钮操作 */
+    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 = "基础信息";
+        //加载权限数据
+        getPsnPost(this.form.bo).then((response) => {
+          this.boAuthority = response.data;
+          this.timer = new Date().getTime();
+        });
+      });
+    },
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
@@ -241,7 +650,7 @@ export default {
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {});
     },
-	/** 行动序号 */
+	  /** 行动序号 */
     rowMkBoBehaviorIndex({ row, rowIndex }) {
       row.index = rowIndex + 1;
     },
@@ -285,12 +694,55 @@ export default {
     handleMkBoBehaviorSelectionChange(selection) {
       this.checkedMkBoBehavior = selection.map(item => item.index)
     },
-    /** 导出按钮操作 */
-    handleExport() {
-      this.download('drp-business/task/export', {
-        ...this.queryParams
-      }, `task_${new Date().getTime()}.xlsx`)
-    }
+    // 触发客户参照列表
+    refereCustomer() {
+      this.$refs.customerSelect.init();
+    },
+    //客户参照列表选择后
+    customerSelectionsToInput(selections) {
+      this.form.customer = selections[0].id;
+      this.form.customerName = selections[0].name;
+    },
+    // 触发联系人参照列表
+    refereContact() {
+      this.$refs.contactSelect.init();
+    },
+    //联系人参照列表选择后
+    contactSelectionsToInput(selections) {
+      this.form.linkman = selections[0].id;
+      this.form.linkmanName = selections[0].name;
+    },
+    // 触发组织参照列表
+    refereOrg() {
+      this.$refs.orgSelect.init();
+    },
+    //组织参照列表选择后
+    orgSelectionsToInput(selections) {
+      this.form.salesOrg = selections[0].deptId;
+      this.form.salesOrgName = selections[0].deptName;
+    },
+    // 触发部门参照列表
+    refereDept() {
+      this.$refs.deptSelect.init();
+    },
+    //部门参照列表选择后
+    deptSelectionsToInput(selections) {
+      this.form.dept = selections[0].deptId;
+      this.form.deptName = selections[0].deptName;
+    },
+    // 触发员工参照列表
+    refereStaff() {
+      this.$refs.staffSelect.init();
+    },
+    //员工参照列表选择后
+    staffSelectionsToInput(selections) {
+      this.form.staff = selections[0].userId;
+      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>

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov