Explorar el Código

修改细节问题

快乐的梦鱼 hace 1 mes
padre
commit
44f2e1a7b5
Se han modificado 40 ficheros con 155 adiciones y 1354 borrados
  1. 0 4
      src/App.vue
  2. 1 0
      src/common/components/parts/Box2LineImageRightShadow.vue
  3. 3 1
      src/common/components/parts/Box2LineLargeImageUserShadow.vue
  4. 1 1
      src/common/components/parts/ImageSwiper.vue
  5. 0 15
      src/common/scss/define/border-radius.scss
  6. 0 43
      src/common/scss/define/colors.scss
  7. 0 32
      src/common/scss/define/margin-padding.scss
  8. 0 61
      src/common/scss/define/size.scss
  9. 0 42
      src/common/scss/define/wing-height.scss
  10. 0 94
      src/common/scss/global/base.scss
  11. 0 55
      src/common/scss/global/border.scss
  12. 0 17
      src/common/scss/global/color.scss
  13. 0 138
      src/common/scss/global/flex.scss
  14. 0 3
      src/common/scss/global/grid.scss
  15. 0 347
      src/common/scss/global/margin-padding.scss
  16. 0 51
      src/common/scss/global/radius.scss
  17. 0 25
      src/common/scss/global/shadow.scss
  18. 0 80
      src/common/scss/global/size.scss
  19. 0 169
      src/common/scss/global/text.scss
  20. 0 71
      src/common/scss/global/wing-space-height.scss
  21. 0 8
      src/common/style/commonParserStyle.ts
  22. 8 2
      src/components/basic/Image.vue
  23. 9 19
      src/components/basic/Text.vue
  24. 17 0
      src/components/display/block/IconTextBlock.vue
  25. 8 2
      src/components/display/block/ImageBlock2.vue
  26. 25 0
      src/components/display/loading/Loadmore.vue
  27. 22 3
      src/components/dynamic/wrappers/CheckBoxTreeListItem.vue
  28. 4 6
      src/components/form/Uploader.vue
  29. 3 1
      src/components/layout/BaseView.ts
  30. 1 1
      src/components/layout/FlexView.vue
  31. 2 2
      src/components/theme/ThemeDefine.ts
  32. 2 1
      src/components/typography/HorizontalScrollText.vue
  33. 1 1
      src/pages/article/common/CommonListPage.vue
  34. 3 2
      src/pages/article/details.vue
  35. 1 1
      src/pages/dig/admin/data/volunteer.ts
  36. 1 2
      src/pages/dig/admin/preview.vue
  37. 11 26
      src/pages/home/discover/details.vue
  38. 11 17
      src/pages/home/discover/index.vue
  39. 1 1
      src/pages/home/index.vue
  40. 20 10
      src/pages/home/village/details.vue

+ 0 - 4
src/App.vue

@@ -1,7 +1,3 @@
-<style lang="scss">
-	@import "@/common/scss/global/base.scss";
-</style>
-
 <script setup lang="ts">
 import AppConfig, { isTestEnv } from '@/common/config/AppCofig'
 import { onLaunch } from '@dcloudio/uni-app'

+ 1 - 0
src/common/components/parts/Box2LineImageRightShadow.vue

@@ -16,6 +16,7 @@
         :width="wideImage ? 250 : 150"
         :height="150"
         :radius="10"
+        round
         :flexShrink="0"
         :src="image"
         mode="aspectFill"

+ 3 - 1
src/common/components/parts/Box2LineLargeImageUserShadow.vue

@@ -22,7 +22,9 @@
     <Image 
       v-if="image" 
       :height="300" 
+      width="100%"
       :radius="20"
+      round
       :src="image" 
       mode="aspectFill" 
     />
@@ -45,6 +47,7 @@
       {{ title }}
     </Text>
     <FlexRow
+      v-if="badge" 
       position="absolute"
       :top="0"
       :right="0"
@@ -54,7 +57,6 @@
       backgroundColor="background.primary" 
     >
       <Text 
-        v-if="badge" 
         color="primary" 
         fontConfig="subText"
         :lines="1"

+ 1 - 1
src/common/components/parts/ImageSwiper.vue

@@ -20,7 +20,7 @@
       >
         <image
           :src="item"
-          class="w-100 radius-base"
+          :style="{ width: '100%', borderRadius: '20rpx' }"
           mode="aspectFit"
           @click="onPreviewImage(key)"
         />

+ 0 - 15
src/common/scss/define/border-radius.scss

@@ -1,15 +0,0 @@
-$border-radius: (
-  xxxs: 1rpx,
-  xxs: 2rpx,
-  xs: 5rpx,
-  sss: 8rpx,
-  ss: 10rpx,
-  s: 15rpx,
-  base: 20rpx,
-  l: 24rpx,
-  ll: 60rpx,
-  lll: 100rpx,
-  xl: 150rpx,
-  xxl: 200rpx,
-  xxxl: 300rpx,
-);

+ 0 - 43
src/common/scss/define/colors.scss

@@ -1,43 +0,0 @@
-$colors: (
-  primary: #00b66a,
-  text: #333232,
-  text-content: #3d2c08,
-  text-content-second: #817b67, 
-  primary-text: #D9492E,
-  primary-second-text: rgba(217, 73, 46, 0.6),
-  title-text: #432A04,
-  second-text: #e6927e,
-  light-blue: #0059ff,
-  light-primary: #ff871935,
-  light-light-primary: #ff871915,
-  success: #09ad32,
-  warning: #FFD666,
-  error: #ec4545,
-  danger: #e71212,
-  red: #d40f0f,
-	yellow: #ffdf5e,
-	green: #09c338,
-  blue: #0059ff,
-  orange: #f99404,
-  purple: #b810da,
-  dark-purple: #7117a5,
-  brown: #5f1a00,
-  black: #000,
-  white: #fff,
-  base: #f7f8f9,
-  custom: #4A5061,
-  link: #0273F1,
-  light: #fbfaf5,
-  dark: #F1F1F1,
-  muted: #858585,
-  second: #666464,
-  third: #999696,
-  forth: #CCC8C8,
-  place: #ece7da,
-  pure: #fff,
-  mask-white: rgba(255, 255, 255, 0.6),
-  mask-black: rgba(0, 0, 0, 0.6),
-  disabled: #CCC8C8,
-  none: transparent,
-  transparent: transparent,
-);

+ 0 - 32
src/common/scss/define/margin-padding.scss

@@ -1,32 +0,0 @@
-
-$paddings: (
-  none: 0,
-  xxs: 5rpx,
-  xs: 10rpx,
-  sss: 10rpx,
-  ss: 20rpx,
-  s: 30rpx,
-  base: 40rpx,
-  l: 50rpx,
-  ll: 60rpx,
-  lll: 80rpx,
-  xl: 100rpx,
-  xxl: 200rpx,
-  xxxl: 300rpx
-);
-
-$margins: (
-  none: 0,
-  xxs: 5rpx,
-  xs: 10rpx,
-  sss: 10rpx,
-  ss: 20rpx,
-  s: 30rpx,
-  base: 40rpx,
-  l: 50rpx,
-  ll: 60rpx,
-  lll: 80rpx,
-  xl: 100rpx,
-  xxl: 200rpx,
-  xxxl: 300rpx
-);

