Browse Source

增加公出他人企业面谈思路表

dev01 3 weeks ago
parent
commit
43e91e1582

+ 34 - 19
src/pages/applyDepart/index.jsx

@@ -17,7 +17,7 @@ import Result from "./result";
 import "./index.less";
 import Taro, { getCurrentInstance } from "@tarojs/taro";
 import MessageNoticebar from "../../components/common/messageNoticebar";
-import InterviewCustomer from "../../pages/interview/index"
+import InterviewCustomer from "../../pages/interview/index";
 
 const items = [
   { title: "选择公出企业" },
@@ -65,7 +65,9 @@ class ApplyDepart extends Component {
       interviewCustomerList: [],
       interviewIdx: 0,
       // 面谈后返回的id
-      uaiIdList: []
+      uaiIdList: [],
+
+      refreshInterview: false
     };
   }
 
@@ -80,9 +82,11 @@ class ApplyDepart extends Component {
         interviewCustomerList: type === 0 ? customerList : [],
         interviewIdx: 0,
         current: 1,
-        enterpriseInfor: { type, id: ids, name: names }
+        enterpriseInfor: { type, id: ids, name: names },
+        refreshInterview: type === 0 ? true : false,
       }, () => {
         Taro.removeStorageSync('publicInfo');
+        this.setState({ refreshInterview: false });
       });
     }
 
@@ -92,7 +96,8 @@ class ApplyDepart extends Component {
       this.setState({
         current: 1,
         enterpriseInfor: arg,
-        interviewCustomerList: arg.list.filter(item => item.myUser === 1),
+        // interviewCustomerList: arg.list.filter(item => item.myUser === 1),
+        interviewCustomerList: arg.list,
         interviewIdx: 0
       });
     });
@@ -162,8 +167,17 @@ class ApplyDepart extends Component {
     this.setState({ interviewIdx, uaiIdList });
   }
 
