Showing
2 changed files
with
86 additions
and
17 deletions
| 1 | /* | 1 | /* |
| 2 | * @Date: 2022-06-17 14:54:29 | 2 | * @Date: 2022-06-17 14:54:29 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2022-11-17 13:49:35 | 4 | + * @LastEditTime: 2024-06-12 15:06:04 |
| 5 | * @FilePath: /data-table/src/api/data.js | 5 | * @FilePath: /data-table/src/api/data.js |
| 6 | * @Description: 表单数据接口 | 6 | * @Description: 表单数据接口 |
| 7 | */ | 7 | */ |
| ... | @@ -9,6 +9,8 @@ import { fn, fetch } from '@/api/fn'; | ... | @@ -9,6 +9,8 @@ import { fn, fetch } from '@/api/fn'; |
| 9 | 9 | ||
| 10 | const Api = { | 10 | const Api = { |
| 11 | ADD_FORM_DATA: '/srv/?a=add_formdata', | 11 | ADD_FORM_DATA: '/srv/?a=add_formdata', |
| 12 | + QUERY_FORM_DATA: '/srv/?a=query_formdata', | ||
| 13 | + MODI_FORM_DATA: '/srv/?a=modi_formdata', | ||
| 12 | } | 14 | } |
| 13 | /** | 15 | /** |
| 14 | * @description: 添加表单数据 | 16 | * @description: 添加表单数据 |
| ... | @@ -16,3 +18,18 @@ const Api = { | ... | @@ -16,3 +18,18 @@ const Api = { |
| 16 | * @param: data 待添加的数据,json对象结构;键值对记录变更的字段和值; | 18 | * @param: data 待添加的数据,json对象结构;键值对记录变更的字段和值; |
| 17 | */ | 19 | */ |
| 18 | export const addFormDataAPI = (params) => fn(fetch.post(Api.ADD_FORM_DATA, params)); | 20 | export const addFormDataAPI = (params) => fn(fetch.post(Api.ADD_FORM_DATA, params)); |
| 21 | + | ||
| 22 | +/** | ||
| 23 | + * @description: 查询表单数据 | ||
| 24 | + * @param: form_code 表单唯一标识 | ||
| 25 | + * @param: id 数据ID | ||
| 26 | + */ | ||
| 27 | +export const queryFormDataAPI = (params) => fn(fetch.get(Api.QUERY_FORM_DATA, params)); | ||
| 28 | + | ||
| 29 | +/** | ||
| 30 | + * @description: 修改表单数据 | ||
| 31 | + * @param: form_code 表单唯一标识 | ||
| 32 | + * @param: id 数据ID | ||
| 33 | + * @param: data 待添加的数据,json对象结构;键值对记录变更的字段和值; | ||
| 34 | + */ | ||
| 35 | +export const modiFormDataAPI = (params) => fn(fetch.post(Api.MODI_FORM_DATA, params)); | ... | ... |
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2022-07-18 10:22:22 | 2 | * @Date: 2022-07-18 10:22:22 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2024-06-07 15:05:43 | 4 | + * @LastEditTime: 2024-06-14 10:04:24 |
| 5 | * @FilePath: /data-table/src/views/index.vue | 5 | * @FilePath: /data-table/src/views/index.vue |
| 6 | * @Description: 首页 | 6 | * @Description: 首页 |
| 7 | --> | 7 | --> |
| ... | @@ -78,6 +78,10 @@ | ... | @@ -78,6 +78,10 @@ |
| 78 | <div style="text-align: center; color: #545454; font-size: 0.85rem; padding-bottom: 2rem"> | 78 | <div style="text-align: center; color: #545454; font-size: 0.85rem; padding-bottom: 2rem"> |
| 79 | 提交即授权该表单收集你的填写信息 | 79 | 提交即授权该表单收集你的填写信息 |
| 80 | </div> | 80 | </div> |
| 81 | + <div> | ||
| 82 | + <!-- TODO: 签到二维码,待用 --> | ||
| 83 | + <!-- <van-image width="50" height="50" src="https://oa-dev.onwall.cn/admin/?a=get_qrcode&m=srv&key=123'"></van-image> --> | ||
| 84 | + </div> | ||
| 81 | <van-overlay :show="show"> | 85 | <van-overlay :show="show"> |
| 82 | <div class="wrapper"> | 86 | <div class="wrapper"> |
| 83 | <div class="block"> | 87 | <div class="block"> |
| ... | @@ -126,7 +130,7 @@ import { | ... | @@ -126,7 +130,7 @@ import { |
| 126 | } from "@/utils/generatePackage.js"; | 130 | } from "@/utils/generatePackage.js"; |
| 127 | import { useRoute } from "vue-router"; | 131 | import { useRoute } from "vue-router"; |
| 128 | import { queryFormAPI, postVerifyPasswordAPI } from "@/api/form.js"; | 132 | import { queryFormAPI, postVerifyPasswordAPI } from "@/api/form.js"; |
| 129 | -import { addFormDataAPI } from "@/api/data.js"; | 133 | +import { addFormDataAPI, queryFormDataAPI, modiFormDataAPI } from "@/api/data.js"; |
| 130 | import { showSuccessToast, showFailToast } from "vant"; | 134 | import { showSuccessToast, showFailToast } from "vant"; |
| 131 | import { wxInfo, getUrlParams } from "@/utils/tools"; | 135 | import { wxInfo, getUrlParams } from "@/utils/tools"; |
| 132 | import { styleColor } from "@/constant.js"; | 136 | import { styleColor } from "@/constant.js"; |
| ... | @@ -163,6 +167,8 @@ const postData = ref({}); | ... | @@ -163,6 +167,8 @@ const postData = ref({}); |
| 163 | 167 | ||
| 164 | // 编辑模式不能提交操作 | 168 | // 编辑模式不能提交操作 |
| 165 | const model = $route.query.model; | 169 | const model = $route.query.model; |
| 170 | +// 标记表单类型-只读标识 | ||
| 171 | +const form_type = $route.query.type; | ||
| 166 | // 模仿金数据的扩展参数 | 172 | // 模仿金数据的扩展参数 |
| 167 | const x_field_1 = $route.query.x_field_1 ? $route.query.x_field_1 : null; | 173 | const x_field_1 = $route.query.x_field_1 ? $route.query.x_field_1 : null; |
| 168 | // 周期ID标识 | 174 | // 周期ID标识 |
| ... | @@ -440,19 +446,30 @@ onMounted(async () => { | ... | @@ -440,19 +446,30 @@ onMounted(async () => { |
| 440 | // "interaction_type": "h5edit" | 446 | // "interaction_type": "h5edit" |
| 441 | // }) | 447 | // }) |
| 442 | formData.value = formatData(page_form); | 448 | formData.value = formatData(page_form); |
| 443 | - // TODO:再次提交测试, 需要获取原来表单数据 | 449 | + |
| 444 | - formData.value.forEach((item) => { | 450 | + // TAG:获取原来表单数据 |
| 445 | - if (item.key === 'field_32') { | 451 | + // iframe传值openid |
| 446 | - // 不同组件默认值可能获取方式设定不一样,需要检查下 | 452 | + const iframe_openid = getUrlParams(location.href) ? getUrlParams(location.href).openid : ''; |
| 447 | - item.component_props.default = '12345657'; | 453 | + const data_id = $route.query.data_id; |
| 448 | - } | 454 | + if (data_id) { // 如果有data_id,则获取历史数据 否则获取表单默认值 |
| 449 | - }); | 455 | + const history_data = await queryFormDataAPI({ form_code: $route.query.code, data_id, openid: iframe_openid }); |
| 450 | - // TODO: 设置读写权限 read_only read_write | 456 | + if (history_data.code) { |
| 451 | - formData.value.forEach((item) => { | 457 | + let object = history_data.data; // 表单数据 |
| 452 | - if (item.key === 'field_32') { | 458 | + formData.value.forEach((item) => { // 把对应数据赋值到表单 |
| 459 | + for (const key in object) { | ||
| 460 | + const element = object[key]; | ||
| 461 | + if (item.key === key) { | ||
| 462 | + item.component_props.default = element; | ||
| 463 | + // 设置读写权限 read_only read_write | ||
| 464 | + if (form_type === 'readonly') { | ||
| 453 | item.component_props.readonly = true; | 465 | item.component_props.readonly = true; |
| 454 | } | 466 | } |
| 467 | + } | ||
| 468 | + } | ||
| 455 | }); | 469 | }); |
| 470 | + } | ||
| 471 | + } | ||
| 472 | + | ||
| 456 | // TAG: mock数据 | 473 | // TAG: mock数据 |
| 457 | mockData.value = [ | 474 | mockData.value = [ |
| 458 | { | 475 | { |
| ... | @@ -519,9 +536,11 @@ onMounted(async () => { | ... | @@ -519,9 +536,11 @@ onMounted(async () => { |
| 519 | }, | 536 | }, |
| 520 | }, | 537 | }, |
| 521 | ]; | 538 | ]; |
| 539 | + | ||
| 522 | // 生成自定义组件 | 540 | // 生成自定义组件 |
| 523 | // createComponentType(mockData.value); | 541 | // createComponentType(mockData.value); |
| 524 | createComponentType(formData.value); | 542 | createComponentType(formData.value); |
| 543 | + | ||
| 525 | // 过期时间显示 | 544 | // 过期时间显示 |
| 526 | notice_text.value = `表单报名将在 ${formSetting.value.sjsj_end_time} 后结束`; | 545 | notice_text.value = `表单报名将在 ${formSetting.value.sjsj_end_time} 后结束`; |
| 527 | // 判断是否需要关注公众号, 弹出二维码识别 | 546 | // 判断是否需要关注公众号, 弹出二维码识别 |
| ... | @@ -716,7 +735,7 @@ const onActive = (item) => { | ... | @@ -716,7 +735,7 @@ const onActive = (item) => { |
| 716 | } | 735 | } |
| 717 | if (item?.type === "checkbox") { // 多选控件 | 736 | if (item?.type === "checkbox") { // 多选控件 |
| 718 | const checkbox_value = _.cloneDeep(item.value) | 737 | const checkbox_value = _.cloneDeep(item.value) |
| 719 | - checkbox_value.forEach((element, index) => { | 738 | + checkbox_value?.forEach((element, index) => { |
| 720 | for (const key in item.affix) { | 739 | for (const key in item.affix) { |
| 721 | if (item.affix[key] && element === key) { | 740 | if (item.affix[key] && element === key) { |
| 722 | checkbox_value[index] = item.affix[key] | 741 | checkbox_value[index] = item.affix[key] |
| ... | @@ -738,9 +757,9 @@ const validOther = () => { | ... | @@ -738,9 +757,9 @@ const validOther = () => { |
| 738 | if (image_uploader.value) { | 757 | if (image_uploader.value) { |
| 739 | // 图片上传 | 758 | // 图片上传 |
| 740 | image_uploader.value.forEach((item, index) => { | 759 | image_uploader.value.forEach((item, index) => { |
| 741 | - if (!image_uploader.value[index].validImageUploader()) { | 760 | + if (image_uploader.value[index]?.validImageUploader && !image_uploader.value[index]?.validImageUploader()) { |
| 742 | valid = { | 761 | valid = { |
| 743 | - status: image_uploader.value[index].validImageUploader(), | 762 | + status: image_uploader.value[index]?.validImageUploader(), |
| 744 | key: "image_uploader", | 763 | key: "image_uploader", |
| 745 | }; | 764 | }; |
| 746 | return false; | 765 | return false; |
| ... | @@ -750,7 +769,7 @@ const validOther = () => { | ... | @@ -750,7 +769,7 @@ const validOther = () => { |
| 750 | if (file_uploader.value) { | 769 | if (file_uploader.value) { |
| 751 | // 文件上传 | 770 | // 文件上传 |
| 752 | file_uploader.value.forEach((item, index) => { | 771 | file_uploader.value.forEach((item, index) => { |
| 753 | - if (!file_uploader.value[index].validFileUploader()) { | 772 | + if (file_uploader.value[index].validFileUploader && !file_uploader.value[index].validFileUploader()) { |
| 754 | valid = { | 773 | valid = { |
| 755 | status: file_uploader.value[index].validFileUploader(), | 774 | status: file_uploader.value[index].validFileUploader(), |
| 756 | key: "file_uploader", | 775 | key: "file_uploader", |
| ... | @@ -827,6 +846,9 @@ const onSubmit = async (values) => { | ... | @@ -827,6 +846,9 @@ const onSubmit = async (values) => { |
| 827 | submitStatus.value = true; | 846 | submitStatus.value = true; |
| 828 | // iframe传值openid | 847 | // iframe传值openid |
| 829 | const iframe_openid = getUrlParams(location.href) ? getUrlParams(location.href).openid : ''; | 848 | const iframe_openid = getUrlParams(location.href) ? getUrlParams(location.href).openid : ''; |
| 849 | + // | ||
| 850 | + const data_id = getUrlParams(location.href) ? getUrlParams(location.href).data_id : ''; | ||
| 851 | + if (!data_id) { // 正常表单提交 | ||
| 830 | // 通过验证 | 852 | // 通过验证 |
| 831 | const result = await addFormDataAPI({ | 853 | const result = await addFormDataAPI({ |
| 832 | form_code: $route.query.code, | 854 | form_code: $route.query.code, |
| ... | @@ -854,6 +876,36 @@ const onSubmit = async (values) => { | ... | @@ -854,6 +876,36 @@ const onSubmit = async (values) => { |
| 854 | submitStatus.value = false; | 876 | submitStatus.value = false; |
| 855 | } | 877 | } |
| 856 | } else { | 878 | } else { |
| 879 | + // 编辑模式表单提交 | ||
| 880 | + const result = await modiFormDataAPI({ | ||
| 881 | + form_code: $route.query.code, | ||
| 882 | + data: postData.value, | ||
| 883 | + openid: iframe_openid, | ||
| 884 | + data_id | ||
| 885 | + }); | ||
| 886 | + // TODO: 后续流程可能不一致,需要讨论 | ||
| 887 | + if (result.code) { | ||
| 888 | + // 提交按钮禁用状态 | ||
| 889 | + submitStatus.value = false; | ||
| 890 | + // | ||
| 891 | + showSuccessToast("提交成功"); | ||
| 892 | + // 缓存表单返回值 | ||
| 893 | + store.changeSuccessInfo(result.data); | ||
| 894 | + // 如果类型为跳转网页 | ||
| 895 | + if (result.data.commit_action === 'url') { | ||
| 896 | + window.location.href = result.data.commit_url; | ||
| 897 | + } else { | ||
| 898 | + // 跳转成功页面 | ||
| 899 | + $router.push({ | ||
| 900 | + path: "/success", | ||
| 901 | + }); | ||
| 902 | + } | ||
| 903 | + } else { | ||
| 904 | + // 提交按钮禁用状态 | ||
| 905 | + submitStatus.value = false; | ||
| 906 | + } | ||
| 907 | + } | ||
| 908 | + } else { | ||
| 857 | // 提交按钮禁用状态 | 909 | // 提交按钮禁用状态 |
| 858 | submitStatus.value = false; | 910 | submitStatus.value = false; |
| 859 | console.warn(validOther().key + "不通过验证"); | 911 | console.warn(validOther().key + "不通过验证"); | ... | ... |
-
Please register or login to post a comment