+ 0 - 61
src/common/scss/define/size.scss

@@ -1,61 +0,0 @@
-
-$font-sizes: (
-  xxxs: 12rpx,
-  xxs: 14rpx,
-  xs: 16rpx,
-  sss: 18rpx,
-  ss: 24rpx,
-  s: 28rpx,
-  base: 30rpx,
-  l: 32rpx,
-  ll: 36rpx,
-  lll: 50rpx,
-  xl: 75rpx,
-  xxl: 100rpx,
-  xxxl: 150rpx,
-);
-
-$image-sizes: (
-  xxs: 14rpx,
-  xs: 16rpx,
-  sss: 18rpx,
-  ss: 24rpx,
-  s: 28rpx,
-  base: 30rpx,
-  l: 35rpx,
-  ll: 40rpx,
-  lll: 50rpx,
-  xl: 75rpx,
-  xxl: 100rpx,
-  xxxl: 150rpx
-);
-
-
-$exact-sizes: (
-	5: 5rpx,
-	10: 10rpx,
-	15: 15rpx,
-	20: 20rpx,
-	25: 25rpx,
-	30: 30rpx,
-	35: 35rpx,
-	40: 40rpx,
-	45: 45rpx,
-	50: 50rpx,
-	60: 60rpx,
-	80: 80rpx,
-	100: 100rpx,
-	150: 150rpx,
-	200: 200rpx,
-	250: 250rpx,
-	300: 300rpx,
-	350: 350rpx,
-	400: 400rpx,
-	450: 450rpx,
-	500: 500rpx,
-	550: 550rpx,
-	600: 600rpx,
-	650: 650rpx,
-	700: 700rpx,
-	750: 750rpx,
-);

+ 0 - 42
src/common/scss/define/wing-height.scss

@@ -1,42 +0,0 @@
-$wings: (
-  none: 0,
-  sss: 6rpx,
-  ss: 12rpx,
-  s: 24rpx,
-  base: 32rpx,
-  l: 36rpx,
-  ll: 40rpx,
-  lll: 80rpx,
-  xl: 100rpx,
-  xxl: 200rpx,
-  xxxl: 300rpx
-);
-
-$heights: (
-  none: 0,
-  xxs: 5rpx,
-  xs: 10rpx,
-  sss: 20rpx,
-  ss: 40rpx,
-  s: 60rpx,
-  base: 80rpx,
-  l: 100rpx,
-  ll: 120rpx,
-  lll: 140rpx,
-  xl: 180rpx,
-  xxl: 240rpx,
-  xxxl: 300rpx
-);
-
-$space: (
-  none: 0,
-  ss: 6rpx,
-  s: 12rpx,
-  base: 16rpx,
-  l: 24rpx,
-  ll: 32rpx,
-  lll: 50rpx,
-  xl: 100rpx,
-  xxl: 200rpx,
-  xxxl: 300rpx
-);

+ 0 - 94
src/common/scss/global/base.scss

@@ -1,94 +0,0 @@
-//基础公共样式
-
-@use './border.scss' as *;
-@use './color.scss' as *;
-@use './flex.scss' as *;
-@use './radius.scss' as *;
-@use './size.scss' as *;
-@use './text.scss' as *;
-@use './shadow.scss' as *;
-@use './wing-space-height.scss' as *;
-@use './margin-padding.scss' as *;
-@use './grid.scss' as *;
-
-.position {
-	&-relative {
-		position: relative;
-	}
-	&-absolute {
-		position: absolute;
-	}
-	&-fixed {
-		position: fixed;
-	}
-	&-sticky {
-		position: sticky;
-	}
-}
-.d {
-	&-flex {
-		display: flex !important;
-	}
-	/* #ifndef APP-VUE */
-	&-none {
-		display: none !important;
-	}
-	&-inline {
-		display: inline !important;
-	}
-	&-inline-block {
-		display: inline-block !important;
-	}
-	&-block {
-		display: block !important;
-	}
-	&-table {
-		display: table !important;
-	}
-	&-table-row {
-		display: table-row !important;
-	}
-	&-table-cell {
-		display: table-cell !important;
-	}
-	&-inline-flex {
-		display: inline-flex !important;
-	}
-	/* #endif */
-}
-
-.background {
-	/* #ifndef APP-NVUE */
-	z-index: 0;
-	/* #endif */
-	
-	&-deep {
-		/* #ifndef APP-NVUE */
-		z-index: -1;
-		/* #endif */
-	}
-}
-
-.overflow {
-	&-hidden {
-		overflow: hidden;
-	}
-	&-scroll {
-		overflow: scroll;
-	}
-	&-auto {
-		overflow: auto;
-	}
-	&-visible {
-		overflow: visible;
-	}
-}
-
-.visible {
-	&-hidden {
-		visibility: hidden;
-	}
-	&-visible {
-		visibility: visible;
-	}
-}

+ 0 - 55
src/common/scss/global/border.scss

@@ -1,55 +0,0 @@
-//边框公共样式
-@use "../define/colors.scss" as *;
-
-$border-width: 1px;
-
-.border {
-	&-all {
-		@each $key, $color in $colors {
-			&-#{''+$key} {
-				border-color: $color;
-				border-width: $border-width;
-				border-style: solid;
-			}
-		}
-	}
-	&-top {
-		@each $key, $color in $colors {
-			&-#{''+$key} {
-				border-top-color: $color;
-				border-top-width: $border-width;
-				border-top-style: solid;
-			}
-		}
-	}
-	&-bottom {
-		@each $key, $color in $colors {
-			&-#{''+$key} {
-				border-bottom-color: $color;
-				border-bottom-width: $border-width;
-				border-bottom-style: solid;
-			}
-		}
-	}
-	&-left {
-		@each $key, $color in $colors {
-			&-#{''+$key} {
-				border-left-color: $color;
-				border-left-width: $border-width;
-				border-left-style: solid;
-			}
-		}
-	}
-	&-right {
-		@each $key, $color in $colors {
-			&-#{''+$key} {
-				border-right-color: $color;
-				border-right-width: $border-width;
-				border-right-style: solid;
-			}
-		}
-	}
-	&-none {
-		border-width: 0;
-	}
-}

+ 0 - 17
src/common/scss/global/color.scss

@@ -1,17 +0,0 @@
-//颜色相关样式
-@use "../define/colors.scss" as *;
-
-.bg {
-	@each $key, $color in $colors {
-		&-#{''+$key} {
-			background-color: $color;
-		}
-	}
-}
-.color {
-	@each $key, $color in $colors {
-		&-#{''+$key} {
-			color: $color;
-		}
-	}
-}

+ 0 - 138
src/common/scss/global/flex.scss

