hookehuyr

查询表单数据和修改表单数据接口联调

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 + "不通过验证");
......