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

Merge branch 'master' of http://172.16.100.139/new-business/drp-web

002390 преди 2 години
родител
ревизия
3e062463f0

+ 17 - 8
src/api/business/spd/bo/basic.js

@@ -41,6 +41,15 @@ export function updateBasic(data) {
   })
 }
 
+// 修改商机流程信息
+export function updateBasicFlow(data) {
+  return request({
+    url: '/mk/bo/flow',
+    method: 'put',
+    data: data
+  })
+}
+
 
 // 删除商机基础信息
 export function delBasic(id) {
@@ -50,14 +59,6 @@ export function delBasic(id) {
   })
 }
 
-//查询固定商机的行动列表
-export function getBehaviorList(id) {
-  return request({
-    url: '/mk/bo/basic/getBehaviorList/' + id,
-    method: 'get'
-  })
-}
-
 // 删除商机附件
 export function delAccessory(boId,f,id) {
   return request({
@@ -65,3 +66,11 @@ export function delAccessory(boId,f,id) {
     method: 'delete'
   })
 }
+
+//流程下一步
+export function nextFlow(boId,boStage) {
+  return request({
+    url: '/mk/bo/basic/flow?boId=' + boId + '&boStage=' + boStage,
+    method: 'put'
+  })
+}

+ 32 - 8
src/api/requisition/basic.js

@@ -39,11 +39,35 @@ export function delReq(id) {
   })
 }
 
-// 参照-四级分类
-// export function getMaterialClass(data) {
-//   return request({
-//     url: `/system/archival/queryMaterialClassify`,
-//     method: 'post',
-//     data: data
-//   })
-// }
+// 参照-计量单位
+export function getUnit(data) {
+  return request({
+    url: `/system/archival/queryUnit`,
+    method: 'post',
+    data: data
+  })
+}
+// 参照-产地
+export function getPlace(data) {
+  return request({
+    url: `/system/archival/queryOrigin`,
+    method: 'post',
+    data: data
+  })
+}
+// 参照-税类
+export function getTax(data) {
+  return request({
+    url: `/system/archival/queryTaxrate`,
+    method: 'post',
+    data: data
+  })
+}
+// 参照-采购员
+export function getStaff(data) {
+  return request({
+    url: `/system/archival/queryStaffInfo`,
+    method: 'post',
+    data: data
+  })
+}

+ 1 - 1
src/components/PopDialog/fourClass.vue

@@ -2,7 +2,7 @@
   <div>
     <el-dialog
       title="物料分类选择"
-      width="1000px"
+      width="500px"
       :close-on-click-modal="false"
       :append-to-body="true"
       v-dialogDrag

+ 269 - 0
src/components/PopDialog/place.vue