@@ -1,138 +0,0 @@
-//弹性布局相关样式
-
-.flex {
-	&-row {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		box-sizing: border-box;
-		/* #endif */
-		flex-direction: row!important;
-	}
-	&-col {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		box-sizing: border-box;
-		/* #endif */
-		flex-direction: column!important;
-	}
-	&-column {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		box-sizing: border-box;
-		/* #endif */
-		flex-direction: column!important;
-	}
-	&-one {
-		flex: 1;
-	}
-	&-center {
-		justify-content: center;
-		align-items: center;
-	}
-  &-grow-0 {
-    flex-grow: 0 !important;
-  }
-  &-grow-1 {
-    flex-grow: 1 !important;
-  }
-  &-shrink-0 {
-    flex-shrink: 0 !important;
-  }
-  &-shrink-1 {
-    flex-shrink: 1 !important;
-  }
-  &-wrap {
-    flex-wrap: wrap !important;
-
-    &-reverse {
-      flex-wrap: wrap-reverse !important;
-    }
-  }
-  &-nowrap {
-    flex-wrap: nowrap !important;
-  }
-}
-.justify {
-	&-start {
-		justify-content: flex-start;
-	}
-	&-center {
-		justify-content: center;
-	}
-	&-end {
-		justify-content: flex-end;
-	}
-	&-between {
-		justify-content: space-between;
-	}
-	&-around {
-		justify-content: space-around;
-	}
-	&-stretch {
-		justify-content: stretch;
-	}
-}
-.align {
-	&-start {
-		align-items: flex-start;
-	}
-	&-center {
-		align-items: center;
-	}
-	&-end {
-		align-items: flex-end;
-	}
-  &-baseline {
-    align-items: baseline;
-  }
-  &-stretch {
-    align-items: stretch;
-  }
-}
-.full {
-	&-width {
-		/* #ifndef APP-NVUE */
-		width: 100%;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		width: 750rpx;
-		/* #endif */
-	}
-	&-height {
-		flex: 1;
-		/* #ifndef APP-NVUE */
-		height: 100%;
-		/* #endif */
-	}
-	&-page-width {
-		width: 750rpx;
-		/* #ifndef APP-NVUE */
-		width: 750rpx;
-		/* #endif */
-	}
-	&-page-height {
-		flex: 1;
-		/* #ifndef APP-NVUE */
-		height: 100vh;
-		/* #endif */
-	}
-	&-abs {
-		position: absolute;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-	}
-}
-.gap-0 {
-  &-row-0 {
-    row-gap: 0;
-  }
-  &-column-0 {
-    column-gap: 0;
-  }
-  &-0 {
-    gap: 0;
-  }
-}
-

+ 0 - 3
src/common/scss/global/grid.scss

@@ -1,3 +0,0 @@
-.d-grid {
-  display: grid;
-} 

+ 0 - 347
src/common/scss/global/margin-padding.scss

@@ -1,347 +0,0 @@
-@use '../define/margin-padding.scss' as *;
-
-
-$common-level-sizes: (
-  0: 0,
-  1: 0.25rem,
-  2: 0.5rem,
-  25: 0.75rem,
-  3: 1rem,
-  35: 1.25rem,
-  4: 1.5rem,
-  45: 1.75rem,
-  5: 3rem,
-);
-
-.m {
-  &-auto {
-    margin: auto!important;
-  }
-	@each $key, $size in $common-level-sizes {
-    &-#{$key} {
-      margin: $size;
-    }
-  }
-
-  &l {
-    &-auto {
-      margin-left: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        margin-left: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        margin-left: -$size!important;
-      }
-    }
-  }
-  &r {
-    &-auto {
-      margin-right: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        margin-right: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        margin-right: -$size!important;
-      }
-    }
-  }
-  &t {
-    &-auto {
-      margin-top: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        margin-top: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        margin-top: -$size!important;
-      }
-    }
-  }
-  &b {
-    &-auto {
-      margin-bottom: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        margin-bottom: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        margin-bottom: -$size!important;
-      }
-    }
-  }
-  &x {
-    &-auto {
-      margin-left: auto!important;
-      margin-right: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        margin-left: $size!important;
-        margin-right: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        margin-left: -$size!important;
-        margin-right: -$size!important;
-      }
-    }
-  }
-  &y {
-    &-auto {
-      margin-top: auto!important;
-      margin-bottom: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        margin-top: $size!important;
-        margin-bottom: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        margin-top: -$size!important;
-        margin-bottom: -$size!important;
-      }
-    }
-  }
-}
-.p {
-  &-auto {
-    padding: auto!important;
-  }
-	@each $key, $size in $common-level-sizes {
-    &-#{$key} {
-      padding: $size;
-    }
-  }
-
-  &l {
-    &-auto {
-      padding-left: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        padding-left: -$size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        padding-left: -$size!important;
-      }
-    }
-  }
-  &r {
-    &-auto {
-      padding-right: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        padding-right: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        padding-right: -$size!important;
-      }
-    }
-  }
-  &t {
-    &-auto {
-      padding-top: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        padding-top: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        padding-top: -$size!important;
-      }
-    }
-  }
-  &b {
-    &-auto {
-      padding-bottom: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        padding-bottom: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        padding-bottom: -$size!important;
-      }
-    }
-  }
-  &x {
-    &-auto {
-      padding-left: auto!important;
-      padding-right: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        padding-left: $size!important;
-        padding-right: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        padding-left: -$size!important;
-        padding-right: -$size!important;
-      }
-    }
-  }
-  &y {
-    &-auto {
-      padding-top: auto!important;
-      padding-bottom: auto!important;
-    }
-    @each $key, $size in $common-level-sizes {
-      &-#{$key} {
-        padding-top: $size!important;
-        padding-bottom: $size!important;
-      }
-    }
-    @each $key, $size in $common-level-sizes {
-      &-n#{$key} {
-        padding-top: -$size!important;
-        padding-bottom: -$size!important;
-      }
-    }
-  }
-}
-
-.h-100vh {
-  height: 100vh;
-}
-.h-0 {
-  height: 0;
-}
-.l-0 {
-  left: 0;
-}
-.r-0 {
-  right: 0;
-}
-.t-0 {
-  top: 0;
-}
-.b-0 {
-  bottom: 0;
-}
-
-.margin {
-	&-all {	
-		@each $key, $size in $margins {
-			&-#{$key} {
-				margin: $size;
-			}
-		}
-	}
-	&-top {	
-		@each $key, $size in $margins {
-			&-#{$key} {
-				margin-top: $size;
-			}
-		}
-	}
-	&-bottom {
-		@each $key, $size in $margins {
-			&-#{$key} {
-				margin-bottom: $size;
-			}
-		}
-	}
-	&-left {
-		@each $key, $size in $margins {
-			&-#{$key} {
-				margin-left: $size;
-			}
-		}
-	}
-	&-right {
-		@each $key, $size in $margins {
-			&-#{$key} {
-				margin-right: $size;
-			}
-		}
-	}
-	&-none {
-		margin: 0;
-
-		&-left-right {
-			margin-left: 0;
-			margin-right: 0;
-		}
-		&-top-bottom {
-			margin-top: 0;
-			margin-bottom: 0;
-		}
-	}
-}
-.padding {
-	&-all {	
-		@each $key, $size in $paddings {
-			&-#{$key} {
-				padding: $size;
-			}
-		}
-	}
-	&-top {
-		@each $key, $size in $paddings {
-			&-#{$key} {
-				padding-top: $size;
-			}
-		}
-	}
-	&-bottom {
-		@each $key, $size in $paddings {
-			&-#{$key} {
-				padding-bottom: $size;
-			}
-		}
-	}
-	&-left {
-		@each $key, $size in $paddings {
-			&-#{$key} {
-				padding-left: $size;
-			}
-		}
-	}
-	&-right {
-		@each $key, $size in $paddings {
-			&-#{$key} {
-				padding-right: $size;
-			}
-		}
-	}
-	&-none {
-		padding: 0;
-
-		&-left-right {
-			padding-left: 0;
-			padding-right: 0;
-		}
-		&-top-bottom {
-			padding-top: 0;
-			padding-bottom: 0;
-		}
-	}
-}

