瀏覽代碼

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

002390 2 年之前
父節點
當前提交
133983c256

+ 44 - 0
src/api/business/spd/bo/contact.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询联系人管理列表
+export function listContact(query) {
+  return request({
+    url: '/mk/bo/contact/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询联系人管理详细
+export function getContact(id) {
+  return request({
+    url: '/mk/bo/contact/' + id,
+    method: 'get'
+  })
+}
+
+// 新增联系人管理
+export function addContact(data) {
+  return request({
+    url: '/mk/bo/contact',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改联系人管理
+export function updateContact(data) {
+  return request({
+    url: '/mk/bo/contact',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除联系人管理
+export function delContact(id) {
+  return request({
+    url: '/mk/bo/contact/' + id,
+    method: 'delete'
+  })
+}

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

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 查询客户列表
+export function listCustomer(query) {
+  return request({
+    url: '/mk/bo/iuapquery/customerlist',
+    method: 'get',
+    params: query
+  })
+}

+ 40 - 0
src/api/requisition/basic.js

@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+
+// 获取物料申请单列表
+export function getReqList(params) {
+  return request({
+    url: `/system/apply/material/list`,
+    method: 'get',
+    params: params
+  })
+}
+// 物料申请单-新增
+export function addReq(data) {
+  return request({
+    url: `/system/apply/material`,
+    method: 'post',
+    data: data
+  })
+}
+// 获取物料申请单详情
+export function getReqDetail(id) {
+  return request({
+    url: `/system/apply/material/${id}`,
+    method: 'get',
+  })
+}
+// 物料申请单-修改提交
+export function editReq(data) {
+  return request({
+    url: `/system/apply/material`,
+    method: 'put',
+    data: data
+  })
+}
+// 物料申请单-删除
+export function delReq(id) {
+  return request({
+    url: `/system/apply/material/${id}`,
+    method: 'delete',
+  })
+}

+ 18 - 0
src/api/system/dept.js

@@ -9,6 +9,24 @@ export function listDept(query) {
   })
 }
 
+// 查询组织列表
+export function queryOrgList(query) {
+  return request({
+    url: '/system/dept/orgList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询部门列表
+export function queryDeptList(query) {
+  return request({
+    url: '/system/dept/deptList',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询部门列表(排除节点)
 export function listDeptExcludeChild(deptId) {
   return request({

+ 44 - 115
src/views/business/spd/bo/basic/details.vue

@@ -102,7 +102,15 @@
           <el-row>
             <el-col :span="8">
               <el-form-item label="医院营收总额" prop="totalHosRevenue">
-                <el-input v-model="form.basic.totalHosRevenue" placeholder="请输入医院营收总额" :disabled="true"/>
+                <el-select v-model="form.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-input v-model="form.basic.totalHosRevenue" placeholder="请输入医院营收总额" :disabled="true"/> -->
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -204,24 +212,8 @@
             </el-row>
           </el-tab-pane>
           <el-tab-pane label="项目人员组成" name="xmry" style="height: 150px;overflow-y: scroll;" v-if="form.basic.boStage == 1">
-            <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="['drp-business:task:add']"
-                >新增</el-button>
-              </el-col>
-            </el-row>
-            <el-table v-loading="loading" :data="form.pojpsn">
-              <el-table-column type="selection" width="55" align="center" />
-              <el-table-column label="名称" align="center" prop="staffName" />
-              <el-table-column label="岗位名称" align="center" prop="pojpost" />
-              <el-table-column label="负责事项" align="center" prop="duty" />
-            </el-table>
+            <!-- <PojpsnList :boId="this.$route.params.id"/> -->
+            <PojpsnList :source = "'BoDetails'" :bo="pojpsnParame" 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>
@@ -451,29 +443,7 @@
             </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">
-            <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="['drp-business:task:add']"
-                >新增</el-button>
-              </el-col>
-            </el-row>
-            <el-table v-loading="loading" :data="form.behavior">
-              <el-table-column type="selection" width="55" align="center" />
-              <el-table-column label="跟进人" align="center" prop="code" />
-              <el-table-column label="跟进日期" align="center" prop="name" />
-              <el-table-column label="是否跟进" align="center" prop="type" />
-              <el-table-column label="联系人" align="center" prop="type" />
-              <el-table-column label="拜访效果" align="center" prop="type" />
-              <el-table-column label="是否需要上级协助" align="center" prop="type" />
-              <el-table-column label="协助事项" align="center" prop="type" />
-              <el-table-column label="跟进内容" align="center" prop="type" />
-            </el-table>
+            <BehaviorList :source = "'BoDetails'" :bo="behaviorParame" v-if="secondTabs == 'gj'"/>
           </el-tab-pane>
         </el-tabs>
         <el-row>
@@ -482,8 +452,8 @@
         <el-form ref="form" :model="form.basic" label-width="80px">
           <el-row>
             <el-col :span="8">
-              <el-form-item label="销售组织" prop="marketingOrganizing">
-                <el-input v-model="form.basic.marketingOrganizing" placeholder="销售组织" :disabled="true"/>
+              <el-form-item label="销售组织" prop="marketingOrganizingName">
+                <el-input v-model="form.basic.marketingOrganizingName" placeholder="销售组织" :disabled="true"/>
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -499,8 +469,8 @@
           </el-row>
           <el-row>
             <el-col :span="8">
-              <el-form-item label="负责人" prop="principal">
-                <el-input v-model="form.basic.principal" placeholder="负责人" :disabled="true"/>
+              <el-form-item label="负责人" prop="principalName">
+                <el-input v-model="form.basic.principalName" placeholder="负责人" :disabled="true"/>
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -518,61 +488,10 @@
 
       </el-tab-pane>
       <el-tab-pane label="商机任务" name="second">
-        <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="['drp-business:task:add']"
-            >新增</el-button>
-          </el-col>
-        </el-row>
-        <el-table v-loading="loading" :data="form.task">
-          <el-table-column type="selection" width="55" align="center" />
-          <el-table-column label="任务编码" align="center" prop="code" />
-          <el-table-column label="任务名称" align="center" prop="name" />
-          <el-table-column label="任务类型" align="center" prop="type" />
-          <el-table-column label="任务状态" align="center" prop="state" />
-          <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" />
-          <el-table-column label="负责人名称" align="center" prop="staffName" />
-          <el-table-column label="截止时间" align="center" prop="deadlineDate" width="180">
-            <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.deadlineDate, '{y}-{m}-{d}') }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="任务内容" align="center" prop="content" />
-        </el-table>
+        <TaskList :source = "'BoDetails'" :bo="taskParame" v-if="masterTabs == 'second'"/>
       </el-tab-pane>
       <el-tab-pane label="商机联系人" name="third">
-        <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="['drp-business:task:add']"
-            >新增</el-button>
-          </el-col>
-        </el-row>
-        <el-table v-loading="loading" :data="form.contact">
-          <el-table-column type="selection" width="55" align="center" />
-          <el-table-column label="名称" align="center" prop="code" />
-          <el-table-column label="性别" align="center" prop="name" />
-          <el-table-column label="联系电话" align="center" prop="type" />
-          <el-table-column label="部门" align="center" prop="state" />
-          <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" />
-        </el-table>
+        <ContactList :boId="this.$route.params.id"/>
       </el-tab-pane>
       <el-tab-pane label="附件信息" name="fourth">
         <el-row :gutter="10" class="mb8">
@@ -638,14 +557,21 @@ import { listTask, getTask, delTask, addTask, updateTask } from "@/api/business/
 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'
 
 export default {
-  name: 'bo-details',
+  name: 'BoDetails',
+  components: {TaskList,ContactList,PojpsnList,BehaviorList},
   dicts: ['mk_bo_type','mk_bo_state','mk_bo_winstate','mk_bo_source'],
   data() {
       return {
         masterTabs: 'first',
         secondTabs: 'jd1',
+        loading:false,
+        rules:{},
         // 基本信息
         form: {
           basic:{
@@ -658,6 +584,18 @@ export default {
           behavior:[],
           pojpsn:[],
         },
+        //任务查询参数
+        taskParame:{
+          bo: null,
+        },
+        //项目成员查询参数
+        pojpsnParame:{
+          bo: null,
+        },
+        //行动查询参数
+        behaviorParame:{
+          bo: null,
+        },
         // 上传参数
         upload: {
           // 是否显示弹出层
@@ -685,11 +623,8 @@ export default {
         console.log('主标签页切换',e);
         switch(e.name) {
           case 'second':
-              //获取商机任务
-              const p = {"bo": this.form.basic.id};
-              listTask(p).then(response => {
-                this.form.task = response.rows;
-              });
+              //跟进记录
+              this.taskParame.bo = this.form.basic.id;
               break;
           case 'third':
               //获取联系人
@@ -709,17 +644,12 @@ export default {
         console.log('次标签页切换',e);
         switch(e.name) {
           case 'gj':
-              //获取跟进记录
-              getBehaviorList(this.form.basic.id).then(response => {
-                this.form.behavior = response.rows;
-              });
+              //跟进记录
+              this.behaviorParame.bo = this.form.basic.id;
               break;
           case 'xmry':
-              //获取成员
-              const p = {"bo": this.form.basic.id};
-              listPojpsn(p).then(response => {
-                this.form.pojpsn = response.rows;
-              });
+              //项目成员
+              this.pojpsnParame.bo = this.form.basic.id;
               break;
           default:
               break;
@@ -785,7 +715,6 @@ export default {
     },
   },
   created() {
-    console.log("详情id:",this.$route.params.id);
     getBasic(this.$route.params.id).then(response => {
       this.form.basic = response.data;
     });

+ 153 - 92
src/views/business/spd/bo/basic/index.vue

@@ -2,30 +2,6 @@
 <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="boSource">
-        <el-input
-          v-model="queryParams.boSource"
-          placeholder="请输入商机来源"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="商机状态" prop="boState">
-        <el-input
-          v-model="queryParams.boState"
-          placeholder="请输入商机状态"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="商机阶段" prop="boStage">
-        <el-input
-          v-model="queryParams.boStage"
-          placeholder="请输入商机阶段"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="商机名称" prop="boName">
         <el-input
           v-model="queryParams.boName"
@@ -34,13 +10,35 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="推荐人" prop="referrer">
-        <el-input
-          v-model="queryParams.referrer"
-          placeholder="请输入推荐人"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+      <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="boState">
+        <el-select v-model="queryParams.boState" placeholder="请输入商机状态">
+          <el-option
+            v-for="dict in dict.type.mk_bo_state"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="商机阶段" prop="boStage">
+        <el-select v-model="queryParams.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-form-item label="客户名称" prop="customerName">
         <el-input
@@ -50,49 +48,9 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="医院营收总额" prop="totalHosRevenue">
-        <el-input
-          v-model="queryParams.totalHosRevenue"
-          placeholder="请输入医院营收总额"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="医院耗材预估值" prop="hosDiscreetValue">
-        <el-input
-          v-model="queryParams.hosDiscreetValue"
-          placeholder="请输入医院耗材预估值"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="销售组织" prop="marketingOrganizing">
-        <el-input
-          v-model="queryParams.marketingOrganizing"
-          placeholder="请输入销售组织"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="销售区域" prop="marketingArea">
-        <el-input
-          v-model="queryParams.marketingArea"
-          placeholder="请输入销售区域"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="部门" prop="deptName">
-        <el-input
-          v-model="queryParams.deptName"
-          placeholder="请输入部门"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="商机负责人" prop="principal">
+      <el-form-item label="商机负责人" prop="principalName">
         <el-input
-          v-model="queryParams.principal"
+          v-model="queryParams.principalName"
           placeholder="请输入负责人"
           clearable
           @keyup.enter.native="handleQuery"
@@ -153,19 +111,39 @@
     <el-table v-loading="loading" :data="basicList" @selection-change="handleSelectionChange" @cell-dblclick="enterDetails">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="商机名称" align="center" prop="boName" />
-      <el-table-column label="商机类型" align="center" prop="boType" />
-      <el-table-column label="商机状态" align="center" prop="boState" />
-      <el-table-column label="商机来源" align="center" prop="boSource" />
-      <el-table-column label="商机阶段" align="center" prop="boStage" />
+      <el-table-column label="商机类型" align="center" prop="boType" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_type" :value="scope.row.boType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="商机状态" align="center" prop="boState" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_state" :value="scope.row.boState"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="商机来源" align="center" prop="boSource" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_source" :value="scope.row.boSource"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="商机阶段" align="center" prop="boStage" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_stage" :value="scope.row.boStage"/>
+        </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" />
+      <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="marketingOrganizing" />
       <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="principal" />
+      <el-table-column label="商机负责人" align="center" prop="principalName" />
       <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">
@@ -245,12 +223,21 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="客户名称" prop="customerName">
-              <el-input v-model="form.customerName" placeholder="请输入客户名称" />
+              <el-input v-model="form.customerName" placeholder="请输入客户" >
+                <el-button slot="append" icon="el-icon-more" @click="refereCustomer"></el-button>
+              </el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="医院营收总额" prop="totalHosRevenue">
-              <el-input v-model="form.totalHosRevenue" placeholder="请输入医院营收总额" />
+              <el-select v-model="form.totalHosRevenue" placeholder="请输入医院营收总额">
+                <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>
@@ -261,11 +248,6 @@
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="销售组织" prop="marketingOrganizing">
-              <el-input v-model="form.marketingOrganizing" placeholder="请输入销售组织" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
             <el-form-item label="销售区域" prop="marketingArea">
               <el-input v-model="form.marketingArea" placeholder="请输入销售区域" />
             </el-form-item>
@@ -273,13 +255,24 @@
         </el-row>
         <el-row>
           <el-col :span="8">
+            <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-form-item label="部门" prop="deptName">
-              <el-input v-model="form.deptName" placeholder="请输入部门" />
+              <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-form-item label="商机负责人" prop="principal">
-              <el-input v-model="form.principal" placeholder="请输入负责人" />
+            <el-form-item label="商机负责人" prop="principalName">
+              <el-input v-model="form.principalName">
+                <el-button slot="append" icon="el-icon-more" @click="refereStaff"></el-button>
+              </el-input>
             </el-form-item>
           </el-col>
         </el-row>
@@ -292,15 +285,44 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 客户参照 -->
+    <CustomerRef
+      ref="customerSelect"
+      @doSubmit="customerSelectionsToInput"
+      :single="true"
+    />
+    <!-- 组织参照 -->
+    <OrgRef
+      ref="orgSelect"
+      @doSubmit="orgSelectionsToInput"
+      :single="true"
+    />
+    <!-- 部门参照 -->
+    <DeptRef
+      ref="deptSelect"
+      @doSubmit="deptSelectionsToInput"
+      :single="true"
+    />
+    <!-- 员工参照 -->
+    <StaffRef
+      ref="staffSelect"
+      @doSubmit="staffSelectionsToInput"
+      :single="true"
+    />
   </div>
 </template>
 
 <script>
 import { listBasic, getBasic, addBasic, updateBasic, delBasic } from "@/api/business/spd/bo/basic";
+import CustomerRef from '@/views/business/spd/bo/refer/customer/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';
 
 export default {
   name: "Basic",
-  dicts: ['mk_bo_type','mk_bo_source'],
+  dicts: ['mk_bo_type','mk_bo_state','mk_bo_stage','mk_bo_source','mk_bo_total_revenue'],
+  components: {CustomerRef,OrgRef,DeptRef,StaffRef},
   data() {
     return {
       // 遮罩层
@@ -338,7 +360,7 @@ export default {
         biddingDocumentsPass: null,
         startConSignTime: null,
         endConSignTime: null,
-        marketingOrganizing: null,
+        marketingOrganizingName: null,
         marketingArea: null,
         deptName: null,
         createBy: null,
@@ -412,9 +434,12 @@ export default {
         hosDiscreetValue: null,
         boContent: null,
         marketingOrganizing: null,
+        marketingOrganizingName: null,
         marketingArea: null,
+        dept: null,
         deptName: null,
         principal: null,
+        principalName: null,
         delFlag: null,
         tenantId: null,
         revision: null,
@@ -497,6 +522,42 @@ export default {
       this.download('system/basic/export', {
         ...this.queryParams
       }, `basic_${new Date().getTime()}.xlsx`)
+    },
+    // 触发客户参照列表
+    refereCustomer() {
+      this.$refs.customerSelect.init()
+    },
+    //客户参照列表选择后
+    customerSelectionsToInput (selections) {
+      this.form.customer = selections[0].id;
+      this.form.customerName = selections[0].name;
+    },
+    // 触发组织参照列表
+    refereOrg() {
+      this.$refs.orgSelect.init()
+    },
+    //组织参照列表选择后
+    orgSelectionsToInput (selections) {
+      this.form.marketingOrganizing = selections[0].deptId;
+      this.form.marketingOrganizingName = selections[0].deptName;
+    },
+    // 触发部门参照列表
+    refereDept() {
+      this.$refs.deptSelect.init()
+    },
+    //部门参照列表选择后
+    deptSelectionsToInput (selections) {
+      this.form.dept = selections[0].deptId;
+      this.form.deptName = selections[0].deptName;
+    },
+    // 触发员工参照列表
+    refereStaff() {
+      this.$refs.staffSelect.init()
+    },
+    //员工参照列表选择后
+    staffSelectionsToInput (selections) {
+      this.form.principal = selections[0].userId;
+      this.form.principalName = selections[0].nickName;
     }
   }
 };

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

@@ -0,0 +1,388 @@
+<template>
+  <div class="app-container">
+    <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:behavior: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:behavior: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:behavior:remove']"
+        >删除</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="behaviorList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="负责人" align="center" prop="staffName" />
+      <el-form-item label="行动日期" prop="time">
+        <el-date-picker clearable
+          v-model="form.time"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择行动日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-table-column label="联系人" align="center" prop="linkmanName" />
+      <el-table-column label="拜访效果" align="center" prop="result" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_behavior_res" :value="scope.row.result"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="是否上级协助" align="center" prop="assist" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.assist"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="协助内容" align="center" prop="assistContent" />
+      <el-table-column label="洽谈内容" align="center" prop="content" />
+
+      <el-table-column label="任务编码" align="center" prop="taskCode" v-if="source == 'Behavior'"/>
+      <el-table-column label="行动类型" align="center" prop="type" v-if="source == 'Behavior'">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_behavior_type" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="客户" align="center" prop="customerName" v-if="source == 'Behavior'"/>
+      <el-table-column label="拜访目的" align="center" prop="purpose" v-if="source == 'Behavior'">
+        <template slot-scope="scope">
+            <dict-tag :options="dict.type.mk_bo_behavior_goal" :value="scope.row.purpose"/>
+        </template>
+      </el-table-column>
+      <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">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:behavior:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:behavior: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="1000px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="任务id" prop="taskId">
+              <el-input v-model="form.taskId" placeholder="请输入任务id" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="行动类型" prop="type">
+              <el-select v-model="form.type" placeholder="请输入行动类型">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_behavior_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="行动日期" prop="time">
+              <el-date-picker clearable
+                v-model="form.time"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="请选择行动日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="客户名称" prop="customerName">
+              <el-input v-model="form.customerName" 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>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="拜访目的" prop="purpose">
+              <el-select v-model="form.purpose" placeholder="请输入拜访目的">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_behavior_goal"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col  :span="8">
+            <el-form-item label="是否上级协助" prop="assist">
+              <el-select v-model="form.assist" placeholder="请输入是否上级协助">
+                <el-option
+                  v-for="dict in dict.type.sys_yes_no"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col  :span="8">
+            <el-form-item label="协助内容" prop="assistContent">
+              <el-input v-model="form.assistContent" placeholder="请输入协助内容" />
+            </el-form-item>
+          </el-col>
+          <el-col  :span="8">
+            <el-form-item label="拜访效果" prop="result">
+              <el-select v-model="form.result" placeholder="请输入拜访效果">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_behavior_res"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col  :span="8">
+            <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>
+          </el-col>
+          <el-col  :span="8">
+            <el-form-item label="负责人名称" prop="staffName">
+              <el-input v-model="form.staffName" placeholder="请输入负责人名称" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="洽谈内容">
+          <editor v-model="form.content" :min-height="192"/>
+        </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>
+  </div>
+</template>
+
+<script>
+import { listBehavior, getBehavior, delBehavior, addBehavior, updateBehavior } from "@/api/business/spd/bo/behavior";
+
+export default {
+  name: "BehaviorList",
+  props:["source","bo"],
+  dicts: ['mk_bo_behavior_res','mk_bo_behavior_type','sys_yes_no','mk_bo_behavior_goal'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 行动表格数据
+      behaviorList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        bo: null,
+        task: 1,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    console.log("this.bo",this.bo);
+    this.queryParams.bo = this.bo.bo;
+    this.queryParams.task = this.bo.task;
+    this.queryParams.taskCode = this.bo.taskCode;
+    this.getList();
+  },
+  methods: {
+    /** 查询行动列表 */
+    getList() {
+      this.loading = true;
+      listBehavior(this.queryParams).then(response => {
+        this.behaviorList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskCode: null,
+        type: null,
+        time: null,
+        customer: null,
+        customerName: null,
+        linkman: null,
+        linkmanName: null,
+        purpose: null,
+        result: null,
+        assist: null,
+        assistContent: null,
+        salesOrg: null,
+        salesOrgName: null,
+        dept: null,
+        deptName: null,
+        staff: null,
+        staffName: null,
+        content: null,
+        tenantId: null,
+        revision: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加行动";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getBehavior(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改行动";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateBehavior(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addBehavior(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除行动编号为"' + ids + '"的数据项?').then(function() {
+        return delBehavior(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/behavior/export', {
+        ...this.queryParams
+      }, `behavior_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 9 - 263
src/views/business/spd/bo/behavior/index.vue

@@ -9,280 +9,23 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="行动日期" prop="time">
-        <el-date-picker clearable
-          v-model="queryParams.time"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="请选择行动日期">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="客户" prop="customer">
-        <el-input
-          v-model="queryParams.customer"
-          placeholder="请输入客户"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="客户名称" prop="customerName">
-        <el-input
-          v-model="queryParams.customerName"
-          placeholder="请输入客户名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="联系人" prop="linkman">
-        <el-input
-          v-model="queryParams.linkman"
-          placeholder="请输入联系人"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="联系人名称" prop="linkmanName">
-        <el-input
-          v-model="queryParams.linkmanName"
-          placeholder="请输入联系人名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="拜访目的" prop="purpose">
-        <el-input
-          v-model="queryParams.purpose"
-          placeholder="请输入拜访目的"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="拜访效果" prop="result">
-        <el-input
-          v-model="queryParams.result"
-          placeholder="请输入拜访效果"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否上级协助" prop="assist">
-        <el-input
-          v-model="queryParams.assist"
-          placeholder="请输入是否上级协助"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="销售组织" prop="salesOrg">
-        <el-input
-          v-model="queryParams.salesOrg"
-          placeholder="请输入销售组织"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="销售组织名称" prop="salesOrgName">
-        <el-input
-          v-model="queryParams.salesOrgName"
-          placeholder="请输入销售组织名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="部门" prop="dept">
-        <el-input
-          v-model="queryParams.dept"
-          placeholder="请输入部门"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="部门名称" prop="deptName">
-        <el-input
-          v-model="queryParams.deptName"
-          placeholder="请输入部门名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="负责人" prop="staff">
-        <el-input
-          v-model="queryParams.staff"
-          placeholder="请输入负责人"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="负责人名称" prop="staffName">
-        <el-input
-          v-model="queryParams.staffName"
-          placeholder="请输入负责人名称"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
 
-    <el-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:behavior: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:behavior: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:behavior:remove']"
-        >删除</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="behaviorList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="任务编码" align="center" prop="taskCode" />
-      <el-table-column label="行动类型" align="center" prop="type" />
-      <el-table-column label="行动日期" align="center" prop="time" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.time, '{y}-{m}-{d}') }}</span>
-        </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="purpose" />
-      <el-table-column label="拜访效果" align="center" prop="result" />
-      <el-table-column label="是否上级协助" align="center" prop="assist" />
-      <el-table-column label="协助内容" align="center" prop="assistContent" />
-      <el-table-column label="销售组织" align="center" prop="salesOrgName" />
-      <el-table-column label="部门" align="center" prop="deptName" />
-      <el-table-column label="负责人" align="center" prop="staffName" />
-      <el-table-column label="洽谈内容" align="center" prop="content" />
-      <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:behavior:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['system:behavior: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="taskId">
-          <el-input v-model="form.taskId" placeholder="请输入任务id" />
-        </el-form-item>
-        <el-form-item label="行动日期" prop="time">
-          <el-date-picker clearable
-            v-model="form.time"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择行动日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="客户" prop="customer">
-          <el-input v-model="form.customer" 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="linkman">
-          <el-input v-model="form.linkman" placeholder="请输入联系人" />
-        </el-form-item>
-        <el-form-item label="联系人名称" prop="linkmanName">
-          <el-input v-model="form.linkmanName" placeholder="请输入联系人名称" />
-        </el-form-item>
-        <el-form-item label="拜访目的" prop="purpose">
-          <el-input v-model="form.purpose" placeholder="请输入拜访目的" />
-        </el-form-item>
-        <el-form-item label="拜访效果" prop="result">
-          <el-input v-model="form.result" placeholder="请输入拜访效果" />
-        </el-form-item>
-        <el-form-item label="是否上级协助" prop="assist">
-          <el-input v-model="form.assist" placeholder="请输入是否上级协助" />
-        </el-form-item>
-        <el-form-item label="协助内容">
-          <editor v-model="form.assistContent" :min-height="192"/>
-        </el-form-item>
-        <el-form-item label="销售组织" prop="salesOrg">
-          <el-input v-model="form.salesOrg" placeholder="请输入销售组织" />
-        </el-form-item>
-        <el-form-item label="销售组织名称" prop="salesOrgName">
-          <el-input v-model="form.salesOrgName" placeholder="请输入销售组织名称" />
-        </el-form-item>
-        <el-form-item label="部门" prop="dept">
-          <el-input v-model="form.dept" placeholder="请输入部门" />
-        </el-form-item>
-        <el-form-item label="部门名称" prop="deptName">
-          <el-input v-model="form.deptName" placeholder="请输入部门名称" />
-        </el-form-item>
-        <el-form-item label="负责人" prop="staff">
-          <el-input v-model="form.staff" placeholder="请输入负责人" />
-        </el-form-item>
-        <el-form-item label="负责人名称" prop="staffName">
-          <el-input v-model="form.staffName" placeholder="请输入负责人名称" />
-        </el-form-item>
-        <el-form-item label="洽谈内容">
-          <editor v-model="form.content" :min-height="192"/>
-        </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>
+    <BehaviorList :key="timer" :source = "'Behavior'" :bo="queryParams" />
   </div>
 </template>
 
 <script>
 import { listBehavior, getBehavior, delBehavior, addBehavior, updateBehavior } from "@/api/business/spd/bo/behavior";
+import BehaviorList from '../behavior/behaviorList.vue'
 
 export default {
-  name: "behavior",
+  name: "Behavior",
+  components: {BehaviorList},
   data() {
     return {
       // 遮罩层
@@ -332,7 +75,9 @@ export default {
       form: {},
       // 表单校验
       rules: {
-      }
+      },
+      //重新加载子组件参数
+      timer: '',
     };
   },
   created() {
@@ -388,7 +133,8 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
-      this.getList();
+      this.timer = new Date().getTime();
+      // this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {

+ 468 - 0
src/views/business/spd/bo/contact/contactList.vue

@@ -0,0 +1,468 @@
+<template>
+  <div class="app-container">
+    <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="编号" align="center" prop="code" />
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="性别" align="center" prop="gander" />
+      <el-table-column label="联系电话" align="center" prop="telephone" />
+      <el-table-column label="部门名称" align="center" prop="departmentName" />
+      <el-table-column label="职务" align="center" prop="position" />
+      <el-table-column label="决策力" align="center" prop="power" />
+      <el-table-column label="状态" align="center" prop="state" />
+      <el-table-column label="家庭地址" align="center" prop="address" />
+      <!-- <el-table-column label="商机id" align="center" prop="boId" /> -->
+      <!-- <el-table-column label="创建日期" align="center" prop="createDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="部门编码" align="center" prop="departmentCode" />
+      <el-table-column label="销售区域" align="center" prop="area" />
+      <el-table-column label="销售组织" align="center" prop="organization" />
+      <el-table-column label="最佳拜访地点" align="center" prop="visitPlace" />
+      <el-table-column label="最佳拜访时间" align="center" prop="visitTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.visitTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="邮件" align="center" prop="mail" />
+      <el-table-column label="关键决策人" align="center" prop="decisionMaker" />
+      <el-table-column label="擅长领域" align="center" prop="fieldExpertise" />
+      <el-table-column label="支持度" align="center" prop="support" />
+      <el-table-column label="职称" align="center" prop="jobTitle" />
+      <el-table-column label="任职科室" align="center" prop="section" />
+      <el-table-column label="上级联系人" align="center" prop="superiorContact" />
+      <el-table-column label="业务爱好" align="center" prop="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" 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>
+  </div>
+</template>
+
+<script>
+import { listContact, getContact, delContact, addContact, updateContact } from "@/api/business/spd/bo/contact";
+
+export default {
+  name: "contactList",
+  props:["boId"],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 联系人管理表格数据
+      contactList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        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,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        area: [
+          { required: true, message: "销售区域不能为空", trigger: "blur" }
+        ],
+        organization: [
+          { required: true, message: "销售组织不能为空", trigger: "blur" }
+        ],
+        address: [
+          { required: true, message: "家庭地址不能为空", trigger: "blur" }
+        ],
+        telephone: [
+          { required: true, message: "联系电话不能为空", trigger: "blur" }
+        ],
+        decisionMaker: [
+          { required: true, message: "关键决策人不能为空", trigger: "blur" }
+        ],
+        power: [
+          { required: true, message: "决策力不能为空", trigger: "blur" }
+        ],
+        jobTitle: [
+          { required: true, message: "职称不能为空", trigger: "blur" }
+        ],
+        position: [
+          { required: true, message: "职务不能为空", trigger: "blur" }
+        ],
+        section: [
+          { required: true, message: "任职科室不能为空", trigger: "blur" }
+        ],
+        customerName: [
+          { required: true, message: "所属客户名称不能为空", trigger: "blur" }
+        ],
+        gander: [
+          { required: true, message: "性别不能为空", trigger: "blur" }
+        ],
+        name: [
+          { required: true, message: "姓名不能为空", trigger: "blur" }
+        ],
+        code: [
+          { required: true, message: "编号不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询联系人管理列表 */
+    getList() {
+      this.loading = true;
+      listContact(this.queryParams).then(response => {
+        this.contactList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        boId: null,
+        delFlag: null,
+        updateTime: null,
+        updateBy: null,
+        createDate: null,
+        createBy: 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,
+        id: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加联系人管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getContact(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改联系人管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateContact(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addContact(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除联系人管理编号为"' + ids + '"的数据项?').then(function() {
+        return delContact(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/contact/export', {
+        ...this.queryParams
+      }, `contact_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

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

@@ -0,0 +1,698 @@
+<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-date-picker clearable
+          v-model="queryParams.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="queryParams.departmentName"
+          placeholder="请输入部门名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门编码" prop="departmentCode">
+        <el-input
+          v-model="queryParams.departmentCode"
+          placeholder="请输入部门编码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="销售区域" prop="area">
+        <el-input
+          v-model="queryParams.area"
+          placeholder="请输入销售区域"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="销售组织" prop="organization">
+        <el-input
+          v-model="queryParams.organization"
+          placeholder="请输入销售组织"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最佳拜访地点" prop="visitPlace">
+        <el-input
+          v-model="queryParams.visitPlace"
+          placeholder="请输入最佳拜访地点"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最佳拜访时间" prop="visitTime">
+        <el-date-picker clearable
+          v-model="queryParams.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="queryParams.address"
+          placeholder="请输入家庭地址"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="邮件" prop="mail">
+        <el-input
+          v-model="queryParams.mail"
+          placeholder="请输入邮件"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="telephone">
+        <el-input
+          v-model="queryParams.telephone"
+          placeholder="请输入联系电话"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="关键决策人" prop="decisionMaker">
+        <el-input
+          v-model="queryParams.decisionMaker"
+          placeholder="请输入关键决策人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="擅长领域" prop="fieldExpertise">
+        <el-input
+          v-model="queryParams.fieldExpertise"
+          placeholder="请输入擅长领域"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="支持度" prop="support">
+        <el-input
+          v-model="queryParams.support"
+          placeholder="请输入支持度"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="决策力" prop="power">
+        <el-input
+          v-model="queryParams.power"
+          placeholder="请输入决策力"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="职称" prop="jobTitle">
+        <el-input
+          v-model="queryParams.jobTitle"
+          placeholder="请输入职称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="职务" prop="position">
+        <el-input
+          v-model="queryParams.position"
+          placeholder="请输入职务"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="任职科室" prop="section">
+        <el-input
+          v-model="queryParams.section"
+          placeholder="请输入任职科室"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="上级联系人" prop="superiorContact">
+        <el-input
+          v-model="queryParams.superiorContact"
+          placeholder="请输入上级联系人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="state">
+        <el-input
+          v-model="queryParams.state"
+          placeholder="请输入状态"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="业务爱好" prop="hobby">
+        <el-input
+          v-model="queryParams.hobby"
+          placeholder="请输入业务爱好"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="籍贯" prop="birthplace">
+        <el-input
+          v-model="queryParams.birthplace"
+          placeholder="请输入籍贯"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="生日" prop="birthday">
+        <el-date-picker clearable
+          v-model="queryParams.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="queryParams.contactClassification"
+          placeholder="请输入联系人分类"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="所属客户名称" prop="customerName">
+        <el-input
+          v-model="queryParams.customerName"
+          placeholder="请输入所属客户名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="所属客户编码" prop="customerCode">
+        <el-input
+          v-model="queryParams.customerCode"
+          placeholder="请输入所属客户编码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="性别" prop="gander">
+        <el-input
+          v-model="queryParams.gander"
+          placeholder="请输入性别"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="姓名" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入姓名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="编号" prop="code">
+        <el-input
+          v-model="queryParams.code"
+          placeholder="请输入编号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-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>
+  </div>
+</template>
+
+<script>
+import { listContact, getContact, delContact, addContact, updateContact } from "@/api/business/spd/bo/contact";
+
+export default {
+  name: "Contact",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 联系人管理表格数据
+      contactList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        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,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        area: [
+          { required: true, message: "销售区域不能为空", trigger: "blur" }
+        ],
+        organization: [
+          { required: true, message: "销售组织不能为空", trigger: "blur" }
+        ],
+        address: [
+          { required: true, message: "家庭地址不能为空", trigger: "blur" }
+        ],
+        telephone: [
+          { required: true, message: "联系电话不能为空", trigger: "blur" }
+        ],
+        decisionMaker: [
+          { required: true, message: "关键决策人不能为空", trigger: "blur" }
+        ],
+        power: [
+          { required: true, message: "决策力不能为空", trigger: "blur" }
+        ],
+        jobTitle: [
+          { required: true, message: "职称不能为空", trigger: "blur" }
+        ],
+        position: [
+          { required: true, message: "职务不能为空", trigger: "blur" }
+        ],
+        section: [
+          { required: true, message: "任职科室不能为空", trigger: "blur" }
+        ],
+        customerName: [
+          { required: true, message: "所属客户名称不能为空", trigger: "blur" }
+        ],
+        gander: [
+          { required: true, message: "性别不能为空", trigger: "blur" }
+        ],
+        name: [
+          { required: true, message: "姓名不能为空", trigger: "blur" }
+        ],
+        code: [
+          { required: true, message: "编号不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询联系人管理列表 */
+    getList() {
+      this.loading = true;
+      listContact(this.queryParams).then(response => {
+        this.contactList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        boId: null,
+        delFlag: null,
+        updateTime: null,
+        updateBy: null,
+        createDate: null,
+        createBy: 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,
+        id: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加联系人管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getContact(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改联系人管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateContact(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addContact(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除联系人管理编号为"' + ids + '"的数据项?').then(function() {
+        return delContact(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/contact/export', {
+        ...this.queryParams
+      }, `contact_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

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

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

+ 299 - 0
src/views/business/spd/bo/pojpsn/pojpsnList.vue

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

+ 242 - 0
src/views/business/spd/bo/refer/customer/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="code">
+                <el-input
+                  size="small"
+                  v-model="queryParams.userName"
+                  placeholder="客户编码"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="queryParams.nickName"
+                  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="code"
+                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 { listCustomer } from "@/api/business/spd/bo/iuapquery/basic";
+export default {
+  data() {
+    return {
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        code: undefined,
+        name: undefined,
+      },
+      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();
+      });
+    },
+    // 获取数据列表
+    getList() {
+      this.loading = true;
+      listCustomer(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>

+ 242 - 0
src/views/business/spd/bo/refer/dept/index copy.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="code">
+                <el-input
+                  size="small"
+                  v-model="queryParams.deptId"
+                  placeholder="部门编码"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="queryParams.deptName"
+                  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="deptId"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="部门编码"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="deptName"
+                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 { queryDeptList } from "@/api/system/dept";
+export default {
+  data() {
+    return {
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        deptId: undefined,
+        deptName: undefined,
+      },
+      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();
+      });
+    },
+    // 获取数据列表
+    getList() {
+      this.loading = true;
+      queryDeptList(this.addDateRange(this.queryParams)).then(response => {
+          this.dataList = response.data;
+          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>

+ 242 - 0
src/views/business/spd/bo/refer/dept/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="code">
+                <el-input
+                  size="small"
+                  v-model="queryParams.deptId"
+                  placeholder="部门编码"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="queryParams.deptName"
+                  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="deptId"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="部门编码"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="deptName"
+                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 { queryDeptList } from "@/api/system/dept";
+export default {
+  data() {
+    return {
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        deptId: undefined,
+        deptName: undefined,
+      },
+      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();
+      });
+    },
+    // 获取数据列表
+    getList() {
+      this.loading = true;
+      queryDeptList(this.addDateRange(this.queryParams)).then(response => {
+          this.dataList = response.data;
+          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>

+ 242 - 0
src/views/business/spd/bo/refer/org/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="code">
+                <el-input
+                  size="small"
+                  v-model="queryParams.deptId"
+                  placeholder="组织编码"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="queryParams.deptName"
+                  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="deptId"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="组织编码"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="deptName"
+                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 { queryOrgList } from "@/api/system/dept";
+export default {
+  data() {
+    return {
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        deptId: undefined,
+        deptName: undefined,
+      },
+      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();
+      });
+    },
+    // 获取数据列表
+    getList() {
+      this.loading = true;
+      queryOrgList(this.addDateRange(this.queryParams)).then(response => {
+          this.dataList = response.data;
+          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>

+ 242 - 0
src/views/business/spd/bo/refer/staff/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="code">
+                <el-input
+                  size="small"
+                  v-model="queryParams.userName"
+                  placeholder="员工编码"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item prop="name">
+                <el-input
+                  size="small"
+                  v-model="queryParams.nickName"
+                  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="userName"
+                header-align="center"
+                align="left"
+                sortable="custom"
+                min-width="90"
+                label="员工编码"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="nickName"
+                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 { listUser } from "@/api/system/user";
+export default {
+  data() {
+    return {
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        nickName: undefined,
+      },
+      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();
+      });
+    },
+    // 获取数据列表
+    getList() {
+      this.loading = true;
+      listUser(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>

+ 14 - 199
src/views/business/spd/bo/task/index.vue

@@ -1,10 +1,10 @@
 <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="boCode">
+      <el-form-item label="商机名称" prop="boName">
         <el-input
-          v-model="queryParams.boCode"
-          placeholder="请输入商机编码"
+          v-model="queryParams.boName"
+          placeholder="请输入商机名称"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -94,208 +94,20 @@
         <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="['drp-business:task: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="['drp-business:task: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="['drp-business:task:remove']"
-        >删除</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="taskList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="商机编码" align="center" prop="boCode" />
-      <el-table-column label="商机阶段" align="center" prop="boStage" />
-      <el-table-column label="任务编码" align="center" prop="code" />
-      <el-table-column label="任务名称" align="center" prop="name" />
-      <el-table-column label="任务类型" align="center" prop="type" />
-      <el-table-column label="任务状态" align="center" prop="state" />
-      <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" />
-      <el-table-column label="负责人名称" align="center" prop="staffName" />
-      <el-table-column label="截止时间" align="center" prop="deadlineDate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.deadlineDate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="任务内容" align="center" prop="content" />
-      <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="['drp-business:task:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['drp-business:task: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="1000px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="商机" prop="boCode">
-              <el-input v-model="form.boCode" 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>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="任务编码" prop="code">
-              <el-input v-model="form.code" placeholder="请输入任务编码" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row>
-          <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="任务状态">
-              <el-select v-model="form.state" placeholder="请输入任务状态">
-                <el-option
-                  v-for="dict in dict.type.mk_bo_taskstate"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="客户" prop="customer">
-              <el-input v-model="form.customer" placeholder="请输入客户" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="联系人" prop="linkman">
-              <el-input v-model="form.linkman" placeholder="请输入联系人" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="销售组织" prop="salesOrg">
-              <el-input v-model="form.salesOrg" placeholder="请输入销售组织" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="部门" prop="dept">
-              <el-input v-model="form.dept" placeholder="请输入部门" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="负责人" prop="staff">
-              <el-input v-model="form.staff" placeholder="请输入负责人" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="截止时间" prop="deadlineDate">
-              <el-date-picker clearable
-                v-model="form.deadlineDate"
-                type="date"
-                value-format="yyyy-MM-dd"
-                placeholder="请选择截止时间">
-              </el-date-picker>
-        </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="任务类型">
-              <el-select v-model="form.type" placeholder="请选择任务类型">
-                <el-option
-                  v-for="dict in dict.type.mk_bo_tasktype"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="任务内容">
-          <editor v-model="form.content" :min-height="192"/>
-        </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>
+    <TaskList :key="timer" :source = "'Task'" :bo="queryParams" />
   </div>
 </template>
 
 
 <script>
 import { listTask, getTask, delTask, addTask, updateTask } from "@/api/business/spd/bo/task";
-import { getToken } from "@/utils/auth";
-import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import TaskList from '../task/taskList.vue'
 
 export default {
-  name: "task",
+  name: "Task",
   dicts: ['mk_bo_taskstate','mk_bo_tasktype'],
-  components: { Treeselect },
+  components: {TaskList},
   data() {
     return {
       // 遮罩层
@@ -324,7 +136,7 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        boCode: null,
+        boName: null,
         boStage: null,
         code: null,
         name: null,
@@ -348,7 +160,9 @@ export default {
       form: {},
       // 表单校验
       rules: {
-      }
+      },
+      //重新加载子组件参数
+      timer: '',
     };
   },
   created() {
@@ -373,7 +187,7 @@ export default {
     reset() {
       this.form = {
         id: null,
-        boCode: null,
+        boName: null,
         boStage: null,
         code: null,
         name: null,
@@ -404,7 +218,8 @@ export default {
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;
-      this.getList();
+      this.timer = new Date().getTime();
+      // this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {

+ 459 - 0
src/views/business/spd/bo/task/taskList.vue

@@ -0,0 +1,459 @@
+<template>
+  <div class="app-container">
+    <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="['drp-business:task: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="['drp-business:task: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="['drp-business:task:remove']"
+        >删除</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="taskList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <!-- <el-table-column label="主键" align="center" prop="id" /> -->
+      <el-table-column label="商机id" align="center" prop="bo" />
+      <el-table-column label="商机阶段" align="center" prop="boStage" />
+      <el-table-column label="任务编码" align="center" prop="code" />
+      <el-table-column label="任务名称" align="center" prop="name" />
+      <el-table-column label="任务类型" align="center" prop="type" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_tasktype" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="任务状态" align="center" prop="state" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_taskstate" :value="scope.row.state"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="客户名称" align="center" prop="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" />
+      <el-table-column label="负责人名称" align="center" prop="staffName" />
+      <el-table-column label="截止时间" align="center" prop="deadlineDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deadlineDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="任务内容" align="center" prop="content" />
+      <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="['drp-business:task:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['drp-business:task: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="1000px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="商机名称" prop="boName">
+              <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>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="客户" prop="customerName">
+              <el-input v-model="form.customerName" placeholder="请输入客户" >
+                <el-button slot="append" icon="el-icon-more" @click="refereCustomer"></el-button>
+              </el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="任务编码" prop="code">
+              <el-input v-model="form.code" placeholder="请输入任务编码" />
+            </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="任务状态">
+              <el-select v-model="form.state" placeholder="请输入任务状态">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_taskstate"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="联系人" prop="linkman">
+              <el-input v-model="form.linkman" placeholder="请输入联系人" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="截止时间" prop="deadlineDate">
+              <el-date-picker clearable
+                v-model="form.deadlineDate"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="请选择截止时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="任务类型">
+              <el-select v-model="form.type" placeholder="请选择任务类型">
+                <el-option
+                  v-for="dict in dict.type.mk_bo_tasktype"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="销售组织" prop="salesOrgName">
+              <el-input v-model="form.salesOrgName">
+                <el-button slot="append" icon="el-icon-more" @click="refereOrg"></el-button>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="部门" prop="deptName">
+              <el-input v-model="form.deptName">
+                <el-button slot="append" icon="el-icon-more" @click="refereDept"></el-button>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="负责人" prop="staff">
+              <el-input v-model="form.staffName">
+                <el-button slot="append" icon="el-icon-more" @click="refereStaff"></el-button>
+              </el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="任务内容">
+          <editor v-model="form.content" :min-height="192"/>
+        </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>
+    <!-- 客户参照 -->
+    <CustomerRef
+      ref="customerSelect"
+      @doSubmit="customerSelectionsToInput"
+      :single="true"
+    />
+    <!-- 组织参照 -->
+    <OrgRef
+      ref="orgSelect"
+      @doSubmit="orgSelectionsToInput"
+      :single="true"
+    />
+    <!-- 部门参照 -->
+    <DeptRef
+      ref="deptSelect"
+      @doSubmit="deptSelectionsToInput"
+      :single="true"
+    />
+    <!-- 员工参照 -->
+    <StaffRef
+      ref="staffSelect"
+      @doSubmit="staffSelectionsToInput"
+      :single="true"
+    />
+  </div>
+</template>
+
+<script>
+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 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';
+
+
+export default {
+  name: "TaskList",
+  props:["source","bo"],
+  dicts: ['mk_bo_taskstate','mk_bo_tasktype'],
+  components: {CustomerRef,OrgRef,DeptRef,StaffRef},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 任务表格数据
+      taskList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        bo: null,
+        boStage: null,
+        code: null,
+        name: null,
+        type: null,
+        state: null,
+        customer: null,
+        customerName: null,
+        linkman: null,
+        salesOrg: null,
+        salesOrgName: null,
+        dept: null,
+        deptName: null,
+        staff: null,
+        staffName: null,
+        deadlineDate: null,
+        content: null,
+        tenantId: null,
+        revision: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  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.getList();
+  },
+  methods: {
+    /** 查询任务列表 */
+    getList() {
+      this.loading = true;
+      listTask(this.queryParams).then(response => {
+        this.taskList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        bo: null,
+        boStage: null,
+        code: null,
+        name: null,
+        type: null,
+        state: null,
+        customer: null,
+        customerName: null,
+        linkman: null,
+        salesOrg: null,
+        salesOrgName: null,
+        dept: null,
+        deptName: null,
+        staff: null,
+        staffName: null,
+        deadlineDate: null,
+        content: null,
+        tenantId: null,
+        revision: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加任务";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTask(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改任务";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTask(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTask(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除任务编号为"' + ids + '"的数据项?').then(function() {
+        return delTask(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('drp-business/task/export', {
+        ...this.queryParams
+      }, `task_${new Date().getTime()}.xlsx`)
+    },
+    // 触发客户参照列表
+    refereCustomer() {
+      this.$refs.customerSelect.init()
+    },
+    //客户参照列表选择后
+    customerSelectionsToInput (selections) {
+      this.form.customer = selections[0].id;
+      this.form.customerName = selections[0].name;
+    },
+    // 触发组织参照列表
+    refereOrg() {
+      this.$refs.orgSelect.init()
+    },
+    //组织参照列表选择后
+    orgSelectionsToInput (selections) {
+      this.form.salesOrg = selections[0].deptId;
+      this.form.salesOrgName = selections[0].deptName;
+    },
+    // 触发部门参照列表
+    refereDept() {
+      this.$refs.deptSelect.init()
+    },
+    //部门参照列表选择后
+    deptSelectionsToInput (selections) {
+      this.form.dept = selections[0].deptId;
+      this.form.deptName = selections[0].deptName;
+    },
+    // 触发员工参照列表
+    refereStaff() {
+      this.$refs.staffSelect.init()
+    },
+    //员工参照列表选择后
+    staffSelectionsToInput (selections) {
+      this.form.staff = selections[0].userId;
+      this.form.staffName = selections[0].nickName;
+    }
+  }
+};
+</script>

+ 9 - 9
src/views/material/basicFile/details.vue

@@ -682,7 +682,7 @@ export default {
     handleFile() {
       console.log('附件按钮');
     },
-    // 改变分页情况 
+    // 改变分页情况
     handleChangePage(type) {
       switch (type) {
         case 'first':
@@ -962,7 +962,7 @@ export default {
         }
       })
     },
-    // 查询利润中心列表 
+    // 查询利润中心列表
     getCenterList(materialId) {
       materialApi.centerList({ materialId }).then(res => {
         console.log(res, '查询利润中心信息');
@@ -971,7 +971,7 @@ export default {
         }
       })
     },
-    // 查询采购中心列表 
+    // 查询采购中心列表
     getPurchaseList(materialId) {
       materialApi.purchaseList({ materialId }).then(res => {
         console.log(res, '查询采购中心');
@@ -980,7 +980,7 @@ export default {
         }
       })
     },
-    // 获取库存信息列表 
+    // 获取库存信息列表
     getInventoryList(materialId) {
       materialApi.inventoryList({ materialId }).then(res => {
         console.log(res, '获取库存信息列表');
@@ -1129,7 +1129,7 @@ export default {
         }
       })
     },
-    //获取辅助计量单位基本信息+表单列段属性 
+    //获取辅助计量单位基本信息+表单列段属性
     getUnitDetails(materialId) {
       materialApi.unitDetails(materialId).then(res => {
         console.log(res, '辅助计量单位基本信息');
@@ -1250,7 +1250,7 @@ export default {
     handleCopy() {
       console.log('复制');
     },
-    //查询 
+    //查询
     handleQuery() {
 
     },
@@ -1450,7 +1450,7 @@ export default {
         done();
       }
     },
-    // 折叠菜单改变 
+    // 折叠菜单改变
     handleCollapseChange(val) {
       console.log(val, '折叠菜单改变');
     },
@@ -1477,7 +1477,7 @@ export default {
     },
     // 参照弹窗过滤
     handleFilterRefer() {
-      // this.MoreDataDialog.key = 
+      // this.MoreDataDialog.key =
       console.log(this.MoreDataDialog.key, '查询关键字');
 
       this.handleQueryMore(this.MoreDataDialog.msg, this.MoreDataDialog.key);
@@ -1824,4 +1824,4 @@ export default {
 .otherDialog>>>.el-dialog__body {
   padding: 12px 20px;
 } */
-</style>
+</style>

+ 2 - 1
src/views/material/changeApply/index.vue

@@ -92,7 +92,7 @@
           >
           <template slot-scope="scope">
             <el-button type="text" size="small" @click="check(scope.row)">查看</el-button>
-            <el-button @click="edit(scope.row)" v-if="scope.row.status == 0 || scope.row.status == 4" type="text" size="small">修改</el-button>
+            <el-button @click="edit(scope.row)" v-if="scope.row.status == 0 || scope.row.status == 4" type="text" size="small">编辑</el-button>
             <el-button type="text" size="small" @click="deleteRow(scope.row)">删除</el-button>
           </template>
         </el-table-column>
@@ -156,6 +156,7 @@ export default {
       this.isList = false
       this.isComponent = 'addApply'
       this.page = 'add'
+      this.disable = false
     },
     getList(val) {
       console.log('val',val)

+ 1047 - 0
src/views/material/requisition/add.vue

@@ -0,0 +1,1047 @@
+<template>
+  <div class="requisition_add">
+    <el-tabs type="border-card" v-model="tabValue" @tab-click="handleClick">
+      <el-tab-pane label="基本信息" name="first">
+        <div style="width: 100%;height: 680px;overflow-y: auto; overflow-x: hidden;">
+        <el-form :model="basicForm" :rules="basicRules" ref="basic" label-width="160px">
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="单据编码" prop="billCode">
+                <el-input disabled v-model="basicForm.billCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="申请组织" prop="orgId">
+                <el-input disabled v-model="basicForm.orgId"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="四级分类" prop="classifyId">
+                <el-input :disabled="disable" v-model="basicForm.classifyId">
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="test01"></el-button>
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="医药物料" prop="isMedicine">
+                <el-select
+                    v-model="basicForm.isMedicine"
+                    placeholder="医药物料"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                  </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="DI" prop="diCode">
+                <el-input :disabled="disable" v-model="basicForm.diCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="物料名称" prop="name">
+                <el-input :disabled="disable" v-model="basicForm.name"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="英文名称" prop="enName">
+                <el-input :disabled="disable" v-model="basicForm.enName"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="简称" prop="commonName">
+                <el-input :disabled="disable" v-model="basicForm.commonName"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="规格" prop="specification">
+                <el-input :disabled="disable" v-model="basicForm.specification"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="型号" prop="model">
+                <el-input :disabled="disable" v-model="basicForm.model"></el-input>
+              </el-form-item>
+            </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-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-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="注册人/上市许可持有人" prop="registrant">
+                <el-input :disabled="disable" v-model="basicForm.registrant"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="产地" prop="originPlace">
+                <el-input :disabled="disable" v-model="basicForm.originPlace"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="厂家物料名称" prop="manufacturersMaterialName">
+                <el-input :disabled="disable" v-model="basicForm.manufacturersMaterialName"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="B2C物料" prop="isB2c">
+                <el-select
+                    v-model="basicForm.medicineMaterial"
+                    placeholder="B2C物料"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="成套件" prop="assembly">
+                <el-select
+                    v-model="basicForm.assembly"
+                    placeholder="成套件"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="批号及库存状态管理" prop="isInventoryStatus">
+                <el-select
+                    v-model="basicForm.isInventoryStatus"
+                    placeholder="批号及库存状态管理"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="效期管理" prop="expiryDateManagerment">
+                <el-select
+                    v-model="basicForm.expiryDateManagerment"
+                    placeholder="效期管理"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="近效期管理" prop="nearOnsetManagerment">
+                <el-select
+                    v-model="basicForm.nearOnsetManagerment"
+                    placeholder="近效期管理"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="有效期" prop="usefulLife">
+                <el-select
+                    v-model="basicForm.usefulLife"
+                    placeholder="有效期"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="有效期单位" prop="expiryUnitId">
+                <el-select
+                    v-model="basicForm.expiryUnitId"
+                    placeholder="有效期单位"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="有效期至单位" prop="usefulLifeUnitId">
+                <el-select
+                    v-model="basicForm.usefulLifeUnitId"
+                    placeholder="有效期至单位"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="近效期预警天数" prop="recentWarningPeriod">
+                <el-select
+                    v-model="basicForm.recentWarningPeriod"
+                    placeholder="近效期预警天数"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="有效期单位" prop="expiryUnitId">
+                <el-select
+                    v-model="basicForm.expiryUnitId"
+                    placeholder="有效期单位"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="有效期至单位" prop="usefulLifeUnitId">
+                <el-select
+                    v-model="basicForm.usefulLifeUnitId"
+                    placeholder="有效期至单位"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="近效期预警天数" prop="recentWarningPeriod">
+                <el-select
+                    v-model="basicForm.recentWarningPeriod"
+                    placeholder="近效期预警天数"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="存储条件" prop="storageCondition">
+                <el-select
+                    v-model="basicForm.storageCondition"
+                    placeholder="存储条件"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="运输条件" prop="transportationCondition">
+                <el-select
+                    v-model="basicForm.transportationCondition"
+                    placeholder="运输条件"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="物料税类" prop="materialRate">
+                <el-input :disabled="disable" v-model="basicForm.materialRate"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="交货周期" prop="deliveryPeriod">
+                <el-select
+                    v-model="basicForm.deliveryPeriod"
+                    placeholder="交货周期"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="最小起定量" prop="minOrderQty">
+                <el-input :disabled="disable" v-model="basicForm.minOrderQty"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="最小包装量" prop="minPackQty">
+                <el-input :disabled="disable" v-model="basicForm.minPackQty"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="采购员" prop="puPersonnelId">
+                <el-input :disabled="disable" v-model="basicForm.puPersonnelId"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="最小批量" prop="minBatchQty">
+                <el-input :disabled="disable" v-model="basicForm.minBatchQty"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="长度(MM)" prop="length">
+                <el-input :disabled="disable" v-model="basicForm.length"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="高度(MM)" prop="height">
+                <el-input :disabled="disable" v-model="basicForm.height"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="宽度(MM)" prop="width">
+                <el-input :disabled="disable" v-model="basicForm.width"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="箱包装数" prop="boxPackaingQty">
+                <el-input :disabled="disable" v-model="basicForm.boxPackaingQty"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="中包装数" prop="mediumPackageQty">
+                <el-input :disabled="disable" v-model="basicForm.mediumPackageQty"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="包装说明" prop="packExplain">
+                <el-input :disabled="disable" v-model="basicForm.packExplain"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="业务线" prop="businessLine">
+                <el-input :disabled="disable" v-model="basicForm.businessLine"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="物料申请人" prop="proposerId">
+                <el-input :disabled="disable" v-model="basicForm.proposerId"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="条形码" prop="barCode">
+                <el-input :disabled="disable" v-model="basicForm.barCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="使用期限/次数" prop="serviceLife">
+                <el-input :disabled="disable" v-model="basicForm.serviceLife"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="医保代码" prop="healthCode">
+                <el-input :disabled="disable" v-model="basicForm.healthCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="原型系统物料编码" prop="oriMaterialCode">
+                <el-input :disabled="disable" v-model="basicForm.oriMaterialCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="生产许可证/经营许可证/备案号" prop="productionPermit">
+                <el-input :disabled="disable" v-model="basicForm.productionPermit"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="一级分类" prop="oneClass">
+                <el-input :disabled="disable" v-model="basicForm.oneClass"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="二级分类" prop="twoClass">
+                <el-input :disabled="disable" v-model="basicForm.twoClass"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="三级分类" prop="threeClass">
+                <el-input :disabled="disable" v-model="basicForm.threeClass"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="启用状态" prop="isEnable">
+                <el-input :disabled="disable" v-model="basicForm.isEnable"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="备注" prop="remark">
+                <el-input :disabled="disable" v-model="basicForm.remark"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        </div>
+      </el-tab-pane>
+
+      <el-tab-pane label="医药属性" name="second">
+        <el-form :model="basicForm2" ref="basic2" label-width="160px">
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="药品" prop="isDrug">
+                <el-select
+                    v-model="basicForm2.isDrug"
+                    placeholder="药品"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.sys_medicine"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    />
+                  </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="注册证号/备案凭证编号" prop="registrationNo">
+                <el-input :disabled="disable" v-model="basicForm2.registrationNo"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="医疗器械" prop="medicalInstruments">
+                <el-select
+                    v-model="basicForm2.medicalInstruments"
+                    placeholder="医疗器械"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.medical_instruments"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    />
+                  </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="通用名称" prop="commonName">
+                <el-input :disabled="disable" v-model="basicForm2.commonName"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="批准文号" prop="ratifyBatchNo">
+                <el-input :disabled="disable" v-model="basicForm2.ratifyBatchNo"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="剂型" prop="dosageFrom">
+                <el-input :disabled="disable" v-model="basicForm2.dosageFrom"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="旧注册证号" prop="oriRegistrationNo">
+                <el-input :disabled="disable" v-model="basicForm2.oriRegistrationNo"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="养护类型" prop="curingType">
+                <el-input :disabled="disable" v-model="basicForm2.curingType"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <!-- <el-row style="margin-bottom: 12px;">
+          <span>物料类别</span>
+        </el-row>
+        <el-row style="margin-bottom: 12px;">
+          <el-button type="primary" size="small" plain @click="addLine">新增</el-button>
+          <el-button type="primary" size="small" plain @click="handleDelete">删除</el-button>
+          <el-button type="primary" size="small" plain @click="testsave">暂存</el-button>
+        </el-row> -->
+        <!-- <el-row>
+          <el-col :span="12">
+            <el-table 
+            :data="basicForm2.medicineTypeChanges"
+            class="request-table"
+            @selection-change="handleSelectionChange"
+            >
+              <el-table-column type="selection" width="55" />
+              <el-table-column label="序号" align="center" prop="sort">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.sort"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="物料类别" align="center" prop="medicineCode">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.medicineCode"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="类别名称" align="center" prop="medicineName">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.medicineName"></el-input>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-col>
+        </el-row> -->
+      </el-tab-pane>
+
+      <!-- <el-tab-pane label="修改记录" name="third">
+        <el-table 
+          :data="basicForm.changeRecords"
+          class="request-table"
+          >
+          <el-table-column label="字段名称" align="center" prop="pageCondtion" />
+          <el-table-column label="变更前" align="center" prop="beforeChangeValue" />
+          <el-table-column label="变更后" align="center" prop="afterChangeValue" />
+        </el-table>
+      </el-tab-pane> -->
+
+      <el-tab-pane label="单据信息" name="fourth">
+        <el-form :model="basicForm" ref="info" label-width="160px">
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="申请人" prop="createBy">
+                <el-input disabled v-model="basicForm.createBy"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="申请时间" prop="applicationTime">
+                <el-input disabled v-model="basicForm.applicationTime"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="创建人" prop="createByName">
+                <el-input disabled v-model="basicForm.createByName"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="创建时间" prop="createTime">
+                <el-input disabled v-model="basicForm.createTime"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="最后修改人" prop="updateByName">
+                <el-input disabled v-model="basicForm.updateByName"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="最后修改时间" prop="updateTime">
+                <el-input disabled v-model="basicForm.updateTime"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="最后审核人" prop="reviewedByName">
+                <el-input disabled v-model="basicForm.reviewedByName"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="最后审核时间" prop="approvalTime">
+                <el-input disabled v-model="basicForm.approvalTime"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="单据状态" prop="status">
+                <el-input disabled v-model="basicForm.status"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-tab-pane>
+    </el-tabs>
+
+    <div class="btn_group">
+      <el-col :span="1.5">
+        <el-button type="primary" size="small" plain @click="save" v-if="pageStu == 'add' || pageStu == 'edit'">保存</el-button>
+      </el-col>
+      <el-col :span="1.5" style="margin: 0 10px;">
+        <el-button type="primary" size="small" plain @click="submit" v-if="pageStu == 'add' || pageStu == 'edit'">提交</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" size="small" plain @click="back">返回</el-button>
+      </el-col>
+    </div>
+
+    <popDialog
+      ref="contractSelect"
+      @doSubmit="selectionsToInput"
+      :selectData="selectData"
+      :single="true"
+    />
+
+    <factory
+      ref="contractSelect2"
+      @doSubmit="selectionsToInput2"
+      :selectData="selectData2"
+      :single="true"
+    />
+  </div>
+</template>
+
+<script>
+import popDialog from '@/components/PopDialog/index.vue'
+import factory from '@/components/PopDialog/productFactory.vue'
+import { addReq, getReqDetail, editReq } 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
+  },
+  props: ['pageStu', 'row', 'disable'],
+  model: {
+    prop: 'isList',
+    event: 'jugislist'
+  },
+  data() {
+    return{
+      tabValue: 'first',
+      basicForm: {
+        billCode: '',
+        orgId: '',
+        // 四级分类/物料分类
+        classifyId: '',
+        // 是否医药物料
+        isMedicine: '',
+        // DI
+        diCode: '',
+        // 物料名称
+        name: '',
+        // 英文名称
+        enName: '',
+        commonName: '',
+        specification: '',
+        model: '',
+        unitId: '',
+        manufacturerId: '',
+        registrant: '',
+        originPlace: '',
+        manufacturersMaterialName: '',
+        isB2c: '',
+        assembly: '',
+        isInventoryStatus: '',
+        expiryDateManagerment: '',
+        nearOnsetManagerment: '',
+        usefulLife: '',
+        expiryUnitId: '',
+        usefulLifeUnitId: '',
+        recentWarningPeriod: '',
+        storageCondition: '',
+        transportationCondition: '',
+        materialRate: '',
+        deliveryPeriod: '',
+        minOrderQty: '',
+        minPackQty: '',
+        puPersonnelId: '',
+        minBatchQty: '',
+        length: '',
+        height: '',
+        width: '',
+        boxPackaingQty: '',
+        mediumPackageQty: '',
+        packExplain: '',
+        businessLine: '',
+        proposerId: '',
+        barCode: '',
+        serviceLife: '',
+        healthCode: '',
+        oriMaterialCode: '',
+        productionPermit: '',
+        oneClass: '',
+        twoClass: '',
+        threeClass: '',
+        isEnable: '',
+        remark: '',
+        // 物料申请单-单据信息
+        applyBillInfo: {
+          createByName: '',
+          createTime:'',
+          updateByName: '',
+          updateTime: '',
+          reviewedByName: '',
+          auditTime: ''
+        },
+        // 单据信息字段
+        status: ''
+      },
+      options: [{
+        value: '0',
+        label: '是'
+      },{
+        value: '2',
+        label: '否'
+      }],
+      basicRules: {},
+      basicForm2: {
+        // 是否药品
+        isDrug: '',
+        registrationNo: '',
+        medicalInstruments: '',
+        commonName: '',
+        ratifyBatchNo: '',
+        dosageFrom: '',
+        oriRegistrationNo: '',
+        curingType: '',
+        // 医药属性子表
+        // medicineTypeChanges:[
+        // ],
+      },
+      // tableList: [],
+      // 子表选中
+      ids: [],
+      // 弹窗
+      name: '',
+      selectData: [],
+      selectData2: []
+    }
+  },
+  // watch: {
+  //   value: {
+  //     handler (newVal) {
+  //       this.selectData = []
+  //       if (newVal) {
+  //         newVal.split(',').forEach((id) => { // 回显拿数据
+  //           this.contractService.queryById(id).then(({data}) => {
+  //             if (data && data.id !== '') {
+  //               this.selectData.push(data)
+  //             }
+  //           })
+  //         })
+  //       }
+  //     },
+  //     immediate: true,
+  //     deep: false
+  //   },
+  //   selectData: {
+  //     handler (newVal) {
+  //       this.name = newVal.map(contract => contract.contractName).join(',')
+  //     },
+  //     immediate: false,
+  //     deep: false
+  //   }
+  // },
+  mounted() {
+    this.$nextTick(() => {
+      // console.log('页面状态',this.pageStu)
+      if(this.pageStu == 'check') {
+        // alert('详情页面:')
+        console.log('页面状态',this.pageStu)
+        console.log('数据', this.row)
+        this.getDetails(this.row)
+      } else if (this.pageStu == 'edit') {
+        // alert('修改页面')
+        console.log('页面状态',this.pageStu)
+        console.log('数据', this.row)
+        this.getDetails(this.row)
+      } else if(this.pageStu == 'add') {
+        // alert('新增页面')
+        console.log('页面状态',this.pageStu)
+      }
+    })
+  },
+  methods: {
+    handleClick(tab, event) {
+      console.log(tab, event);
+      console.log('页面状态',this.pageStu)
+    },
+    // 如果是详情进入,则调用详情接口
+    getDetails(row) {
+      getReqDetail(row.id).then(res => {
+        console.log('res',res)
+        if(res.code === 200) {
+          this.basicForm = res.data
+          if(res.data.sysMaterialMedcineApply) {
+            this.basicForm2 = res.data.sysMaterialMedcineApply
+          }
+        }
+      })
+    },
+    save() {
+      if(this.pageStu == 'edit') {
+        alert(111)
+        let sparams = {...this.basicForm, ...{status: 0}}
+        sparams.sysMaterialMedcineApply = this.basicForm2
+        console.log('提交参数', sparams)
+        editReq(sparams).then(res => {
+          if(res.code === 200) {
+            this.$message({
+              message: res.msg,
+              type: 'success'
+            });
+            this.back()
+          }
+        })
+      } else {
+        alert(222)
+        // alert('保存传status:0')
+        let sparams = {...this.basicForm, ...{status: 0}}
+        sparams.sysMaterialMedcineApply = this.basicForm2
+        console.log('保存参数', sparams)
+        addReq(sparams).then(res => {
+          if(res.code === 200) {
+            this.$message({
+              message: res.msg,
+              type: 'success'
+            });
+            this.back()
+          }
+        })
+      }
+    },
+    submit() {
+      // alert('提交传status:1')
+      let sparams = {...this.basicForm, ...{status: 1}}
+      sparams.sysMaterialMedcineApply = this.basicForm2
+      console.log('提交参数', sparams)
+      editReq(sparams).then(res => {
+        if(res.code === 200) {
+          this.$message({
+            message: res.msg,
+            type: 'success'
+          });
+          this.back()
+        }
+      })
+    },
+    back() {
+      this.$emit('jugislist', true)
+      let queryParams = {
+        pageNum: 1,
+        pageSize: 10
+      }
+      this.$emit('refresh', queryParams)
+    },
+    // 子表增删行
+    // handleSelectionChange(val) {
+    //   this.ids = val
+    //   console.log('this.ids',this.ids)
+    // },
+    // addLine() {
+    //   //添加行数
+    //   let newValue = {
+    //     sort:'',
+    //     medicineCode: '',
+    //     medicineName: '',
+    //   };
+    //   this.basicForm2.medicineTypeChanges.push(newValue);
+    // },
+    // handleDelete(index) {
+    //   if(this.ids.length == 0) {
+    //     this.$message({
+    //       message: '请选择删除条目',
+    //       type: 'warning'
+    //     });
+    //   } else {
+    //     // console.log('index',index)
+    //     // this.basicForm2.medicineTypeChanges.splice(index, 1);
+    //     this.basicForm2.medicineTypeChanges = this.basicForm2.medicineTypeChanges.filter(item =>
+    //      !this.ids.some(ele =>
+    //      ele.sort == item.sort))
+    //   }
+    // },
+    // testsave() {
+    //   console.log('暂存表格:', this.basicForm2.medicineTypeChanges)
+    //   console.log('暂存表单1', this.basicForm)
+    //   let params = {...this.basicForm, ...this.basicForm2}
+    //   console.log('暂存总表单', params)
+    // },
+    // 设置选中
+    selectionsToInput (selections) {
+      console.log('父组件拿到的:', selections)
+      this.selectData = selections
+      this.$emit('getInfo', this.selectData)
+      getMaterialDetails(selections[0].id).then(res => {
+        console.log('res',res)
+        if (res.code === 200) {
+          let data = res.data.data
+          // 物料id
+          this.basicForm.materialId = data.id
+          // 物料分类Id
+          this.basicForm.materialClassifyId = data.classifyId
+          this.basicForm.materialCode = data.code
+          this.basicForm.materialName = data.name
+          this.basicForm.medicineMaterial = data.isMedicine
+          this.basicForm.oneClass = data.oneClass
+          this.basicForm.twoClass = data.twoClass
+          this.basicForm.threeClass = data.threeClass
+          this.basicForm.fourClass = data.fourClass
+          this.basicForm.specification = data.specification
+          this.basicForm.model = data.model
+          this.basicForm.registrant = data.registrant
+          this.basicForm.storageConditions = data.storageCondition
+          this.basicForm.transportCondition = data.transportationCondition
+          this.basicForm.remark = data.deliveryPeriod
+          if(data.medcines.length !== 0) {
+            this.basicForm2.drug = data.medcines[0].isDrug
+            this.basicForm2.registrationNo = data.medcines[0].registrationNo
+            this.basicForm2.medicalDevices = data.medcines[0].medicalInstruments
+            this.basicForm2.maintenanceType = data.medcines[0].curingType
+          }
+        }
+      })
+    },
+    selectionsToInput2 (selections) {
+      console.log('选择的数据',selections)
+      this.basicForm.factory = selections[0].manufactureName
+    },
+    // 显示列表
+    test01() {
+      console.log('测试点击')
+      this.$refs.contractSelect.init()
+    },
+    test02() {
+      console.log('测试弹窗2');
+      this.$refs.contractSelect2.init()
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  .requisition_add {
+  height: calc(100vh - 84px);
+  padding: 12px;
+  box-sizing: border-box;
+}
+.btn_group {
+  width: 100%;
+  margin: 20px 0;
+  display: flex;
+  justify-content: center;
+}
+</style>

+ 204 - 179
src/views/material/requisition/index.vue

@@ -1,217 +1,242 @@
-<!-- 物料申请单 -->
 <template>
-  <div class="material-requisition">
-    <!-- 操作栏 -->
+  <div class="requisition">
+    <div class="applyList" v-if="isList">
     <el-row :gutter="10" class="mb10">
-      <!-- 新增、修改、删除、复制 -->
       <el-col :span="1.5">
-        <el-button-group>
-          <el-button size="small" @click="handleInster">新增</el-button>
-          <el-button size="small" @click="handleEdit">修改</el-button>
-          <el-button size="small" @click="handleDel">删除</el-button>
-          <el-button size="small" @click="handleCopy">复制</el-button>
-        </el-button-group>
+
+        <el-select size="small" v-model="textValue" placeholder="请选择">
+        <el-option
+          v-for="item in text"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+
+      <el-select size="small" v-model="ruleValue" placeholder="请选择">
+        <el-option
+          v-for="item in rule"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+
+      <el-input
+        v-model="input"
+        size="small"
+        placeholder="请输入"
+        clearable
+        style="width: 240px"
+      />
+
       </el-col>
 
-      <!-- 查询、刷新 -->
       <el-col :span="1.5">
-        <el-button-group>
-          <el-button size="small" @click="handleQuery">查询</el-button>
-          <el-button size="small" @click="handleRefresh">刷新</el-button>
-        </el-button-group>
+        <el-button type="primary" size="small" plain>查询</el-button>
       </el-col>
-
-      <!-- 提交、收回  审批、取消审批、查看审批意见 -->
       <el-col :span="1.5">
-        <el-button-group>
+        <el-button type="primary" size="small" plain>高级查询</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" size="small" plain>重置</el-button>
+      </el-col>
 
-          <el-dropdown split-button size="small" @click="handleSubmit(true)" @command="handleSubmit">
-            提交
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item :command="isSubmit(true)">提交</el-dropdown-item>
-              <el-dropdown-item :command="isSubmit(false)">收回</el-dropdown-item>
-            </el-dropdown-menu>
-          </el-dropdown>
+    </el-row>
 
-          <el-dropdown split-button size="small" @click="handleApproval('approval')" @command="handleApproval">
-            审批
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item :command="approvalState('approval')">审批</el-dropdown-item>
-              <el-dropdown-item :command="approvalState('cancel')">取消审批</el-dropdown-item>
-              <el-dropdown-item :command="approvalState('view')">查看审批意见</el-dropdown-item>
-            </el-dropdown-menu>
-          </el-dropdown>
-        </el-button-group>
+    <el-row :gutter="10" class="mb10">
+      <el-col :span="1.5">
+        <el-button type="primary" size="small" plain @click="newAdd">新增</el-button>
       </el-col>
-
-      <!-- 附件管理 -->
       <el-col :span="1.5">
-        <el-button-group>
-          <el-button size="small" v-if="isComponent == 'requestDetails'">附件管理</el-button>
-          <!-- <el-button size="small">维护物料</el-button> -->
-
-        </el-button-group>
+        <el-button type="primary" size="small" plain>导入</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" size="small" plain>导出</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button type="primary" size="small" plain>批量提交</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" size="small" plain>批量删除</el-button>
+      </el-col> -->
     </el-row>
 
-    <el-card class="request-list">
-      <!-- v-loading="loading" @selection-change="handleSelectionChange" -->
-      <el-table :data="taskList" @cell-dblclick="handledbClick" class="request-table">
-        <el-table-column type="index" label="序号" width="55" align="center" />
-        <el-table-column label="主键" align="center" prop="id" />
-        <el-table-column label="编码" align="center" prop="code" />
-        <el-table-column label="名称" align="center" prop="name" />
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+    <el-card>
+      <el-table 
+        :data="tableList" 
+        class="request-table"
+        fit
+        max-height="680"
+        @selection-change="handleSelectionChange"
+      >
+        <!-- <el-table-column type="selection" width="55" /> -->
+        <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" />
+        <el-table-column label="最后修改时间" align="center" width="150" prop="updateTime" />
+        <el-table-column
+          fixed="right"
+          label="操作"
+          align="center"
+          width="150"
+          >
           <template slot-scope="scope">
-            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-              v-hasPermi="['system:task:edit']">修改</el-button>
-            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-              v-hasPermi="['system:task:remove']">删除</el-button>
+            <el-button type="text" size="small" @click="check(scope.row)">查看</el-button>
+            <el-button @click="edit(scope.row)" v-if="scope.row.status == 0 || scope.row.status == 4" type="text" size="small">编辑</el-button>
+            <el-button type="text" size="small" @click="deleteRow(scope.row)">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
 
-      <!-- v-show="total > 0" -->
-      <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
-        @pagination="getList" />
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :page-sizes="[5, 10, 15, 20]"
+        :page-size=queryParams.pageSize
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+        style="text-align: center;">
+      </el-pagination>
     </el-card>
+    </div>
+
+    <component :is="isComponent" v-model="isList" :pageStu="page" :disable="disable" :row="rowDetail" @refresh="getList" v-if="!isList"/>
   </div>
 </template>
 
 <script>
-import './style/index.scss';
-
-import requestList from './list.vue';
-import requestDetails from './details.vue';
-
-import Store from '@/store/index'
+import addReq from './add.vue';
+import { getReqList, delReq } from '@/api/requisition/basic'
 export default {
-  name: "material-requisition",
+  name: 'requisition',
   components: {
-    requestList,
-    requestDetails,
+    addReq
   },
   data() {
-    return {
-      isComponent: 'requestList',
-      // 头部参数
-      headerParams: {
-        // 是否编辑
-        isEdit: false,
-      },
-      // 总条数
-      total: 1,
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        code: null,
-        name: null
-      },
-      // 物料基本信息数据
-      taskList: [
-        {
-          id: 1,
-          code: '001',
-          name: '名称'
-        }
-      ],
-      // 总条数
-      total: 0,
-      // 查询参数
+    return{
+      textValue: 1,
+      text: [{label: '文本字段', value: 1}, {label: '字典字段', value: 2}],
+      ruleValue: 1,
+      rule:[{label: '包含', value: 1}, {label: '不包含', value: 2}, {label: '等于', value: 3}, {label: '不等于', value: 4}],
+      input: '',
+      // 
+      tableList: [],
       queryParams: {
         pageNum: 1,
-        pageSize: 10,
-        code: null,
-        name: null
+        pageSize: 10
       },
-    };
+      total:0,
+      // isComponent
+      isComponent:'addReq',
+      isList: true,
+      // 页面状态
+      page: '',
+      rowDetail: {},
+      disable: false
+    }
   },
   created() {
-    this.getList();
-    console.log(Store.state.user, 'Store');
+    
+  },
+  mounted() {
+    this.getList(this.queryParams)
   },
   methods: {
-    // 新增
-    handleInster() {
-      console.log('新增');
-      this.isComponent = 'requestDetails';
-    },
-    // 修改
-    handleEdit() {
-      console.log('修改');
-    },
-    // 删除
-    handleDel() {
-      console.log('删除');
-    },
-    // 复制
-    handleCopy() {
-      console.log('复制');
-    },
-    // 查询
-    handleQuery() {
-      console.log('查询');
-    },
-    // 刷新
-    handleRefresh() {
-      console.log('刷新');
-    },
-    // 提交
-    handleSubmit(val) {
-      console.log(val, '提交');
-    },
-    isSubmit(type) {
-      return type
-    },
-    // 审批
-    handleApproval(val) {
-      console.log(val, '审批');
-    },
-    approvalState(type) {
-      return type
-    },
-    // 触发动态组件
-    handleActionBar(params) {
-      console.log(`需要更换至${params}~~~`);
-      this.isComponent = params;
-    },
-
-    handleClick() { },
-    /** 查询【请填写功能名称】列表 */
-    getList() {
-
-    },
-    // 取消按钮
-    cancel() {
-
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 双击行
-    handledbClick(e) {
-      console.log(e, '双击行');
-      // console.log(this.$tab.openPage('测试', '/material/requisition/detail'), 'this.$tab');
-      console.log(this.$router.push('/material/requisition/detail'), 'this.$tab');
-      // this.$emit("actionBar", "requestDetails")
-    },
-    handleSelectionChange() { },
-
+    newAdd() {
+      this.isList = false
+      this.isComponent = 'addReq'
+      this.page = 'add'
+      this.disable = false
+    },
+    getList(val) {
+      console.log('val',val)
+      getReqList(val).then(res => {
+        if (res.code === 200) {
+          this.tableList = res.rows
+          this.total = res.total
+        }
+      })
+    },
+    // 表格内状态栏判断值
+    statusJug(row) {
+      if (row.status === 0) {
+        return '未提交'
+      } else if (row.status === 1) {
+        return '审批中'
+      } else if (row.status === 2) {
+        return '已完成'
+      } else if (row.status === 3) {
+        return '已驳回'
+      }
+    },
+    // 
+    handleSelectionChange () {
+
+    },
+    check(row) {
+      console.log('查看详情', row)
+      this.isList = false
+      this.isComponent = 'addReq'
+      this.page = 'check'
+      this.rowDetail = row
+      this.disable = true
+    },
+    edit(row) {
+      console.log('修改先加载详情', row)
+      this.isList = false
+      this.isComponent = 'addReq'
+      this.page = 'edit'
+      this.rowDetail = row
+      this.disable = false
+    },
+    deleteRow(row) {
+      this.$confirm('是否删除此条数据?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          delReq(row.id).then(res => {
+            if(res.code === 200) {
+              this.$message({
+                message: res.msg,
+                type: 'success'
+              });
+              this.getList(this.queryParams)
+            }
+          })
+        }).catch(() => {})
+    },
+    handleSizeChange(val) {
+      console.log(`每页 ${val} 条`);
+      this.queryParams.pageSize = val
+      this.getList(this.queryParams)
+    },
+    handleCurrentChange(val) {
+      console.log(`当前页: ${val}`);
+      this.queryParams.pageNum = val
+      this.getList(this.queryParams)
+    }
   }
-};
+}
 </script>
+
+<style scoped lang="scss">
+.requisition {
+  height: calc(100vh - 84px);
+  padding: 12px;
+  box-sizing: border-box;
+}
+</style>

+ 217 - 0
src/views/material/requisition/index_bak.vue

@@ -0,0 +1,217 @@
+<!-- 物料申请单 -->
+<template>
+  <div class="material-requisition">
+    <!-- 操作栏 -->
+    <el-row :gutter="10" class="mb10">
+      <!-- 新增、修改、删除、复制 -->
+      <el-col :span="1.5">
+        <el-button-group>
+          <el-button size="small" @click="handleInster">新增</el-button>
+          <el-button size="small" @click="handleEdit">修改</el-button>
+          <el-button size="small" @click="handleDel">删除</el-button>
+          <el-button size="small" @click="handleCopy">复制</el-button>
+        </el-button-group>
+      </el-col>
+
+      <!-- 查询、刷新 -->
+      <el-col :span="1.5">
+        <el-button-group>
+          <el-button size="small" @click="handleQuery">查询</el-button>
+          <el-button size="small" @click="handleRefresh">刷新</el-button>
+        </el-button-group>
+      </el-col>
+
+      <!-- 提交、收回  审批、取消审批、查看审批意见 -->
+      <el-col :span="1.5">
+        <el-button-group>
+
+          <el-dropdown split-button size="small" @click="handleSubmit(true)" @command="handleSubmit">
+            提交
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item :command="isSubmit(true)">提交</el-dropdown-item>
+              <el-dropdown-item :command="isSubmit(false)">收回</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+
+          <el-dropdown split-button size="small" @click="handleApproval('approval')" @command="handleApproval">
+            审批
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item :command="approvalState('approval')">审批</el-dropdown-item>
+              <el-dropdown-item :command="approvalState('cancel')">取消审批</el-dropdown-item>
+              <el-dropdown-item :command="approvalState('view')">查看审批意见</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </el-button-group>
+      </el-col>
+
+      <!-- 附件管理 -->
+      <el-col :span="1.5">
+        <el-button-group>
+          <el-button size="small" v-if="isComponent == 'requestDetails'">附件管理</el-button>
+          <!-- <el-button size="small">维护物料</el-button> -->
+
+        </el-button-group>
+      </el-col>
+    </el-row>
+
+    <el-card class="request-list">
+      <!-- v-loading="loading" @selection-change="handleSelectionChange" -->
+      <el-table :data="taskList" @cell-dblclick="handledbClick" class="request-table">
+        <el-table-column type="index" label="序号" width="55" align="center" />
+        <el-table-column label="主键" align="center" prop="id" />
+        <el-table-column label="编码" align="center" prop="code" />
+        <el-table-column label="名称" align="center" prop="name" />
+        <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:task:edit']">修改</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+              v-hasPermi="['system:task:remove']">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- v-show="total > 0" -->
+      <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+        @pagination="getList" />
+    </el-card>
+  </div>
+</template>
+
+<script>
+import './style/index.scss';
+
+import requestList from './list.vue';
+import requestDetails from './details.vue';
+
+import Store from '@/store/index'
+export default {
+  name: "material-requisition",
+  components: {
+    requestList,
+    requestDetails,
+  },
+  data() {
+    return {
+      isComponent: 'requestList',
+      // 头部参数
+      headerParams: {
+        // 是否编辑
+        isEdit: false,
+      },
+      // 总条数
+      total: 1,
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        code: null,
+        name: null
+      },
+      // 物料基本信息数据
+      taskList: [
+        {
+          id: 1,
+          code: '001',
+          name: '名称'
+        }
+      ],
+      // 总条数
+      total: 0,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        code: null,
+        name: null
+      },
+    };
+  },
+  created() {
+    this.getList();
+    console.log(Store.state.user, 'Store');
+  },
+  methods: {
+    // 新增
+    handleInster() {
+      console.log('新增');
+      this.isComponent = 'requestDetails';
+    },
+    // 修改
+    handleEdit() {
+      console.log('修改');
+    },
+    // 删除
+    handleDel() {
+      console.log('删除');
+    },
+    // 复制
+    handleCopy() {
+      console.log('复制');
+    },
+    // 查询
+    handleQuery() {
+      console.log('查询');
+    },
+    // 刷新
+    handleRefresh() {
+      console.log('刷新');
+    },
+    // 提交
+    handleSubmit(val) {
+      console.log(val, '提交');
+    },
+    isSubmit(type) {
+      return type
+    },
+    // 审批
+    handleApproval(val) {
+      console.log(val, '审批');
+    },
+    approvalState(type) {
+      return type
+    },
+    // 触发动态组件
+    handleActionBar(params) {
+      console.log(`需要更换至${params}~~~`);
+      this.isComponent = params;
+    },
+
+    handleClick() { },
+    /** 查询【请填写功能名称】列表 */
+    getList() {
+
+    },
+    // 取消按钮
+    cancel() {
+
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 双击行
+    handledbClick(e) {
+      console.log(e, '双击行');
+      // console.log(this.$tab.openPage('测试', '/material/requisition/detail'), 'this.$tab');
+      console.log(this.$router.push('/material/requisition/detail'), 'this.$tab');
+      // this.$emit("actionBar", "requestDetails")
+    },
+    handleSelectionChange() { },
+
+  }
+};
+</script>

+ 1 - 1
src/views/material/requisition/list.vue

@@ -4,7 +4,7 @@
     <!-- v-loading="loading" @selection-change="handleSelectionChange" -->
     <el-table :data="taskList" @cell-dblclick="handledbClick" class="request-table">
       <el-table-column type="index" label="序号" width="55" align="center" />
-      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="主键1" align="center" prop="id" />
       <el-table-column label="编码" align="center" prop="code" />
       <el-table-column label="名称" align="center" prop="name" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">