实现房源列表的整合前端开发

import React, { PureComponent, Fragment } from 'react';
import { connect } from 'dva';
import moment from 'moment';
import {
  Row,
  Col,
  Card,
  Form,
  Input,
  Select,
  Icon,
  Button,
  Divider, Carousel,
} from 'antd';
import StandardTable from '@/components/StandardTable';
import PageHeaderWrapper from '@/components/PageHeaderWrapper';

import styles from '../TableList.less';
import ShowPics from "./ShowPics";

const FormItem = Form.Item;
const { Option } = Select;
const getValue = obj =>
  Object.keys(obj)
    .map(key => obj[key])
    .join(',');

const payType = new Map([
  [1,'付一押一'],
  [2,'付三押一'],
  [3,'付六押一'],
  [4,'年付押一'],
  [5,'其它'],
]);

/* eslint react/no-multi-comp:0 */
@connect(({ houseResource, loading }) => ({
  houseResource,
  loading: loading.models.houseResource,
}))
@Form.create()
class Resource extends PureComponent {
  state = {
    modalVisible: false,
    updateModalVisible: false,
    expandForm: false,
    selectedRows: [],
    formValues: {},
    stepFormValues: {},
  };

  columns = [
    {
      title: '房源编号',
      dataIndex: 'id',
    },
    {
      title: '房源信息',
      dataIndex: 'title',
    },
    {
      title: '图',
      dataIndex: 'pic',
      render : (text, record, index) => {
        return  <ShowPics pics={text}/>
      }
    },
    {
      title: '楼栋',
      render : (text, record, index) => {
        return record.buildingFloorNum + "栋"+record.buildingNum+"单元"+record.buildingUnit+"号"
      }

    },
    {
      title: '支付方式',
      render : (text, record, index) => {
        return payType.get(record.paymentMethod)
      }
    },
    {
      title: '户型',
      dataIndex: 'houseType'

    },
    {
      title: '面积',
      dataIndex: 'useArea',
      render : (text, record, index) => {
        return text+"平方"
      }
    },
    {
      title: '楼层',
      dataIndex: 'floor'
    },
    {
      title: '操作',
      render: (text, record) => (
        <Fragment>
          <a onClick={() => this.handleUpdateModalVisible(true, record)}>查看</a>
          <Divider type="vertical" />
          <a href="">删除</a>
        </Fragment>
      ),
    },
  ];

  componentDidMount() { //当组件挂载完成后执行加载数据
    console.log("loading.......");
    const { dispatch } = this.props;
    dispatch({
      type: 'houseResource/fetch',
      // type: 'rule/fetch',
    });
  }

  handleStandardTableChange = (pagination, filtersArg, sorter) => {
    const { dispatch } = this.props;
    const { formValues } = this.state;

    const filters = Object.keys(filtersArg).reduce((obj, key) => {
      const newObj = { ...obj };
      newObj[key] = getValue(filtersArg[key]);
      return newObj;
    }, {});

    const params = {
      currentPage: pagination.current,
      pageSize: pagination.pageSize,
      ...formValues,
      ...filters,
    };
    if (sorter.field) {
      params.sorter = `${sorter.field}_${sorter.order}`;
    }

    dispatch({
      type: 'rule/fetch',
      payload: params,
    });
  };

  handleFormReset = () => {
    const { form, dispatch } = this.props;
    form.resetFields();
    this.setState({
      formValues: {},
    });
    dispatch({
      type: 'rule/fetch',
      payload: {},
    });
  };

  toggleForm = () => {
    const { expandForm } = this.state;
    this.setState({
      expandForm: !expandForm,
    });
  };

  handleMenuClick = e => {
    const { dispatch } = this.props;
    const { selectedRows } = this.state;

    if (!selectedRows) return;
    switch (e.key) {
      case 'remove':
        dispatch({
          type: 'rule/remove',
          payload: {
            key: selectedRows.map(row => row.key),
          },
          callback: () => {
            this.setState({
              selectedRows: [],
            });
          },
        });
        break;
      default:
        break;
    }
  };

  handleSelectRows = rows => {
    this.setState({
      selectedRows: rows,
    });
  };

  handleSearch = e => {
    e.preventDefault();

    const { dispatch, form } = this.props;

    form.validateFields((err, fieldsValue) => {
      if (err) return;

      const values = {
        ...fieldsValue,
        updatedAt: fieldsValue.updatedAt && fieldsValue.updatedAt.valueOf(),
      };

      this.setState({
        formValues: values,
      });

      dispatch({
        type: 'rule/fetch',
        payload: values,
      });
    });
  };