@@ -0,0 +1,269 @@
+<template>
+  <div>
+    <el-dialog
+      title="产地选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible"
+    >
+      <el-container style="height: 500px">
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px; height: 30px">
+            <el-form
+              size="small"
+              :inline="true"
+              ref="searchForm"
+              :model="searchForm"
+              @keyup.enter.native="refreshList()"
+              @submit.native.prevent
+            >
+              <el-form-item prop="code">
+                <el-input
+                  size="small"
+                  v-model="searchForm.code"
+                  placeholder="编号"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="searchForm.name"
+                  placeholder="名称"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  @click="refreshList()"
+                  size="small"
+                  icon="el-icon-search"
+                  >查询</el-button
+                >
+                <el-button
+                  @click="resetSearch()"
+                  size="small"
+                  icon="el-icon-refresh-right"
+                >重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="contractTable"
+              @select="handleSelectionChange"
+              height="calc(100% - 40px)"
+              style="width: 100%"
+            >
+              <el-table-column
+                type="selection"
+                header-align="center"
+                align="center"
+                width="50"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="id"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="id"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="名称"
+              >
+              </el-table-column>
+              <!-- <el-table-column
+                prop="contractAmount"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="合同金额"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="oppositeCompany"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="对方单位"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="signDate"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="签订时间"
+              >
+              </el-table-column> -->
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="pageNo"
+              :page-sizes="[5, 10, 15, 20]"
+              :page-size="pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper"
+            >
+            </el-pagination>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button
+          size="small"
+          @click="visible = false"
+          icon="el-icon-circle-close"
+          >关闭</el-button
+        >
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-circle-check"
+          @click="doSubmit()"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getPlace } from '@/api/requisition/basic'
+export default {
+  data() {
+    return {
+      searchForm: {
+        code: '',
+        name: ''
+      },
+      dataListAllSelections: [], // 所有选中的数据包含跨页数据
+      idKey: "id", // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false,
+    };
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    // 是否启用单选
+    single: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    init() {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData));
+        this.resetSearch();
+      });
+    },
+    // 获取数据列表
+    refreshList() {
+      this.loading = true;
+      getPlace({
+        pageNo: 1,
+        size: this.pageSize
+      }).then(({ data }) => {
+        console.log('data',data)
+        this.dataList = data.tableBody;
+        this.total = data.tableBody.length;
+        this.pageNo = data.current;
+        this.loading = false;
+        this.$nextTick(() => {
+          this.setSelectRow();
+        });
+      });
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.pageSize = val;
+      this.pageNo = 1;
+      this.refreshList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.pageNo = val;
+      this.refreshList();
+    },
+    // 排序
+    resetSearch() {
+      this.$refs.searchForm.resetFields();
+      this.refreshList();
+    },
+    // 选中数据
+    handleSelectionChange(selection, row) {
+      if (this.single && selection.length > 1) {
+        this.$refs.contractTable.clearSelection();
+        this.$refs.contractTable.toggleRowSelection(row);
+      }
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 设置选中的方法
+    setSelectRow() {
+      this.$refs.contractTable.clearSelection();
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        return;
+      }
+      for (let i = 0; i < this.dataList.length; i++) {
+        if (this.dataListAllSelections.some(item => item[this.idKey] == this.dataList[i][this.idKey])) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.contractTable.toggleRowSelection(this.dataList[i], true);
+        }
+      }
+    },
+    doSubmit() {
+      this.visible = false;
+      console.log('选择的数据?',this.dataListAllSelections)
+      this.$emit("doSubmit", this.dataListAllSelections);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 4 - 4
src/components/PopDialog/productFactory.vue

@@ -24,7 +24,7 @@
                 <el-input
                   size="small"
                   v-model="searchForm.code"
-                  placeholder="物料编号"
+                  placeholder="编号"
                   clearable
                 ></el-input>
               </el-form-item>
@@ -32,7 +32,7 @@
                 <el-input
                   size="small"
                   v-model="searchForm.name"
-                  placeholder="物料名称"
+                  placeholder="名称"
                   clearable
                 ></el-input>
               </el-form-item>
@@ -71,12 +71,12 @@
               >
               </el-table-column>
               <el-table-column
-                prop="code"
+                prop="id"
                 header-align="center"
                 align="left"
                 sortable="custom"
                 min-width="90"
-                label="code"
+                label="id"
               >
               </el-table-column>
               <el-table-column

+ 269 - 0
src/components/PopDialog/staff.vue

@@ -0,0 +1,269 @@
+<template>
+  <div>
+    <el-dialog
+      title="采购员选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible"
+    >
+      <el-container style="height: 500px">
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px; height: 30px">
+            <el-form
+              size="small"
+              :inline="true"
+              ref="searchForm"
+              :model="searchForm"
+              @keyup.enter.native="refreshList()"
+              @submit.native.prevent
+            >
+              <el-form-item prop="code">
+                <el-input
+                  size="small"
+                  v-model="searchForm.code"
+                  placeholder="编号"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="searchForm.name"
+                  placeholder="名称"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  @click="refreshList()"
+                  size="small"
+                  icon="el-icon-search"
+                  >查询</el-button
+                >
+                <el-button
+                  @click="resetSearch()"
+                  size="small"
+                  icon="el-icon-refresh-right"
+                >重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="contractTable"
+              @select="handleSelectionChange"
+              height="calc(100% - 40px)"
+              style="width: 100%"
+            >
+              <el-table-column
+                type="selection"
+                header-align="center"
+                align="center"
+                width="50"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="id"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="id"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="名称"
+              >
+              </el-table-column>
+              <!-- <el-table-column
+                prop="contractAmount"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="合同金额"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="oppositeCompany"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="对方单位"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="signDate"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="签订时间"
+              >
+              </el-table-column> -->
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="pageNo"
+              :page-sizes="[5, 10, 15, 20]"
+              :page-size="pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper"
+            >
+            </el-pagination>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button
+          size="small"
+          @click="visible = false"
+          icon="el-icon-circle-close"
+          >关闭</el-button
+        >
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-circle-check"
+          @click="doSubmit()"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getStaff } from '@/api/requisition/basic'
+export default {
+  data() {
+    return {
+      searchForm: {
+        code: '',
+        name: ''
+      },
+      dataListAllSelections: [], // 所有选中的数据包含跨页数据
+      idKey: "id", // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false,
+    };
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    // 是否启用单选
+    single: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    init() {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData));
+        this.resetSearch();
+      });
+    },
+    // 获取数据列表
+    refreshList() {
+      this.loading = true;
+      getStaff({
+        pageNo: 1,
+        size: this.pageSize
+      }).then(({ data }) => {
+        console.log('data',data)
+        this.dataList = data.tableBody;
+        this.total = data.tableBody.length;
+        this.pageNo = data.current;
+        this.loading = false;
+        this.$nextTick(() => {
+          this.setSelectRow();
+        });
+      });
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.pageSize = val;
+      this.pageNo = 1;
+      this.refreshList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.pageNo = val;
+      this.refreshList();
+    },
+    // 排序
+    resetSearch() {
+      this.$refs.searchForm.resetFields();
+      this.refreshList();
+    },
+    // 选中数据
+    handleSelectionChange(selection, row) {
+      if (this.single && selection.length > 1) {
+        this.$refs.contractTable.clearSelection();
+        this.$refs.contractTable.toggleRowSelection(row);
+      }
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 设置选中的方法
+    setSelectRow() {
+      this.$refs.contractTable.clearSelection();
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        return;
+      }
+      for (let i = 0; i < this.dataList.length; i++) {
+        if (this.dataListAllSelections.some(item => item[this.idKey] == this.dataList[i][this.idKey])) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.contractTable.toggleRowSelection(this.dataList[i], true);
+        }
+      }
+    },
+    doSubmit() {
+      this.visible = false;
+      console.log('选择的数据?',this.dataListAllSelections)
+      this.$emit("doSubmit", this.dataListAllSelections);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 269 - 0
src/components/PopDialog/tax.vue

@@ -0,0 +1,269 @@
+<template>
+  <div>
+    <el-dialog
+      title="物料税类选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible"
+    >
+      <el-container style="height: 500px">
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px; height: 30px">
+            <el-form
+              size="small"
+              :inline="true"
+              ref="searchForm"
+              :model="searchForm"
+              @keyup.enter.native="refreshList()"
+              @submit.native.prevent
+            >
+              <el-form-item prop="code">
+                <el-input
+                  size="small"
+                  v-model="searchForm.code"
+                  placeholder="编号"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="searchForm.name"
+                  placeholder="名称"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  @click="refreshList()"
+                  size="small"
+                  icon="el-icon-search"
+                  >查询</el-button
+                >
+                <el-button
+                  @click="resetSearch()"
+                  size="small"
+                  icon="el-icon-refresh-right"
+                >重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="contractTable"
+              @select="handleSelectionChange"
+              height="calc(100% - 40px)"
+              style="width: 100%"
+            >
+              <el-table-column
+                type="selection"
+                header-align="center"
+                align="center"
+                width="50"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="id"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="id"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="名称"
+              >
+              </el-table-column>
+              <!-- <el-table-column
+                prop="contractAmount"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="合同金额"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="oppositeCompany"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="对方单位"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="signDate"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="签订时间"
+              >
+              </el-table-column> -->
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="pageNo"
+              :page-sizes="[5, 10, 15, 20]"
+              :page-size="pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper"
+            >
+            </el-pagination>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button
+          size="small"
+          @click="visible = false"
+          icon="el-icon-circle-close"
+          >关闭</el-button
+        >
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-circle-check"
+          @click="doSubmit()"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getTax } from '@/api/requisition/basic'
+export default {
+  data() {
+    return {
+      searchForm: {
+        code: '',
+        name: ''
+      },
+      dataListAllSelections: [], // 所有选中的数据包含跨页数据
+      idKey: "id", // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false,
+    };
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    // 是否启用单选
+    single: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    init() {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData));
+        this.resetSearch();
+      });
+    },
+    // 获取数据列表
+    refreshList() {
+      this.loading = true;
+      getTax({
+        pageNo: 1,
+        size: this.pageSize
+      }).then(({ data }) => {
+        console.log('data',data)
+        this.dataList = data.tableBody;
+        this.total = data.tableBody.length;
+        this.pageNo = data.current;
+        this.loading = false;
+        this.$nextTick(() => {
+          this.setSelectRow();
+        });
+      });
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.pageSize = val;
+      this.pageNo = 1;
+      this.refreshList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.pageNo = val;
+      this.refreshList();
+    },
+    // 排序
+    resetSearch() {
+      this.$refs.searchForm.resetFields();
+      this.refreshList();
+    },
+    // 选中数据
+    handleSelectionChange(selection, row) {
+      if (this.single && selection.length > 1) {
+        this.$refs.contractTable.clearSelection();
+        this.$refs.contractTable.toggleRowSelection(row);
+      }
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 设置选中的方法
+    setSelectRow() {
+      this.$refs.contractTable.clearSelection();
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        return;
+      }
+      for (let i = 0; i < this.dataList.length; i++) {
+        if (this.dataListAllSelections.some(item => item[this.idKey] == this.dataList[i][this.idKey])) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.contractTable.toggleRowSelection(this.dataList[i], true);
+        }
+      }
+    },
+    doSubmit() {
+      this.visible = false;
+      console.log('选择的数据?',this.dataListAllSelections)
+      this.$emit("doSubmit", this.dataListAllSelections);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 269 - 0
src/components/PopDialog/unit.vue

@@ -0,0 +1,269 @@
+<template>
+  <div>
+    <el-dialog
+      title="计量单位选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible"
+    >
+      <el-container style="height: 500px">
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px; height: 30px">
+            <el-form
+              size="small"
+              :inline="true"
+              ref="searchForm"
+              :model="searchForm"
+              @keyup.enter.native="refreshList()"
+              @submit.native.prevent
+            >
+              <el-form-item prop="code">
+                <el-input
+                  size="small"
+                  v-model="searchForm.code"
+                  placeholder="编号"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="searchForm.name"
+                  placeholder="名称"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  @click="refreshList()"
+                  size="small"
+                  icon="el-icon-search"
+                  >查询</el-button
+                >
+                <el-button
+                  @click="resetSearch()"
+                  size="small"
+                  icon="el-icon-refresh-right"
+                >重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="contractTable"
+              @select="handleSelectionChange"
+              height="calc(100% - 40px)"
+              style="width: 100%"
+            >
+              <el-table-column
+                type="selection"
+                header-align="center"
+                align="center"
+                width="50"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="code"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="code"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="名称"
+              >
+              </el-table-column>
+              <!-- <el-table-column
+                prop="contractAmount"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="合同金额"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="oppositeCompany"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="对方单位"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="signDate"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="110"
+                label="签订时间"
+              >
+              </el-table-column> -->
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="pageNo"
+              :page-sizes="[5, 10, 15, 20]"
+              :page-size="pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper"
+            >
+            </el-pagination>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button
+          size="small"
+          @click="visible = false"
+          icon="el-icon-circle-close"
+          >关闭</el-button
+        >
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-circle-check"
+          @click="doSubmit()"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getUnit } from '@/api/requisition/basic'
+export default {
+  data() {
+    return {
+      searchForm: {
+        code: '',
+        name: ''
+      },
+      dataListAllSelections: [], // 所有选中的数据包含跨页数据
+      idKey: "id", // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false,
+    };
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    // 是否启用单选
+    single: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    init() {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData));
+        this.resetSearch();
+      });
+    },
+    // 获取数据列表
+    refreshList() {
+      this.loading = true;
+      getUnit({
+        pageNo: 1,
+        size: this.pageSize
+      }).then(({ data }) => {
+        console.log('data',data)
+        this.dataList = data.tableBody;
+        this.total = data.tableBody.length;
+        this.pageNo = data.current;
+        this.loading = false;
+        this.$nextTick(() => {
+          this.setSelectRow();
+        });
+      });
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.pageSize = val;
+      this.pageNo = 1;
+      this.refreshList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.pageNo = val;
+      this.refreshList();
+    },
+    // 排序
+    resetSearch() {
+      this.$refs.searchForm.resetFields();
+      this.refreshList();
+    },
+    // 选中数据
+    handleSelectionChange(selection, row) {
+      if (this.single && selection.length > 1) {
+        this.$refs.contractTable.clearSelection();
+        this.$refs.contractTable.toggleRowSelection(row);
+      }
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 设置选中的方法
+    setSelectRow() {
+      this.$refs.contractTable.clearSelection();
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        return;
+      }
+      for (let i = 0; i < this.dataList.length; i++) {
+        if (this.dataListAllSelections.some(item => item[this.idKey] == this.dataList[i][this.idKey])) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.contractTable.toggleRowSelection(this.dataList[i], true);
+        }
+      }
+    },
+    doSubmit() {
+      this.visible = false;
+      console.log('选择的数据?',this.dataListAllSelections)
+      this.$emit("doSubmit", this.dataListAllSelections);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 429 - 152
src/views/business/spd/bo/basic/details.vue

@@ -1,6 +1,7 @@
 <!-- 商机-详情 -->
 <template>
   <div class="md-content">
+    <!-- 头部信息 -->
     <el-row type="flex" justify="space-between">
       <el-col :span="6">
         <el-button size="small" @click="handleBack">返回</el-button>
@@ -45,8 +46,9 @@
         </el-col>
       </el-button-group>
     </el-row>
-
+    <!-- 主多页签 -->
     <el-tabs v-model="masterTabs" @tab-click="masterTabsSwitch">
+      <!-- 基本信息页签 -->
       <el-tab-pane label="基本信息" name="first">
         项目流程
         <el-steps :active="form.basic.boStage" finish-status="success">
@@ -63,12 +65,18 @@
           <el-step title="实施交付"></el-step>
           <el-step title="上线仪式"></el-step>
         </el-steps>
-        <el-button style="margin-top: 12px;" @click="next">下一步</el-button>
-        <el-row>
-          基本信息
-        </el-row>
+        <!-- 流程按钮组 -->
+        <div style = "text-align:right">
+          <el-button type="primary" style="margin-top: 12px;" v-hasPermi="['mk:bo:basic:identify']" @click="next" v-if="form.basic.boStage == 0"> 审核 </el-button>
+          <!-- <el-button style="margin-top: 12px;" @click="before" v-if="form.basic.boStage > 1">上一步</el-button> -->
+          <el-button style="margin-top: 12px;" v-hasPermi="['mk:bo:basic:next']" @click="next" v-if="!(form.basic.boStage == 0 || form.basic.boFlow.projectApproval == 0) && !isUpdate">下一步</el-button>
+        </div>
+        <!-- 基本信息 -->
         <el-form ref="form" :model="form.basic" label-width="80px">
           <el-row>
+            基本信息
+          </el-row>
+          <el-row>
             <el-col :span="8">
               <el-form-item label="商机来源" prop="boSource">
                 <el-select v-model="form.basic.boSource" placeholder="商机来源" :disabled="true">
@@ -102,7 +110,7 @@
           <el-row>
             <el-col :span="8">
               <el-form-item label="医院营收总额" prop="totalHosRevenue">
-                <el-select v-model="form.totalHosRevenue" placeholder="请输入医院营收总额" :disabled="true">
+                <el-select v-model="form.basic.totalHosRevenue" placeholder="请输入医院营收总额" :disabled="true">
                   <el-option
                     v-for="dict in dict.type.mk_bo_total_revenue"
                     :key="dict.value"
@@ -126,20 +134,47 @@
           </el-row>
           <el-row>
             <el-form-item label="商机内容" prop="boContent">
-                <el-input v-model="form.basic.boContent" placeholder="商机内容" :disabled="true"/>
-              </el-form-item>
+              <el-input v-model="form.basic.boContent" placeholder="商机内容" :disabled="true"/>
+            </el-form-item>
           </el-row>
         </el-form>
-        <el-row>
-          流程信息
+        <!-- 编辑按钮组 -->
+        <el-row type="flex" class="row-bg" justify="end">
+          <el-col :span="24">
+            <dev>流程信息</dev>
+          </el-col>
+          <el-col :span="2" v-show="!isUpdate">
+            <div class="grid-content bg-purple">
+              <el-button v-hasPermi="['mk:bo:basic:detail:edit']" @click="modifyButton">修改</el-button>
+            </div>
+          </el-col>
+          <el-col :span="2" v-show="isUpdate">
+            <div class="grid-content bg-purple-light">
+              <el-button v-hasPermi="['mk:bo:basic:detail:edit']" @click="cancelButton">取消</el-button>
+            </div>
+          </el-col>
+          <el-col :span="2" v-show="isUpdate">
+            <div class="grid-content bg-purple">
+              <el-button v-hasPermi="['mk:bo:basic:detail:edit']" @click="saveButton">保存</el-button>
+            </div>
+          </el-col>
         </el-row>
+        <!-- 次多页签 -->
         <el-tabs v-model="secondTabs" @tab-click="secondTabsSwitch">
+          <!-- 阶段动作1 -->
           <el-tab-pane label="阶段动作" name="jd1" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 0">
-            <el-form ref="form" :model="form.basic" :rules="rules">
+            <el-form ref="form" :model="form.basic" :rules="rules" label-width="120px">
               <el-row>
                 <el-col :span="10">
                   <el-form-item label="医院应收总额" prop="totalHosRevenue">
-                    <el-input v-model="form.basic.totalHosRevenue" placeholder="医院应收总额" :disabled="true"/>
+                    <el-select v-model="form.basic.totalHosRevenue" placeholder="请输入医院营收总额" :disabled="true">
+                      <el-option
+                        v-for="dict in dict.type.mk_bo_total_revenue"
+                        :key="dict.value"
+                        :label="dict.label"
+                        :value="dict.value"
+                      ></el-option>
+                    </el-select>
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -152,18 +187,19 @@
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 阶段动作2 -->
           <el-tab-pane label="阶段动作" name="jd2" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 1">
-            <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
+            <el-form ref="form" :model="form.basic.boFlow" :rules="rules" >
               <el-row>
                 项目立项是否通过
-                <el-radio v-model = form.basic.boFlow.projectApproval label="1">是</el-radio>
-                <el-radio v-model = form.basic.boFlow.projectApproval label="0">否</el-radio>
+                <el-radio v-model = form.basic.boFlow.projectApproval label="1" :disabled="!isUpdate">是</el-radio>
+                <el-radio v-model = form.basic.boFlow.projectApproval label="0" :disabled="!isUpdate">否</el-radio>
               </el-row>
               <el-row v-if="form.basic.boFlow.projectApproval == 1">
                 <el-col :span="1.5">
                   <el-input v-model="form.basic.boFlow.businessCouncilAccessoryName" placeholder="请上传商机审议会" :disabled="true"/>
                 </el-col>
-                <el-col :span="1.5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.businessCouncilAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -172,6 +208,18 @@
                     @click="uploadAccessory(`business_council_accessory`)"
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.businessCouncilAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.businessCouncilAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.businessCouncilAccessoryUrlId'>
                   <el-button
                     size="mini"
                     type="text"
@@ -185,7 +233,7 @@
                 <el-col :span="1.5">
                   <el-input v-model="form.basic.boFlow.projectProposalAccessoryName" placeholder="请上传立项书" :disabled="true"/>
                 </el-col>
-                <el-col :span="1.5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.projectProposalAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -195,14 +243,34 @@
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
                 </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.projectProposalAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.projectProposalAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.projectProposalAccessoryUrlId'>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory(`project_proposal_accessory`,1)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
               </el-row>
               <el-row>
                 <el-col :span="10" v-if="form.basic.boFlow.projectApproval == 0">
-                    项目未通过原因:<el-input v-model="form.basic.boFlow.noPassCause" />
+                    项目未通过原因:<el-input v-model="form.basic.boFlow.noPassCause" :disabled="!isUpdate"/>
                 </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 立项模板 -->
           <el-tab-pane label="立项模板" name="lx" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 1">
             <el-row>
               <el-button @click="pojproDownload">标准立项书</el-button>
@@ -211,10 +279,11 @@
               <el-button @click="pojproDownload">商机审会决议书</el-button>
             </el-row>
           </el-tab-pane>
+          <!-- 项目人员组成 -->
           <el-tab-pane label="项目人员组成" name="xmry" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 1">
-            <!-- <PojpsnList :boId="this.$route.params.id"/> -->
-            <PojpsnList :source = "'BoDetails'" :bo="pojpsnParame" v-if="secondTabs == 'xmry'"/>
+            <PojpsnList :source = "'BoDetails'" :bo="this.form.basic" v-if="secondTabs == 'xmry'"/>
           </el-tab-pane>
+          <!-- 方案模板 -->
           <el-tab-pane label="方案模板" name="fa" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 6">
             <el-row>
               <el-button @click="pojproDownload">售前提案文件模板</el-button>
@@ -232,13 +301,14 @@
               <el-button @click="pojproDownload">其他文件</el-button>
             </el-row>
           </el-tab-pane>
+          <!-- 售前提案 -->
           <el-tab-pane label="售前提案" name="sq" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 6">
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
               <el-row>
                 <el-col :span="1.5">
                   <el-input v-model="form.basic.boFlow.preSaleProposalAccessoryName" placeholder="请上传售前提案文件" :disabled="true"/>
                 </el-col>
-                <el-col :span="1.5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.preSaleProposalAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -248,9 +318,29 @@
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
                 </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.preSaleProposalAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.preSaleProposalAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.preSaleProposalAccessoryUrlId'>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory(`pre_sale_proposal_accessory`,1)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 邀请考察 -->
           <el-tab-pane label="邀请考察" name="kc" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 6">
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
               <el-row>
@@ -259,7 +349,8 @@
                     <el-date-picker
                       v-model="form.basic.boFlow.inspectStartTime"
                       type="datetime"
-                      placeholder="选择日期时间">
+                      placeholder="选择日期时间" 
+                      :disabled="!isUpdate">
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
@@ -268,7 +359,8 @@
                     <el-date-picker
                       v-model="form.basic.boFlow.inspectEndTime"
                       type="datetime"
-                      placeholder="选择日期时间">
+                      placeholder="选择日期时间" 
+                      :disabled="!isUpdate">
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
@@ -277,7 +369,7 @@
                 <el-col :span="1.5">
                   <el-input v-model="form.basic.boFlow.investigationReportAccessoryName" placeholder="请上传考察报告" :disabled="true"/>
                 </el-col>
-                <el-col :span="1.5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.investigationReportAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -287,9 +379,29 @@
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
                 </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.investigationReportAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.investigationReportAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.investigationReportAccessoryUrlId'>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory(`investigation_report_accessory`,1)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 开院务会 -->
           <el-tab-pane label="开院务会" name="kh" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 6">
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
               <el-row>
@@ -298,33 +410,37 @@
                     <el-date-picker
                       v-model="form.basic.boFlow.conferenceTime"
                       type="datetime"
-                      placeholder="选择日期时间">
+                      placeholder="选择日期时间"
+                      :disabled="!isUpdate">
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 院内立项 -->
           <el-tab-pane label="院内立项" name="yn" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 6">
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
               <el-row>
                 <el-col :span="5">
                   <el-form-item label="院内立项时间" prop="hospitalApprovalTime">
                     <el-date-picker
-                      v-model="form.basic.boFlow.conferenceTime"
+                      v-model="form.basic.boFlow.hospitalApprovalTime"
                       type="datetime"
-                      placeholder="选择日期时间">
+                      placeholder="选择日期时间"
+                      :disabled="!isUpdate">
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
                 <el-col :span="5">
                   <el-form-item label="院内立项牵头人" prop="hospitalApprovalInitiator">
-                    <el-input v-model="form.basic.boFlow.hospitalApprovalInitiator" placeholder="院内立项牵头人" />
+                    <el-input v-model="form.basic.boFlow.hospitalApprovalInitiator" placeholder="院内立项牵头人" :disabled="!isUpdate"/>
                   </el-form-item>
                 </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 进场调研 -->
           <el-tab-pane label="进场调研" name="jc" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 6">
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
               <el-row>
@@ -333,16 +449,17 @@
                     <el-date-picker
                       v-model="form.basic.boFlow.researchTime"
                       type="datetime"
-                      placeholder="选择日期时间">
+                      placeholder="选择日期时间"
+                      :disabled="!isUpdate">
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
               </el-row>
               <el-row>
                 <el-col :span="1.5">
-                  <el-input v-model="form.basic.boFlow.investigateReportAccessoryName" placeholder="调研报告" :disabled="true"/>
+                  <el-input v-model="form.basic.boFlow.investigateReportAccessoryName" placeholder="请上传调研报告" :disabled="true"/>
                 </el-col>
-                <el-col :span="1.5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.investigateReportAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -352,9 +469,29 @@
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
                 </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.investigateReportAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.investigateReportAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.investigateReportAccessoryUrlId'>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory(`investigation_report_accessory`,1)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 挂网投标 -->
           <el-tab-pane label="挂网投标" name="gw" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 7">
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
               <el-row>
@@ -363,16 +500,17 @@
                     <el-date-picker
                       v-model="form.basic.boFlow.hangingTime"
                       type="datetime"
-                      placeholder="选择日期时间">
+                      placeholder="选择日期时间"
+                      :disabled="!isUpdate">
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
-                <el-col :span="5">
-                  <el-form-item label="投标书" prop="researchTime">
-                    <el-input v-model="form.basic.boFlow.biddingDocumentsAccessoryName" placeholder="请上传投标书" :disabled="true"/>
-                  </el-form-item>
+              </el-row>
+              <el-row>
+                <el-col :span="1.5">
+                  <el-input v-model="form.basic.boFlow.biddingDocumentsAccessoryName" placeholder="请上传投标书" :disabled="true"/>
                 </el-col>
-                <el-col :span="5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.biddingDocumentsAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -382,24 +520,45 @@
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
                 </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.biddingDocumentsAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.biddingDocumentsAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.biddingDocumentsAccessoryUrlId'>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory(`bidding_documents_accessory`,1)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
+              </el-row>
+              <el-row>
                 <el-col :span="5">
                   <el-form-item label="我方优势" prop="researchTime">
-                    <el-input v-model="form.ourAdvantage" placeholder="我方优势" />
+                    <el-input v-model="form.ourAdvantage" placeholder="我方优势" :disabled="!isUpdate"/>
                   </el-form-item>
                 </el-col>
               </el-row>
               <el-row>
                 <el-col :span="5">
                   投标是否通过
-                  <el-radio v-model = form.basic.boFlow.biddingDocumentsPass label="1">是</el-radio>
-                  <el-radio v-model = form.basic.boFlow.biddingDocumentsPass label="0">否</el-radio>
+                  <el-radio v-model = form.basic.boFlow.biddingDocumentsPass label="1" :disabled="!isUpdate">是</el-radio>
+                  <el-radio v-model = form.basic.boFlow.biddingDocumentsPass label="0" :disabled="!isUpdate">否</el-radio>
                 </el-col>
               </el-row>
               <el-row v-if="form.basic.boFlow.biddingDocumentsPass == 1">
                 <el-col :span="1.5">
-                  <el-input v-model="form.basic.boFlow.letterAcceptanceAccessoryName" placeholder="中标通知书" :disabled="true"/>
+                  <el-input v-model="form.basic.boFlow.letterAcceptanceAccessoryName" placeholder="请上传中标通知书" :disabled="true"/>
                 </el-col>
-                <el-col :span="1.5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.letterAcceptanceAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -409,9 +568,29 @@
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
                 </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.letterAcceptanceAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.letterAcceptanceAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.letterAcceptanceAccessoryUrlId'>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory(`letter_acceptance_accessory`,1)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 合同签订 -->
           <el-tab-pane label="合同签订" name="ht" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 7">
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
               <el-row>
@@ -420,16 +599,17 @@
                     <el-date-picker
                       v-model="form.basic.boFlow.contractSigningTime"
                       type="datetime"
-                      placeholder="选择日期时间">
+                      placeholder="选择日期时间"
+                      :disabled="!isUpdate">
                     </el-date-picker>
                   </el-form-item>
                 </el-col>
               </el-row>
               <el-row>
-                <el-col :span="5">
-                  <el-input v-model="form.basic.boFlow.contractDocumentAccessoryName" placeholder="合同文件" :disabled="true"/>
+                <el-col :span="1.5">
+                  <el-input v-model="form.basic.boFlow.contractDocumentAccessoryName" placeholder="请上传合同文件" :disabled="true"/>
                 </el-col>
-                <el-col :span="5">
+                <el-col :span="1.5" v-show='!form.basic.boFlow.contractDocumentAccessoryUrlId'>
                   <el-button
                     type="info"
                     plain
@@ -439,60 +619,83 @@
                     v-hasPermi="['system:user:import']"
                   >上传</el-button>
                 </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.contractDocumentAccessoryUrlId'>
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(form.basic.boFlow.contractDocumentAccessoryUrlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+                <el-col :span="1.5" v-show='form.basic.boFlow.contractDocumentAccessoryUrlId'>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory(`contract_document_accessory`,1)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
               </el-row>
             </el-form>
           </el-tab-pane>
+          <!-- 跟进记录 -->
           <el-tab-pane label="跟进记录" name="gj" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 0 || form.basic.boStage == 1 || form.basic.boStage == 6 || form.basic.boStage == 7">
-            <BehaviorList :source = "'BoDetails'" :bo="behaviorParame" v-if="secondTabs == 'gj'"/>
+            <BehaviorList :source = "'BoDetails'" :bo="this.form.basic" v-if="secondTabs == 'gj'"/>
           </el-tab-pane>
         </el-tabs>
-        <el-row>
-          其它信息
-        </el-row>
+        <!-- 其它信息 -->
         <el-form ref="form" :model="form.basic" label-width="80px">
           <el-row>
+            其它信息
+          </el-row>
+          <el-row>
             <el-col :span="8">
               <el-form-item label="销售组织" prop="marketingOrganizingName">
-                <el-input v-model="form.basic.marketingOrganizingName" placeholder="销售组织" :disabled="true"/>
+                <el-input v-model="form.basic.marketingOrganizingName" placeholder="" :disabled="true"/>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="销售区域" prop="marketingArea">
-                <el-input v-model="form.basic.marketingArea" placeholder="销售区域" :disabled="true"/>
+                <el-input v-model="form.basic.marketingArea" placeholder="" :disabled="true"/>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="部门" prop="deptName">
-                <el-input v-model="form.basic.deptName" placeholder="部门" :disabled="true"/>
+                <el-input v-model="form.basic.deptName" placeholder="" :disabled="true"/>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="8">
               <el-form-item label="负责人" prop="principalName">
-                <el-input v-model="form.basic.principalName" placeholder="负责人" :disabled="true"/>
+                <el-input v-model="form.basic.principalName" placeholder="" :disabled="true"/>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="创建人" prop="createBy">
-                <el-input v-model="form.basic.createBy" placeholder="创建人" :disabled="true"/>
+                <el-input v-model="form.basic.createBy" placeholder="" :disabled="true"/>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="创建时间" prop="createTime">
-                <el-input v-model="form.basic.createTime" placeholder="创建时间" :disabled="true"/>
+                <el-input v-model="form.basic.createTime" placeholder="" :disabled="true"/>
               </el-form-item>
             </el-col>
           </el-row>
         </el-form>
-
       </el-tab-pane>
+      <!-- 商机任务页签 -->
       <el-tab-pane label="商机任务" name="second">
-        <TaskList :source = "'BoDetails'" :bo="taskParame" v-if="masterTabs == 'second'"/>
+        <TaskList :source = "'BoDetails'" :bo="this.form.basic" v-if="masterTabs == 'second'"/>
       </el-tab-pane>
+      <!-- 联系人页签 -->
       <el-tab-pane label="商机联系人" name="third">
-        <ContactList :boId="this.$route.params.id"/>
+        <ContactList :source = "'BoDetails'" :bo="this.form.basic" v-if="masterTabs == 'third'"/>
       </el-tab-pane>
+      <!-- 附件页签 -->
       <el-tab-pane label="附件信息" name="fourth">
         <el-row :gutter="10" class="mb8">
           <el-col :span="1.5">
@@ -512,19 +715,32 @@
           <el-table-column label="名称" align="center" prop="fileName" />
           <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
             <template slot-scope="scope">
-              <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-delete"
-                @click="deleteAccessory(`list`,scope.row)"
-                v-hasPermi="['system:basic:remove']"
-              >删除</el-button>
+              <el-row>
+                <el-col :span="1.5">
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    @click="deleteAccessory('list' , scope.row)"
+                    v-hasPermi="['system:basic:remove']"
+                  >删除</el-button>
+                </el-col>
+                <el-col :span="1.5">
+                  <el-button
+                    type="warning"
+                    plain
+                    icon="el-icon-download"
+                    size="mini"
+                    @click="exportAccessory(scope.row.urlId)"
+                    v-hasPermi="['system:user:export']"
+                  >下载</el-button>
+                </el-col>
+              </el-row>
             </template>
           </el-table-column>
         </el-table>
       </el-tab-pane>
     </el-tabs>
-
     <!-- 上传对话框 -->
     <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
       <el-upload
@@ -552,20 +768,23 @@
 </template>
 
 <script>
-import {getBasic,getBehaviorList,delAccessory} from "@/api/business/spd/bo/basic";
-import { listTask, getTask, delTask, addTask, updateTask } from "@/api/business/spd/bo/task";
+import {getBasic,nextFlow,updateBasicFlow,delAccessory} from "@/api/business/spd/bo/basic";
 import { listAccessory, } from "@/api/business/spd/bo/accessory";
-import {listPojpsn} from "@/api/business/spd/bo/pojpsn";
 import { getToken } from "@/utils/auth";
 import TaskList from '../task/taskList.vue'
 import ContactList from '../contact/contactList.vue'
 import PojpsnList from '../pojpsn/pojpsnList.vue'
 import BehaviorList from '../behavior/behaviorList.vue'
+import axios from 'axios';
 
 export default {
+  //名称
   name: 'BoDetails',
+  //注册引入的组件
   components: {TaskList,ContactList,PojpsnList,BehaviorList},
-  dicts: ['mk_bo_type','mk_bo_state','mk_bo_winstate','mk_bo_source'],
+  //平台枚举
+  dicts: ['mk_bo_type','mk_bo_state','mk_bo_winstate','mk_bo_source','mk_bo_total_revenue'],
+  //数据
   data() {
       return {
         masterTabs: 'first',
@@ -574,27 +793,8 @@ export default {
         rules:{},
         // 基本信息
         form: {
-          basic:{
-            boFlow:{}
-          },
-          task:[],
-          contact:[],
+          basic:{},
           accessory:[],
-          pojpsn:[],
-          behavior:[],
-          pojpsn:[],
-        },
-        //任务查询参数
-        taskParame:{
-          bo: null,
-        },
-        //项目成员查询参数
-        pojpsnParame:{
-          bo: null,
-        },
-        //行动查询参数
-        behaviorParame:{
-          bo: null,
         },
         // 上传参数
         upload: {
@@ -611,8 +811,35 @@ export default {
           // 上传的地址
           url: process.env.VUE_APP_BASE_API + "/mk/bo/basic/upload"
         },
+        //单据当前状态
+        isUpdate: false,
       }
   },
+  //监听属性
+  watch:{
+    //阶段
+    'form.basic.boStage':{
+      handler(newName, oldName) {
+        console.log(newName, oldName);
+        switch(newName) {
+          case 0:
+            this.secondTabs = 'jd1';
+            break;
+          case 1:
+            this.secondTabs = 'jd2';
+            break;
+          case 6:
+            this.secondTabs = 'fa';
+            break;
+          case 7:
+            this.secondTabs = 'gw';
+            break;
+        }
+      },
+      immediate: true
+    },
+  },
+  //方法
   methods: {
     // 返回
     handleBack() {
@@ -620,54 +847,62 @@ export default {
     },
     //主多页签切换
     masterTabsSwitch(e) {
-        console.log('主标签页切换',e);
-        switch(e.name) {
-          case 'second':
-              //跟进记录
-              this.taskParame.bo = this.form.basic.id;
-              break;
-          case 'third':
-              //获取联系人
-              break;
-          case 'fourth':
-              //获取附件列表
-              listAccessory(this.form.basic.id).then(response => {
-                this.form.accessory = response.rows;
-              });
-              break;
-          default:
-              break;
-        }
-    },
-    //次多页签切换
-    secondTabsSwitch(e) {
-        console.log('次标签页切换',e);
-        switch(e.name) {
-          case 'gj':
-              //跟进记录
-              this.behaviorParame.bo = this.form.basic.id;
-              break;
-          case 'xmry':
-              //项目成员
-              this.pojpsnParame.bo = this.form.basic.id;
-              break;
-          default:
-              break;
-        }
+      console.log('主标签页切换',e);
+      switch(e.name) {
+        case 'second':
+            //跟进记录
+            break;
+        case 'third':
+            //获取联系人
+            break;
+        case 'fourth':
+            //获取附件列表
+            listAccessory(this.form.basic.id).then(response => {
+              this.form.accessory = response.rows;
+            });
+            break;
+        default:
+            break;
+      }
     },
+    // //次多页签切换
+    // secondTabsSwitch(e) {
+    //     console.log('次标签页切换',e);
+    //     switch(e.name) {
+    //       case 'gj':
+    //           //跟进记录
+    //           this.behaviorParame.bo = this.form.basic.id;
+    //           break;
+    //       case 'xmry':
+    //           //项目成员
+    //           this.pojpsnParame.bo = this.form.basic.id;
+    //           break;
+    //       default:
+    //           break;
+    //     }
+    // },
     //下一步
     next() {
-        if(this.form.basic.boStage == 1){
-          this.form.basic.boStage += 5;
-        }else if(this.form.basic.boStage == 7){
-          this.form.basic.boStage += 5;
-        }else{
-          this.form.basic.boStage++;
-        }
-      },
-    //测试
-    handleAdd(){
-
+      //设置跳过部分步骤
+      var boStage = 0;
+      var boId = this.form.basic.id;
+      if(this.form.basic.boStage == 1){
+        boStage = this.form.basic.boStage + 5;
+      }else if(this.form.basic.boStage == 7){
+        boStage = this.form.basic.boStage + 5;
+      }else{
+        boStage = this.form.basic.boStage + 1;
+      }
+      nextFlow(boId,boStage).then(res => {
+        this.$modal.msgSuccess("流程扭转成功");
+        getBasic(this.$route.params.id).then(response => {
+          this.form.basic = response.data;
+        });
+      });
+    },
+    //上一步
+    before(){
+      this.form.basic.boStage--;
     },
     //上传附件公共方法
     uploadAccessory(f) {
@@ -678,6 +913,9 @@ export default {
     // 提交上传文件
     submitFileForm() {
       this.$refs.upload.submit();
+      getBasic(this.$route.params.id).then(response => {
+        this.form.basic = response.data;
+      });
     },
     // 文件上传中处理
     handleFileUploadProgress(event, file, fileList) {
@@ -688,32 +926,71 @@ export default {
       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.getList();
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "上传结果", { dangerouslyUseHTMLString: true });
+      this.getBasic();
+    },
+    //下载附件
+    exportAccessory(urlId){
+      console.log('urlId',urlId);
+      axios.get('https://test-sy.derom.com/document-center/fastdfs/download?id=' + urlId).then(response => {
+        let blob = new Blob([res.data], { type: "application/vnd.ms-excel;charset=utf-8", });
+        let fileName = decodeURI(res.headers["content-disposition"].split("=")[1]);
+         if ("download" in document.createElement("a")) {
+          let link = document.createElement("a");
+          link.download = fileName;
+          link.style.display = "none";
+          link.href = URL.createObjectURL(blob);
+          document.body.appendChild(link);
+          link.click();
+          URL.revokeObjectURL(link.href);
+          document.body.removeChild(link);
+         } else {
+          navigator.msSaveBlob(blob, fileName);
+         }
+      });
     },
     //删除附件
     deleteAccessory(f,row){
-      // console.log("flag",f);
-      // console.log("row",row);
-      // delAccessory(this.form.basic.id,f,row.id);
+      console.log("flag",f);
+      console.log("row",row);
       this.$modal.confirm('是否确认删除?').then(function() {
-        return delAccessory(this.form.basic.id,f,row.id);
       }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("删除成功");
+        delAccessory(this.form.basic.id,f,row.id).then(res => {
+          if(res.code == 200){
+            getBasic(this.$route.params.id).then(response => {
+              this.form.basic = response.data;
+            });
+            this.$modal.msgSuccess("删除成功");
+          }else{
+            this.$modal.msgSuccess("删除失败");
+          }
+        })
       }).catch(() => {});
     },
-
-    //立项书下载
-    //标准立项书
-    pojproDownload(){
-
+    //修改按钮
+    modifyButton(){
+      this.isUpdate = true;
     },
-    //商机审会决议书
-    pojproDownload1(){
-
+    //取消按钮
+    cancelButton(){
+      this.isUpdate = false;
+      getBasic(this.$route.params.id).then(response => {
+        this.form.basic = response.data;
+      });
+    },
+    //保存按钮
+    saveButton(){
+      console.log('this.form.basic.boFlow',this.form.basic.boFlow)
+      updateBasicFlow(this.form.basic.boFlow).then(response => {
+        this.$modal.msgSuccess("修改成功");
+        this.isUpdate = false;
+        getBasic(this.$route.params.id).then(response => {
+          this.form.basic = response.data;
+        });
+      });
     },
   },
+  //创建钩子
   created() {
     getBasic(this.$route.params.id).then(response => {
       this.form.basic = response.data;

+ 89 - 69
src/views/business/spd/bo/basic/index.vue

@@ -10,10 +10,10 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="商机来源" prop="boSource">
-        <el-select v-model="queryParams.boSource" placeholder="请输入商机来源">
+      <el-form-item label="商机类型" prop="boType">
+        <el-select v-model="form.boType" placeholder="请输入商机类型">
           <el-option
-            v-for="dict in dict.type.mk_bo_source"
+            v-for="dict in dict.type.mk_bo_type"
             :key="dict.value"
             :label="dict.label"
             :value="dict.value"
@@ -30,6 +30,16 @@
           ></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="商机来源" prop="boSource">
+        <el-select v-model="queryParams.boSource" placeholder="请输入商机来源">
+          <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="boStage">
         <el-select v-model="queryParams.boStage" placeholder="请输入商机阶段">
           <el-option
@@ -70,7 +80,7 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['system:basic:add']"
+          v-hasPermi="['mk:bo:basic:add']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -81,7 +91,7 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['system:basic:edit']"
+          v-hasPermi="['mk:bo:basic:edit']"
         >修改</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -92,19 +102,9 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['system:basic:remove']"
+          v-hasPermi="['mk:bo:basic:remove']"
         >删除</el-button>
       </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['system:basic:export']"
-        >导出</el-button>
-      </el-col> -->
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -132,42 +132,36 @@
         </template>
       </el-table-column>
       <el-table-column label="客户名称" align="center" prop="customerName" />
-      <el-table-column label="推荐人" align="center" prop="referrer" />
-      <el-table-column label="医院营收总额" align="center" prop="totalHosRevenue" >
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.mk_bo_total_revenue" :value="scope.row.totalHosRevenue"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="医院耗材预估值" align="center" prop="hosDiscreetValue" />
-      <el-table-column label="商机内容" align="center" prop="boContent" />
+      <el-table-column label="医院耗材预估值(万元)" align="center" prop="hosDiscreetValue" />
+      <el-table-column label="赢单率" align="center" prop="winningRate" />
       <el-table-column label="销售区域" align="center" prop="marketingArea" />
       <el-table-column label="销售组织" align="center" prop="marketingOrganizingName" />
       <el-table-column label="部门" align="center" prop="deptName" />
       <el-table-column label="商机负责人" align="center" prop="principalName" />
-      <el-table-column label="创建人" align="center" prop="createBy" />
+      <!-- <el-table-column label="创建人" align="center" prop="createBy" /> -->
       <el-table-column label="创建时间" align="center" prop="createTime" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <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-edit"
             @click="enterDetails(scope.row)"
-            v-hasPermi="['system:basic:edit']"
+            v-hasPermi="['mk:bo:basic:detail']"
           >进入详情</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:basic:edit']"
+            v-hasPermi="['mk:bo:basic:edit']"
           >修改</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['system:basic:remove']"
+            v-hasPermi="['mk:bo:basic:remove']"
           >删除</el-button>
         </template>
       </el-table-column>
@@ -243,32 +237,35 @@
         </el-row>
         <el-row>
           <el-col :span="8">
-            <el-form-item label="医院耗材预估值" prop="hosDiscreetValue">
+            <el-form-item label="医院耗材预估值(万元)" prop="hosDiscreetValue">
               <el-input v-model="form.hosDiscreetValue" placeholder="请输入医院耗材预估值" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
+        </el-row>
+        <el-form-item label="商机内容">
+          <editor v-model="form.boContent" :min-height="192"/>
+        </el-form-item>
+        <el-row>
+          <el-col :span="6">
             <el-form-item label="销售区域" prop="marketingArea">
               <el-input v-model="form.marketingArea" placeholder="请输入销售区域" />
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">
+          <el-col :span="6">
             <el-form-item label="销售组织" prop="marketingOrganizingName">
               <el-input v-model="form.marketingOrganizingName">
                 <el-button slot="append" icon="el-icon-more" @click="refereOrg"></el-button>
               </el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
+          <el-col :span="6">
             <el-form-item label="部门" prop="deptName">
               <el-input v-model="form.deptName">
                 <el-button slot="append" icon="el-icon-more" @click="refereDept"></el-button>
               </el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
+          <el-col :span="6">
             <el-form-item label="商机负责人" prop="principalName">
               <el-input v-model="form.principalName">
                 <el-button slot="append" icon="el-icon-more" @click="refereStaff"></el-button>
@@ -276,9 +273,6 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-form-item label="商机内容">
-          <editor v-model="form.boContent" :min-height="192"/>
-        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -369,38 +363,64 @@ export default {
       },
       // 表单参数
       form: {},
-      // 表单校验
-      // rules: {
-      //   boSource: [
-      //     { required: true, message: "商机来源不能为空", trigger: "blur" }
-      //   ],
-      //   boName: [
-      //     { required: true, message: "商机名称不能为空", trigger: "blur" }
-      //   ],
-      //   customerName: [
-      //     { required: true, message: "客户名称不能为空", trigger: "blur" }
-      //   ],
-      //   totalHosRevenue: [
-      //     { required: true, message: "医院营收总额不能为空", trigger: "blur" }
-      //   ],
-      //   hosDiscreetValue: [
-      //     { required: true, message: "医院耗材预估值不能为空", trigger: "blur" }
-      //   ],
-      //   boContent: [
-      //     { required: true, message: "商机内容不能为空", trigger: "blur" }
-      //   ],
-      //   marketingOrganizing: [
-      //     { required: true, message: "销售组织不能为空", trigger: "blur" }
-      //   ],
-      //   marketingArea: [
-      //     { required: true, message: "销售区域不能为空", trigger: "blur" }
-      //   ],
-      //   deptName: [
-      //     { required: true, message: "部门不能为空", trigger: "blur" }
-      //   ],
-      // }
+      //表单校验
+      rules: {
+        boSource: [
+          { required: true, message: "商机来源不能为空", trigger: "blur" }
+        ],
+        boType: [
+          { required: true, message: "商机类型不能为空", trigger: "blur" }
+        ],
+        customerName: [
+          { required: true, message: "客户名称不能为空", trigger: "blur" }
+        ],
+        totalHosRevenue: [
+          { required: true, message: "医院营收总额不能为空", trigger: "blur" }
+        ],
+        hosDiscreetValue: [
+          { required: true, message: "医院耗材预估值不能为空", trigger: "blur" }
+        ],
+        boContent: [
+          { required: true, message: "商机内容不能为空", trigger: "blur" }
+        ],
+      }
     };
   },
+  //监听属性
+  watch:{
+    //阶段
+    'form.totalHosRevenue':{
+      handler(newName, oldName) {
+        switch(newName) {
+          //5000万以下
+          case '0':
+            this.form.hosDiscreetValue = 5000 * 0.02;
+            break;
+          //5000万-1亿
+          case '1':
+            this.form.hosDiscreetValue = 10000 * 0.02;
+            break;
+          //1亿-2亿
+          case '2':
+            this.form.hosDiscreetValue = 20000 * 0.02;
+            break;
+          //2亿-5亿
+          case '3':
+            this.form.hosDiscreetValue = 50000 * 0.02;
+            break;
+          //5亿-10亿
+          case '4':
+            this.form.hosDiscreetValue = 100000 * 0.02;
+            break;
+          //10亿以上
+          case '5':
+            this.form.hosDiscreetValue = 100000 * 0.02;
+            break;
+        }
+      },
+      immediate: true,
+    },
+  },
   created() {
     this.getList();
   },

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

@@ -76,7 +76,7 @@
       <el-table-column label="销售组织" align="center" prop="salesOrgName" v-if="source == 'Behavior'"/>
       <el-table-column label="部门" align="center" prop="deptName" v-if="source == 'Behavior'"/>
 
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -138,13 +138,15 @@
         </el-row>
         <el-row>
           <el-col :span="8">
-            <el-form-item label="客户名称" prop="customerName">
-              <el-input v-model="form.customerName" placeholder="请输入客户名称" />
+            <el-form-item label="客户" prop="customerName">
+              <el-input v-model="form.customerName" placeholder="请输入客户" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="联系人名称" prop="linkmanName">
-              <el-input v-model="form.linkmanName" placeholder="请输入联系人名称" />
+            <el-form-item label="联系人" prop="linkmanName">
+              <el-input v-model="form.linkmanName" placeholder="请输入联系人" >
+                <el-button slot="append" icon="el-icon-more" @click="refereContact"></el-button>
+              </el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -193,18 +195,18 @@
         </el-row>
         <el-row>
           <el-col  :span="8">
-            <el-form-item label="销售组织名称" prop="salesOrgName">
-              <el-input v-model="form.salesOrgName" placeholder="请输入销售组织名称" />
+            <el-form-item label="销售组织" prop="salesOrgName">
+              <el-input v-model="form.salesOrgName" placeholder="请输入销售组织" />
             </el-form-item>
           </el-col>
           <el-col  :span="8">
-             <el-form-item label="部门名称" prop="deptName">
-              <el-input v-model="form.deptName" placeholder="请输入部门名称" />
+             <el-form-item label="部门" prop="deptName">
+              <el-input v-model="form.deptName" placeholder="请输入部门" />
             </el-form-item>
           </el-col>
           <el-col  :span="8">
-            <el-form-item label="负责人名称" prop="staffName">
-              <el-input v-model="form.staffName" placeholder="请输入负责人名称" />
+            <el-form-item label="负责人" prop="staffName">
+              <el-input v-model="form.staffName" placeholder="请输入负责人" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -217,16 +219,24 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 联系人参照 -->
+    <ContactRef
+      ref="contactSelect"
+      @doSubmit="contactSelectionsToInput"
+      :single="true"
+    />
   </div>
 </template>
 
 <script>
 import { listBehavior, getBehavior, delBehavior, addBehavior, updateBehavior } from "@/api/business/spd/bo/behavior";
+import ContactRef from '@/views/business/spd/bo/refer/contact/index.vue';
 
 export default {
   name: "BehaviorList",
   props:["source","bo"],
   dicts: ['mk_bo_behavior_res','mk_bo_behavior_type','sys_yes_no','mk_bo_behavior_goal'],
+  components: {ContactRef},
   data() {
     return {
       // 遮罩层
@@ -258,12 +268,37 @@ export default {
       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" }
+        ],
+        assist: [
+          { required: true, message: "是否需要上级协助不能为空", trigger: "blur" }
+        ],
+        content: [
+          { required: true, message: "洽谈内容不能为空", trigger: "blur" }
+        ],
       }
     };
   },
   created() {
     console.log("this.bo",this.bo);
-    this.queryParams.bo = this.bo.bo;
+    //设置查询条件
+    this.queryParams.bo = this.bo.id;
     this.queryParams.task = this.bo.task;
     this.queryParams.taskCode = this.bo.taskCode;
     this.getList();
@@ -334,6 +369,10 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      if(this.bo.id){
+        this.form.bo = this.bo.id;
+        this.form.boName = this.bo.boName;
+      }
       this.open = true;
       this.title = "添加行动";
     },
@@ -382,7 +421,17 @@ export default {
       this.download('system/behavior/export', {
         ...this.queryParams
       }, `behavior_${new Date().getTime()}.xlsx`)
-    }
+    },
+    // 触发联系人参照列表
+    refereContact() {
+      this.$refs.contactSelect.init()
+    },
+    //联系人参照列表选择后
+    contactSelectionsToInput (selections) {
+      console.log('selections',selections);
+      this.form.linkman = selections[0].id;
+      this.form.linkmanName = selections[0].name;
+    },
   }
 };
 </script>

+ 259 - 158
src/views/business/spd/bo/contact/contactList.vue

@@ -89,7 +89,7 @@
       <el-table-column label="联系人分类" align="center" prop="contactClassification" />
       <el-table-column label="所属客户名称" align="center" prop="customerName" />
       <el-table-column label="所属客户编码" align="center" prop="customerCode" /> -->
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -118,110 +118,240 @@
     />
 
     <!-- 添加或修改联系人管理对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="商机id" prop="boId">
-          <el-input v-model="form.boId" placeholder="请输入商机id" />
-        </el-form-item>
-        <el-form-item label="创建日期" prop="createDate">
-          <el-date-picker clearable
-            v-model="form.createDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择创建日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门名称" prop="departmentName">
-          <el-input v-model="form.departmentName" placeholder="请输入部门名称" />
-        </el-form-item>
-        <el-form-item label="部门编码" prop="departmentCode">
-          <el-input v-model="form.departmentCode" placeholder="请输入部门编码" />
-        </el-form-item>
-        <el-form-item label="销售区域" prop="area">
-          <el-input v-model="form.area" placeholder="请输入销售区域" />
-        </el-form-item>
-        <el-form-item label="销售组织" prop="organization">
-          <el-input v-model="form.organization" placeholder="请输入销售组织" />
-        </el-form-item>
-        <el-form-item label="最佳拜访地点" prop="visitPlace">
-          <el-input v-model="form.visitPlace" placeholder="请输入最佳拜访地点" />
-        </el-form-item>
-        <el-form-item label="最佳拜访时间" prop="visitTime">
-          <el-date-picker clearable
-            v-model="form.visitTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择最佳拜访时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="家庭地址" prop="address">
-          <el-input v-model="form.address" placeholder="请输入家庭地址" />
-        </el-form-item>
-        <el-form-item label="邮件" prop="mail">
-          <el-input v-model="form.mail" placeholder="请输入邮件" />
-        </el-form-item>
-        <el-form-item label="联系电话" prop="telephone">
-          <el-input v-model="form.telephone" placeholder="请输入联系电话" />
-        </el-form-item>
-        <el-form-item label="关键决策人" prop="decisionMaker">
-          <el-input v-model="form.decisionMaker" placeholder="请输入关键决策人" />
-        </el-form-item>
-        <el-form-item label="擅长领域" prop="fieldExpertise">
-          <el-input v-model="form.fieldExpertise" placeholder="请输入擅长领域" />
-        </el-form-item>
-        <el-form-item label="支持度" prop="support">
-          <el-input v-model="form.support" placeholder="请输入支持度" />
-        </el-form-item>
-        <el-form-item label="决策力" prop="power">
-          <el-input v-model="form.power" placeholder="请输入决策力" />
-        </el-form-item>
-        <el-form-item label="职称" prop="jobTitle">
-          <el-input v-model="form.jobTitle" placeholder="请输入职称" />
-        </el-form-item>
-        <el-form-item label="职务" prop="position">
-          <el-input v-model="form.position" placeholder="请输入职务" />
-        </el-form-item>
-        <el-form-item label="任职科室" prop="section">
-          <el-input v-model="form.section" placeholder="请输入任职科室" />
-        </el-form-item>
-        <el-form-item label="上级联系人" prop="superiorContact">
-          <el-input v-model="form.superiorContact" placeholder="请输入上级联系人" />
-        </el-form-item>
-        <el-form-item label="状态" prop="state">
-          <el-input v-model="form.state" placeholder="请输入状态" />
-        </el-form-item>
-        <el-form-item label="业务爱好" prop="hobby">
-          <el-input v-model="form.hobby" placeholder="请输入业务爱好" />
-        </el-form-item>
-        <el-form-item label="籍贯" prop="birthplace">
-          <el-input v-model="form.birthplace" placeholder="请输入籍贯" />
-        </el-form-item>
-        <el-form-item label="生日" prop="birthday">
-          <el-date-picker clearable
-            v-model="form.birthday"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择生日">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="联系人分类" prop="contactClassification">
-          <el-input v-model="form.contactClassification" placeholder="请输入联系人分类" />
-        </el-form-item>
-        <el-form-item label="所属客户名称" prop="customerName">
-          <el-input v-model="form.customerName" placeholder="请输入所属客户名称" />
-        </el-form-item>
-        <el-form-item label="所属客户编码" prop="customerCode">
-          <el-input v-model="form.customerCode" placeholder="请输入所属客户编码" />
-        </el-form-item>
-        <el-form-item label="性别" prop="gander">
-          <el-input v-model="form.gander" placeholder="请输入性别" />
-        </el-form-item>
-        <el-form-item label="姓名" prop="name">
-          <el-input v-model="form.name" placeholder="请输入姓名" />
-        </el-form-item>
-        <el-form-item label="编号" prop="code">
-          <el-input v-model="form.code" placeholder="请输入编号" />
-        </el-form-item>
+        <el-row>
+          基本信息
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="商机id" prop="boId" v-if="source == 'Contact'">
+              <el-input v-model="form.boId" placeholder="请输入商机id" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="姓名" prop="name">
+              <el-input v-model="form.name" placeholder="请输入姓名" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="性别" prop="gander">
+              <el-select v-model="form.gander" placeholder="请输入性别">
+                <el-option
+                  v-for="dict in dict.type.sys_user_sex"
+                  :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="customerName">
+              <el-input v-model="form.customerName" placeholder="请输入所属客户名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="联系人分类" prop="contactClassification">
+              <el-input v-model="form.contactClassification" placeholder="请输入联系人分类" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="生日" prop="birthday">
+              <el-date-picker clearable
+                v-model="form.birthday"
+                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="birthplace">
+              <el-input v-model="form.birthplace" placeholder="请输入籍贯" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="业务爱好" prop="hobby">
+              <el-input v-model="form.hobby" placeholder="请输入业务爱好" />
+            </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_contact_state"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          工作信息
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="上级联系人" prop="superiorContact">
+              <el-input v-model="form.superiorContact" placeholder="请输入上级联系人" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="任职科室" prop="section">
+              <el-select v-model="form.section" placeholder="请输入任职科室">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_section"
+                  :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="position">
+              <el-select v-model="form.position" placeholder="请输入职务">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_position"
+                  :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="jobTitle">
+              <el-select v-model="form.jobTitle" placeholder="请输入职称">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_job_title"
+                  :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="power">
+              <el-select v-model="form.power" placeholder="请输入决策力">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_power"
+                  :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="support">
+              <el-select v-model="form.support" placeholder="请输入支持度">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_support"
+                  :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="fieldExpertise">
+              <el-select v-model="form.fieldExpertise" placeholder="请输入擅长领域">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_field_expertise"
+                  :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="decisionMaker">
+              <el-select v-model="form.decisionMaker" 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-col>
+        </el-row>
+        <el-row>
+          联系信息
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="联系电话" prop="telephone">
+              <el-input v-model="form.telephone" placeholder="请输入联系电话" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="邮件" prop="mail">
+              <el-input v-model="form.mail" placeholder="请输入邮件" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="家庭地址" prop="address">
+              <el-input v-model="form.address" placeholder="请输入家庭地址" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="最佳拜访时间" prop="visitTime">
+              <el-date-picker clearable
+                v-model="form.visitTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="请选择最佳拜访时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="最佳拜访地点" prop="visitPlace">
+              <el-input v-model="form.visitPlace" placeholder="请输入最佳拜访地点" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+          </el-col>
+        </el-row>
+        <el-row>
+          其它信息
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="部门名称" prop="departmentName">
+              <el-input v-model="form.departmentName" placeholder="请输入部门名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="销售区域" prop="area">
+              <el-input v-model="form.area" placeholder="请输入销售区域" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="销售组织" prop="organization">
+              <el-input v-model="form.organization" placeholder="请输入销售组织" />
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -236,7 +366,8 @@ import { listContact, getContact, delContact, addContact, updateContact } from "
 
 export default {
   name: "contactList",
-  props:["boId"],
+  props:["source","bo"],
+  dicts: ['sys_user_sex','mk_bo_contact_state','mk_bo_section','mk_bo_position','mk_bo_job_title','mk_bo_power','mk_bo_support','mk_bo_field_expertise','sys_yes_no'],
   data() {
     return {
       // 遮罩层
@@ -262,32 +393,6 @@ export default {
         pageNum: 1,
         pageSize: 10,
         boId: null,
-        createDate: null,
-        departmentName: null,
-        departmentCode: null,
-        area: null,
-        organization: null,
-        visitPlace: null,
-        visitTime: null,
-        address: null,
-        mail: null,
-        telephone: null,
-        decisionMaker: null,
-        fieldExpertise: null,
-        support: null,
-        power: null,
-        jobTitle: null,
-        position: null,
-        section: null,
-        superiorContact: null,
-        state: null,
-        hobby: null,
-        birthplace: null,
-        birthday: null,
-        contactClassification: null,
-        customerName: null,
-        customerCode: null,
-        gander: null,
         name: null,
         code: null,
       },
@@ -295,49 +400,42 @@ export default {
       form: {},
       // 表单校验
       rules: {
-        area: [
-          { required: true, message: "销售区域不能为空", trigger: "blur" }
-        ],
-        organization: [
-          { required: true, message: "销售组织不能为空", trigger: "blur" }
-        ],
-        address: [
-          { required: true, message: "家庭地址不能为空", trigger: "blur" }
+        name: [
+          { required: true, message: "姓名不能为空", trigger: "blur" }
         ],
-        telephone: [
-          { required: true, message: "联系电话不能为空", trigger: "blur" }
+        gander: [
+          { required: true, message: "性别不能为空", trigger: "blur" }
         ],
-        decisionMaker: [
-          { required: true, message: "关键决策人不能为空", trigger: "blur" }
+        customerName: [
+          { required: true, message: "所属客户名称不能为空", trigger: "blur" }
         ],
-        power: [
-          { required: true, message: "决策力不能为空", trigger: "blur" }
+        state: [
+          { required: true, message: "状态不能为空", trigger: "blur" }
         ],
-        jobTitle: [
-          { required: true, message: "职称不能为空", trigger: "blur" }
+        section: [
+          { required: true, message: "任职科室不能为空", trigger: "blur" }
         ],
         position: [
           { required: true, message: "职务不能为空", trigger: "blur" }
         ],
-        section: [
-          { required: true, message: "任职科室不能为空", trigger: "blur" }
-        ],
-        customerName: [
-          { required: true, message: "所属客户名称不能为空", trigger: "blur" }
+        jobTitle: [
+          { required: true, message: "职称不能为空", trigger: "blur" }
         ],
-        gander: [
-          { required: true, message: "性别不能为空", trigger: "blur" }
+        power: [
+          { required: true, message: "决策力不能为空", trigger: "blur" }
         ],
-        name: [
-          { required: true, message: "姓名不能为空", trigger: "blur" }
+        decisionMaker: [
+          { required: true, message: "关键决策人不能为空", trigger: "blur" }
         ],
-        code: [
-          { required: true, message: "编号不能为空", trigger: "blur" }
+        telephone: [
+          { required: true, message: "联系电话不能为空", trigger: "blur" },
+          // { pattern: /^1[3|5|7|8|9]\d{9}$/, message: '请输入正确的号码格式', trigger: 'change' }
         ],
       }
     };
   },
   created() {
+    this.queryParams.boId = this.bo.id;
     this.getList();
   },
   methods: {
@@ -414,6 +512,9 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      if(this.bo.id){
+        this.form.boId = this.bo.id;
+      }
       this.open = true;
       this.title = "添加联系人管理";
     },

+ 10 - 233
src/views/business/spd/bo/contact/index.vue

@@ -1,7 +1,7 @@
 <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="createDate">
+      <!-- <el-form-item label="创建日期" prop="createDate">
         <el-date-picker clearable
           v-model="queryParams.createDate"
           type="date"
@@ -208,7 +208,7 @@
           clearable
           @keyup.enter.native="handleQuery"
         />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="姓名" prop="name">
         <el-input
           v-model="queryParams.name"
@@ -230,243 +230,17 @@
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['system:contact:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['system:contact:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['system:contact:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['system:contact:export']"
-        >导出</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="contactList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="商机id" align="center" prop="boId" />
-      <el-table-column label="创建日期" align="center" prop="createDate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createDate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="部门名称" align="center" prop="departmentName" />
-      <el-table-column label="部门编码" align="center" prop="departmentCode" />
-      <el-table-column label="销售区域" align="center" prop="area" />
-      <el-table-column label="销售组织" align="center" prop="organization" />
-      <el-table-column label="最佳拜访地点" align="center" prop="visitPlace" />
-      <el-table-column label="最佳拜访时间" align="center" prop="visitTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.visitTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="家庭地址" align="center" prop="address" />
-      <el-table-column label="邮件" align="center" prop="mail" />
-      <el-table-column label="联系电话" align="center" prop="telephone" />
-      <el-table-column label="关键决策人" align="center" prop="decisionMaker" />
-      <el-table-column label="擅长领域" align="center" prop="fieldExpertise" />
-      <el-table-column label="支持度" align="center" prop="support" />
-      <el-table-column label="决策力" align="center" prop="power" />
-      <el-table-column label="职称" align="center" prop="jobTitle" />
-      <el-table-column label="职务" align="center" prop="position" />
-      <el-table-column label="任职科室" align="center" prop="section" />
-      <el-table-column label="上级联系人" align="center" prop="superiorContact" />
-      <el-table-column label="状态" align="center" prop="state" />
-      <el-table-column label="业务爱好" align="center" prop="hobby" />
-      <el-table-column label="籍贯" align="center" prop="birthplace" />
-      <el-table-column label="生日" align="center" prop="birthday" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="联系人分类" align="center" prop="contactClassification" />
-      <el-table-column label="所属客户名称" align="center" prop="customerName" />
-      <el-table-column label="所属客户编码" align="center" prop="customerCode" />
-      <el-table-column label="性别" align="center" prop="gander" />
-      <el-table-column label="姓名" align="center" prop="name" />
-      <el-table-column label="编号" align="center" prop="code" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:contact:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['system:contact:remove']"
-          >删除</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="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="商机id" prop="boId">
-          <el-input v-model="form.boId" placeholder="请输入商机id" />
-        </el-form-item>
-        <el-form-item label="创建日期" prop="createDate">
-          <el-date-picker clearable
-            v-model="form.createDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择创建日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门名称" prop="departmentName">
-          <el-input v-model="form.departmentName" placeholder="请输入部门名称" />
-        </el-form-item>
-        <el-form-item label="部门编码" prop="departmentCode">
-          <el-input v-model="form.departmentCode" placeholder="请输入部门编码" />
-        </el-form-item>
-        <el-form-item label="销售区域" prop="area">
-          <el-input v-model="form.area" placeholder="请输入销售区域" />
-        </el-form-item>
-        <el-form-item label="销售组织" prop="organization">
-          <el-input v-model="form.organization" placeholder="请输入销售组织" />
-        </el-form-item>
-        <el-form-item label="最佳拜访地点" prop="visitPlace">
-          <el-input v-model="form.visitPlace" placeholder="请输入最佳拜访地点" />
-        </el-form-item>
-        <el-form-item label="最佳拜访时间" prop="visitTime">
-          <el-date-picker clearable
-            v-model="form.visitTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择最佳拜访时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="家庭地址" prop="address">
-          <el-input v-model="form.address" placeholder="请输入家庭地址" />
-        </el-form-item>
-        <el-form-item label="邮件" prop="mail">
-          <el-input v-model="form.mail" placeholder="请输入邮件" />
-        </el-form-item>
-        <el-form-item label="联系电话" prop="telephone">
-          <el-input v-model="form.telephone" placeholder="请输入联系电话" />
-        </el-form-item>
-        <el-form-item label="关键决策人" prop="decisionMaker">
-          <el-input v-model="form.decisionMaker" placeholder="请输入关键决策人" />
-        </el-form-item>
-        <el-form-item label="擅长领域" prop="fieldExpertise">
-          <el-input v-model="form.fieldExpertise" placeholder="请输入擅长领域" />
-        </el-form-item>
-        <el-form-item label="支持度" prop="support">
-          <el-input v-model="form.support" placeholder="请输入支持度" />
-        </el-form-item>
-        <el-form-item label="决策力" prop="power">
-          <el-input v-model="form.power" placeholder="请输入决策力" />
-        </el-form-item>
-        <el-form-item label="职称" prop="jobTitle">
-          <el-input v-model="form.jobTitle" placeholder="请输入职称" />
-        </el-form-item>
-        <el-form-item label="职务" prop="position">
-          <el-input v-model="form.position" placeholder="请输入职务" />
-        </el-form-item>
-        <el-form-item label="任职科室" prop="section">
-          <el-input v-model="form.section" placeholder="请输入任职科室" />
-        </el-form-item>
-        <el-form-item label="上级联系人" prop="superiorContact">
-          <el-input v-model="form.superiorContact" placeholder="请输入上级联系人" />
-        </el-form-item>
-        <el-form-item label="状态" prop="state">
-          <el-input v-model="form.state" placeholder="请输入状态" />
-        </el-form-item>
-        <el-form-item label="业务爱好" prop="hobby">
-          <el-input v-model="form.hobby" placeholder="请输入业务爱好" />
-        </el-form-item>
-        <el-form-item label="籍贯" prop="birthplace">
-          <el-input v-model="form.birthplace" placeholder="请输入籍贯" />
-        </el-form-item>
-        <el-form-item label="生日" prop="birthday">
-          <el-date-picker clearable
-            v-model="form.birthday"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择生日">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="联系人分类" prop="contactClassification">
-          <el-input v-model="form.contactClassification" placeholder="请输入联系人分类" />
-        </el-form-item>
-        <el-form-item label="所属客户名称" prop="customerName">
-          <el-input v-model="form.customerName" placeholder="请输入所属客户名称" />
-        </el-form-item>
-        <el-form-item label="所属客户编码" prop="customerCode">
-          <el-input v-model="form.customerCode" placeholder="请输入所属客户编码" />
-        </el-form-item>
-        <el-form-item label="性别" prop="gander">
-          <el-input v-model="form.gander" placeholder="请输入性别" />
-        </el-form-item>
-        <el-form-item label="姓名" prop="name">
-          <el-input v-model="form.name" placeholder="请输入姓名" />
-        </el-form-item>
-        <el-form-item label="编号" prop="code">
-          <el-input v-model="form.code" placeholder="请输入编号" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
+    <ContactList :key="timer" :source = "'Contact'" :bo="queryParams" />
   </div>
 </template>
 
 <script>
 import { listContact, getContact, delContact, addContact, updateContact } from "@/api/business/spd/bo/contact";
+import ContactList from '../contact/contactList.vue'
 
 export default {
   name: "Contact",
+  components: {ContactList},
   data() {
     return {
       // 遮罩层
@@ -564,7 +338,9 @@ export default {
         code: [
           { required: true, message: "编号不能为空", trigger: "blur" }
         ],
-      }
+      },
+      //重新加载子组件参数
+      timer: '',
     };
   },
   created() {
@@ -628,7 +404,8 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
-      this.getList();
+      this.timer = new Date().getTime();
+      // this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {

+ 7 - 4
src/views/business/spd/bo/pojpsn/pojpsnList.vue

@@ -51,7 +51,7 @@
           <dict-tag :options="dict.type.mk_bo_pojpsn_job" :value="scope.row.job"/>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -172,7 +172,8 @@ export default {
     };
   },
   created() {
-    this.queryParams.bo = this.bo.bo;
+    //设置查询条件
+    this.queryParams.bo = this.bo.id;
     this.queryParams.boName = this.bo.boName;
     this.queryParams.staffName = this.bo.staffName;
     this.queryParams.post = this.bo.post;
@@ -233,9 +234,11 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      if(this.bo.id){
+        this.form.bo = this.bo.id;
+        this.form.boName = this.bo.boName;
+      }
       this.open = true;
-      this.form.bo = this.queryParams.bo;
-      this.form.boName = this.queryParams.boName;
       this.title = "添加项目成员";
     },
     /** 修改按钮操作 */

+ 242 - 0
src/views/business/spd/bo/refer/contact/index.vue

@@ -0,0 +1,242 @@
+<template>
+  <div>
+    <el-dialog
+      title="联系人选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible"
+    >
+      <el-container style="height: 500px">
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px; height: 30px">
+            <el-form
+              size="small"
+              :inline="true"
+              ref="searchForm"
+              :model="searchForm"
+              @keyup.enter.native="getList()"
+              @submit.native.prevent
+            >
+              <el-form-item prop="customerName">
+                <el-input
+                  size="small"
+                  v-model="queryParams.customerName"
+                  placeholder="客户名称"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="queryParams.name"
+                  placeholder="联系人"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  @click="getList()"
+                  size="small"
+                  icon="el-icon-search"
+                  >查询</el-button
+                >
+                <el-button
+                  @click="resetSearch()"
+                  size="small"
+                  icon="el-icon-refresh-right"
+                >重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="contractTable"
+              @select="handleSelectionChange"
+              height="calc(100% - 40px)"
+              style="width: 100%"
+            >
+              <el-table-column
+                type="selection"
+                header-align="center"
+                align="center"
+                width="50"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="customerName"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="客户名称"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="联系人"
+              >
+              </el-table-column>
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="queryParams.pageNum"
+              :page-sizes="[5, 10, 15, 20]"
+              :page-size="queryParams.pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper"
+            >
+            </el-pagination>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button
+          size="small"
+          @click="visible = false"
+          icon="el-icon-circle-close"
+          >关闭</el-button
+        >
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-circle-check"
+          @click="doSubmit()"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listContact} from "@/api/business/spd/bo/contact";
+export default {
+  data() {
+    return {
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: undefined,
+        customerName: undefined,
+      },
+      searchForm: {
+        name: '',
+        customerName: ''
+      },
+      dataListAllSelections: [], // 所有选中的数据包含跨页数据
+      idKey: "id", // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false,
+    };
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    // 是否启用单选
+    single: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    init() {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData));
+        this.resetSearch();
+      });
+    },
+    // 获取数据列表
+    getList() {
+      this.loading = true;
+      listContact(this.addDateRange(this.queryParams)).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.queryParams.pageSize = val;
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.queryParams.pageNum = val;
+      this.getList();
+    },
+    // 排序
+    resetSearch() {
+      this.$refs.searchForm.resetFields();
+      this.getList();
+    },
+    // 选中数据
+    handleSelectionChange(selection, row) {
+      if (this.single && selection.length > 1) {
+        this.$refs.contractTable.clearSelection();
+        this.$refs.contractTable.toggleRowSelection(row);
+      }
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 设置选中的方法
+    setSelectRow() {
+      this.$refs.contractTable.clearSelection();
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        return;
+      }
+      for (let i = 0; i < this.dataList.length; i++) {
+        if (this.dataListAllSelections.some(item => item[this.idKey] == this.dataList[i][this.idKey])) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.contractTable.toggleRowSelection(this.dataList[i], true);
+        }
+      }
+    },
+    doSubmit() {
+      this.visible = false;
+      console.log('选择的数据?',this.dataListAllSelections)
+      this.$emit("doSubmit", this.dataListAllSelections);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 2 - 2
src/views/business/spd/bo/refer/customer/index.vue

@@ -23,7 +23,7 @@
               <el-form-item prop="code">
                 <el-input
                   size="small"
-                  v-model="queryParams.userName"
+                  v-model="queryParams.code"
                   placeholder="客户编码"
                   clearable
                 ></el-input>
@@ -31,7 +31,7 @@
               <el-form-item prop="name">
                 <el-input
                   size="small"
-                  v-model="queryParams.nickName"
+                  v-model="queryParams.name"
                   placeholder="客户名称"
                   clearable
                 ></el-input>

+ 56 - 19
src/views/business/spd/bo/task/taskList.vue

@@ -38,9 +38,9 @@
 
     <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="id" /> -->
-      <el-table-column label="商机id" align="center" prop="bo" />
-      <el-table-column label="商机阶段" align="center" prop="boStage" />
+      <el-table-column label="商机id" align="center" prop="bo" v-if="source == 'Task'"/>
+      <el-table-column label="商机阶段" align="center" prop="boStage" v-if="source == 'Task'"/>
+      <el-table-column label="客户名称" align="center" prop="customerName" v-if="source == 'Task'"/>
       <el-table-column label="任务编码" align="center" prop="code" />
       <el-table-column label="任务名称" align="center" prop="name" />
       <el-table-column label="任务类型" align="center" prop="type" >
@@ -53,7 +53,6 @@
           <dict-tag :options="dict.type.mk_bo_taskstate" :value="scope.row.state"/>
         </template>
       </el-table-column>
-      <el-table-column label="客户名称" align="center" prop="customerName" />
       <el-table-column label="联系人" align="center" prop="linkmanName" />
       <el-table-column label="销售组织名称" align="center" prop="salesOrgName" />
       <el-table-column label="部门名称" align="center" prop="deptName" />
@@ -64,7 +63,7 @@
         </template>
       </el-table-column>
       <el-table-column label="任务内容" align="center" prop="content" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -97,17 +96,24 @@
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row>
           <el-col :span="8">
-            <el-form-item label="商机名称" prop="boName">
+            <el-form-item label="商机名称" prop="boName" v-if="source == 'Task'">
               <el-input v-model="form.boName" placeholder="请输入商机名称" />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="商机阶段" prop="boStage">
-              <el-input v-model="form.boStage" placeholder="请输入商机阶段" />
+            <el-form-item label="商机阶段" prop="boStage" v-if="source == 'Task'">
+              <el-select v-model="form.boStage" placeholder="请输入商机阶段">
+                <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-form-item label="客户" prop="customerName" v-if="source == 'Task'">
               <el-input v-model="form.customerName" placeholder="请输入客户" >
                 <el-button slot="append" icon="el-icon-more" @click="refereCustomer"></el-button>
               </el-input>
@@ -141,8 +147,10 @@
         </el-row>
         <el-row>
           <el-col :span="8">
-            <el-form-item label="联系人" prop="linkman">
-              <el-input v-model="form.linkman" placeholder="请输入联系人" />
+            <el-form-item label="联系人" prop="linkmanName">
+              <el-input v-model="form.linkmanName" placeholder="请输入联系人" >
+                <el-button slot="append" icon="el-icon-more" @click="refereContact"></el-button>
+              </el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
@@ -208,6 +216,12 @@
       @doSubmit="customerSelectionsToInput"
       :single="true"
     />
+    <!-- 联系人参照 -->
+    <ContactRef
+      ref="contactSelect"
+      @doSubmit="contactSelectionsToInput"
+      :single="true"
+    />
     <!-- 组织参照 -->
     <OrgRef
       ref="orgSelect"
@@ -233,6 +247,7 @@
 import { listTask, getTask, delTask, addTask, updateTask } from "@/api/business/spd/bo/task";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 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';
@@ -241,8 +256,8 @@ import StaffRef from '@/views/business/spd/bo/refer/staff/index.vue';
 export default {
   name: "TaskList",
   props:["source","bo"],
-  dicts: ['mk_bo_taskstate','mk_bo_tasktype'],
-  components: {CustomerRef,OrgRef,DeptRef,StaffRef},
+  dicts: ['mk_bo_taskstate','mk_bo_tasktype','mk_bo_stage'],
+  components: {CustomerRef,ContactRef,OrgRef,DeptRef,StaffRef},
   data() {
     return {
       // 遮罩层
@@ -291,17 +306,24 @@ export default {
       form: {},
       // 表单校验
       rules: {
+        customerName: [
+          { required: true, message: "客户名称不能为空", trigger: "blur" }
+        ],
+        name: [
+          { required: true, message: "任务名称不能为空", trigger: "blur" }
+        ],
+        linkmanName: [
+          { required: true, message: "联系人不能为空", trigger: "blur" }
+        ],
+        deadlineDate: [
+          { required: true, message: "截止日期不能为空", trigger: "blur" }
+        ],
       }
     };
   },
   created() {
     //两种方式都可以用
-    console.log("this.props.boId",this.$props.boId,'this.boId',this.boId);
-    this.queryParams.bo = this.bo.bo;
-    // this.queryParams.boName = this.bo.boName;
-    // this.queryParams.staffName = this.bo.staffName;
-    // this.queryParams.post = this.bo.post;
-    // this.queryParams.job = this.bo.job;
+    this.queryParams.bo = this.bo.id;
     this.getList();
   },
   methods: {
@@ -369,6 +391,11 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
+      if(this.bo.id){
+        this.form.bo = this.bo.id;
+        this.form.boName = this.bo.boName;
+        this.form.boStage = this.bo.boStage;
+      }
       this.open = true;
       this.title = "添加任务";
     },
@@ -427,6 +454,16 @@ export default {
       this.form.customer = selections[0].id;
       this.form.customerName = selections[0].name;
     },
+    // 触发联系人参照列表
+    refereContact() {
+      this.$refs.contactSelect.init()
+    },
+    //联系人参照列表选择后
+    contactSelectionsToInput (selections) {
+      console.log('selections',selections);
+      this.form.linkman = selections[0].id;
+      this.form.linkmanName = selections[0].name;
+    },
     // 触发组织参照列表
     refereOrg() {
       this.$refs.orgSelect.init()

+ 294 - 33
src/views/material/requisition/add.vue

@@ -91,16 +91,44 @@
             </el-col>
             <el-col :span="8">
               <el-form-item label="计量单位" prop="unitId">
-                <el-input :disabled="disable" v-model="basicForm.unitId">
-                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test02"></el-button>
-                </el-input>
+                <el-select
+                    ref="units"
+                    v-model="basicForm.unitId"
+                    placeholder="计量单位"
+                    :disabled="disable"
+                    @focus="chooseUnit"
+                  >
+                    <el-option
+                      v-for="item in unitOptions"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.unitId">
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="chooseUnit"></el-button>
+                </el-input> -->
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="生产厂家/代理人" prop="manufacturerId">
-                <el-input :disabled="disable" v-model="basicForm.manufacturerId">
-                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test02"></el-button>
-                </el-input>
+                <el-select
+                    ref="factoryOrman"
+                    v-model="basicForm.manufacturerId"
+                    placeholder="生产厂家/代理人"
+                    :disabled="disable"
+                    @focus="chooseFactory"
+                  >
+                    <el-option
+                      v-for="item in factoryOptions"
+                      :key="item.id"
+                      :label="item.manufactureName"
+                      :value="item.id"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.manufacturerId">
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="chooseFactory"></el-button>
+                </el-input> -->
               </el-form-item>
             </el-col>
           </el-row>
@@ -112,9 +140,23 @@
             </el-col>
             <el-col :span="8">
               <el-form-item label="产地" prop="originPlace">
-                <el-input :disabled="disable" v-model="basicForm.originPlace">
-                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test02"></el-button>
-                </el-input>
+                <el-select
+                    ref="places"
+                    v-model="basicForm.originPlace"
+                    placeholder="产地"
+                    :disabled="disable"
+                    @focus="choosePlace"
+                  >
+                    <el-option
+                      v-for="item in placeOptions"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.originPlace">
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test01"></el-button>
+                </el-input> -->
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -307,9 +349,23 @@
             </el-col>
             <el-col :span="8">
               <el-form-item label="物料税类" prop="materialRate">
-                <el-input :disabled="disable" v-model="basicForm.materialRate">
-                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test02"></el-button>
-                </el-input>
+                <el-select
+                    ref="taxs"
+                    v-model="basicForm.materialRate"
+                    placeholder="物料税类"
+                    :disabled="disable"
+                    @focus="chooseTax"
+                  >
+                    <el-option
+                      v-for="item in taxOptions"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.materialRate">
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test01"></el-button>
+                </el-input> -->
               </el-form-item>
             </el-col>
           </el-row>
@@ -333,9 +389,23 @@
           <el-row :gutter="20">
             <el-col :span="8">
               <el-form-item label="采购员" prop="puPersonnelId">
-                <el-input :disabled="disable" v-model="basicForm.puPersonnelId">
-                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test02"></el-button>
-                </el-input>
+                <el-select
+                    ref="staffs"
+                    v-model="basicForm.puPersonnelId"
+                    placeholder="采购员"
+                    :disabled="disable"
+                    @focus="chooseStaff"
+                  >
+                    <el-option
+                      v-for="item in staffOptions"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.code"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.puPersonnelId">
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test01"></el-button>
+                </el-input> -->
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -380,7 +450,7 @@
             <el-col :span="8">
               <el-form-item label="业务线" prop="businessLine">
                 <el-input :disabled="disable" v-model="basicForm.businessLine">
-                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test02"></el-button>
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test01"></el-button>
                 </el-input>
               </el-form-item>
             </el-col>
@@ -509,7 +579,7 @@
             <el-col :span="8">
               <el-form-item label="剂型" prop="dosageFrom">
                 <el-input :disabled="disable" v-model="basicForm2.dosageFrom">
-                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test02"></el-button>
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test01"></el-button>
                 </el-input>
               </el-form-item>
             </el-col>
@@ -663,8 +733,8 @@
     />
 
     <factory
-      ref="contractSelect2"
-      @doSubmit="selectionsToInput2"
+      ref="factory"
+      @doSubmit="acceptFactory"
       :selectData="selectData2"
       :single="true"
     />
@@ -676,7 +746,33 @@
       :single="true"
     />
 
+    <unit
+      ref="unit"
+      @doSubmit="acceptUnit"
+      :selectData="selectData4"
+      :single="true"
+    />
 
+    <place
+      ref="place"
+      @doSubmit="acceptPlace"
+      :selectData="selectData5"
+      :single="true"
+    />
+
+    <tax
+      ref="tax"
+      @doSubmit="acceptTax"
+      :selectData="selectData6"
+      :single="true"
+    />
+
+    <staff
+      ref="staff"
+      @doSubmit="acceptStaff"
+      :selectData="selectData7"
+      :single="true"
+    />
   </div>
 </template>
 
@@ -684,16 +780,29 @@
 import popDialog from '@/components/PopDialog/index.vue'
 import factory from '@/components/PopDialog/productFactory.vue'
 import fourClass from '@/components/PopDialog/fourClass.vue'
+import unit from '@/components/PopDialog/unit.vue'
+import place from '@/components/PopDialog/place.vue'
+import tax from '@/components/PopDialog/tax.vue'
+import staff from '@/components/PopDialog/staff.vue'
 import { addReq, getReqDetail, editReq } from '@/api/requisition/basic'
 // 调用物料分类详情接口用于数据回显
 import { getDetail } from '@/api/classify/basic';
+// 生产厂商/代理人调用用于回显
+import { getProductFactory } from '@/api/changeApply/basic'
+// 计量单位,产地调用用于回显
+import { getUnit, getPlace, getTax, getStaff} from '@/api/requisition/basic'
+
 export default {
   name: 'requisition_add',
   dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type'],
   components: {
     popDialog,
     factory,
-    fourClass
+    fourClass,
+    unit,
+    place,
+    tax,
+    staff
   },
   props: ['pageStu', 'row', 'disable'],
   model: {
@@ -703,6 +812,11 @@ export default {
   data() {
     return{
       testOptions: [],
+      factoryOptions: [],
+      unitOptions: [],
+      placeOptions: [],
+      taxOptions: [],
+      staffOptions: [],
       tabValue: 'first',
       basicForm: {
         billCode: '',
@@ -802,6 +916,10 @@ export default {
       selectData: [],
       selectData2: [],
       selectData3: [],
+      selectData4: [],
+      selectData5: [],
+      selectData6: [],
+      selectData7: []
     }
   },
   // watch: {
@@ -838,14 +956,58 @@ export default {
         console.log('数据', this.row)
         this.getDetails(this.row)
         // 获取树形详情
-        this.getTreeDetails(this.row.classifyId)
+        if (this.row.classifyId) {
+          this.getTreeDetails(this.row.classifyId)
+        }
+        // 生产厂家代理人用于回显
+        if (this.row.manufacturerId) {
+          this.getFactoryDetails(this.row.manufacturerId)
+        }
+        // 计量单位回显
+        if (this.row.unitId) {
+          this.getUnitDetails(this.row.unitId)
+        }
+        // 产地回显
+        if (this.row.originPlace) {
+          this.getPlaceDetails(this.row.originPlace)
+        }
+        // 物料税类回显
+        if (this.row.materialRate) {
+          this.getTaxDetails(this.row.materialRate)
+        }
+        // 物料税类回显
+        if (this.row.puPersonnelId) {
+          this.getStaffDetails(this.row.puPersonnelId)
+        }
       } else if (this.pageStu == 'edit') {
         // alert('修改页面')
         console.log('页面状态',this.pageStu)
         console.log('数据', this.row)
         this.getDetails(this.row)
         // 获取树形详情
-        this.getTreeDetails(this.row.classifyId)
+        if (this.row.classifyId) {
+          this.getTreeDetails(this.row.classifyId)
+        }
+        // 生产厂家代理人用于回显
+        if (this.row.manufacturerId) {
+          this.getFactoryDetails(this.row.manufacturerId)
+        }
+        // 计量单位回显
+        if (this.row.unitId) {
+          this.getUnitDetails(this.row.unitId)
+        }
+        // 产地回显
+        if (this.row.originPlace) {
+          this.getPlaceDetails(this.row.originPlace)
+        }
+        // 物料税类回显
+        if (this.row.materialRate) {
+          this.getTaxDetails(this.row.materialRate)
+        }
+        // 物料税类回显
+        if (this.row.puPersonnelId) {
+          this.getStaffDetails(this.row.puPersonnelId)
+        }
       } else if(this.pageStu == 'add') {
         // alert('新增页面')
         console.log('页面状态',this.pageStu)
@@ -868,12 +1030,61 @@ export default {
         }
       })
     },
+    // 生产厂家/代理人用于回显
+    getFactoryDetails(id) {
+       getProductFactory({id:id}).then(res => {
+        if(res.code === 200) {
+          this.factoryOptions = res.data.tableBody
+        }
+       })
+    },
+    // 计量单位回显
+    getUnitDetails(id) {
+      getUnit({id:id}).then(res => {
+        console.log('计量单位回显', res)
+        if (res.code === 200 ) {
+          this.unitOptions = res.data.tableBody
+          console.log('1111',this.unitOptions)
+        }
+      })
+    },
+    // 产地回显
+    getPlaceDetails(id) {
+      getPlace({id:id}).then(res => {
+        console.log('产地', res)
+        if (res.code === 200 ) {
+          this.placeOptions = res.data.tableBody
+        }
+      })
+    },
+    // 物料税类回显
+    getTaxDetails(id) {
+      getTax({id:id}).then(res => {
+        console.log('物料税类', res)
+        if (res.code === 200 ) {
+          this.taxOptions = res.data.tableBody
+        }
+      })
+    },
+    // 采购员回显
+    getStaffDetails(id) {
+      getStaff({id:id}).then(res => {
+        console.log('采购员', res)
+        if (res.code === 200 ) {
+          this.staffOptions = res.data.tableBody
+        }
+      })
+    },
     // 如果是详情进入,则调用详情接口
     getDetails(row) {
       getReqDetail(row.id).then(res => {
         console.log('res',res)
         if(res.code === 200) {
           this.basicForm = res.data
+          if(res.data.unitId) {
+            this.basicForm.unitId = res.data.unitId.toString()
+            this.basicForm.manufacturerId = res.data.manufacturerId.toString()
+          }
           if(res.data.sysMaterialMedcineApply) {
             this.basicForm2 = res.data.sysMaterialMedcineApply
           }
@@ -1002,10 +1213,23 @@ export default {
         }
       })
     },
-    selectionsToInput2 (selections) {
+    test01() {
+      console.log('测试点击')
+      this.$refs.contractSelect.init()
+    },
+    // 选择生产厂家/代理人
+    acceptFactory (selections) {
       console.log('选择的数据',selections)
-      this.basicForm.manufacturerId = selections[0].code
+      this.factoryOptions = selections
+      this.basicForm.manufacturerId = selections[0].id
+      this.getFactoryDetails(selections[0].id)
     },
+    // 生产厂家/代理人显示列表
+    chooseFactory() {
+      this.$refs.factoryOrman.blur()
+      this.$refs.factory.init()
+    },
+    // 选择四级分类
     acceptFourClass (selections) {
       console.log('父组件收到的数据',selections)
       this.testOptions.push(selections)
@@ -1013,20 +1237,57 @@ export default {
       this.basicForm.classifyId = selections.id
       this.getTreeDetails(selections.id)
     },
+    // 四级分类显示列表
     chooseFourClass() {
-      console.log('1111')
       this.$refs.fourTag.blur()
       this.$refs.fourClass.init()
     },
-    // 显示列表
-    test01() {
-      console.log('测试点击')
-      this.$refs.contractSelect.init()
+    // 选择计量单位
+    acceptUnit (selections) {
+      console.log('父组件收到的数据',selections)
+      this.unitOptions = selections
+      console.log('绑定的数组',this.unitOptions)
+      this.basicForm.unitId = selections[0].id
+      this.getUnitDetails(selections[0].id)
+    },
+    // 计量单位显示列表
+    chooseUnit () {
+      this.$refs.units.blur()
+      this.$refs.unit.init()
+    },
+    // 选择产地
+    acceptPlace (selections) {
+      this.placeOptions = selections
+      this.basicForm.originPlace = selections[0].id
+      this.getPlaceDetails(selections[0].id)
+    },
+    // 产地显示列表
+    choosePlace () {
+      this.$refs.places.blur()
+      this.$refs.place.init()
+    },
+    // 选择物料税类
+    acceptTax (selections) {
+      this.taxOptions = selections
+      this.basicForm.materialRate = selections[0].id
+      this.getTaxDetails(selections[0].id)
+    },
+    // 物料税类显示列表
+    chooseTax () {
+      this.$refs.taxs.blur()
+      this.$refs.tax.init()
+    },
+    // 选择采购员
+    acceptStaff (selections) {
+      this.staffOptions = selections
+      this.basicForm.puPersonnelId = selections[0].code
+      this.getStaffDetails(selections[0].id)
+    },
+    // 采购员显示列表
+    chooseStaff () {
+      this.$refs.staffs.blur()
+      this.$refs.staff.init()
     },
-    test02() {
-      console.log('测试弹窗2');
-      this.$refs.contractSelect2.init()
-    }
   }
 }
 </script>

+ 0 - 4
src/views/material/requisition/index.vue

@@ -74,15 +74,11 @@
         <el-table-column label="序号" align="center" prop="sort" />
         <el-table-column label="申请组织" align="center" prop="orgId" />
         <el-table-column label="单据编码" align="center" width="200" prop="code" />
-        <el-table-column label="目的组织" align="center" prop="orgId" />
         <el-table-column label="申请人" align="center" prop="createBy" />
         <el-table-column label="申请时间" align="center" width="150" prop="applicationTime" />
         <el-table-column label="单据状态" align="center" prop="status" :formatter="statusJug" />
-        <el-table-column label="启用状态" align="center" prop="status" />
         <el-table-column label="物料编码" align="center" width="150" prop="materialCode" />
         <el-table-column label="物料名称" align="center" prop="materialName" />
-        <el-table-column label="最后审批人" align="center" width="120" prop="approver" />
-        <el-table-column label="最后审核时间" align="center" width="150" prop="approvalTime" />
         <el-table-column label="创建人" align="center" prop="createBy" />
         <el-table-column label="创建时间" align="center" width="150" prop="createTime" />
         <el-table-column label="最后修改人" align="center" width="120" prop="updateBy" />