当前位置:   article > 正文

宜搭低代码开发师(高级)创建待办列表应用 流程截图及实例代码(避坑专用)_宜搭高级认证实操

宜搭高级认证实操

目录

目标:

操作步骤:

一、主要涉及的接口

二、代码及说明步骤


目标:

  • 试题截图及步骤代码说明,很快完成考试。

操作步骤:

这里基础的两个页面创建很简单,直接省略。

直接说自定义页面——Todolist

接口文档:

跨应用数据源API | 钉钉宜搭·帮助中心

一、主要涉及的接口

①、获取待办 :/dingtalk/web/APP_XXXXXXXXXXXXX/v1/form/searchFormDatas.json

②、删除:/dingtalk/web/APP_XXXXXXXXXXXXX/v1/form/deleteFormData.json

③、获取已完成待办:

/dingtalk/web/APP_XXXXXXXXXXXXX/v1/form/searchFormDatas.json

④、 提交待办信息表单:

/dingtalk/web/APP_XXXXXXXXXXXXX/v1/form/saveFormData.json

⑤、更新修改待办信息表单:

/dingtalk/web/APP_XXXXXXXXXXXXX/v1/form/updateFormData.json

二、代码及说明步骤

①、列表

说明:顶部操作:新建代办;   操作列:编辑/删除;  行选择器:单选/多选

列表代码:

1-1. 待办列表:

  1. //获取进行中待办数据
  2. export function getTodoListData() {
  3. this.dataSourceMap.getTodoTasks.load().then(res => {
  4. //console.log(res)
  5. //以下根据返回内容重构数据对象,使数据格式符合宜搭组件格式要求
  6. let toDoData = []
  7. for (let i = 0; i < res.data.length; i++) {
  8. let tmpData = res.data[i].formData
  9. //此处另外添加formInstId属性,用于之后的复选框功能
  10. tmpData['formInstId'] = res.data[i].formInstId
  11. //将每一个重构的对象存入到全局变量ToDoData
  12. toDoData.push(tmpData)
  13. }
  14. console.log('v0', toDoData)
  15. //表格展示数据源。其中,currentPage和totalCount的取值会影响到表格分页器的展示
  16. this.setState({
  17. toDoListData: {
  18. data: toDoData,
  19. currentPage: res.currentPage,
  20. totalCount: res.totalCount
  21. }
  22. })
  23. //原表单真实数据集,用于后续的搜索功能
  24. state.ToDoData_1['data'] = toDoData
  25. })
  26. }

1-2. 完成列表:

  1. //获取已完成待办数据
  2. export function getDoneListData() {
  3. this.dataSourceMap.getFinishTasks.load().then(res => {
  4. console.log(res)
  5. //以下根据返回内容重构数据对象,使数据格式符合宜搭组件格式要求
  6. let toDoData = []
  7. for (let i = 0; i < res.data.length; i++) {
  8. let tmpData = res.data[i].formData
  9. //此处另外添加formInstId属性,用于之后的复选框功能
  10. tmpData['formInstId'] = res.data[i].formInstId
  11. //将每一个重构的对象存入到全局变量ToDoData
  12. toDoData.push(tmpData)
  13. }
  14. console.log('v2', toDoData)
  15. //表格展示数据源。其中,currentPage和totalCount的取值会影响到表格分页器的展示
  16. this.setState({
  17. doneListData: {
  18. data: toDoData,
  19. currentPage: res.currentPage,
  20. totalCount: res.totalCount
  21. }
  22. })
  23. //原表单真实数据集,用于后续的搜索功能
  24. state.doneListData_1['data'] = toDoData
  25. })
  26. console.log('v28888', state.doneListData_1)
  27. }

搜索