+ 0 - 51
src/common/scss/global/radius.scss

@@ -1,51 +0,0 @@
-//圆角相关样式
-@use "../define/border-radius.scss" as *;
-
-.radius {
-  &-round {
-    border-radius: 50%;
-  }
-	&-none {
-		border-radius: 0;
-
-		&-bottom {
-			border-bottom-left-radius: 0;
-			border-bottom-right-radius: 0;
-		}
-		&-top {
-			border-top-left-radius: 0;
-			border-top-right-radius: 0;
-		}
-		&-left {
-			border-bottom-left-radius: 0;
-			border-top-left-radius: 0;
-		}
-		&-right {
-			border-bottom-right-radius: 0;
-			border-top-right-radius: 0;
-		}
-		
-	}
-	@each $key, $size in $border-radius {
-		&-#{''+$key} {
-			border-radius: $size;
-
-			&-bottom {
-				border-bottom-left-radius: $size;
-				border-bottom-right-radius: $size;
-			}
-			&-top {
-				border-top-left-radius: $size;
-				border-top-right-radius: $size;
-			}
-			&-left {
-				border-bottom-left-radius: $size;
-				border-top-left-radius: $size;
-			}
-			&-right {
-				border-bottom-right-radius: $size;
-				border-top-right-radius: $size;
-			}
-		}
-	}
-}

+ 0 - 25
src/common/scss/global/shadow.scss

@@ -1,25 +0,0 @@
-
-
-.shadow-sm {
-  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.055) !important;
-}
-
-.shadow-s {
-  box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.055) !important;
-}
-
-.shadow {
-  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.075) !important;
-}
-
-.shadow-l {
-  box-shadow: 0 0.75rem 2rem rgba(0, 0, 0, 0.100) !important;
-}
-
-.shadow-lg {
-  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.150) !important;
-}
-
-.shadow-none {
-  box-shadow: none !important;
-}

+ 0 - 80
src/common/scss/global/size.scss

@@ -1,80 +0,0 @@
-//宽高, 大小相关样式
-@use "sass:math";
-@use "sass:list";
-
-@use "../define/size.scss" as *;
-
-$full-width: 750rpx;
-
-.height {
-	//数字形式 : height-100 表示100rpx; height-5 表示5rpx,等等
-	@each $key, $w in $exact-sizes {
-		&-#{''+$key} {
-			height: $w;
-		}
-	}
-}
-.width {
-	&-auto {
-		width: auto;
-	}
-	&-full {
-		width: $full-width;
-	}
-	&-half {
-		width: $full-width*0.5;
-	}
-	&-one-third {
-		width: math.div($full-width, 3);
-	}
-	&-one-fourth {
-		width: $full-width*0.25;
-	}
-	&-one-fifth {
-		width: $full-width*0.2;
-	}
-	&-one-sixth {
-		width: math.div($full-width, 6);
-	}
-	&-one-eighth {
-		width: $full-width*0.125;
-	}
-	&-one-tenth {
-		width: $full-width*0.1;
-	}
-	
-	//数字形式: width-1-2 表示 二分之一; width-4-9 表示 9分之4,等等
-	@for $i from 2 to 10 {
-		&-1-#{$i} {
-			width: math.percentage(math.div(1, $i));
-		}
-		
-		@for $j from 2 to $i {
-			&-#{$j}-#{$i} {
-				width: $full-width*math.div($j, $i);
-			}
-		}
-	}
-	
-	//数字形式 2: width-100 表示100rpx; width-5 表示5rpx,等等
-	@each $key, $w in $exact-sizes {
-		&-#{''+$key} {
-			width: $w;
-		}
-	}
-}
-.size {
-	@each $key, $size in $font-sizes {
-		&-#{''+$key} {
-			font-size: $size;
-		}
-	}
-}
-.image-size {
-	@each $key, $size in $image-sizes {
-		&-#{''+$key} {
-			width: $size;
-			height: $size;
-		}
-	}
-}

+ 0 - 169
src/common/scss/global/text.scss

@@ -1,169 +0,0 @@
-//文字相关样式
-
-.text-shadow {
-	/* #ifndef APP-NVUE */
-	text-shadow: 1px 1px 3px rgba(0,0,0,0.3);
-	
-	&-deep {
-		text-shadow: 1px 1px 5px rgba(0,0,0,0.5);
-	}
-	/* #endif */
-}
-.text-indent {
-	/* #ifndef APP-NVUE */
-	text-indent: 2em;
-	
-	&-1 {
-		text-indent: 1em;
-	}	
-	&-2 {
-		text-indent: 2em;
-	}
-	&-3 {
-		text-indent: 3em;
-	}
-	&-3 {
-		text-indent: 3em;
-	}
-	&-none {
-		text-indent: 0;
-	}
-	/* #endif */
-}
-.text-overflow {
-	&-ellipsis {
-		text-overflow: ellipsis;
-	}
-}
-.text-italic {
-	font-style: italic;
-}
-.text-bold {
-	font-weight: 700 !important;
-}
-.text-bolder {
-	font-weight: bolder !important;
-}
-.text-light {
-	font-weight: 300 !important;
-}
-.text-lowercase {
-  text-transform: lowercase !important;
-}
-
-.text-uppercase {
-  text-transform: uppercase !important;
-}
-
-.text-capitalize {
-  text-transform: capitalize !important;
-}
-
-.text-left {
-  text-align: left !important;
-}
-
-.text-right {
-  text-align: right !important;
-}
-
-.text-center {
-  text-align: center !important;
-}
-.text-lines {
-	&-1 {
-		lines: 1;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		/* #ifndef APP-NVUE */
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 1;
-    line-clamp: 1;
-		/* #endif */
-	}
-	&-2 {
-		overflow: hidden;
-		/* #ifdef APP-NVUE */
-		lines: 2;
-		text-overflow: ellipsis;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 2;
-    line-clamp: 2;
-		/* #endif */
-	}
-	&-3 {
-		overflow: hidden;
-		/* #ifdef APP-NVUE */
-		lines: 3;
-		text-overflow: ellipsis;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 3;
-    line-clamp: 3;
-		/* #endif */
-	}
-	&-4 {
-		overflow: hidden;
-		/* #ifdef APP-NVUE */
-		lines: 4;
-		text-overflow: ellipsis;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 4;
-		/* #endif */
-	}
-	&-5 {
-		overflow: hidden;
-		/* #ifdef APP-NVUE */
-		lines: 5;
-		text-overflow: ellipsis;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 5;
-		/* #endif */
-	}
-	&-6 {
-		overflow: hidden;
-		/* #ifdef APP-NVUE */
-		lines: 6;
-		text-overflow: ellipsis;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 6;
-		/* #endif */
-	}
-}
-.text {
-	&-none-decoration {
-		text-decoration: none;	
-	}
-	&-underline {
-		text-decoration: underline;	
-	}
-	&-line-through {
-		text-decoration: line-through;
-	}
-}
-.text-align {
-	&-left {
-		text-align: left;	
-	}
-	&-center {
-		text-align: center;	
-	}
-	&-right {
-		text-align: right;
-	}
-}

