dev01 3 months ago
parent
commit
fdc12b9a40

+ 1 - 1
js/component/account/set/changeMobile.jsx

@@ -66,7 +66,7 @@ const ChangePw = React.createClass({
     },
     newMobileChange(e) {
         this.state.mobile = e.target.value;
-        if (/^1[34578]\d{9}$/.test(this.state.mobile)) {
+        if (/^1[3-9]\d{9}$/.test(this.state.mobile)) {
             this.state.checkMobile = true
         }
     },

+ 1 - 1
js/component/account/set/group.jsx

@@ -113,7 +113,7 @@ const BaseFrom = Form.create()(React.createClass({
     },
     checkPhone(rule, value, callback) {
         const form = this.props.form;
-        if (value && value.length !== 0 && !(/^1[34578]\d{9}$/.test(value))) {
+        if (value && value.length !== 0 && !(/^1[3-9]\d{9}$/.test(value))) {
             callback('请输入正确的手机号码!');
         } else {
             callback();

+ 1 - 1
js/component/certify/personal.jsx

@@ -133,7 +133,7 @@ const Content = Form.create()(React.createClass({
     checkPhone(rule, value, callback) {
         const form = this.props.form;
         const _me = this;
-        if (!(/^1[34578]\d{9}$/.test(value))) {
+        if (!(/^1[3-9]\d{9}$/.test(value))) {
             callback('请输入正确的手机号码!');
             _me.setState({
                 getCodeButton: true

+ 67 - 5
js/component/common/enterpriseNameChange/inforChange.jsx

@@ -1,9 +1,25 @@
 import React, { Component } from "react";
-import { AutoComplete, Button, Cascader, Input, message, Modal, Popconfirm, Select, Spin, Table, Tag, Tooltip } from "antd";
+import {
+  AutoComplete,
+  Button,
+  Cascader,
+  Input,
+  message,
+  Modal,
+  Popconfirm,
+  Select,
+  Spin,
+  Table,
+  Tag,
+  Tooltip
+} from "antd";
 import { areaSelect, getProvince } from '@/NewDicProvinceList';
+import { industry } from '@/dataDic.js'
+import { getIndustry } from '@/tools.js'
 import $ from "jquery/src/ajax";
 import TextArea from "antd/es/input/TextArea";
 
+const Option = Select.Option;
 class InforChange extends Component {
   constructor(props) {
     super(props);
@@ -50,7 +66,8 @@ class InforChange extends Component {
       orgCode: props.data.orgCode,
       locationProvince: props.data.locationProvince,
       businessScope: props.data.businessScope,
-      intendedProject: props.data.intendedProject
+      intendedProject: props.data.intendedProject,
+      industryName: props.data.industry,
     }
     this.onChange = this.onChange.bind(this);
     this.onCancel = this.onCancel.bind(this);
@@ -136,6 +153,10 @@ class InforChange extends Component {
       message.warning('请输入意向合作项目');
       return;
     }
+    if (this.state.changeType === 4 && dataArrar.length === 0) {
+      message.warning('请选择企业行业');
+      return
+    }
     this.setState({
       loading: true
     });
@@ -161,6 +182,9 @@ class InforChange extends Component {
       data.orgCode = dataArrar
       // this.props.onCancel();
     }
+    if (this.state.changeType === 4) {
+      data.industry = dataArrar
+    }
     $.ajax({
       url: globalConfig.context + "/api/admin/customer/updateUserDate",
       method: "post",
@@ -197,6 +221,11 @@ class InforChange extends Component {
             })
             this.props.onCancel();
           }
+          if (this.state.changeType === 4) {
+            this.setState({
+              industryName: getIndustry(dataArrar)
+            })
+          }
           this.onCancel();
         } else {
           message.warning(data.error[0].message);
@@ -349,6 +378,19 @@ class InforChange extends Component {
           </div>
           {this.props.type === 'modify' && <Button style={{ marginLeft: '5px' }} type="primary" onClick={(e) => { e.stopPropagation(); this.onChange(2) }}>修改</Button>}
         </div>
+        <div style={{
+          display: 'flex',
+          alignItems: 'center',
+          paddingBottom: '5px'
+        }}>
+          <div style={{ width: '123px' }}>企业行业:</div>
+          <div>
+            {
+              this.state.industryName
+            }
+          </div>
+          {this.props.type === 'modify' && <Button style={{ marginLeft: '5px' }} type="primary" onClick={(e) => { e.stopPropagation(); this.onChange(4) }}>修改</Button>}
+        </div>
 
         <Modal
           footer={null}
@@ -366,7 +408,8 @@ class InforChange extends Component {
                       this.state.changeType === 0 ? '省-市-区' :
                         this.state.changeType === 1 ? '企业主管产品/服务' :
                           this.state.changeType === 2 ? '意向合作项目' :
-                            this.state.changeType === 3 ? '统一社会信用代码' : ''
+                            this.state.changeType === 3 ? '统一社会信用代码' :
+                              this.state.changeType === 4 ? '企业行业' : ''
                     }
                     :
                   </div>
@@ -375,7 +418,8 @@ class InforChange extends Component {
                       this.state.changeType === 0 ? this.state.locationProvince :
                         this.state.changeType === 1 ? this.state.businessScope :
                           this.state.changeType === 2 ? this.state.intendedProject :
-                            this.state.changeType === 3 ? this.state.orgCode : ''
+                            this.state.changeType === 3 ? this.state.orgCode :
+                              this.state.changeType === 4 ? this.state.industryName : ''
                     }
                   </div>
                 </div>
@@ -490,7 +534,25 @@ class InforChange extends Component {
                                 </div>
                                 <div style={{ color: "red", position: "absolute" }}>如,科德集团则填写91430105670766451M</div>
                               </div>
-                              : ''
+                              : this.state.changeType === 4 ?
+                                <div>
+                                  <Select
+                                    style={{ width: 200 }}
+                                    placeholder="请选择行业"
+                                    onChange={e => {
+                                      this.setState({
+                                        dataArrar: e
+                                      })
+                                    }}
+                                  >
+                                    {
+                                      industry.map(function (item) {
+                                        return <Option key={item.value} value={item.value}>{item.key}</Option>
+                                      })
+                                    }
+                                  </Select>
+                                </div>
+                                : ''
                     }
                   </div>
                 </div>

+ 1 - 1
js/component/groupCertify/personal.jsx

@@ -181,7 +181,7 @@ const Content = Form.create()(React.createClass({
     checkPhone(rule, value, callback) {
         const form = this.props.form;
         const _me = this;
-        if (!(/^1[34578]\d{9}$/.test(value))) {
+        if (!(/^1[3-9]\d{9}$/.test(value))) {
             callback('请输入正确的手机号码!');
             _me.setState({
                 getCodeButton: true

+ 1 - 1
js/component/login/forgetPw.jsx

@@ -81,7 +81,7 @@ const ChangePw = React.createClass({
     },
     newMobileChange(e) {
         this.state.mobile = e.target.value;
-        if (/^1[34578]\d{9}$/.test(this.state.mobile)) {
+        if (/^1[3-9]\d{9}$/.test(this.state.mobile)) {
             this.state.checkMobile = true
         }
     },

+ 587 - 0
js/component/manageCenter/customer/NEW/crm/customerProfile.jsx

@@ -0,0 +1,587 @@
+import React from 'react';
+import {
+  Tooltip,
+  Button,
+  AutoComplete,
+  Input,
+  Select,
+  Spin,
+  Table,
+  message,
+  Form,
+  Tabs,
+} from 'antd';
+import $ from 'jquery/src/ajax';
+import { ShowModal, } from "@/tools.js";
+import { industry } from "@/dataDic.js"
+import ShowModalDiv from "@/showModal.jsx";
+import { ChooseList } from "../../../order/orderNew/chooseList";
+import MainBusinessLog from './mainBusinessLog';
+
+import './customer.less';
+
+const TabPane = Tabs.TabPane;
+
+const IntentionCustomer = Form.create()(React.createClass({
+
+  getInitialState() {
+    return {
+      searchInfor: {},
+      fjlist: [],
+      loading: false,
+      visible: false,
+      changeList: undefined,
+      uid: '',
+      dataSource: [],
+      pagination: {
+        defaultCurrent: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return '共' + total + '条数据';
+        }
+      },
+      columns: [{
+        title: '客户名称',
+        dataIndex: 'nickname',
+        key: 'nickname',
+        fixed: 'left',
+        width: 200,
+        render: text => {
+          return (
+            <Tooltip title={text}>
+              <div>{text}</div>
+            </Tooltip>
+          )
+        }
+      },
+      {
+        title: '地区',
+        dataIndex: 'area',
+        key: 'area',
+        width: 150,
+        render: (text, record) => {
+          return (record.province || "") + (!record.city ? "" : "-") + (record.city || "") + (!record.area ? "" : "-") + (record.area || "");
+        },
+      },
+      {
+        title: '客户类型',
+        dataIndex: 'shareType',
+        key: 'shareType',
+        render: text => {
+          return (
+            <div>{["私有客户", "公共客户", "签单客户", "外联客户"][text]}</div>
+          )
+        }
+      },
+      {
+        title: '主营产品',
+        dataIndex: 'businessScope',
+        key: 'businessScope',
+        width: 200,
+      },
+      {
+        title: '行业',
+        dataIndex: 'industry',
+        key: 'industry',
+      },
+      {
+        title: '联系人',
+        dataIndex: 'contactName',
+        key: 'contactName',
+      },
+      {
+        title: '所属人',
+        dataIndex: 'adminName',
+        key: 'adminName',
+      },
+      {
+        title: '意向合作项目',
+        dataIndex: 'intendedProject',
+        key: 'intendedProject'
+      },
+      {
+        title: '知产情况',
+        dataIndex: 'patentCount',
+        key: 'patentCount',
+        width: 220,
+        render: (text, record) => {
+          return (
+            <div>
+              专利&nbsp;{text || 0}&nbsp;
+              其中发明专利&nbsp;{record.inventionPatentCount || 0}&nbsp;
+              实用新型&nbsp;{record.utilityModelCount || 0}&nbsp;
+              外观设计&nbsp;{record.appearancePatentCount || 0}&nbsp;
+              软著&nbsp;{record.softwareWorksCount || 0}&nbsp;
+              其他类型&nbsp;{record.otherCount || 0}
+            </div>
+          )
+        }
+      },
+      {
+        title: '财务数据',
+        dataIndex: 'financialData',
+        key: 'financialData',
+        width: 200,
+      },
+      {
+        title: '前期沟通',
+        dataIndex: 'earlyCommunication',
+        key: 'earlyCommunication',
+        width: 200,
+      },
+      {
+        title: '面谈思路及目的',
+        dataIndex: 'interviewIdeas',
+        key: 'interviewIdeas',
+        width: 200,
+      },
+      {
+        title: '所属部门',
+        dataIndex: 'depName',
+        key: 'depName',
+      },
+      {
+        title: '操作',
+        dataIndex: 'id',
+        key: 'id',
+        render: text => {
+          return (
+            <div>
+              <Button
+                onClick={(e) => {
+                  e.stopPropagation();
+                  this.setState({
+                    visible: true,
+                    uid: text
+                  })
+                }} type="primary" style={{ marginLeft: '10px' }}>主营日志</Button>
+            </div>
+          )
+        }
+      }
+      ],
+      columnsX: [
+        {
+          title: '客户名称',
+          dataIndex: 'nickname',
+          key: 'nickname',
+          fixed: 'left',
+          width: 200,
+          render: text => {
+            return (
+              <Tooltip title={text}>
+                <div>{text}</div>
+              </Tooltip>
+            )
+          }
+        },
+        {
+          title: '地区',
+          dataIndex: 'area',
+          key: 'area',
+          width: 150,
+          render: (text, record) => {
+            return (record.province || "") + (!record.city ? "" : "-") + (record.city || "") + (!record.area ? "" : "-") + (record.area || "");
+          },
+        },
+        {
+          title: '客户类型',
+          dataIndex: 'shareType',
+          key: 'shareType',
+          render: text => {
+            return (
+              <div>{["私有客户", "公共客户", "签单客户", "外联客户"][text]}</div>
+            )
+          }
+        },
+        {
+          title: '渠道类别',
+          dataIndex: 'channelType',
+          key: 'channelType',
+          render: text => {
+            return (
+              <div>{["", "其他", "民主党派", "园区", "民间组织", "战略合作单位"][text]}</div>
+            )
+          }
+        },
+        {
+          title: '企业数',
+          dataIndex: 'enterpriseCount',
+          key: 'enterpriseCount',
+        },
+        {
+          title: '联系人',
+          dataIndex: 'contactName',
+          key: 'contactName',
+        },
+        {
+          title: '所属人',
+          dataIndex: 'adminName',
+          key: 'adminName',
+        },
+        {
+          title: '面谈项目',
+          dataIndex: 'intendedProject',
+          key: 'intendedProject',
+          width: 200,
+        },
+        {
+          title: '考核指标',
+          dataIndex: 'channelIndicators',
+          key: 'channelIndicators',
+          width: 200,
+        },
+        {
+          title: '面谈思路及目的',
+          dataIndex: 'interviewIdeas',
+          key: 'interviewIdeas',
+          width: 200,
+        },
+        {
+          title: '面谈人及分工',
+          dataIndex: 'interviewDistribution',
+          key: 'interviewDistribution',
+          width: 200,
+        },
+        {
+          title: '所属部门',
+          dataIndex: 'depName',
+          key: 'depName',
+        },
+        {
+          title: '操作',
+          dataIndex: 'id',
+          key: 'id',
+          render: text => {
+            return (
+              <div>
+                <Button
+                  onClick={(e) => {
+                    e.stopPropagation();
+                    this.setState({
+                      visible: true,
+                      uid: text
+                    })
+                  }} type="primary" style={{ marginLeft: '10px' }}>主营日志</Button>
+              </div>
+            )
+          }
+        }
+      ],
+      dataSource: [],
+    };
+  },
+
+  componentWillMount() {
+    this.loadData();
+  },
+
+  componentWillReceiveProps(nextProps) {
+    if (nextProps.newChannel !== this.props.newChannel) {
+      this.setState({
+        changeList: undefined
+      })
+      this.reset();
+    }
+  },
+
+  loadData(pageNo) {
+    const { searchInfor, pagination } = this.state;
+    this.setState({
+      loading: true,
+    });
+    let datas = Object.assign(searchInfor, {
+      newChannel: this.props.newChannel,
+      pageNo: pageNo || 1,
+      pageSize: pagination.pageSize,
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/userArchives/selectUserArchives",
+      data: datas,
+      success: function (data) {
+        ShowModal(this);
+        this.setState({
+          loading: false,
+        });
+        if (data.error && data.error.length === 0) {
+          if (data.data.list) {
+            pagination.current = data.data.pageNo;
+            pagination.total = data.data.totalCount;
+            if (data.data && data.data.list && !data.data.list.length) {
+              pagination.current = 0;
+              pagination.total = 0;
+            }
+            this.setState({
+              dataSource: data.data.list,
+              pagination: this.state.pagination,
+              pageNo: data.data.pageNo,
+            });
+          } else {
+            this.setState({
+              dataSource: data.data,
+              pagination: false,
+            });
+          }
+        } else {
+          message.warning(data.error[0].message);
+        }
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  followUp(e) {
+    const { searchInfor } = this.state;
+    this.setState({
+      searchInfor: Object.assign(searchInfor, {
+        aname: e,
+      }),
+    });
+    $.ajax({
+      method: "get",
+      dataType: "json",
+      crossDomain: false,
+      url: globalConfig.context + "/api/admin/customer/listAdminByName",
+      data: {
+        adminName: e,
+      },
+      success: function (data) {
+        let thedata = data.data;
+        if (!thedata) {
+          if (data.error && data.error.length) {
+            message.warning(data.error[0].message);
+          }
+          thedata = {};
+        }
+        this.setState({
+          fjlist: thedata,
+        });
+      }.bind(this),
+    }).always(
+      function () {
+        this.setState({
+          loading: false,
+        });
+      }.bind(this)
+    );
+  },
+
+  selectF(value) {
+    const { searchInfor, fjlist } = this.state;
+    const newdataSources = JSON.stringify(fjlist) == "{}" ? [] : fjlist;
+    this.setState({
+      searchInfor: Object.assign(searchInfor, {
+        aid: newdataSources.find((item) => item.name == value).id,
+      }),
+    });
+  },
+
+  changeList(arr) {
+    const newArr = [];
+    let list = this.props.newChannel == 1
+      ? this.state.columnsX
+      : this.state.columns
+    list.forEach((item) => {
+      arr.forEach((val) => {
+        if (val === item.title) {
+          newArr.push(item);
+        }
+      });
+    });
+    this.setState({
+      changeList: newArr,
+    });
+  },
+
+  search() {
+    this.loadData();
+  },
+
+  reset() {
+    this.setState({
+      searchInfor: JSON.parse(JSON.stringify({})),
+    }, () => {
+      this.loadData();
+    })
+  },
+
+  render() {
+    const { searchInfor } = this.state
+    const { newChannel } = this.props
+    const newdataSources =
+      JSON.stringify(this.state.fjlist) == "{}" ? [] : this.state.fjlist;
+    const newoptions = newdataSources.map((group) => (
+      <Select.Option key={group.id} value={group.name}>
+        {group.name}
+      </Select.Option>
+    ));
+    return (
+      <div className="user-content">
+        <ShowModalDiv ShowModal={this.state.showModal} onClose={() => { this.setState({ showModal: false }) }} />
+        <div className="content-title" style={{ marginBottom: 10 }}>
+          <span style={{ fontWeight: 900, fontSize: 16 }}>{newChannel == 1 ? "渠道档案汇总" : "客户档案汇总"}</span>
+        </div>
+        <div className="user-search">
+          <Tabs
+            defaultActiveKey="1"
+            className="test">
+            <TabPane tab="搜索" key="1" style={{ paddingTop: '10px' }}>
+              <Input
+                placeholder={newChannel == 1 ? "渠道名称" : "客户名称"}
+                value={searchInfor.name || undefined}
+                style={{ width: 150, marginRight: 10 }}
+                onChange={e => {
+                  this.setState({
+                    searchInfor: Object.assign(searchInfor, {
+                      name: e.target.value,
+                    }),
+                  });
+                }}
+              />
+              <AutoComplete
+                className="certain-category-search"
+                dropdownClassName="certain-category-search-dropdown"
+                dropdownMatchSelectWidth={false}
+                style={{ width: "150px" }}
+                dataSource={newoptions}
+                placeholder="所属人"
+                value={searchInfor.aname || undefined}
+                onChange={this.followUp.bind(this)}
+                filterOption={true}
+                onSelect={this.selectF.bind(this)}
+              >
+                <Input />
+              </AutoComplete>
+              {newChannel == 1 &&
+                <Select
+                  mode="multiple"
+                  placeholder={"请选择渠道类别"}
+                  style={{ width: 200 }}
+                  value={searchInfor.channelType ? searchInfor.channelType.split(",") : undefined}
+                  onChange={(e) => {
+                    this.setState({
+                      searchInfor: Object.assign(searchInfor, {
+                        channelType: e.toString(),
+                      }),
+                    });
+                  }}
+                >
+                  {[
+                    { name: "民主党派", val: 2 },
+                    { name: "园区", val: 3 },
+                    { name: "民间组织", val: 4 },
+                    { name: "战略合作单位", val: 5 },
+                    { name: "其他", val: 1 },].map((it, ins) => (
+                      <Option key={it.val}>{it.name}</Option>
+                    ))}
+                </Select>}
+              {newChannel == 0 && <Input
+                placeholder="产品关键字"
+                value={searchInfor.businessScope || undefined}
+                style={{ width: 150, marginRight: 10 }}
+                onChange={e => {
+                  this.setState({
+                    searchInfor: Object.assign(searchInfor, {
+                      businessScope: e.target.value,
+                    }),
+                  });
+                }}
+              />}
+              {newChannel == 0 &&
+                <Select
+                  mode="multiple"
+                  placeholder={"请选择行业"}
+                  style={{ width: 200 }}
+                  value={searchInfor.industry ? searchInfor.industry.split(",") : undefined}
+                  onChange={(e) => {
+                    this.setState({
+                      searchInfor: Object.assign(searchInfor, {
+                        industry: e.toString(),
+                      }),
+                    });
+                  }}
+                >
+                  {industry.map((it, ins) => (
+                    <Option key={it.value}>{it.key}</Option>
+                  ))}
+                </Select>}
+              <Select
+                placeholder={"请选择客户类型"}
+                style={{ width: 150 }}
+                value={searchInfor.shareType}
+                onChange={(e) => {
+                  this.setState({
+                    searchInfor: Object.assign(searchInfor, {
+                      shareType: e,
+                    }),
+                  });
+                }}
+              >
+                <Option value="">全部客户</Option>
+                <Option value="0">私有客户</Option>
+                <Option value="1">公共客户</Option>
+                <Option value="2">签单客户</Option>
+                <Option value="3">外联客户</Option>
+              </Select>
+              <Button type="primary" onClick={this.search} style={{ marginRight: 10 }}>
+                搜索
+              </Button>
+              <Button onClick={this.reset}>重置</Button>
+            </TabPane>
+            <TabPane tab="更改表格显示数据" key="2">
+              <div style={{ marginLeft: 10 }}>
+                <ChooseList
+                  columns={newChannel == 1 ? this.state.columnsX : this.state.columns}
+                  changeFn={this.changeList}
+                  changeList={this.state.changeList}
+                  top={55}
+                  margin={11}
+                />
+              </div>
+            </TabPane>
+          </Tabs>
+        </div>
+        <div className="patent-table">
+          <Spin spinning={this.state.loading}>
+            <Table
+              columns={this.state.changeList
+                ? this.state.changeList
+                : newChannel == 1
+                  ? this.state.columnsX
+                  : this.state.columns}
+              dataSource={this.state.dataSource}
+              pagination={this.state.pagination}
+              bordered
+              scroll={{ x: newChannel == 0 ? "130%" : "120%" }}
+            />
+          </Spin>
+        </div>
+        {this.state.visible &&
+          <MainBusinessLog
+            visible={this.state.visible}
+            uid={this.state.uid}
+            onCancel={() => {
+              this.setState({
+                visible: false,
+                uid: ''
+              })
+            }}
+          />}
+      </div>
+    );
+  }
+}));
+export default IntentionCustomer;

+ 1 - 1
js/component/manageCenter/customer/NEW/signCustomer/followDetail/addContact.jsx

@@ -35,7 +35,7 @@ const AddContact = React.createClass({
     //   message.error('请填写正确的手机号码');
     //   return
     // }
-    if (!(/^1[34578]\d{9}$/.test(this.state.newmobile))) {
+    if (!(/^1[3-9]\d{9}$/.test(this.state.newmobile))) {
       message.error('请填写正确的手机号码');
       return
     }

+ 23 - 1
js/component/manageCenter/customer/content.jsx

@@ -402,7 +402,7 @@ class Content extends Component {
         require.ensure([], () => {
           const Limit = require('./NEW/intentionCustomer/limit').default;
           this.setState({
-            component: <Limit  />
+            component: <Limit />
           });
         });
         break;
@@ -494,6 +494,28 @@ class Content extends Component {
           });
         });
         break;
+      // 客户档案汇总
+      case 'customerProfile':
+        require.ensure([], () => {
+          const Crm = require('./NEW/crm/customerProfile').default;
+          this.setState({
+            component: <Crm
+              newChannel={0}
+            />
+          });
+        });
+        break;
+      // 渠道档案汇总
+      case 'channelArchives':
+        require.ensure([], () => {
+          const Crm = require('./NEW/crm/customerProfile').default;
+          this.setState({
+            component: <Crm
+              newChannel={1}
+            />
+          });
+        });
+        break;
       //客户资料维护(营销员)
       case 'crmMaintain':
         require.ensure([], () => {

+ 1 - 1
js/component/sign/account.jsx

@@ -76,7 +76,7 @@ const LoginContent = Form.create()(React.createClass({
     checkPhone(rule, value, callback) {
         const form = this.props.form;
         const _me = this;
-        if (!(/^1[34578]\d{9}$/.test(value))) {
+        if (!(/^1[3-9]\d{9}$/.test(value))) {
             callback('请输入正确的手机号码!');
             _me.setState({
                 getCodeButton: true

+ 1 - 1
js/component/sign/groupAccount.jsx

@@ -123,7 +123,7 @@ const Group = Form.create()(React.createClass({
     checkPhone(rule, value, callback) {
         const form = this.props.form;
         const _me = this;
-        if (!(/^1[34578]\d{9}$/.test(value))) {
+        if (!(/^1[3-9]\d{9}$/.test(value))) {
             callback('请输入正确的手机号码!');
             _me.setState({
                 getCodeButton: true

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "afanti",
-  "version": "1.3.23",
+  "version": "1.3.24",
   "description": "",
   "main": "index.js",
   "scripts": {