  renderSimpleForm() {
    const {
      form: { getFieldDecorator },
    } = this.props;
    return (
      <Form onSubmit={this.handleSearch} layout="inline">
        <Row gutter={{ md: 5, lg: 24, xl: 48 }}>
          <Col md={4} sm={24}>
            {getFieldDecorator('name')(<Input placeholder="区域" />)}
          </Col>
          <Col md={4} sm={24}>
            {getFieldDecorator('name')(<Input placeholder="楼盘名称" />)}
          </Col>
          <Col md={4} sm={24}>
            {getFieldDecorator('status')(
              <Select placeholder="房屋类型" style={{ width: '100%' }}>
                <Option value="0">住宅</Option>
                <Option value="1">商住两用</Option>
              </Select>
            )}
          </Col>
          <Col md={4} sm={24}>
            {getFieldDecorator('name')(<Input placeholder="户型" />)}
          </Col>
          <Col md={8} sm={24}>
            <span className={styles.submitButtons}>
              <Button type="primary" htmlType="submit">
                查询
              </Button>
              <Button style={{ marginLeft: 8 }} onClick={this.handleFormReset}>
                重置
              </Button>
              <a style={{ marginLeft: 8 }} onClick={this.toggleForm}>
                展开 <Icon type="down" />
              </a>
            </span>
          </Col>
        </Row>
      </Form>
    );
  }

  renderAdvancedForm() {
    const {
      form: { getFieldDecorator },
    } = this.props;
    return (
      <Form onSubmit={this.handleSearch} layout="inline">
        <Row gutter={{ md: 6, lg: 24, xl: 48 }}>
          <Col md={6} sm={24}>
            <FormItem label="">
              {getFieldDecorator('name')(<Input placeholder="区域" />)}
            </FormItem>
          </Col>
          <Col md={6} sm={24}>
            <FormItem label="">
              {getFieldDecorator('name')(<Input placeholder="楼盘名称" />)}
            </FormItem>
          </Col>
          <Col md={6} sm={24}>
            <FormItem label="">
              {getFieldDecorator('status')(
                <Select placeholder="房屋类型" style={{ width: '100%' }}>
                  <Option value="0">住宅</Option>
                  <Option value="1">商住两用</Option>
                </Select>
              )}
            </FormItem>
          </Col>
          <Col md={6} sm={24}>
            <FormItem label="">
              {getFieldDecorator('name')(<Input placeholder="户型" />)}
            </FormItem>
          </Col>
        </Row>
        <Row gutter={{ md: 6, lg: 24, xl: 48 }}>
          <Col md={6} sm={24}>
            <FormItem label="">
              {getFieldDecorator('name')(<Input placeholder="房源编号" />)}
            </FormItem>
          </Col>
          <Col md={6} sm={24}>
            <Row>
              <Col md={10} sm={24}>
                <FormItem label="">
                  {getFieldDecorator('name')(<Input placeholder="价格" />)}
                </FormItem>
              </Col>
              <Col md={4} sm={24}>
                <div style={{textAlign:'center'}}>到</div>
              </Col>
              <Col md={10} sm={24}>
                <FormItem label="">
                  {getFieldDecorator('name')(<Input placeholder="价格" />)}
                </FormItem>
              </Col>
            </Row>
          </Col>
          <Col md={6} sm={24}>
            <FormItem label="">
              {getFieldDecorator('name')(<Input placeholder="朝向" />)}
            </FormItem>
          </Col>
          <Col md={6} sm={24}>
            <FormItem label="">
              {getFieldDecorator('name')(<Input placeholder="装修" />)}
            </FormItem>
          </Col>
        </Row>
        <div style={{ overflow: 'hidden' }}>
          <div style={{ float: 'right', marginBottom: 24 }}>
            <Button type="primary" htmlType="submit">
              查询
            </Button>
            <Button style={{ marginLeft: 8 }} onClick={this.handleFormReset}>
              重置
            </Button>
            <a style={{ marginLeft: 8 }} onClick={this.toggleForm}>
              收起 <Icon type="up" />
            </a>
          </div>
        </div>
      </Form>
    );
  }

  renderForm() {
    const { expandForm } = this.state;
    return expandForm ? this.renderAdvancedForm() : this.renderSimpleForm();
  }