+ 0 - 71
src/common/scss/global/wing-space-height.scss

@@ -1,71 +0,0 @@
-//高度,两翼,空格相关样式
-@use "../define/wing-height.scss" as *;
-
-.height {
-	@each $key, $size in $heights {
-		&-#{''+$key} {
-			height: $size;
-		}
-	}
-}
-.gap {
-	@each $key, $size in $heights {
-		&-#{''+$key} {
-			gap: $size;
-		}
-	}
-}
-.row-gap {
-	@each $key, $size in $heights {
-		&-#{''+$key} {
-			row-gap: $size;
-		}
-	}
-}
-.column-gap {
-	@each $key, $size in $heights {
-		&-#{''+$key} {
-			column-gap: $size;
-		}
-	}
-}
-
-.wing {
-	@each $key, $size in $wings {
-		&-#{''+$key} {	
-			margin-left: $size;
-			margin-right: $size;
-		}
-	}
-}
-.padding-wing {
-	@each $key, $size in $wings {
-		&-#{''+$key} {	
-			padding-left: $size;
-			padding-right: $size;
-		}
-	}
-}
-.space {
-	@each $key, $size in $space {
-		&-#{''+$key} {	
-			margin-top: $size;
-			margin-bottom: $size;
-		}
-	}
-}
-
-.h {
-  @for $i from 0 through 20 {
-    &-#{$i * 5} { 
-      height: $i * 5%;
-    }
-  }
-}
-.w {
-  @for $i from 0 through 20 {
-    &-#{$i * 5} { 
-      width: $i * 5%;
-    }
-  }
-}

+ 0 - 8
src/common/style/commonParserStyle.ts

@@ -1,8 +0,0 @@
-export default {
-  p: 'line-height:1.76;font-size:30rpx;margin-bottom:37rpx;color:#111111;text-align:justify;',
-  div: 'line-height:1.76;font-size:30rpx;margin-bottom:37rpx;color:#111111;text-align:justify;',
-  img: 'display:block;max-width:100%;height:auto;margin-bottom:30rpx;',
-  h2:'margin-bottom:30rpx;font-size:32rpx;line-height:1.7;',
-  h1:'margin-bottom:30rpx;font-size:36rpx;line-height:1.7;',
-  h3:'margin-bottom:30rpx;font-size:30rpx;line-height:1.7;',
-} as Record<string, string>;

+ 8 - 2
src/components/basic/Image.vue

@@ -8,8 +8,8 @@
   >
     <image 
       :style="{
-        width: style.width,
-        height: style.height,
+        width: precentOrFull(style.width),
+        height: precentOrFull(style.height),
       }"
       :mode="($attrs.mode as any)"
       :lazyLoad="$attrs.lazyLoad"
@@ -175,6 +175,12 @@ function measureImage() {
     }).exec();
 }
 