1-3. 待办搜索:

  1. /**
  2. * tablePc onToDoFetchData
  3. * @param params.currentPage 当前页码
  4. * @param params.pageSize 每页显示条数
  5. * @param params.searchKey 搜索关键字
  6. * @param params.orderColumn 排序列
  7. * @param params.orderType 排序方式(desc,asc)
  8. * @param params.from 触发来源(order,search,pagination)
  9. */
  10. export function onToDoFetchData(params) {
  11. // 如果是搜索的话翻页重置到 1
  12. if (params.from === 'search') {
  13. params.currentPage = 1;
  14. //判断搜索框内是否有值,有则根据搜索框内的内容,对照toDoData_1中的数据集进行比对,这里,将【分类】的值作为搜索的类别。
  15. if (params.searchKey) {
  16. let tmpToDoData = state.ToDoData_1['data']
  17. let tmpTodoArr = []
  18. //遍历tmpTodoData集合,比较指定键对应的值是否与search属性中的值相等,如果相等,则添加到tmpToDoArr数组中,最后,将数组重新赋值给表格展示数据源toDoListData。
  19. for (let i = 0; i < tmpToDoData.length; i++) {
  20. if (tmpToDoData[i]['radioField_lhomxns9'] == params.searchKey) {
  21. tmpTodoArr.push(tmpToDoData[i])
  22. }
  23. }
  24. this.setState({
  25. toDoListData: {
  26. data: tmpTodoArr,
  27. currentPage: params.currentPage,
  28. totalCount: tmpTodoArr.length
  29. }
  30. })
  31. } else{
  32. this.setState({
  33. toDoListData: {
  34. data: state.ToDoData_1['data'],
  35. currentPage: params.currentPage,
  36. totalCount: state.ToDoData_1['data'].length
  37. }
  38. })
  39. }
  40. }
  41. }

