diff --git a/.gitignore b/.gitignore index 4c5993c..4328ac1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,53 @@ -/tmp/ -/unpackage/ -/docs/superpowers/specs/design/ -/docs/design/screens/runtime/ -/tmp-g01-icon-audit.png -/node_modules/ -**/node_modules/ -/design-pipeline/generated/ -/docs/design/assets/a01-vnext/candidates/ -/docs/design/assets/a01-vnext/review/ -/.superpowers/ -/runtime/ -**/__pycache__/ -*.py[cod] +###################################################################### +# Build Tools + +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +target/ +!.mvn/wrapper/maven-wrapper.jar + +###################################################################### +# IDE + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### JRebel ### +rebel.xml + +### NetBeans ### +nbproject/private/ +build/* +nbbuild/ +nbdist/ +.nb-gradle/ + +###################################################################### +# Others +*.log +*.log.gz +*.xml.versionsBackup +*.swp + +!*/build/*.java +!*/build/*.html +!*/build/*.xml + +.flattened-pom.xml +/.maven-home/.msp/incrementMark + +robots.txt +sitemap.xml diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..8ae452a --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,9 @@ +{ + "version" : "1.0", + "configurations" : [ + { + "playground" : "standard", + "type" : "uni-app:app-android" + } + ] +} diff --git a/components/ModulePage.vue b/components/ModulePage.vue index 32e02ea..53a8ce1 100644 --- a/components/ModulePage.vue +++ b/components/ModulePage.vue @@ -142,7 +142,7 @@ block :type="moduleState === 'error' ? 'secondary' : 'primary'" :label="stateCopy.action" - @click="moduleState = 'ready'" + @click="handleStateAction" /> @@ -212,9 +212,11 @@ const normalizedNote = computed(() => ); const normalizedSectionCopy = (copy) => String(copy || "").replace(/待接入|功能待接入/g, "后续功能阶段开放"); -const stateCopy = computed( - () => - ({ +const stateCopy = computed(() => { + const pageState = page.value.states?.[moduleState.value]; + if (pageState) return pageState; + return ( + { empty: { eyebrow: "暂无内容", title: `还没有${page.value.title}记录`, @@ -233,8 +235,16 @@ const stateCopy = computed( copy: "请稍后重新进入,现有资料不会受到影响。", action: "重新查看", }, - })[moduleState.value] || {}, -); + }[moduleState.value] || {} + ); +}); +const handleStateAction = () => { + if (stateCopy.value.actionMode === "back") { + uni.navigateBack(); + return; + } + moduleState.value = "ready"; +}; const completeAction = () => { moduleState.value = "success"; }; @@ -308,8 +318,14 @@ onUnmounted(() => { } .form-row { position: relative; - height: 84rpx; + display: grid; + grid-template-columns: auto minmax(0, 1fr); + min-height: 84rpx; + align-items: center; + gap: 22rpx; margin-top: 14rpx; + padding: 14rpx 26rpx; + box-sizing: border-box; } .form-row image, .detail-card image, @@ -320,27 +336,24 @@ onUnmounted(() => { inset: 0; width: 100%; height: 100%; + pointer-events: none; } .form-row > text { - position: absolute; - top: 28rpx; - left: 26rpx; + position: relative; z-index: 1; color: $ink; font-size: 24rpx; font-weight: 700; } .form-row input { - position: absolute; - top: 0; - right: 22rpx; - bottom: 0; - left: 178rpx; + position: relative; z-index: 1; - height: 84rpx; + width: 100%; + min-width: 0; + height: 56rpx; color: $ink; font-size: 23rpx; - line-height: 84rpx; + text-align: right; } .form-placeholder { color: #9e8e79; @@ -448,13 +461,18 @@ onUnmounted(() => { } .settings-row { position: relative; + display: grid; + grid-template-columns: minmax(0, 1fr) auto; min-height: 94rpx; + align-items: center; + gap: 20rpx; margin-top: 14rpx; + padding: 20rpx 28rpx 18rpx 26rpx; + box-sizing: border-box; } .settings-row > view { position: relative; z-index: 1; - padding: 20rpx 98rpx 18rpx 26rpx; } .settings-row > view text:first-child { color: $ink; @@ -467,9 +485,7 @@ onUnmounted(() => { font-size: 21rpx; } .settings-row > text { - position: absolute; - top: 34rpx; - right: 28rpx; + position: relative; z-index: 1; color: $brand-red; font-size: 21rpx; @@ -540,8 +556,8 @@ onUnmounted(() => { padding-right: 20rpx; padding-left: 20rpx; } - .form-row input { - left: 162rpx; + .form-row { + gap: 14rpx; } .status-card__body { padding-right: 44rpx; diff --git a/components/PageHeader.vue b/components/PageHeader.vue index ac02058..49e9762 100644 --- a/components/PageHeader.vue +++ b/components/PageHeader.vue @@ -1,5 +1,6 @@ diff --git a/pages/family/f08-album-detail.vue b/pages/family/f08-album-detail.vue index 00b4946..c3fb013 100644 --- a/pages/family/f08-album-detail.vue +++ b/pages/family/f08-album-detail.vue @@ -1,5 +1,342 @@ - + + + + diff --git a/pages/family/f09-media-upload.vue b/pages/family/f09-media-upload.vue index 648e7a2..8d66db4 100644 --- a/pages/family/f09-media-upload.vue +++ b/pages/family/f09-media-upload.vue @@ -1,5 +1,656 @@ - - + +