hookehuyr

✨ feat: 新增页眉组件配置

...@@ -6,8 +6,21 @@ ...@@ -6,8 +6,21 @@
6 * @Description: 首页 6 * @Description: 首页
7 --> 7 -->
8 <template> 8 <template>
9 - <van-image v-if="table_cover" width="100%" height="200" :src="table_cover" /> 9 + <van-image
10 - <div v-if="table_title" class="table-title">{{ table_title }}</div> 10 + v-if="PHeader.type === '单张图'"
11 + width="100%"
12 + height="200"
13 + :src="PHeader.cover"
14 + />
15 + <template v-if="PHeader.type === '轮播图'">
16 + <van-swipe class="my-swipe" lazy-render indicator-color="white">
17 + <van-swipe-item v-for="image in PHeader.cover" :key="index"
18 + ><img :src="image" style="height: 12rem; width: 100%; object-fit: cover"
19 + /></van-swipe-item>
20 + </van-swipe>
21 + </template>
22 + <div v-if="PHeader.label" class="table-title">{{ PHeader.label }}</div>
23 + <div v-if="PHeader.description" class="table-desc">{{ PHeader.description }}</div>
11 <div class="table-box"> 24 <div class="table-box">
12 <van-form @submit="onSubmit"> 25 <van-form @submit="onSubmit">
13 <van-cell-group> 26 <van-cell-group>
...@@ -37,8 +50,9 @@ import { addFormDataAPI } from "@/api/data.js"; ...@@ -37,8 +50,9 @@ import { addFormDataAPI } from "@/api/data.js";
37 import { showSuccessToast, showFailToast } from "vant"; 50 import { showSuccessToast, showFailToast } from "vant";
38 51
39 const $route = useRoute(); 52 const $route = useRoute();
40 -const table_cover = ref(""); 53 +const PHeader = ref({});
41 -const table_title = ref(""); 54 +const PHeader_cover = ref("");
55 +const PHeader_title = ref("");
42 const mockData = ref([]); 56 const mockData = ref([]);
43 const formData = ref([]); 57 const formData = ref([]);
44 const postData = ref({}); 58 const postData = ref({});
...@@ -76,9 +90,38 @@ const formatData = (data) => { ...@@ -76,9 +90,38 @@ const formatData = (data) => {
76 onMounted(async () => { 90 onMounted(async () => {
77 const { data } = await queryFormAPI({ form_code: $route.query.code }); 91 const { data } = await queryFormAPI({ form_code: $route.query.code });
78 const form_data = data[0]; 92 const form_data = data[0];
79 - table_cover.value = "https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg"; 93 + // 重构数据结构
80 - table_title.value = form_data.name; 94 + let page_header = {};
81 - formData.value = formatData(form_data.field_list); 95 + let page_form = [];
96 + form_data.field_list.forEach((element) => {
97 + if (element.component_code === "page_header") {
98 + // 页眉组件
99 + const list = element.property_list;
100 + list.forEach((ele) => {
101 + page_header[ele["property_code"]] =
102 + ele.setting_value.length > 1 ? ele.setting_value : ele.setting_value[0];
103 + });
104 + } else {
105 + page_form.push(element);
106 + }
107 + });
108 + // TODO: 后期需要适配多种图片展示方式,展示只显示单张图片模式
109 + /** 页眉属性
110 + * @param label 表单标题
111 + * @param banner_type 页眉类型:["文字", "单张图", "轮播图"]
112 + * @param banner_url 页眉图片地址
113 + * @param description 描述内容
114 + * @param invisible 页眉展示
115 + */
116 + if (page_header && page_header.invisible) {
117 + PHeader.value = {
118 + label: page_header.label,
119 + description: page_header.description,
120 + type: page_header.banner_type,
121 + cover: page_header.banner_url,
122 + };
123 + }
124 + formData.value = formatData(page_form);
82 // mockData.value = [ 125 // mockData.value = [
83 // { 126 // {
84 // key: "", 127 // key: "",
...@@ -173,6 +216,13 @@ const validOther = () => { ...@@ -173,6 +216,13 @@ const validOther = () => {
173 <style lang="less" scoped> 216 <style lang="less" scoped>
174 .table-title { 217 .table-title {
175 padding: 1rem; 218 padding: 1rem;
219 + font-size: 1.15rem;
220 + text-align: center;
221 +}
222 +.table-desc {
223 + padding: 0rem 1rem;
224 + color: #666;
225 + font-size: 0.9rem;
176 } 226 }
177 .table-box { 227 .table-box {
178 padding: 1rem; 228 padding: 1rem;
......