  render() {
    const {
      houseResource: { data },
      loading,
    } = this.props;
    const { selectedRows } = this.state;

    console.log(this.props);

    return (
      <PageHeaderWrapper title="房源管理">
        <Card bordered={false}>
          <div className={styles.tableList}>
            <div className={styles.tableListForm}>{this.renderForm()}</div>

            <StandardTable
              selectedRows={selectedRows}
              loading={loading}
              data={data}
              columns={this.columns}
              onSelectRow={this.handleSelectRows}
              onChange={this.handleStandardTableChange}
            />
          </div>
        </Card>
      </PageHeaderWrapper>
    );
  }
}

export default Resource;
import React  from 'react';
import { Modal, Button, Carousel } from 'antd';

class ShowPics extends React.Component{

  info = () => {
    Modal.info({
      title: '',
      iconType:'false',
      width: '800px',
      okText: "ok",
      content: (
        <div style={{width:650, height: 400, lineHeight:400, textAlign:"center"}}>
          <Carousel autoplay={true}>
            {
            this.props.pics.split(',').map((value,index) => {
              return <div><img style={{ maxWidth:600 ,maxHeight:400, margin:"0 auto" }} src={value}/></div>
            })
          }
          </Carousel>
        </div>
      ),
      onOk() {},
    });
  };

  constructor(props){
    super(props);
    this.state={
      btnDisabled: this.props.pics? false: true
    }
  }



  render() {
    return (
      <div>
        <Button disabled={this.state.btnDisabled} icon="picture" shape="circle" onClick={()=>{this.info()}} />
      </div>
    )
  }

}

export default ShowPics;
import { queryResource } from '@/services/houseResource';

export default {
  namespace: 'houseResource',

  state: {
    data: {
      list: [],
      pagination: {},
    },
  },

  effects: {
    *fetch({ payload }, { call, put }) {
      const response = yield call(queryResource, payload);
      yield put({
        type: 'save',
        payload: response,
      });
    }
  },

  reducers: {
    save(state, action) {
      return {
        ...state,
        data: action.payload,
      };
    },
  },
};
import request from '@/utils/request';
import { stringify } from 'qs';

export async function queryResource(params) {
  return request(`/haoke/house/resources?${stringify(params)}`);
}

 