+function precentOrFull(size: string|number) {
+  if (!size || typeof size === 'number')
+    return size;
+  return size.endsWith('%') ? '100%' : size;
+}
+
 watch(() => props.src, (newVal, oldVal) => {
   if (!newVal && !props.defaultImage) {
     isErrorState.value = true;

+ 9 - 19
src/components/basic/Text.vue

@@ -169,29 +169,19 @@ function onClick(e: any) {
 const style = computed(() => {
   const o : Record<string, any> = {
   }
-  let color = props.color;
-  let backgroundColor = props.backgroundColor;
-  let fontSize = props.fontSize;
-  let fontWeight = props.fontWeight;
-  let fontFamily = props.fontFamily;
-  let fontStyle = props.fontStyle as any;
-  if (props.fontConfig) {
-    const style = getText(props.fontConfig, {});
-    color = props.color ?? style.color as string;
-    backgroundColor = props.backgroundColor ?? style.backgroundColor as string;
-    fontSize = props.fontSize ?? style.fontSize as string;
-    fontWeight = props.fontWeight ?? style.fontWeight as string;
-    fontFamily = props.fontFamily ?? style.fontFamily as string;
-    fontStyle = props.fontStyle ?? style.fontStyle as object;
-  }
+  const style = props.fontConfig ? getText(props.fontConfig) : undefined;
+  const color = props.color ?? style?.color as string;
+  const backgroundColor = props.backgroundColor ?? style?.backgroundColor as string;
+  const fontSize = props.fontSize ?? style?.fontSize as string;
+  const fontWeight = props.fontWeight ?? style?.fontWeight as string;
+  const fontFamily = props.fontFamily ?? style?.fontFamily as string;
+  const fontStyle = props.fontStyle ?? style?.fontStyle as string;
+
   if (color) o.color = resolveThemeColor(color, "text");
   if (backgroundColor) o.background = resolveThemeColor(backgroundColor);
   if (fontSize) o.fontSize = resolveThemeSize(fontSize);
   if (fontWeight) o.fontWeight = fontWeight;
-  if (fontStyle) {
-    for(const k in fontStyle)
-      o.fontStyle = k;
-  }
+  if (fontStyle) o.fontStyle = fontStyle;
   if (!props.wrap) o.whiteSpace = 'nowrap';
 
   if (fontFamily) o.fontFamily = fontFamily;

+ 17 - 0
src/components/display/block/IconTextBlock.vue

@@ -53,6 +53,10 @@ defineProps({
     type: [String,Number],
     default: '',
   },
+  extraMpSlotState: {
+    type: Boolean,
+    default: true,
+  },
   /**
    * 标题文字属性
    */
@@ -89,10 +93,23 @@ defineProps({
         <Text fontConfig="subText" :text="desc" v-bind="descProps" />
       </FlexCol>
     </FlexRow>
+    <!-- #ifndef MP -->
     <slot name="extra">
       <FlexRow :flexShrink="0">
         <Text fontConfig="subText" :text="extra" v-bind="extraProps" />
       </FlexRow>
     </slot>
+    <!-- #endif -->
+    <!-- #ifdef MP -->
+    <slot v-if="extraMpSlotState" name="extra">
+      <FlexRow :flexShrink="0">
+        <Text fontConfig="subText" :text="extra" v-bind="extraProps" />
+      </FlexRow>
+    </slot>
+    <FlexRow v-else :flexShrink="0">
+      <Text fontConfig="subText" :text="extra" v-bind="extraProps" />
+    </FlexRow>
+    <!-- #endif -->
+
   </FlexRow>
 </template>

+ 8 - 2
src/components/display/block/ImageBlock2.vue

@@ -3,7 +3,7 @@
     touchable
     v-bind="props"
     :flexShrink="0"
-    :innerStyle="{ borderRadius: theme.resolveThemeSize(imageRadius), overflow: 'hidden', }"
+    :innerStyle="{ borderRadius: theme.resolveThemeSize(radius), overflow: 'hidden', }"
     :width="width"
     @click="$emit('click')"
   >
@@ -12,6 +12,7 @@
       width="100%"
       :height="imageHeight"
       :radius="imageRadius"
+      :round="Boolean(imageRadius)"
       mode="aspectFill"
     />
     <slot name="desc">
@@ -20,7 +21,12 @@
           :title="title"
           :desc="desc"
           :extra="extra"
-        />
+          :extraMpSlotState="Boolean($slots.extra)"
+        >
+          <template v-if="$slots.extra" #extra>
+            <slot name="extra" />
+          </template>
+        </IconTextBlock>
       </FlexCol>
     </slot>
   </Touchable>

+ 25 - 0
src/components/display/loading/Loadmore.vue

@@ -1,5 +1,6 @@
 <script setup lang="ts">
 import ActivityIndicator from '@/components/basic/ActivityIndicator.vue';
+import Button from '@/components/basic/Button.vue';
 import Text from '@/components/basic/Text.vue';
 import FlexRow from '@/components/layout/FlexRow.vue';
 import type { FlexProps } from '@/components/layout/FlexView.vue';
@@ -39,6 +40,16 @@ export interface LoadMoreProps extends FlexProps {
    * @default '点击加载更多'
    */ 
   loadmoreText?: string,
+  /**
+   * 重试按钮文字
+   * @default '重试'
+   */
+  retryText?: string,
+  /**
+   * 是否显示重试按钮
+   * @default true
+   */
+  showRetry?: boolean,
 }
 
 const props = withDefaults(defineProps<LoadMoreProps>(), {
@@ -47,7 +58,12 @@ const props = withDefaults(defineProps<LoadMoreProps>(), {
   errorText: '加载失败',
   nomoreText: '没有更多了',
   loadmoreText: '点击加载更多',
+  retryText: '重试',
+  showRetry: true,
 });
+const emit = defineEmits<{
+  (e: 'retry'): void;
+}>();
 
 const themeContext = useTheme();
 
@@ -76,5 +92,14 @@ const text = computed(() => {
       <Width :size="20" />
     </template>
     <Text :text="text" fontConfig="subText" />
+    <template v-if="props.showRetry && props.status === 'error'">
+      <Width :size="20" />
+      <Button
+        type="text"
+        textColor="primary"
+        :text="props.retryText"
+        @click="emit('retry')"
+      />
+    </template>
   </FlexRow>
 </template>

+ 22 - 3
src/components/dynamic/wrappers/CheckBoxTreeListItem.vue

@@ -17,6 +17,12 @@
     </FlexRow>
     <CollapseBox :open="open" :anim="false">
       <FlexCol :padding="[10,0,10,30]">
+        <Loadmore 
+          v-if="loading || loadError"
+          :status="loading ? 'loading' : 'error'"
+          :errorText="loadError"
+          @retry="loadChildren"
+        />
         <CheckBoxTreeListItemWrapper
           v-for="child in item.children"
           :key="child.value"
@@ -36,20 +42,33 @@ import FlexCol from '@/components/layout/FlexCol.vue';
 import FlexRow from '@/components/layout/FlexRow.vue';
 import IconButton from '@/components/basic/IconButton.vue';
 import CheckBoxTreeListItemWrapper from './CheckBoxTreeListItemWrapper.vue';
+import Loadmore from '@/components/display/loading/Loadmore.vue';
 
 const props = defineProps<{
   item: CheckBoxTreeListItem,
 }>();
 
 const open = ref(false);
+const loading = ref(false);
+const loadError = ref('');
 const loadData = inject('loadData') as (pid?: number) => Promise<CheckBoxTreeListItem[]>;
 
 function toggleOpen() {
   open.value = !open.value;
   if (open.value && (!props.item.children || props.item.children.length === 0))
-    loadData(props.item.value).then((children) => {
-      props.item.children = children;
-    });
+    loadChildren();
+}
+function loadChildren() {
+  loading.value = true;
+  loadData(props.item.value).then((children) => {
+    props.item.children = children;
+    loadError.value = '';
+  }).catch((err) => {
+    props.item.children = [];
+    loadError.value = '' + err;
+  }).finally(() => {
+    loading.value = false;
+  });
 }
 </script>
 

+ 4 - 6
src/components/form/Uploader.vue

@@ -52,7 +52,7 @@
           </slot>
           <!-- #endif -->
         </template>
-        <slot v-if="currentUpladList.length < maxUploadCount && !disabled" name="addButton" :onUploadPress="onUploadPress" :itemSize="itemSize">
+        <slot v-if="currentUpladList.length < maxUploadCount && !disabled && !readonly" name="addButton" :onUploadPress="onUploadPress" :itemSize="itemSize">
           <UploaderListAddItem :itemSize="itemSize" :style="itemStyle" @click="onUploadPress" :isListStyle="props.listType === 'list'" />
         </slot>
         <slot v-if="readonly && currentUpladList.length === 0">
@@ -292,16 +292,14 @@ const currentUpladList = ref<UploaderItem[]>(props.intitalItems?.concat() || [])
 
 //上传按钮点击
 function onUploadPress() {
-  if (props.disabled) {
+  if (props.disabled || props.readonly)
     return;
-  }
   if (props.maxUploadCount > 1 && props.maxUploadCount - currentUpladList.value.length <= 0) {
     props.onOverCount ?
       props.onOverCount(props.maxUploadCount, currentUpladList.value.length) :
       toast.value?.text(`最多上传 ${props.maxUploadCount} 个文件哦!`);
     return;
   }
-
   const items = props.onPickImage ?
     props.onPickImage() :
     new Promise<UploaderItem[]>((resolve, reject) => {
@@ -336,9 +334,10 @@ function onUploadPress() {
             },
             {
               name: '从微信聊天中选择',
-              subname: '可在录音机或者WPS文档分享给文件传输助手\n然后选择任意文档文件',
+              subname: '可在录音机或者WPS文档分享给文件传输助手\n然后选择任意文档/文件',
             },
           ],
+          showCancel: true,
           onSelect(index, name) {
           },
         }).then((index) => {
@@ -359,7 +358,6 @@ function onUploadPress() {
             });
           }
         });
-
       } else {
         chooseLocal();
       }

+ 3 - 1
src/components/layout/BaseView.ts

@@ -22,7 +22,9 @@ export function useBaseViewStyleBuilder(props: FlexProps) {
       backgroundColor: themeContext.resolveThemeColor(props.backgroundColor),
       width: themeContext.resolveThemeSize(props.width),
       height: themeContext.resolveThemeSize(props.height),
-      gap: themeContext.resolveThemeSize(props.gap),
+      gap: !Array.isArray(props.gap) ? themeContext.resolveThemeSize(props.gap) : props.gap,
+      rowGap: Array.isArray(props.gap) ? themeContext.resolveSize(props.gap[0]) : undefined,
+      columnGap: Array.isArray(props.gap) ? themeContext.resolveSize(props.gap[1]) : undefined,
       borderRadius: themeContext.resolveThemeSize(props.radius),
       overflow: props.overflow,
       border: props.border && !props.border.includes(' ') ? themeContext.getVar('border.' + props.border, undefined) : props.border,

+ 1 - 1
src/components/layout/FlexView.vue

@@ -105,7 +105,7 @@ export interface FlexProps {
   /**
    * 间距
    */
-  gap?: number|string,
+  gap?: number|number[]|string,
   /**
    * 背景颜色
    */

+ 2 - 2
src/components/theme/ThemeDefine.ts

@@ -164,10 +164,10 @@ export function useTheme() {
       v = theme.value.varOverrides[key];
     return resolveSize(v ?? defaultValue);
   }
-  function getText(key: string, defaultValue: Record<string, string>) {
+  function getText(key: string, defaultValue?: Record<string, string>) {
     return theme.value.textConfigs[key]?? defaultValue;
   }
-  function getVar<T>(key: string, defaultValue: T) : T {
+  function getVar<T>(key: string, defaultValue?: T) : T {
     let rs = undefined;
     let type = '';
     if (key.includes('.'))

+ 2 - 1
src/components/typography/HorizontalScrollText.vue

@@ -8,7 +8,7 @@
         center: 'center',
         left: 'flex-start',
         right: 'flex-end',
-        '': '',
+        '': undefined,
       }),
     }"
   >
@@ -114,6 +114,7 @@ defineOptions({
   white-space: nowrap;
   display: flex;
   flex-direction: row;
+  align-items: center;
 
   .placeholder {
     visibility: hidden;

+ 1 - 1
src/pages/article/common/CommonListPage.vue

@@ -39,7 +39,7 @@
         <Text bold color="primary" :text="`总共有 ${ listLoader.total.value } 个`" />
       </FlexRow>
     </FlexRow>
-    <FlexRow v-if="(dropDownVisibleCount >= 3 || dropDownVisibleCount == 0)" center :padding="20">
+    <FlexRow v-if="(dropDownVisibleCount >= 3 || dropDownVisibleCount == 0 && showTotal)" center :padding="20">
       <Text bold color="primary" :text="`总共有 ${ listLoader.total.value } 个`" />
     </FlexRow>
     

+ 3 - 2
src/pages/article/details.vue

@@ -42,7 +42,6 @@
             <Parse
               v-if="loader.content.value.content"
               :content="loader.content.value.content"
-              :tagStyle="commonParserStyle"
             />
             <Text v-if="emptyContent" fontConfig="subText">暂无简介</Text>
           </FlexCol>
@@ -62,6 +61,9 @@
               @click="goDetails(item.id)"
             />
           </FlexCol>
+
+          <!-- 广告 -->
+          <ad />
         </FlexCol>
       </template>
     </SimplePageContentLoader>
@@ -78,7 +80,6 @@ import { navTo } from "@/components/utils/PageAction";
 import { onShareTimeline, onShareAppMessage } from "@dcloudio/uni-app";
 import { DataDateUtils } from "@imengyu/js-request-transform";
 import type { GetContentDetailItem } from "@/api/CommonContent";
-import commonParserStyle from "@/common/style/commonParserStyle";
 import SimplePageContentLoader from "@/common/components/SimplePageContentLoader.vue";
 import Parse from "@/components/display/parse/Parse.vue";
 import CommonContent, { GetContentListParams } from "@/api/CommonContent";

+ 1 - 1
src/pages/dig/admin/data/volunteer.ts

@@ -127,7 +127,7 @@ export function getVolunteerForm(options: {
               placeholder: '请选择采集版块',
               vertical: true,
               multiple: true,
-              loadData: async (pid) => (await VillageApi.getCatalogList(options.villageId, pid)).map((p) => ({
+              loadData: async (pid) => (await VillageApi.getCatalogList(options.villageId, undefined, pid)).map((p) => ({
                 text: p.title,
                 value: p.id,
                 hasChildren: p.haschild,

+ 1 - 2
src/pages/dig/admin/preview.vue

@@ -24,7 +24,7 @@
         ]"
       />
       <FlexCol :margin="[20, 0, 0, 0]">
-        <Parse :content="overviewLoader.content.value.overview" :tagStyle="commonParserStyle" />
+        <Parse :content="overviewLoader.content.value.overview" />
         <Text v-if="!overviewLoader.content.value.overview" fontConfig="subText">暂无采编简内容</Text>
       </FlexCol>
     </FlexCol>
@@ -75,7 +75,6 @@ import SubTitle from '@/components/display/title/SubTitle.vue';
 import IntroBlock from '@/pages/article/common/IntroBlock.vue';
 import Parse from '@/components/display/parse/Parse.vue';
 import Text from '@/components/basic/Text.vue';
-import commonParserStyle from '@/common/style/commonParserStyle';
 import ImagesUrls from '@/common/config/ImagesUrls';
 
 const { querys } = useLoadQuerys({ 

+ 11 - 26
src/pages/home/discover/details.vue

@@ -39,32 +39,20 @@
               <Text color="text.second" :size="28">{{ DataDateUtils.formatDate(loader.content.value.publishAt, 'YYYY-MM-dd') }}</Text>
             </FlexRow>
           </FlexCol>
-          <Touchable 
-            direction="row" align="center"
-            justify="space-between" :margin="30" 
-            backgroundColor="white" :radius="20"
-          >
-            <FlexRow :padding="20" :gap="20" align="center">
-              <Image
-                :src="loader.content.value.image"
-                :failedImage="AppCofig.defaultImage"
-                :defaultImage="AppCofig.defaultImage"
-                width="80"
-                height="80"
-                radius="10"
-                mode="aspectFill"
-              />
-              <FlexCol >
-                <Text bold>{{ loader.content.value.villageName }}</Text>
-              </FlexCol>
-            </FlexRow>
-            <Icon icon="arrow-right" />
-          </Touchable>
+          <FlexCol :padding="[0,30,30,30]">
+            <ImageBlock3
+              :src="loader.content.value.image"
+              :imageWidth="100"
+              :imageHeight="100"
+              :radius="20"
+              :title="loader.content.value.villageName"
+              :desc="`${loader.content.value.villageProvince}${loader.content.value.villageCity}`"
+            />
+          </FlexCol>
           <FlexCol :padding="30">
             <Parse
               v-if="loader.content.value.content"
               :content="loader.content.value.content"
-              :tagStyle="commonParserStyle"
             />
             <Text v-if="emptyContent">暂无简介</Text>
           </FlexCol>
@@ -73,7 +61,6 @@
           <FlexCol v-if="recommendListLoader.content.value?.length" :padding="30">
             <H5>相关推荐</H5>
             <Box2LineImageRightShadow
-              class="w-100"
               titleColor="title-text"
               v-for="item in recommendListLoader.content.value"
               :key="item.id"
@@ -100,13 +87,11 @@ import { useLoadQuerys } from "@/common/composeabe/LoadQuerys";
 import { navTo } from "@/components/utils/PageAction";
 import { onShareTimeline, onShareAppMessage } from "@dcloudio/uni-app";
 import { DataDateUtils } from "@imengyu/js-request-transform";
-import commonParserStyle from "@/common/style/commonParserStyle";
 import SimplePageContentLoader from "@/common/components/SimplePageContentLoader.vue";
 import Parse from "@/components/display/parse/Parse.vue";
 import Box2LineImageRightShadow from "@/common/components/parts/Box2LineImageRightShadow.vue";
 import AppCofig from "@/common/config/AppCofig";
 import VillageInfoApi from "@/api/inhert/VillageInfoApi";
-import Tag from "@/components/display/Tag.vue";
 import FlexRow from "@/components/layout/FlexRow.vue";
 import FlexCol from "@/components/layout/FlexCol.vue";
 import Icon from "@/components/basic/Icon.vue";
@@ -114,7 +99,7 @@ import Image from "@/components/basic/Image.vue";
 import Text from "@/components/basic/Text.vue";
 import H5 from "@/components/typography/H5.vue";
 import H3 from "@/components/typography/H3.vue";
-import Touchable from "@/components/feedback/Touchable.vue";
+import ImageBlock3 from "@/components/display/block/ImageBlock3.vue";
 
 const { onPreviewImage } = useSwiperImagePreview(() => loader.content.value?.images || []);
 const emptyContent = computed(() => (loader.content.value?.content || '').trim() === '');

+ 11 - 17
src/pages/home/discover/index.vue

@@ -21,28 +21,21 @@
     <Box title="最新推荐" icon="/static/images/home/icon-article.png">  
       <SimplePageContentLoader :loader="discoverLoader">
         <FlexCol :gap="25">
-          <Touchable 
+          <ImageBlock2 
             v-for="(item, i) in discoverLoader.content.value"
             :key="i"
-            direction="column"
+            :src="item.image"
+            :title="item.title"
+            :desc="item.desc"
+            :imageHeight="400"
+            :imageRadius="15"
+            width="100%"
             @click="goDetails(item)"
           > 
-            <Image 
-              :src="item.image" 
-              :failedImage="AppCofig.defaultImage"
-              width="100%" 
-              :height="350" 
-              :radius="15" 
-              mode="aspectFill" 
-              round
-            />
-            <Height :height="20" />
-            <FlexCol >
-              <Text :text="item.title" fontConfig="h4" />
-              <Text :text="item.desc" fontConfig="subText" />
+            <template #extra>
               <Tag scheme="light" :text="item.villageName" type="primary" />
-            </FlexCol>
-          </Touchable>
+            </template>
+          </ImageBlock2>
         </FlexCol>
       </SimplePageContentLoader>
     </Box>
@@ -68,6 +61,7 @@ import GridItem from '@/components/layout/grid/GridItem.vue';
 import VillageInfoApi from '@/api/inhert/VillageInfoApi';
 import AppCofig from '@/common/config/AppCofig';
 import Tag from '@/components/display/Tag.vue';
+import ImageBlock2 from '@/components/display/block/ImageBlock2.vue';
 
 function goList(keywords: string) {
   navTo('/pages/home/discover/list', {

+ 1 - 1
src/pages/home/index.vue

@@ -16,7 +16,7 @@
       <map 
         id="prevMap"
         map-id="prevMap"
-        class="w-100 height-400 radius-base overflow-hidden"
+        :style="{ width: '100%', height: '400rpx', borderRadius: '10rpx', overflow: 'hidden' }"
         :markers="mapLoader.content.value || []"
         :scale="10"
         :longitude="AppCofig.defaultLonLat[0]"

+ 20 - 10
src/pages/home/village/details.vue

@@ -27,6 +27,7 @@
 
       <FlexCol :padding="20" :radius="20" :gap="20">
 
+        <Height :height="20" />
         <FlexCol>
           <SubTitle :title="data.villageName" />
           <IntroBlock 
@@ -47,21 +48,22 @@
             ]"
           />
           <FlexCol :margin="[20, 0, 0, 0]">
-            <Parse :content="data.overview" :tagStyle="commonParserStyle" />
+            <Parse :content="data.overview" />
             <Text v-if="!data.overview" fontConfig="subText">无内容,请添加内容! </Text>
           </FlexCol>
         </FlexCol>
 
-        <FlexRow :margin="[40, 0, 40, 0]" wrap>
+        <FlexRow :margin="[40, 0, 40, 0]" :gap="[20, 0]" wrap>
           <Touchable 
             v-for="(tag, key) in tagsData"
             :key="key"
             width="20%"
             align="center"
+            justify="center"
             direction="column"
             @click="goList(tag)"
           >
-            <Image :src="tag.image" width="80%" mode="widthFix"></Image>
+            <Image :src="tag.image" width="65%" mode="widthFix"></Image>
             <Text fontConfig="subText" textAlign="center">{{ tag.title }}</Text>
           </Touchable>
         </FlexRow>
@@ -80,15 +82,23 @@
                 height: '350rpx',
               }"
             />
-            <Cell
+            <Touchable 
               v-if="data.address"
-              :label="data.address"
-              icon="map-filling"
-              :iconProps="{ color: 'primary' }"
-              value="去这里"
+              :title="data.address"
               touchable
+              :padding="20"
               @click="goAddress"
-            />
+            >
+              <IconTextBlock 
+                icon="map-filling"
+                :iconProps="{ size: 27 }"
+                :title="data.address"
+                extra="去这里"
+                :extraProps="{
+                  color: 'primary',
+                }"
+              />
+            </Touchable>
           </FlexCol>
         </FlexCol>
 
@@ -132,7 +142,6 @@ import Parse from '@/components/display/parse/Parse.vue';
 import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
 import Box2LineLargeImageUserShadow from '@/common/components/parts/Box2LineLargeImageUserShadow.vue';
 import VillageApi from '@/api/inhert/VillageApi';
-import commonParserStyle from '@/common/style/commonParserStyle';
 import ImagesUrls from '@/common/config/ImagesUrls';
 import SubTitle from '@/components/display/title/SubTitle.vue';
 import FlexCol from '@/components/layout/FlexCol.vue';
@@ -142,6 +151,7 @@ import FlexRow from '@/components/layout/FlexRow.vue';
 import Cell from '@/components/basic/Cell.vue';
 import Touchable from '@/components/feedback/Touchable.vue';
 import Height from '@/components/layout/space/Height.vue';
+import IconTextBlock from '@/components/display/block/IconTextBlock.vue';
 
 const EmptyImage = 'https://mncdn.wenlvti.net/app_static/minnan/EmptyImage.png';