1-4.  已完成搜索:

  1. /**
  2. * 已完成的搜索
  3. * tablePc onToDoFetchData
  4. * @param params.currentPage 当前页码
  5. * @param params.pageSize 每页显示条数
  6. * @param params.searchKey 搜索关键字
  7. * @param params.orderColumn 排序列
  8. * @param params.orderType 排序方式(desc,asc)
  9. * @param params.from 触发来源(order,search,pagination)
  10. */
  11. export function onDoneFetchData(params) {
  12. // 如果是搜索的话翻页重置到 1
  13. if (params.from === 'search') {
  14. params.currentPage = 1;
  15. //判断搜索框内是否有值,有则根据搜索框内的内容,对照toDoData_1中的数据集进行比对,这里,将【分类】的值作为搜索的类别。
  16. if (params.searchKey) {
  17. let tmpToDoData = state.doneListData_1['data']
  18. let tmpTodoArr = []
  19. //遍历tmpTodoData集合,比较指定键对应的值是否与search属性中的值相等,如果相等,则添加到tmpToDoArr数组中,最后,将数组重新赋值给表格展示数据源toDoListData。
  20. for (let i = 0; i < tmpToDoData.length; i++) {
  21. if (tmpToDoData[i]['radioField_lhomxns9'] == params.searchKey) {
  22. tmpTodoArr.push(tmpToDoData[i])
  23. }
  24. }
  25. this.setState({
  26. doneListData: {
  27. data: tmpTodoArr,
  28. currentPage: params.currentPage,
  29. totalCount: tmpTodoArr.length
  30. }
  31. })
  32. } else {
  33. this.setState({
  34. doneListData: {
  35. data: state.doneListData_1['data'],
  36. currentPage: params.currentPage,
  37. totalCount: state.doneListData_1['data'].length
  38. }
  39. })
  40. }
  41. }

说明:

在搜索的时候,需要建立动作绑定方法。

注:这个搜索是通过分类搜索的,所以代码里的判断是对分类唯一操作键的判断。 

1-5. 编辑代码:

  1. //修改待办: 打开对话框
  2. export function onUpdataBarItemClick(selectedRowKeys, records) {
  3. this.$('dialog_lhsjdzz3').show()
  4. const title = selectedRowKeys.textField_lhomxns7
  5. const type = selectedRowKeys.radioField_lhomxns9
  6. const degree = selectedRowKeys.rateField_lhomxnsb
  7. const time = selectedRowKeys.dateField_lhpocmef
  8. const note = selectedRowKeys.textareaField_lhpocmeh
  9. const formInstId = selectedRowKeys.formInstId
  10. this.setState({
  11. title: title
  12. })
  13. this.setState({
  14. type: type
  15. })
  16. this.setState({
  17. degree: degree
  18. })
  19. this.setState({
  20. time: time
  21. })
  22. this.setState({
  23. noInfo: note
  24. })
  25. this.setState({
  26. formInstId: formInstId
  27. })
  28. }

这里特别注意:  

这个是编辑修改按钮,需要把这行数据渲染出来,因此,在这里,我新建了几个变量。

1-6. 删除代码:

  1. //删除进行中的待办
  2. export function onDelToDoClick(rowData) {
  3. this.$('dialog_lhpv0960').show()
  4. this.setState({
  5. toDoRowData: rowData
  6. })
  7. }
  8. //调用删除API,此处就是前述提到的接口复用,只要在js中调用接口,不在数据源面板设置参数值,就可以通过修改参数值,就可以删除已有的任意一条数据,包括已完成待办。
  9. export function delToDoItem(data) {
  10. var formInstId = data;
  11. if (undefined == data){
  12. formInstId = state.toDoRowData.formInstId
  13. }
  14. let params = {
  15. formInstId: formInstId
  16. }
  17. this.dataSourceMap.deleteToDoList.load(params).then(res => {
  18. this.$('dialog_lhpv0960').hide()
  19. this.getTodoListData()
  20. this.getDoneListData()
  21. }).catch(err => {
  22. console.log(err)
  23. })
  24. }

1-7. 删除取消:

  1. /**
  2. * 删除取消
  3. */
  4. export function onCancel() {
  5. this.$('dialog_lhpv0960').hide();
  6. return;
  7. }

②、新增待办

 

 说明: 这里的唯一键要一直,不然列表显示不出来。

代码:

  1. //新建进行中待办
  2. export function updateTodoList() {
  3. //获取对应组件的输入值
  4. let title = this.$('textField_lhomxns7').getValue() //待办事项
  5. let type = this.$('radioField_lhomxns9').getValue() //分类
  6. let degree = this.$('rateField_lhomxnsb').getValue() //重要度
  7. let time = this.$('dateField_lhpocmef').getValue() //提醒时间
  8. let note = this.$('textareaField_lhpocmeh').getValue() //待办详情
  9. //将要新建的内容转换为json对象
  10. let dataJson = {
  11. "textField_lhomxns7": title,
  12. "radioField_lhomxns9": type,
  13. "rateField_lhomxnsb": degree,
  14. "dateField_lhpocmef": time,
  15. "textareaField_lhpocmeh": note
  16. }
  17. dataJson = JSON.stringify(dataJson)
  18. //构建新建接口所需的json参数对象
  19. let params = {
  20. formUuid: "FORM-XXXXXXXXXXX",
  21. appType: "APP_XXXXXXXXXXX",
  22. formDataJson: dataJson
  23. }
  24. this.dataSourceMap.addInfoForm.load(params).then(res => {
  25. //console.log('2222%', res)
  26. this.$('dialog_lhpv095o').hide();
  27. this.getTodoListData()
  28. this.utils.toast("保存成功")
  29. //window.location.reload();
  30. }).catch(err => {
  31. console.log('#', err) //打印错误,可选
  32. })
  33. }

③、修改

修改给设置默认值:

 

说明:这个默认值实在编辑的时候,打开编辑框,给变量赋值。然后设置。

新增和修改使用的两个接口,所以,需要在复制一个修改窗口:

 特别说明:修改接口的唯一键不能和新增的一样,不然保存会保存,唯一键重复。这里代码可以这样写:

  1. //修改进行中待办表单
  2. export function updateInfoForm(){
  3. let formInstId = state.formInstId
  4. //获取对应组件的输入值
  5. let title = this.$('textField_lhsjdzyy').getValue() //待办事项
  6. let type = this.$('radioField_lhsjdzyz').getValue() //分类
  7. let degree = this.$('rateField_lhsjdzz0').getValue() //重要度
  8. let time = this.$('dateField_lhsjdzz1').getValue() //提醒时间
  9. let note = this.$('textareaField_lhsjdzz2').getValue() //待办详情
  10. //将要新建的内容转换为json对象
  11. let dataJson = {
  12. "textField_lhomxns7": title,
  13. "radioField_lhomxns9": type,
  14. "rateField_lhomxnsb": degree,
  15. "dateField_lhpocmef": time,
  16. "textareaField_lhpocmeh": note
  17. }
  18. dataJson = JSON.stringify(dataJson)
  19. console.log('dataJson%', dataJson)
  20. console.log('formInstId%', formInstId)
  21. //构建新建接口所需的json参数对象
  22. let params = {
  23. formInstId: formInstId,
  24. updateFormDataJson: dataJson
  25. }
  26. this.dataSourceMap.updateInfoForm.load(params).then(res => {
  27. console.log('updateInfoForm111', res)
  28. this.$('dialog_lhsjdzz3').hide();
  29. this.getTodoListData()
  30. this.utils.toast("修改成功")
  31. }).catch(err => {
  32. console.log('#', err) //打印错误,可选
  33. })
  34. }

如图:

1指的是修改窗口的唯一键。2代表列表的唯一键,把1赋值给2,然后调用接口即可实现修改操作。

 

修改改变

  1. //这里无需重新访问接口,只需调用先前的接口,传入勾选行的元组即可,这里是先创建全局变量【hvDoneData】,再将rowData赋值给它,在传入addInfoForm。
  2. /**
  3. * 选择(或取消选择)数据之后的回调
  4. * @param selectedRowKeys Array 选中行的 key
  5. * @param records Array 选中行的数据
  6. */
  7. export function onSelectChange(selectedRowKeys, records) {
  8. // console.log('%%', selectedRowKeys, records[0]);
  9. this.setState({
  10. hvDoneData: records[0]
  11. })
  12. this.updateDoneList(state.hvDoneData)
  13. this.delToDoDataItem(records[0])
  14. }
  15. //更新已完成待办,即在已完成待办表单中新建进行中待办的删除项
  16. export function updateDoneList(data) {
  17. delete data.formInstId
  18. let dataJson = JSON.stringify(data)
  19. let params = {
  20. formUuid: "FORM-UPXXXXXXXX",
  21. appType: "APP_XXXXXXXXXXXX",
  22. formDataJson: dataJson
  23. }
  24. this.dataSourceMap.addInfoForm.load(params).then(res => {
  25. console.log('%', res)
  26. this.getDoneListData()
  27. }).catch(err => {
  28. console.log(err)
  29. })
  30. }

 说明:这里是点击进行中单选按钮后,直接修改状态到已完成列表中。

重要度枚举JS代码

  1. [
  2. {
  3. "color": "grey",
  4. "text": "1",
  5. "value": 1,
  6. "__sid__": "serial_lhzpxn86"
  7. },
  8. {
  9. "color": "blue",
  10. "text": "2",
  11. "value": 2,
  12. "__sid__": "serial_lhzpxn87"
  13. },
  14. {
  15. "color": "yellow",
  16. "text": "3",
  17. "value": 3,
  18. "__sid__": "serial_lhzpxn88"
  19. },
  20. {
  21. "color": "green",
  22. "text": "4",
  23. "value": 4,
  24. "__sid__": "serial_lhzpxn89"
  25. },
  26. {
  27. "color": "red",
  28. "text": "5",
  29. "value": 5,
  30. "__sid__": "serial_lhzpxn8a"
  31. }
  32. ]

整体大致是这样,希望可以帮助到你。

如果有问题,欢迎留言。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/271102?site
推荐阅读
相关标签
  

闽ICP备14008679号