仿美萍房产中介管理系统源码 仿美萍房产中介管理系统是一套功能强大通用性极强的房产管理软件,软件界面设计简洁,美观,其人性化的软件流程,使普通用户不需培训也能快速掌握软件操作使用方法,上手极易。商友房产管理软件广泛适用于企业,公司的房产管理,客户档案管理,是您企业进行房产管理的强大工具。软件支持外部EXCEL表数据导入各种数据,也可以方便导出为Excel,Word等数据格式;报表支持自定义打印。 它集房源管理、客户管理、销售管理、出管理,统计分析等强大功能为一身,软件界面简洁优美,操作直观简单,无需专门培训即可正常使用。仿美萍房产中介管理系统能广泛适用房介经营商、地产代理商等房屋中介销售出机构使用。仿美萍房屋中介管理软件是您加强房源管理、客户管理,员工管理,提高工作效率的强大助手。 一、日常管理 1. 新增房源:点击主窗口中的"新增房源"按钮,打开新增房源窗口,按照房源的实际情况进行对应登记后保存即可完成房源的登记,登记后就以用于软件中对房源的查询、修改、签约、房源匹配等操作时使用。 2. 新增客户:点击主窗口中的"新增客户"按钮,打开新增客户窗口,按照客户的实际需求进行对应登记后保存即可完成客户的登记,登记后就以用于软件中对客户的查询、修改、签约、客户匹配等操作时使用。 3. 跟进查询:点击主窗口中的"跟进查询"按钮,打开跟进查询窗口,此窗口中分为房源跟进查询和客户跟进查询两项,在此窗口可以查询到已登记房源和客户的后期跟进情况,通过此查询可以帮助员工了解动态掌握客户的情况,便于及时合理的安排自已的工作。 4. 房查询:点击主窗口中的"房查询"按钮,打开房源查询窗口,有此窗口中输入想要查询到的房源条件,即可查到符合条件的房源。大大提高了房源访问速度和要求的精确度,鼠标单击查询到的某个房源,如果有与之匹配的客户,将在主窗口的右下部的"自动匹配的客户"中显示与所点击房源条件相符的需求客户。方便了员工为客户提供更快捷方便的服务。 5. 买房查询:点击主窗口中的" 买房查询"按钮,打开房源查询窗口,有此窗口中输入想要查询到的房源条件,即可查到符合条件的房源。大大提高了房源访问速度和要求的精确度,鼠标单击查询到的某个房源,如果有与之匹配的客户,将在主窗口的右下部的"自动匹配的客户"中显示与所点击房源条件相符的需求客户。方便了员工为客户提供更快捷方便的服务。 二、房源管理 1. 房源管理:点击主窗口左侧的"房源管理" →"房源管理"按钮,打开房源管理窗口,在此窗口中可以对房源进行添加、修改、删除、查询、导出、打印等,还可对每个房源进行客户自动匹配。对房源的添加方式如同在"日常管理"中的添加方式一样。在房源管理中点选某个房源后,在此窗口下半部分的"自动匹配的客户"中将显示与之匹配的客户。 2. 房源跟进:点击主窗口左侧的"房源管理" →"房源跟进"按钮,打开房源跟进窗口,此窗口分为跟进管理和跟进查询两部分,在跟进管理中通过查询房源可以定位对哪一个房源进行跟进,定位房源后在此窗口的下面部分可以对此房源进行添加、修改、删除、打印其跟进信息。在跟进查询部分可以对所有的房源跟进信息按关键字查询。及时掌握房源和客户的进展情况。 3. 成交管理:点击主窗口左侧的"房源管理" →"成交管理"按钮,打开成交管理窗口,此窗口分为成交管理和成交记录两部分,成交管理部分主要完成房源和客户的签约功能,成交记录部分是用来查询所有成交房源的详细信息。 ① 签约:首先在成交管理中查询到要签约的房源,定位房源后,点击成交管理窗口中的签约按钮,打开签约窗口。在此窗口中分为签约登记和提成分配两部分,在签约登记中选择客户类型(如果是已登记客户,真接输入客户编号就可显示出客户信息),填写实际的签约信息;在提成分配中对此次交易需要分配提成的员工进行登记分配比例,以便日后对员工提成进行查询。 ② 修改:对已签约的信息如果发现有误,可以用此功能进行修改。 ③ 合同:此功能主要用于保存传统纸制合同的电子版,以便为以后查找合同提供方便,使用此功能前需要在系统设置中设置合同样本文件,以使于此处使用。 4. 门店招贴:点击主窗口左侧的"房源管理" →"门店招贴"按钮,打开门店招贴窗口,此窗口主要提供招贴单的打印功能,可以选择不同区域的房源或具体到某个房源打印其招贴单,招贴单分小招贴单和大招贴单两种,应用于批量招贴和单个招贴。减少再人工制做招贴单时容易出现错误,并大大提高了工作效率。 三、客户管理 1. 客户管理:点击主窗口左侧的"客户管理" →"客户管理"按钮,打开客户管理窗口,在此窗口中可以对客户进行添加、修改、删除、查询、导出、打印等,还可对每个客户进行房源自动匹配。对客户的添加方式如同在"日常管理"中的添加方式一样。在客户管理中点选某个客户后,在此窗口下半部分的"自动匹配的房源"中将显示与之匹配的房源。 2. 客户跟进:点击主窗口左侧的"客户管理" →"客户跟进"按钮,打开客户跟进窗口,此窗口分为跟进管理和跟进查询两部分,在跟进管理中通过查询客户可以定位对哪一个客户进行跟进,定位客户后在此窗口的下面部分可以对此客户进行添加、修改、删除、打印其跟进信息。在跟进查询部分可以对所有的客户跟进信息按关键字查询。及时掌握客户和房源的进展情况。 3. 签约查询:点击主窗口左侧的"客户管理" →"签约查询"按钮,打开签约查询窗口,在此窗口中可以查询所有的签约信息,可以随时了解到每个客户和房源的签约详情。 4. 来电记录:点击主窗口左侧的"客户管理" →"来电记录"按钮,打开来电记录窗口。此窗口用来查询来电客户的内容,为员工对房源和客户的跟进提供有力的帮助。此功能需配合来电显示猫使用,如果装有来电显示猫,在客户来电时将自动弹出来电登记窗口,操作员可以将客户来电的内容记录下来,就可以在来电记录中查询客户的来电内容。 四、内部统计 1. 房源查询、客源查询:点击主窗口左侧的"内部统计" →"房源查询"按钮,打开员工业绩窗口,此功能主要用来查询本公司员工的业务情况,可以按时间、房屋状态、售状态、员工编号来查询房源的情况,可以随时了解到公司员工的业绩,对岗位评定和业绩考核提供重要的数据指标。 2. 综合统计:点击主窗口左侧的"内部统计" →"综合统计"按钮,打开综合统计窗口,此功能主要按房源、客源、员工进行横向的一个统计,每项统计有配有相应的直方图。直观的反应出房源、客源、员工等各种属性的数量统计。为管理层业务分析和决策提供有力的信息。 3. 提醒管理:点击主窗口左侧的"内部统计" →"提醒管理"按钮,打开提醒管理窗口,在此窗口可以对提醒信息进行添加、修改、删除、导出、打印等操作,提醒管理主要作用就是起到一个备用录的功能,操作员可以将一些比较重要但又怕忘记处理的事情添加到提醒管理中,根据添加时设置的提醒条件到时系统会自动弹出提示窗口,以便及时提醒员工需要处理的任务,此功能的应用大大减少了漏做工作的事情发生,将宝贵的资源达到合理安排,充份利用的效果,减少员工冗余记忆的功能。 4. 提成明细:点击主窗口左侧的"内部统计" →"提成明细"按钮,打开提成明细窗口,此处的数据来自于"房源管理" →"成交管理"签约时进行的提成分配,在这个窗口可以查到所有员工的提成信息,省去了财务人员对员工提成的大量核算功能,减少了人工核算误差。每一笔明细都清晰的反应出当次提成所依据的签约合同、分成比例、分成金额、分成说明、交易佣金等相关信息。 5. 提成汇总:点击主窗口左侧的"内部统计" →"提成汇总"按钮,打开提成汇总窗口,提成汇总主要是把指定时间段内的员工提成按员工分别汇总,清晰的反映出每位员工在一定时间段内应得的提成金额。也是进行员工业绩评定的一个重要的参考指标。 五、系统设置 1. 公司信息设置:点击主窗口左侧的"系统设置" →"公司信息"按钮,打开公司信息窗口,在此处输入公司的基本信息,在招贴单中可以显示公司信息,也为以后功能升级需要显示公司信息的地方做好准备。 2. 员工管理:点击主窗口左侧的"内部统计" →"管理管理"按钮,打开员工管理窗口,在窗口中可以实现对公司员工的添加、修改、删除、查询等功能。在此添加的员工主要用于在进行置业顾问、提成分配、房源和客户的跟进的员工选择时使用。将公司的每笔业务和处理业务的员工关联起来,便于责任到人和业绩考核等。 3. 操作权限设置:点击主窗口左侧的"系统设置" →"操作权限设置"按钮,打开操作权限设置窗口,此窗口分为上下两下部分。上部分为权限组的管理,主要用于添加、修改、删除权限组;下半部分为操作员的管理,主要用于添加、修改、删除操作员。权限组可以根据公司的实际情况设置多个,然后在添加操作员时选择相应的权限组即可。操作员登录时即只能操作其可操作的权限。 4. 修改当前密码:点击主窗口左侧的"系统设置" →"修改当前密码"按钮,打开修改当前密码,此功能主要用于修改当前操作员的登录密码,旧密码输入正确后才能设置新的密码。 5. 合同样本设置:点击主窗口左侧的"系统设置" →"修改当前密码"按钮,打开合同样本设置,此功能主要用于指定一些格式化合同的存放路径,在签约时可以直接打开相应的合同文本。 6. 初始化数据:点击主窗口左侧的"系统设置" →"初始化数据"按钮,打开初始化数据窗口,在这里可以删除指定的数据,例如:开始使用本软件前可以先删除所有的信息,以便于重新录入本公司的一些房源和客户等信息。 7. 参数信息设置:点击主窗口左侧的"系统设置" →"参数信息设置"按钮,打开参数信息设置窗口,在这里您可以根据您的实际应用情况添加相应的参数据,这些参数涉汲了软件操作的整个流程,也是一些查询的关键条件,所以必须规范设置。 8. 系统操作日志:点击主窗口左侧的"系统设置" →"系统操作日志"按钮,打开系统操作日志窗口,在此可以查询到对数据的修改、删除等有损原始数据的操作,也是对操作员的一种监督。此窗口的数据自动产生,在此只需查询即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值