+  setTabDisabled(item) {
+    let userInfo = Taro.getStorageSync('userInfor');
+    if (item.type === 1 && userInfo.type !== 3) {
+      return true;
+    } else if (item.type === 2 && userInfo.position === 1) {
+      return true;
+    }
+    return false;
+  }
+
   render() {
-    let userInfor = Taro.getStorageSync('userInfor');
     const { interviewCustomerList, interviewIdx } = this.state;
     return (
       <View className="applyDepart">
@@ -184,7 +198,7 @@ class ApplyDepart extends Component {
                   <AtButton
                     circle
                     size="small"
-                    disabled={item.type === 1 && userInfor.type !== 3}
+                    disabled={this.setTabDisabled(item)}
                     type={
                       this.state.type == item.type ? "primary" : "secondary"
                     }
@@ -213,20 +227,21 @@ class ApplyDepart extends Component {
               style={{ display: this.state.current === 1 ? "block" : "none" }}
             >
                 {
-                    this.state.type == 0 && interviewCustomerList.length && interviewIdx < interviewCustomerList.length ? (
-                        <InterviewCustomer
-                            interviewIdx={interviewIdx}
-                            customerList={interviewCustomerList}
-                            uaiIdList={this.state.uaiIdList}
-                            onPrevClick={this.handleCustomerPrev.bind(this)}
-                            onNextClick={this.handleCustomerNext.bind(this)}
-                        />
+                    this.state.type == 0 && interviewCustomerList.length && interviewIdx < interviewCustomerList.length && interviewIdx > -1 ? (
+                      <InterviewCustomer
+                        interviewIdx={interviewIdx}
+                        customerList={interviewCustomerList}
+                        uaiIdList={this.state.uaiIdList}
+                        refreshInterview={this.state.refreshInterview}
+                        onPrevClick={this.handleCustomerPrev.bind(this)}
+                        onNextClick={this.handleCustomerNext.bind(this)}
+                      />
                     ) : (
-                        <PublicContent
-                            enterpriseInfor={this.state.enterpriseInfor}
-                            selectArrderLocation={this.state.selectArrderLocation}
-                            uaiIdList={this.state.uaiIdList.map(item => item.uaiId)}
-                        />
+                      <PublicContent
+                        enterpriseInfor={this.state.enterpriseInfor}
+                        selectArrderLocation={this.state.selectArrderLocation}
+                        uaiIdList={this.state.uaiIdList.map(item => item.uaiId)}
+                      />
                     )
                 }
          

+ 1 - 1
src/pages/interview/index.config.js

@@ -1,5 +1,5 @@
 export default {
-  navigationBarTitleText: '客户档案',
+  navigationBarTitleText: '客户面谈思路表',
   usingComponents: {
     timePicker: '../../components/common/timePicker/timePicker'
   }

File diff suppressed because it is too large
+ 30 - 2270
src/pages/interview/index.jsx


+ 11 - 0
src/pages/interview/index.less

@@ -427,3 +427,14 @@
 .at-input::after {
   display: none;
 }
+
+.othersTips {
+  font-size: 28px;
+  text-align: center;
+  color: #f00;
+  background: #c9c9c9;
+  // padding: 20px 100px;
+  margin-bottom: 28px;
+  margin-top: 20px;
+  padding: 8px;
+}

File diff suppressed because it is too large
+ 2290 - 0
src/pages/interview/myUser.jsx


+ 578 - 0
src/pages/interview/otherUser.jsx

@@ -0,0 +1,578 @@
+import React, { Component } from "react";
+import { View, Button, Text, Picker, RadioGroup, Label, Radio } from "@tarojs/components";
+import Taro, { getCurrentInstance } from "@tarojs/taro";
+import { getProvince } from '../../utils/tools/index'
+import {
+  AtSearchBar,
+  AtTextarea,
+  AtModal,
+  AtModalHeader,
+  AtModalContent,
+  AtModalAction,
+  AtInput,
+  AtIcon,
+  AtButton,
+  AtInputNumber
+} from "taro-ui";
+import Skeleton from "taro-skeleton";
+import {
+  queryByUidAll,
+  getInterviewByPrdid,
+  updateUser,
+  getInterviewListByPage,
+  addOneContact,
+  findCustomerContacts,
+  updateMainContact,
+  limitUser,
+  getBusinessProjectByName,
+  addProject,
+  queryProjectList,
+  delProject
+} from "../../utils/servers/servers";
+import "./index.less";
+
+import "taro-ui/dist/style/components/icon.scss";
+import "taro-ui/dist/style/components/textarea.scss";
+import "taro-ui/dist/style/components/modal.scss";
+import "taro-ui/dist/style/components/timeline.scss";
+import "taro-ui/dist/style/components/calendar.scss";
+import "taro-ui/dist/style/components/input.scss";
+import "taro-ui/dist/style/components/search-bar.scss";
+
+import MessageNoticebar from "../../components/common/messageNoticebar";
+import { industry, channelTypeList, yearList, addressList } from '../../utils/tools/config';
+import { getChannel } from "../../utils/tools";
+import Superior from "../../components/common/superior";
+import CheckboxPicker from "../../components/common/CheckboxPicker";
+import AddressPicker from "../../components/common/addressPicker"
+import InteractList from "./components/InteractList";
+import CustomerProjectSelect from '../../components/common/CustomerProjectSelect';
+
+class CustomerOtherProfile extends Component {
+  $instance = getCurrentInstance();
+
+  constructor(props) {
+    super(props);
+    this.state = {
+      dtails: {
+        interviewList: []
+      },
+      interactShow: false,
+      interactShowType: '',
+      interactTitle: '',
+      interactList: [],
+    };
+    // this.update = this.update.bind(this);
+  }
+
+  componentDidMount() {
+    this.queryByUidAll();
+  }
+
+  componentDidUpdate(prevProps) {
+    const { interviewIdx, customerList } = this.props;
+    if ((interviewIdx != prevProps.interviewIdx && interviewIdx >= 0 && interviewIdx < customerList.length)) {
+      this.queryByUidAll();
+    } else if (this.props.refreshInterview) {
+      this.queryByUidAll();
+    }
+  }
+
+
+  handlePrevClick() {
+    this.props.onPrevClick();
+  }
+
+  handleNextClick() {
+    this.onSaveAllData((resData) => {
+      this.props.onNextClick(resData);
+    })
+  }
+
+  // 获取面谈思路表
+  getInterviewData() {
+    const uid = this.props.customerList[this.props.interviewIdx].id
+    getInterviewListByPage({ uid, pageNo: 1, pageSize: 9999 }).then(res => {
+      // 是否在面谈中,表示本次面谈未结束
+      let isInterviewIng = this.props.uaiIdList.some(item => item.uid == uid);
+      const { list } = res.data;
+      let earlyCommunication = '',
+        customerDemand = '',
+        interviewIdeas = '',
+        interviewPurpose = '',
+        interviewRecommend = '',
+        interviewFeedback = '',
+        followUpPlan = '';
+      if (list.length) {
+        if (!!list[list.length - 1].prdid || isInterviewIng) {
+          earlyCommunication = list[list.length - 1].earlyCommunication;
+          customerDemand = list[list.length - 1].customerDemand;
+          interviewIdeas = list[list.length - 1].interviewIdeas;
+          interviewPurpose = list[list.length - 1].interviewPurpose;
+          interviewRecommend = list[list.length - 1].earlyCommunication;
+          interviewFeedback = list[list.length - 1].interviewFeedback;
+          followUpPlan = list[list.length - 1].followUpPlan;
+        }
+      }
+
+      let defaultDetailData = this.state.dtails || {};
+      this.setState({
+        dtails: {
+          ...defaultDetailData,
+          earlyCommunication,
+          customerDemand,
+          interviewIdeas,
+          interviewPurpose,
+          interviewRecommend,
+          interviewFeedback,
+          followUpPlan,
+          interviewList: list.filter(item => !!item.prdid),
+        }
+      });
+    })
+  }
+
+  // 客户档案详情
+  queryByUidAll() {
+    const id = this.props.customerList[this.props.interviewIdx].id;
+    queryByUidAll(
+      true,
+      { id }
+    )
+      .then((v) => {
+        if (v.error.length === 0) {
+          let dtailsData = {
+            ...v.data,
+          }
+          this.setState({
+            dtails: { ...dtailsData }
+          }, () => {
+            this.getInterviewData();
+          });
+        } else {
+          setTimeout(() => {
+            Taro.navigateBack({
+              delta: 1
+            })
+          }, 1800);
+          Taro.showToast({
+            title: v.error[0].message,
+            icon: "none",
+            duration: 1800,
+          });
+        }
+      })
+      .catch((err) => {
+        Taro.showToast({ title: "系统错误,请稍后再试", icon: "none" });
+      });
+  }
+
+  validParams(params) {
+    let flag = true;
+    let message = '';
+
+    if (!params.earlyCommunication || (params.earlyCommunication && params.earlyCommunication.length < 20)) {
+      message = '请输入客户的难处,并且在20字以上';
+      flag = false;
+    } else if (!params.customerDemand || (params.customerDemand && params.customerDemand.length < 20)) {
+      message = '请输入客户的需求,并且在20字以上';
+      flag = false;
+    } else if (!params.interviewIdeas || (params.interviewIdeas && params.interviewIdeas.length < 20)) {
+      message = '请输入面谈思路,并且在20字以上';
+      flag = false;
+    } else if (!params.interviewPurpose || (params.interviewPurpose && params.interviewPurpose.length < 20)) {
+      message = '请输入面谈达成的目的,并且在20字以上';
+      flag = false;
+    } else if (!params.interviewRecommend || (params.interviewRecommend && params.interviewRecommend.length < 20)) {
+      message = '请输入经理/上级面谈建议,并且在20字以上';
+      flag = false;
+    } else {
+      if (this.state.dtails.interviewList.length) {
+        if (!params.interviewFeedback || (params.interviewFeedback && params.interviewFeedback.length < 20)) {
+          message = '请输入面谈后的反馈,并且在20字以上';
+          flag = false;
+        } else if (!params.followUpPlan || (params.followUpPlan && params.followUpPlan.length < 20)) {
+          message = '请输入后续跟进计划,并且在20字以上';
+          flag = false;
+        }
+      }
+    }
+    return { flag, message };
+  }
+
+  onSaveAllData(callback) {
+    const { dtails } = this.state;
+
+    let params = {
+      id: dtails.id,
+      uid: dtails.uid,
+      locationProvince: dtails.locationProvince,
+      locationProvinceName: dtails.locationProvinceName,
+      locationCity: dtails.locationCity,
+      locationCityName: dtails.locationCityName,
+      locationArea: dtails.locationArea,
+      locationAreaName: dtails.locationAreaName,
+      type: 2, // 1、更新档案和面谈,0、只更新档案,2、只更新面谈
+    };
+
+    // 是否在面谈中,表示本次面谈未结束
+    let curruaiIdList = this.props.uaiIdList.filter(item => item.uid == dtails.uid);
+    console.log(this.props.uaiIdList, curruaiIdList)
+    if (curruaiIdList.length) {
+      // 面谈编号
+      params.uaiId = curruaiIdList[0].uaiId;
+    }
+
+    if (dtails.newChannel == 1) {
+      // 渠道客户
+      params = {
+        ...params,
+        channelType: dtails.channelType,
+        enterpriseCount: dtails.enterpriseCount.replace(/,/g, ''),
+        channelIndicators: dtails.channelIndicators,
+        interviewIdeas: dtails.interviewIdeas,
+        interviewPurpose: dtails.interviewPurpose,
+        interviewFeedback: dtails.interviewFeedback,
+        followUpPlan: dtails.followUpPlan,
+      };
+    } else {
+      params = {
+        ...params,
+        industry: dtails.industry,
+        industryName: dtails.industryName,
+        earlyCommunication: dtails.earlyCommunication,
+        customerDemand: dtails.customerDemand,
+        interviewIdeas: dtails.interviewIdeas,
+        interviewPurpose: dtails.interviewPurpose,
+        interviewRecommend: dtails.interviewRecommend,
+        interviewFeedback: dtails.interviewFeedback,
+        followUpPlan: dtails.followUpPlan,
+        patentCount: dtails.patentCount,
+        inventionPatentCount: dtails.inventionPatentCount,
+        utilityModelCount: dtails.utilityModelCount,
+        appearancePatentCount: dtails.appearancePatentCount,
+        softwareWorksCount: dtails.softwareWorksCount,
+        otherCount: dtails.otherCount,
+        financialData: dtails.financialData,
+        companyCount: dtails.companyCount,
+        socialSecurityCount: dtails.socialSecurityCount,
+        externalInvestCount: dtails.externalInvestCount,
+        externalInvestIndustry: dtails.externalInvestIndustry,
+        externalInvestIndustryName: dtails.externalInvestIndustryName,
+        externalInvestId: dtails.externalInvestId,
+        externalInvestName: dtails.externalInvestName,
+        financialRevenue: dtails.financialRevenue,
+        financialTax: dtails.financialTax,
+        financialProperty: dtails.financialProperty,
+        financialRd: dtails.financialRd,
+        standard: dtails.standard,
+        businessScope: dtails.businessScope,
+      };
+    }
+
+
+    for (let key in params) {
+      if (params[key] === undefined || params[key] === 'undefined' || params[key] === null || params[key] === 'null') {
+        delete params[key];
+      }
+    }
+
+    const { flag, message } = this.validParams(params);
+    if (!flag) {
+      Taro.showToast({
+        title: message,
+        icon: "none",
+      });
+      return;
+    }
+
+    updateUser(params).then((v) => {
+      if (v.error.length === 0) {
+        Taro.showToast({
+          title: "修改成功",
+        });
+
+        callback && callback(v.data);
+      } else {
+        Taro.showToast({
+          title: v.error[0].message,
+          icon: "none",
+        });
+      }
+    })
+  }
+
+  openInteractHis(type) {
+    let interactTitle;
+    let interactList = this.state.dtails.interviewList;
+    switch (type) {
+      case 'earlyCommunication':
+        interactTitle = '客户的难处历史记录';
+        break;
+      case 'customerDemand':
+        interactTitle = '客户的需求历史记录';
+        break;
+      case 'interviewIdeas':
+        interactTitle = '面谈思路历史记录';
+        break;
+      case 'interviewPurpose':
+        interactTitle = '面谈达成的目的历史记录';
+        break;
+      case 'interviewRecommend':
+        interactTitle = '经理/上级面谈建议历史记录';
+        break;
+      case 'interviewFeedback':
+        interactTitle = '面谈后反馈历史记录';
+        interactList = interactList.slice(1, interactList.length);
+        break;
+      case 'followUpPlan':
+        interactTitle = '后续跟进计划历史记录';
+        interactList = interactList.slice(1, interactList.length);
+        break;
+      default:
+        break;
+    }
+    this.setState({
+      interactShow: true,
+      interactShowType: type,
+      interactTitle,
+      interactList
+    });
+  }
+
+
+  render() {
+    const { dtails } = this.state;
+    return (
+      <View className="customerProfile">
+        <MessageNoticebar />
+        <View
+          className="titleContent"
+        >
+
+          <View className="content">
+            <View className="valueContent">
+              <View className="title" style={{ margin: "14rpx 0 18rpx;" }}>企业面谈思路表</View>
+
+              <View className="othersTips">
+                <View>您正在面谈他人企业!</View>
+                <View>企业名称:{dtails.nickname}</View>
+              </View>
+
+              {dtails.newChannel === 0 && (
+                <>
+                  <View className="item">
+                    <View className="item-title">
+                      <View>
+                        客户的难处:
+                        <Text className="titleTips">(20字以上)</Text>
+                      </View>
+                      <View>
+                        {dtails.interviewList && dtails.interviewList.length ? (
+                          <AtIcon value='clock' size='20' color='#1E90FF' onClick={() => this.openInteractHis('earlyCommunication')}></AtIcon>
+                        ) : null}
+                      </View>
+                    </View>
+                    <View className="item-value">
+                      <AtTextarea
+                        value={dtails.earlyCommunication || ''}
+                        maxLength={200}
+                        placeholder='请编写本次面谈客户难处~'
+                        height={70}
+                        onChange={value => {
+                          dtails.earlyCommunication = value;
+                          this.setState({ dtails });
+                        }}
+                      />
+                    </View>
+                  </View>
+
+                  <View className="item">
+                    <View className="item-title">
+                      <View>
+                        客户的需求:
+                        <Text className="titleTips">(20字以上)</Text>
+                      </View>
+                      <View>
+                        {dtails.interviewList && dtails.interviewList.length ? (
+                          <AtIcon value='clock' size='20' color='#1E90FF' onClick={() => this.openInteractHis('customerDemand')}></AtIcon>
+                        ) : null}
+                      </View>
+                    </View>
+                    <View className="item-value">
+                      <AtTextarea
+                        value={dtails.customerDemand || ''}
+                        maxLength={200}
+                        placeholder='请编写本次面谈客户需求~'
+                        height={70}
+                        onChange={value => {
+                          dtails.customerDemand = value;
+                          this.setState({ dtails });
+                        }}
+                      />
+                    </View>
+                  </View>
+                </>
+              )}
+
+
+              <View className="item">
+                <View className="item-title">
+                  <View>
+                    面谈思路:
+                    <Text className="titleTips">(20字以上)</Text>
+                  </View>
+                  <View>
+                    {dtails.interviewList && dtails.interviewList.length ? (
+                      <AtIcon value='clock' size='20' color='#1E90FF' onClick={() => this.openInteractHis('interviewIdeas')}></AtIcon>
+                    ) : null}
+                  </View>
+                </View>
+                <View className="item-value">
+                  <AtTextarea
+                    value={dtails.interviewIdeas || ''}
+                    maxLength={200}
+                    placeholder='请编写本次面谈客户思路~'
+                    height={70}
+                    onChange={value => {
+                      dtails.interviewIdeas = value;
+                      this.setState({ dtails });
+                    }}
+                  />
+                </View>
+              </View>
+
+              <View className="item">
+                <View className="item-title">
+                  <View>
+                    面谈达成的目的:
+                    <Text className="titleTips">(20字以上)</Text>
+                  </View>
+                  <View>
+                    {dtails.interviewList && dtails.interviewList.length ? (
+                      <AtIcon value='clock' size='20' color='#1E90FF' onClick={() => this.openInteractHis('interviewPurpose')}></AtIcon>
+                    ) : null}
+                  </View>
+                </View>
+                <View className="item-value">
+                  <AtTextarea
+                    value={dtails.interviewPurpose || ''}
+                    maxLength={200}
+                    placeholder='请编写本次面谈达成的目的~'
+                    height={70}
+                    onChange={value => {
+                      dtails.interviewPurpose = value;
+                      this.setState({ dtails });
+                    }}
+                  />
+                </View>
+              </View>
+
+              {dtails.newChannel === 0 && (
+                <View className="item">
+                  <View className="item-title">
+                    <View>
+                      经理/上级面谈建议:
+                      <Text className="titleTips">(由经理/上级口述,本人整理,20字以上)</Text>
+                    </View>
+                    <View>
+                      {dtails.interviewList && dtails.interviewList.length ? (
+                        <AtIcon value='clock' size='20' color='#1E90FF' onClick={() => this.openInteractHis('interviewRecommend')}></AtIcon>
+                      ) : null}
+                    </View>
+                  </View>
+                  <View className="item-value">
+                    <AtTextarea
+                      value={dtails.interviewRecommend || ''}
+                      maxLength={200}
+                      placeholder='请编写本次面谈建议~'
+                      height={70}
+                      onChange={value => {
+                        dtails.interviewRecommend = value;
+                        this.setState({ dtails });
+                      }}
+                    />
+                  </View>
+                </View>
+              )}
+
+              {dtails.interviewList && dtails.interviewList.length ? (
+                <>
+                  <View className="item">
+                    <View className="item-title">
+                      <View>
+                        面谈后的反馈:
+                          <Text className="titleTips">(20字以上)</Text>
+                      </View>
+                      <View>
+                        {dtails.interviewList && dtails.interviewList.length > 1 ? (
+                          <AtIcon value='clock' size='20' color='#1E90FF' onClick={() => this.openInteractHis('interviewFeedback')}></AtIcon>
+                        ) : null}
+                      </View>
+                    </View>
+                    <View className="item-value">
+                      <AtTextarea
+                        value={dtails.interviewFeedback || ''}
+                        maxLength={200}
+                        placeholder='请编写本次面谈后的反馈~'
+                        height={70}
+                        onChange={value => {
+                          dtails.interviewFeedback = value;
+                          this.setState({ dtails });
+                        }}
+                      />
+                    </View>
+                  </View>
+
+                  <View className="item">
+                    <View className="item-title">
+                      <View>
+                        后续跟进计划:
+                          <Text className="titleTips">(20字以上)</Text>
+                      </View>
+                      <View>
+                        {dtails.interviewList && dtails.interviewList.length > 1 ? (
+                          <AtIcon value='clock' size='20' color='#1E90FF' onClick={() => this.openInteractHis('followUpPlan')}></AtIcon>
+                        ) : null}
+                      </View>
+                    </View>
+                    <View className="item-value">
+                      <AtTextarea
+                        value={dtails.followUpPlan || ''}
+                        maxLength={200}
+                        placeholder='请编写后续跟进计划~'
+                        height={70}
+                        onChange={value => {
+                          dtails.followUpPlan = value;
+                          this.setState({ dtails });
+                        }}
+                      />
+                    </View>
+                  </View>
+                </>
+              ) : null}
+
+              <View style={{ display: 'flex', marginTop: '24rpx' }}>
+                <AtButton type="secondary" circle onClick={this.handlePrevClick.bind(this)}>上一页</AtButton>
+                <AtButton type="primary" circle onClick={this.handleNextClick.bind(this)}>下一页</AtButton>
+              </View>
+            </View>
+          </View>
+        </View>
+
+        {/* 沟通情况历史记录 */}
+        <InteractList
+          isOpened={this.state.interactShow}
+          list={this.state.interactList}
+          type={this.state.interactShowType}
+          title={this.state.interactTitle}
+          onClose={() => {
+            this.setState({ interactShow: false })
+          }}
+        />
+      </View>
+    );
+  }
+}
+
+export default CustomerOtherProfile;

+ 12 - 13
src/pages/interviewDetail/index.jsx

@@ -306,7 +306,7 @@ class CustomerProfile extends Component {
             interviewRecommend: res.data.data.interviewRecommend,
             interviewFeedback: res.data.data.interviewFeedback,
             followUpPlan: res.data.data.followUpPlan,
-            interviewList: res.data.list,
+            interviewList: res.data.list.filter(item => !!item.prdid),
           }
         });
       }
@@ -333,7 +333,6 @@ class CustomerProfile extends Component {
             financialProperty: this.addCommas(v.data.financialProperty || 0),
             financialRd: this.addCommas(v.data.financialRd || 0),
             enterpriseCount: this.addCommas(v.data.enterpriseCount || 0),
-           
           }
           let patentCount = this.countZlNum(dtailsData);
           this.setState({
@@ -1190,7 +1189,7 @@ class CustomerProfile extends Component {
                         </View>
                         <View className="item-value">
                           <AtTextarea
-                            value={dtails.interviewIdeas}
+                            value={dtails.interviewIdeas || ''}
                             maxLength={200}
                             placeholder='~'
                             height={70}
@@ -1217,7 +1216,7 @@ class CustomerProfile extends Component {
                         </View>
                         <View className="item-value">
                           <AtTextarea
-                            value={dtails.interviewPurpose}
+                            value={dtails.interviewPurpose || ''}
                             maxLength={200}
                             placeholder='~'
                             height={70}
@@ -1246,7 +1245,7 @@ class CustomerProfile extends Component {
                             </View>
                             <View className="item-value">
                               <AtTextarea
-                                value={dtails.interviewFeedback}
+                                value={dtails.interviewFeedback || ''}
                                 maxLength={200}
                                 placeholder='~'
                                 height={70}
@@ -1273,7 +1272,7 @@ class CustomerProfile extends Component {
                             </View>
                             <View className="item-value">
                               <AtTextarea
-                                value={dtails.followUpPlan}
+                                value={dtails.followUpPlan || ''}
                                 maxLength={200}
                                 placeholder='~'
                                 height={70}
@@ -1589,7 +1588,7 @@ class CustomerProfile extends Component {
                           </View>
                           <View className="item-value">
                             <AtTextarea
-                              value={dtails.earlyCommunication}
+                              value={dtails.earlyCommunication || ''}
                               maxLength={200}
                               placeholder='~'
                               height={70}
@@ -1616,7 +1615,7 @@ class CustomerProfile extends Component {
                           </View>
                           <View className="item-value">
                             <AtTextarea
-                              value={dtails.customerDemand}
+                              value={dtails.customerDemand || ''}
                               maxLength={200}
                               placeholder='~'
                               height={70}
@@ -1643,7 +1642,7 @@ class CustomerProfile extends Component {
                           </View>
                           <View className="item-value">
                             <AtTextarea
-                              value={dtails.interviewIdeas}
+                              value={dtails.interviewIdeas || ''}
                               maxLength={200}
                               placeholder='~'
                               height={70}
@@ -1670,7 +1669,7 @@ class CustomerProfile extends Component {
                           </View>
                           <View className="item-value">
                             <AtTextarea
-                              value={dtails.interviewPurpose}
+                              value={dtails.interviewPurpose || ''}
                               maxLength={200}
                               placeholder='~'
                               height={70}
@@ -1697,7 +1696,7 @@ class CustomerProfile extends Component {
                           </View>
                           <View className="item-value">
                             <AtTextarea
-                              value={dtails.interviewRecommend}
+                              value={dtails.interviewRecommend || ''}
                               maxLength={200}
                               placeholder='~'
                               height={70}
@@ -1726,7 +1725,7 @@ class CustomerProfile extends Component {
                               </View>
                               <View className="item-value">
                                 <AtTextarea
-                                  value={dtails.interviewFeedback}
+                                  value={dtails.interviewFeedback || ''}
                                   maxLength={200}
                                   placeholder='~'
                                   height={70}
@@ -1753,7 +1752,7 @@ class CustomerProfile extends Component {
                               </View>
                               <View className="item-value">
                                 <AtTextarea
-                                  value={dtails.followUpPlan}
+                                  value={dtails.followUpPlan || ''}
                                   maxLength={200}
                                   placeholder='~'
                                   height={70}

+ 46 - 14
src/pages/mybusiness/index.jsx

@@ -35,6 +35,7 @@ import MessageNoticebar from "../../components/common/messageNoticebar";
 import InquiryModal from "../../components/common/inquiryModal";
 import PublicContent from "../egressDetails/publicContent";
 import { resourceAddress } from "../../utils/config";
+import { getUserByName } from "../../utils/servers/servers";
 
 class Examine extends Component {
 
@@ -325,6 +326,21 @@ class Examine extends Component {
     })
   }
 
+  getUserInfoByName(name, callback) {
+    getUserByName({
+      name,
+      type: 1,
+      pageNo: 1,
+      pageSize: 10,
+    }).then(res => {
+      if (!res.error.length) {
+        callback && callback(res.data.list)
+      } else {
+        Taro.showToast({title: "系统异常,请联系管理员!", icon: "none"});
+      }
+    })
+  }
+
   render() {
     return (
       <View className='indexPage' >
@@ -542,6 +558,11 @@ class Examine extends Component {
                     })
                   }}
                   again={e => {
+                    if (e.userNames && e.userNames.split(',').length > 1) {
+                      Taro.showToast({ title: "公出企业包含多个,不能再次公出!", icon: "none" });
+                      return;
+                    }
+                    
                     this.getReleasetDails(e.id, () => {
                       this.setState({
                         isInquiryOpened: true,
@@ -635,22 +656,33 @@ class Examine extends Component {
             }}
             onDetermine={() => {
               const data = this.state.dtails;
-              const customerList = data.prdList.map(item => {
-                return { id: item.uid, aid: data.aid, aname: data.aname, name: item.userName }
-              })
-              Taro.setStorageSync('publicInfo', { type: data.type,  customerList })
-              Taro.switchTab({
-                url: `/pages/applyDepart/index`
-              });
-              this.setState({
-                // isModifyOpened: true,
+              let prdData = data.prdList[0];
+              this.getUserInfoByName(prdData.userName, userList => {
+                let currUserInfo = userList.find(item => item.id === prdData.uid);
+                if (currUserInfo && currUserInfo.shareType === 1) {
+                  Taro.showToast({title: "无法发起,公共库客户请领取,再进行公出", icon: "none"});
+                  this.setState({ isInquiryOpened: false });
+                  return;
+                }
+                
+                const customerList = data.prdList.map(item => {
+                  return { id: item.uid, aid: data.aid, aname: data.aname, name: item.userName, myUser: currUserInfo.myUser }
+                })
+                Taro.setStorageSync('publicInfo', { type: data.type,  customerList })
+                Taro.switchTab({
+                  url: `/pages/applyDepart/index`
+                });
+                this.setState({
+                  // isModifyOpened: true,
 
-                isInquiryOpened: false,
-                inquiryTitle: "",
-                inquiryContent: "",
-                isNo: true,
-                inquiryFn: () => { },
+                  isInquiryOpened: false,
+                  inquiryTitle: "",
+                  inquiryContent: "",
+                  isNo: true,
+                  inquiryFn: () => { },
+                });
               });
+              
             }}
           />
         }

+ 10 - 3
src/utils/servers/servers.js

@@ -254,17 +254,24 @@ export const queryUserMax = (postData = {}) => {
 
 // 新增客户面谈项目
 export const addProject = (postData = {}) => {
-    return HTTPREQUEST.post('/api/admin/userInterviewProject/add', postData)
+  return HTTPREQUEST.post('/api/admin/userInterviewProject/add', postData)
 }
 // 查询面谈客户项目
 export const queryProjectList = (postData = {}) => {
-    return HTTPREQUEST.get('/api/admin/userInterviewProject/list', postData)
+  return HTTPREQUEST.get('/api/admin/userInterviewProject/list', postData)
 }
 // 删除客户面谈项目
 export const delProject = (id, postData = {}) => {
-    return HTTPREQUEST.get('/api/admin/userInterviewProject/delete?id='+id, postData)
+  return HTTPREQUEST.get('/api/admin/userInterviewProject/delete?id='+id, postData)
 }
 
+// 根据公出编号获取面谈记录
 export const getInterviewByPrdid = (postData = {}) => {
   return HTTPREQUEST.get('/api/admin/interview/selectByPrdid', postData)
 }
+
+// 公出记录分页
+export const getInterviewListByPage = (postData = {}) => {
+  return HTTPREQUEST.get('/api/admin/interview/list', postData)
+}
+