当前位置: 首页 > wzjs >正文

离线推广网站规划书济南做网站比较好的公司

离线推广网站规划书,济南做网站比较好的公司,做网站的费用记哪个会计科目,建设银行网站不能登录密码在CRM项目中,会涉及很多张表单。每张表单的前端代码都会放在一个单独的文件夹中。这个文件夹下包含三个文件,分别是: index.js(以下称为 index):负责组件的渲染和交互逻辑。model.js(以下称为 …

在CRM项目中,会涉及很多张表单。每张表单的前端代码都会放在一个单独的文件夹中。这个文件夹下包含三个文件,分别是:

  1. index.js(以下称为 index):负责组件的渲染和交互逻辑。
  2. model.js(以下称为 model):负责状态管理和业务逻辑。
  3. service.js(以下称为 service):负责接口的定义和调用。
数据流向
  • index 调用 model 的方法。
  • model 的方法中会调用 service 的接口。
  • service 文件定义了与表单相关的所有接口。
状态管理的设计

在项目中,状态变量可以存在于 index 和 model 中,但状态变量的归属并不是固定的,而是根据具体的需求来决定。状态变量的类型可以分为以下两种:

  1. 控制组件展示的状态变量
    用于控制组件的隐藏、显示等 UI 状态。

  2. 控制数据展示的状态变量
    用于存储表单的输入值、接口返回的数据等业务状态。

状态变量的使用和更新
  1. 状态变量的使用

    • index 可以使用自己的状态变量(通过 this.state.状态变量)或 model 的状态变量(通过 this.props.状态变量)。
    • model 的状态变量可以通过 index 的 props 获取,但 model 不直接使用 index 的状态变量。
  2. 状态变量的更新

    • index 的状态变量通过 this.setState({状态变量: 值}) 更新。
    • model 的状态变量可以通过 index 或 model 自身调用 actions.业务对象名字.updateState({状态变量: 值}) 的方式更新。
交互逻辑

在表单页面中,每次用户点击或触发交互时,会调用对应的方法。这些方法的执行逻辑如下:

  1. 调用接口获取数据(通过 service)。
  2. 根据接口返回的数据更新状态变量(通过 actions.updateState 方法)。
  3. 状态变量的改变会触发组件的重新渲染,从而实现组件的展示或数据的更新。

举个例子,当我点击“分配”按钮中的分配负责人的时候,前端代码的逻辑是这样的:

1. index.js 文件

在 index.js 文件中,主要处理用户交互逻辑。以下是 Buttons 组件的定义和事件绑定:

<ButtonsbuttonTpl={listBtnsTpl} // 按钮模板onClick={this.listBtnsClick} // 点击事件处理函数
/>
  • Buttons 组件:一个通用按钮组件,通过 buttonTpl 属性传入按钮配置模板,通过 onClick 属性绑定点击事件处理函数。
  • listBtnsClick 方法:处理按钮点击事件,根据不同的按钮类型执行不同的逻辑。

以下是 listBtnsClick 方法的代码:

listBtnsClick(clickBtn, belongBtn) {const clickedKey = _.get(clickBtn, "key"); // 获取点击按钮的 keyconst belongBtnKey = _.get(belongBtn, "key"); // 获取所属按钮的 keyif (belongBtnKey === "add") {// 新增操作let obj = belongBtn.comp.filter(item => item.key == clickBtn.key);obj = obj ? obj[0] : {};_this.onClickNew({custChanTypeName: obj.name,custChanTypeId: obj.key});} else if (clickedKey === "add") {// 特殊新增操作if (clickBtn?.comp?.length === 1) {_this.onClickNew({custChanTypeName: _.get(clickBtn, "comp[0].name", ""),custChanTypeId: _.get(clickBtn, "comp[0].key", "")});}} else if (belongBtnKey === "distribute") {// 分配操作if (!_this.state.selectedRowKeys.length) {Warning("请选择客户"); // 如果没有选择客户,弹出警告return;}let assignObj = belongBtn.comp.filter(item => item.key == clickBtn.key);_this.showAssign(assignObj[0].key); // 调用分配方法} else if (belongBtnKey === "recycle") {// 回收操作if (!_this.state.selectedRowKeys.length) {Warning("请选择客户"); // 如果没有选择客户,弹出警告return;}let assignObj = belongBtn.comp.filter(item => item.key == clickBtn.key);_this.showAssign(assignObj[0].key); // 调用回收方法}
}
  • 逻辑说明
    • 根据 belongBtnKey 和 clickedKey 判断按钮的类型,执行不同的操作。
    • 分支逻辑包括新增、分配、回收等功能。
    • 调用对应的方法(如 onClickNew 或 showAssign)完成具体操作。

在 listBtnsClick 方法中,当按钮类型为 "分配" 或 "回收" 时,会调用 showAssign 方法。以下是 showAssign 方法的代码:

showAssign(key) {let assNum = key.match(/\d+/) ? key.match(/\d+/)[0] - 1 : 0; // 提取数字并减一let dispatchCustomer = this.state.selectedRowKeys; // 获取选中的客户if (!dispatchCustomer.length) {Warning("请选择客户"); // 如果没有选中客户,弹出警告return;}let param = { customerId: dispatchCustomer[0].id }; // 构造请求参数actions.customerhome.dispatchResponsiblesByCustomerId(param).then(resultData => {// 调用 model 中的方法,获取数据console.log(JSON.stringify(resultData, null, 2) + " resultData2222");// 遍历返回数据,新增字段const updatedDispatchList = resultData.map(item => ({...item,personId: item.staffUserId,personName: item.staffUserName,personCode: item.staffUserCode}));// 去重逻辑:只保留 personId 唯一的对象const uniqueDispatchList = updatedDispatchList.reduce((acc, current) => {if (!acc.find(item => item.personId === current.personId)) {acc.push(current);}return acc;}, []);console.log(JSON.stringify(updatedDispatchList, null, 2) + " updatedDispatchList");// 更新组件状态this.setState({dispatchList: uniqueDispatchList // 更新 dispatchList});// 更新 model 状态actions.customerhome.updateState({assignVisiable: true,clickAssign: key,dispatchRange: assNum});});
}
  • 逻辑说明
    • 提取 key 中的数字,用于计算分配范围。
    • 获取选中的客户 ID,构造请求参数 param
    • 调用 model 文件中的方法 dispatchResponsiblesByCustomerId 发起接口请求。
    • 对接口返回的数据进行处理:
      • 新增字段(如 personIdpersonName)。
      • 去重处理,确保 personId 唯一。
    • 更新组件的 state 和 model 的状态。

2. model.js 文件

在 model.js 文件中,封装了具体的业务逻辑。以下是 dispatchResponsiblesByCustomerId 方法的代码:

async dispatchResponsiblesByCustomerId(param) {let result = await api.dispatchResponsiblesByCustomerId(param); // 调用接口if (result && result.data) {var resultData = result.data; // 提取数据return resultData; // 返回处理后的数据}
}
  • 逻辑说明
    • 使用 async/await 处理异步请求。
    • 调用 service.js 文件中的 dispatchResponsiblesByCustomerId 方法发起接口请求。
    • 提取接口返回的数据并返回给调用方。

3. service.js 文件

在 service.js 文件中,定义了接口调用的具体实现。以下是 dispatchResponsiblesByCustomerId 方法的代码:

/*** 客户分配中,根据客户ID找到客户对应的负责人的信息* @param {*} params*/
export const dispatchResponsiblesByCustomerId = param => {return requestSec(URL.DISTRIBUTE_RESPONSIBLE_URL, {method: "get",param});
};
  • 逻辑说明
    • 使用 requestSec 方法发起 HTTP 请求。
    • 请求方法为 GET,参数为 param
    • 返回后端接口的数据。
http://www.dtcms.com/wzjs/441316.html

相关文章:

  • 电子商务网站建设教材新媒体运营培训班
  • 深圳做外贸网站公司国内新闻热点事件
  • 北京网站建设网站改版的费用软件定制开发
  • 食材网站模板大全百度搜索关键词统计
  • 在线音乐网站 用什么做现在比较好的营销平台
  • 国家卫生健康委员会人才交流服务中心官网seo成功案例分析
  • 黑龙江省建设主管部门网站优化大师怎么卸载
  • 破解直播免费视频seo交流中心
  • 百度显示网站名海南百度推广seo
  • 东莞高端模板建站新品推广策划方案
  • 深圳国贸网站建设seo排名哪家公司好
  • 带会员注册企业网站源码安装百度一下
  • 做直播网站用什么系统培训体系包括四大体系
  • 做视频的教学直播网站百度关键词竞价价格
  • 太原网站建设开发公司全球搜钻是什么公司
  • wordpress 手机端访问杭州seo薪资水平
  • 西宁软件优化网站建设营销策划方案ppt
  • 网站建设项目方案济南百度推广优化
  • 申请一个网站需要怎么做做个网页价格多少
  • jsp做网站用什么封装字符串营销方案的几个要素
  • 做网站平台的公司有哪些软文代写公司
  • dreamwave cs6建设php网站新闻式软文范例
  • 临沂网站建设服务商湖南网站建设推广优化
  • 免费个人博客网站模板下载百度知道网页版入口
  • 互联网 网站定制自己搭建一个网站
  • 网站的图片怎么做如何制作网页设计
  • 政府网站建设指标沧州做网络推广的平台
  • 平台网站怎么推广广告公司主要做什么
  • 上海金山网站设计公司企业官网定制设计
  • 网站开发的策划书网络营销的基本方法有哪些