Pre Merge pull request !135 from puhui999/dev
						commit
						cddd19a19e
					
				|  | @ -5,7 +5,7 @@ | ||||||
|     navbar="inner" |     navbar="inner" | ||||||
|   > |   > | ||||||
|     <!--  覆盖头部导航栏背景颜色  --> |     <!--  覆盖头部导航栏背景颜色  --> | ||||||
|     <div class="page-bg" :style="{ height: sys_navBar + 'px' }"></div> |     <view class="page-bg" :style="{ height: sys_navBar + 'px' }"></view> | ||||||
|     <!--  聊天区域  --> |     <!--  聊天区域  --> | ||||||
|     <MessageList ref="messageListRef"> |     <MessageList ref="messageListRef"> | ||||||
|       <template #bottom> |       <template #bottom> | ||||||
|  |  | ||||||
|  | @ -166,7 +166,7 @@ | ||||||
|                   >单</view |                   >单</view | ||||||
|                 > |                 > | ||||||
|                 <view> |                 <view> | ||||||
|                   <text class="num">{{ item.brokeragePrice || 0 }}</text |                   <text class="num">{{ fen2yuan(item.brokeragePrice) || 0 }}</text | ||||||
|                   >元 |                   >元 | ||||||
|                 </view> |                 </view> | ||||||
|               </view> |               </view> | ||||||
|  | @ -259,6 +259,7 @@ | ||||||
|   import _ from 'lodash-es'; |   import _ from 'lodash-es'; | ||||||
|   import { onPageScroll } from '@dcloudio/uni-app'; |   import { onPageScroll } from '@dcloudio/uni-app'; | ||||||
|   import BrokerageApi from '@/sheep/api/trade/brokerage'; |   import BrokerageApi from '@/sheep/api/trade/brokerage'; | ||||||
|  |   import { fen2yuan } from '../../sheep/hooks/useGoods'; | ||||||
| 
 | 
 | ||||||
|   const statusBarHeight = sheep.$platform.device.statusBarHeight * 2; |   const statusBarHeight = sheep.$platform.device.statusBarHeight * 2; | ||||||
|   // const agentInfo = computed(() => sheep.$store('user').agentInfo); |   // const agentInfo = computed(() => sheep.$store('user').agentInfo); | ||||||
|  |  | ||||||
|  | @ -15,6 +15,9 @@ | ||||||
|         :key="item.text" |         :key="item.text" | ||||||
|         :text="item.text" |         :text="item.text" | ||||||
|         :name="item.url" |         :name="item.url" | ||||||
|  |         :badge="item.badge" | ||||||
|  |         :dot="item.dot" | ||||||
|  |         :badgeStyle="tabbar.badgeStyle" | ||||||
|         :isCenter="getTabbarCenter(index)" |         :isCenter="getTabbarCenter(index)" | ||||||
|         :centerImage="sheep.$url.cdn(item.iconUrl)" |         :centerImage="sheep.$url.cdn(item.iconUrl)" | ||||||
|         @tap="sheep.$router.go(item.url)" |         @tap="sheep.$router.go(item.url)" | ||||||
|  | @ -33,6 +36,7 @@ | ||||||
| <script setup> | <script setup> | ||||||
|   import { computed, unref } from 'vue'; |   import { computed, unref } from 'vue'; | ||||||
|   import sheep from '@/sheep'; |   import sheep from '@/sheep'; | ||||||
|  |   import SuTabbar from '@/sheep/ui/su-tabbar/su-tabbar.vue'; | ||||||
| 
 | 
 | ||||||
|   const tabbar = computed(() => { |   const tabbar = computed(() => { | ||||||
|     return sheep.$store('app').template.basic?.tabbar; |     return sheep.$store('app').template.basic?.tabbar; | ||||||
|  |  | ||||||
|  | @ -130,38 +130,35 @@ const decryptSpm = (spm) => { | ||||||
|       // 普通商品
 |       // 普通商品
 | ||||||
|       shareParams.page = SharePageEnum.GOODS.page; |       shareParams.page = SharePageEnum.GOODS.page; | ||||||
|       shareParams.query = { |       shareParams.query = { | ||||||
|         id: shareParamsArray[2], |         id: shareParamsArray[2], // 设置活动编号
 | ||||||
|       }; |       }; | ||||||
|       break; |       break; | ||||||
|     case SharePageEnum.GROUPON.value: |     case SharePageEnum.GROUPON.value: | ||||||
|       // 拼团商品
 |       // 拼团商品
 | ||||||
|       shareParams.page = SharePageEnum.GROUPON.page; |       shareParams.page = SharePageEnum.GROUPON.page; | ||||||
|       query = shareParamsArray[2].split(','); |  | ||||||
|       shareParams.query = { |       shareParams.query = { | ||||||
|         id: query[0], |         id: shareParamsArray[2], // 设置活动编号
 | ||||||
|         activity_id: query[1], |  | ||||||
|       }; |       }; | ||||||
|       break; |       break; | ||||||
|     case SharePageEnum.SECKILL.value: |     case SharePageEnum.SECKILL.value: | ||||||
|       // 秒杀商品
 |       // 秒杀商品
 | ||||||
|       shareParams.page = SharePageEnum.SECKILL.page; |       shareParams.page = SharePageEnum.SECKILL.page; | ||||||
|       query = shareParamsArray[2].split(','); |  | ||||||
|       shareParams.query = { |       shareParams.query = { | ||||||
|         id: query[0], |         id: shareParamsArray[2], // 设置活动编号
 | ||||||
|       }; |       }; | ||||||
|       break; |       break; | ||||||
|     case SharePageEnum.GROUPON_DETAIL.value: |     case SharePageEnum.GROUPON_DETAIL.value: | ||||||
|       // 参与拼团
 |       // 参与拼团
 | ||||||
|       shareParams.page = SharePageEnum.GROUPON_DETAIL.page; |       shareParams.page = SharePageEnum.GROUPON_DETAIL.page; | ||||||
|       shareParams.query = { |       shareParams.query = { | ||||||
|         id: shareParamsArray[2], |         id: shareParamsArray[2], // 设置活动编号
 | ||||||
|       }; |       }; | ||||||
|       break; |       break; | ||||||
|     case SharePageEnum.POINT.value: |     case SharePageEnum.POINT.value: | ||||||
|       // 积分商品
 |       // 积分商品
 | ||||||
|       shareParams.page = SharePageEnum.POINT.page; |       shareParams.page = SharePageEnum.POINT.page; | ||||||
|       shareParams.query = { |       shareParams.query = { | ||||||
|         id: shareParamsArray[2], |         id: shareParamsArray[2], // 设置活动编号
 | ||||||
|       }; |       }; | ||||||
|       break; |       break; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -1,39 +1,40 @@ | ||||||
| @import './mixins'; | @import './mixins'; | ||||||
| 
 | 
 | ||||||
| //颜色 ,渐变背景60% | //颜色 ,渐变背景60% | ||||||
| $yellow: #ffc300; //ss-黄 | $red: #d10019;      // 中国红 | ||||||
| $orange: #ff6000; //ss-橘 | $orange: #f37b1d;   // 桔橙 | ||||||
| $red: #ff3000; //ss-红 | $gold: #fbbd08;     // 明黄 | ||||||
| $pink: #e03997; | $green: #8dc63f;    // 橄榄绿 | ||||||
| $mauve: #b745cb; | $cyan: #1cbbb4;     // 天青 | ||||||
| $purple: #652abf; //rgba(101, 42, 191, 1); // ss-紫 | $blue: #0081ff;     // 海蓝 | ||||||
| $blue: #0081ff; | $purple: #6739b6;   // 姹紫 | ||||||
| $cyan: #37c0fe; | $brightRed: #e54d42;  // 嫣红 | ||||||
| $green: #2aae67; //ss-绿 | $forestGreen: #39b54a; // 森绿 | ||||||
| $olive: #8dc63f; | $mauve: #9c26b0;    // 木槿 | ||||||
| $grey: #8799a3; | $pink: #e03997;     // 桃粉 | ||||||
| $brown: #a5673f; | $brown: #a5673f;    // 棕褐 | ||||||
| $black: #484848; //ss-黑 | $grey: #8799a3;     // 玄灰 | ||||||
| $golden: #e9b461; //ss-金 | $gray: #aaaaaa;     // 草灰 | ||||||
|  | $black: #333333;    // 墨黑 | ||||||
| 
 | 
 | ||||||
| $colors: (); | $colors: (); | ||||||
| $colors: map-merge( | $colors: map-merge( | ||||||
|   ( |   ( | ||||||
|     'yellow': $yellow, |     'red':$red, | ||||||
|     'orange': $orange, |     'orange':$orange, | ||||||
|     'red': $red, |     'gold':$gold, | ||||||
|     'pink': $pink, |     'green':$green, | ||||||
|     'mauve': $mauve, |     'cyan':$cyan, | ||||||
|     'purple': $purple, |     'blue':$blue, | ||||||
|     'violet': $purple, |     'purple':$purple, | ||||||
|     'blue': $blue, |     'brightRed':$brightRed, | ||||||
|     'cyan': $cyan, |     'forestGreen':$forestGreen, | ||||||
|     'green': $green, |     'mauve':$mauve, | ||||||
|     'olive': $olive, |     'pink':$pink, | ||||||
|     'grey': $grey, |     'brown':$brown, | ||||||
|     'brown': $brown, |     'grey':$grey, | ||||||
|     'black': $black, |     'gray':$gray, | ||||||
|     'golden': $golden, |     'black':$black, | ||||||
|   ), |   ), | ||||||
|   $colors |   $colors | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  | @ -128,6 +128,14 @@ const adaptTemplate = async (appTemplate, templateId) => { | ||||||
|   const tabBar = diyTemplate?.property?.tabBar; |   const tabBar = diyTemplate?.property?.tabBar; | ||||||
|   if (tabBar) { |   if (tabBar) { | ||||||
|     appTemplate.basic.tabbar = tabBar; |     appTemplate.basic.tabbar = tabBar; | ||||||
|  |     // TODO 商城装修没有对 tabBar 进行角标配置,测试角标需打开以下注释
 | ||||||
|  |     // appTemplate.basic.tabbar.items.forEach((tabBar) => {
 | ||||||
|  |     //   tabBar.dot = false
 | ||||||
|  |     //   tabBar.badge = 100
 | ||||||
|  |     // })
 | ||||||
|  |     // appTemplate.basic.tabbar.badgeStyle = {
 | ||||||
|  |     //   backgroundColor: '#882222',
 | ||||||
|  |     // }
 | ||||||
|     if (tabBar?.theme) { |     if (tabBar?.theme) { | ||||||
|       appTemplate.basic.theme = tabBar?.theme; |       appTemplate.basic.theme = tabBar?.theme; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -6,24 +6,24 @@ | ||||||
|     </view> |     </view> | ||||||
|     <template v-else> |     <template v-else> | ||||||
|       <view class="u-tabbar-item__icon"> |       <view class="u-tabbar-item__icon"> | ||||||
|         <image |         <uni-badge | ||||||
|           v-if="icon" |           absolute="rightTop" | ||||||
|           :name="icon" |           size="small" | ||||||
|           :color="isActive ? parentData.activeColor : parentData.inactiveColor" |           :text="badge || (dot ? 1 : null)" | ||||||
|           :size="20" |           :customStyle="badgeStyle" | ||||||
|         ></image> |           :isDot="dot" | ||||||
|         <block v-else> |         > | ||||||
|           <slot v-if="isActive" name="active-icon" /> |           <image | ||||||
|           <slot v-else name="inactive-icon" /> |             v-if="icon" | ||||||
|         </block> |             :name="icon" | ||||||
|         <!-- <u-badge |             :color="isActive ? parentData.activeColor : parentData.inactiveColor" | ||||||
| 					absolute |             :size="20" | ||||||
| 					:offset="[0, dot ? '34rpx' : badge > 9 ? '14rpx' : '20rpx']" |           ></image> | ||||||
| 					:customStyle="badgeStyle" |           <block v-else> | ||||||
| 					:isDot="dot" |             <slot v-if="isActive" name="active-icon" /> | ||||||
| 					:value="badge || (dot ? 1 : null)" |             <slot v-else name="inactive-icon" /> | ||||||
| 					:show="dot || badge > 0" |           </block> | ||||||
| 				></u-badge> --> |         </uni-badge> | ||||||
|       </view> |       </view> | ||||||
| 
 | 
 | ||||||
|       <slot name="text"> |       <slot name="text"> | ||||||
|  | @ -44,16 +44,17 @@ | ||||||
|   /** |   /** | ||||||
|    * TabbarItem 底部导航栏子组件 |    * TabbarItem 底部导航栏子组件 | ||||||
|    * @description 此组件提供了自定义tabbar的能力。 |    * @description 此组件提供了自定义tabbar的能力。 | ||||||
|    * @property {String | Number}	name		item标签的名称,作为与u-tabbar的value参数匹配的标识符 |    * @property {String | Number}  name    item标签的名称,作为与u-tabbar的value参数匹配的标识符 | ||||||
|    * @property {String}			icon		uView内置图标或者绝对路径的图片 |    * @property {String}      icon    uView内置图标或者绝对路径的图片 | ||||||
|    * @property {String | Number}	badge		右上角的角标提示信息 |    * @property {String | Number}  badge    右上角的角标提示信息 | ||||||
|    * @property {Boolean}			dot			是否显示圆点,将会覆盖badge参数(默认 false ) |    * @property {Boolean}      dot      是否显示圆点,将会覆盖badge参数(默认 false ) | ||||||
|    * @property {String}			text		描述文本 |    * @property {String}      text    描述文本 | ||||||
|    * @property {Object | String}	badgeStyle	控制徽标的位置,对象或者字符串形式,可以设置top和right属性(默认 'top: 6px;right:2px;' ) |    * @property {Object | String}  badgeStyle  控制徽标的位置,对象或者字符串形式,可以设置top和right属性(默认 'top: 6px;right:2px;' ) | ||||||
|    * @property {Object}			customStyle	定义需要用到的外部样式 |    * @property {Object}      customStyle  定义需要用到的外部样式 | ||||||
|    * |    * | ||||||
|    */ |    */ | ||||||
|   import { deepMerge, addStyle, sleep, $parent } from '@/sheep/helper'; |   import { $parent, addStyle } from '@/sheep/helper'; | ||||||
|  | 
 | ||||||
|   export default { |   export default { | ||||||
|     name: 'su-tabbar-item', |     name: 'su-tabbar-item', | ||||||
|     props: { |     props: { | ||||||
|  | @ -102,8 +103,8 @@ | ||||||
|       }, |       }, | ||||||
|       // 控制徽标的位置,对象或者字符串形式,可以设置top和right属性 |       // 控制徽标的位置,对象或者字符串形式,可以设置top和right属性 | ||||||
|       badgeStyle: { |       badgeStyle: { | ||||||
|         type: [Object, String], |         type: Object, | ||||||
|         default: '', |         default: ()=>{}, | ||||||
|       }, |       }, | ||||||
|       isCenter: { |       isCenter: { | ||||||
|         type: Boolean, |         type: Boolean, | ||||||
|  | @ -202,6 +203,7 @@ | ||||||
|       height: 25px; |       height: 25px; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|   .u-tabbar-item { |   .u-tabbar-item { | ||||||
|     display: flex; |     display: flex; | ||||||
|     flex-direction: column; |     flex-direction: column; | ||||||
|  | @ -230,5 +232,6 @@ | ||||||
|   :host { |   :host { | ||||||
|     flex: 1; |     flex: 1; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|   /* #endif */ |   /* #endif */ | ||||||
| </style> | </style> | ||||||
|  |  | ||||||
|  | @ -186,6 +186,9 @@ | ||||||
| 可通过 [issue](https://github.com/jin-yufeng/mp-html/issues/new/choose) 、插件问答或发送邮件到 [mp_html@126.com](mailto:mp_html@126.com) 提问,不建议在评论区提问(不方便回复)   | 可通过 [issue](https://github.com/jin-yufeng/mp-html/issues/new/choose) 、插件问答或发送邮件到 [mp_html@126.com](mailto:mp_html@126.com) 提问,不建议在评论区提问(不方便回复)   | ||||||
| 提问请严格按照 [issue 模板](https://github.com/jin-yufeng/mp-html/issues/new/choose) ,描述清楚使用环境、`html` 内容或可复现的 `demo` 项目以及复现方式,对于 **描述不清**、**无法复现** 或重复的问题将不予回复   | 提问请严格按照 [issue 模板](https://github.com/jin-yufeng/mp-html/issues/new/choose) ,描述清楚使用环境、`html` 内容或可复现的 `demo` 项目以及复现方式,对于 **描述不清**、**无法复现** 或重复的问题将不予回复   | ||||||
| 
 | 
 | ||||||
| 欢迎加入 `QQ` 交流群:`699734691`   | 欢迎加入 `QQ` 交流群:   | ||||||
|  | 群1(已满):`699734691`   | ||||||
|  | 群2(已满):`778239129`   | ||||||
|  | 群3:`960265313`   | ||||||
| 
 | 
 | ||||||
| 查看 [问题反馈](https://jin-yufeng.gitee.io/mp-html/#/question/feedback) 了解更多 | 查看 [问题反馈](https://jin-yufeng.gitee.io/mp-html/#/question/feedback) 了解更多 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,32 @@ | ||||||
|  | ## v2.5.0(2024-04-22) | ||||||
|  | 1. `U` `play` 事件增加返回 `src` 等信息 [详细](https://github.com/jin-yufeng/mp-html/issues/526) | ||||||
|  | 2. `U` `preview-img` 属性支持设置为 `all` 开启 `base64` 图片预览 [详细](https://github.com/jin-yufeng/mp-html/issues/536) | ||||||
|  | 3. `U` `editable` 插件增加简易模式(点击文字直接编辑) | ||||||
|  | 4. `U` `latex` 插件支持块级公式 [详细](https://github.com/jin-yufeng/mp-html/issues/582) | ||||||
|  | 5. `F` 修复了表格部分情况下背景丢失的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/587) | ||||||
|  | 6. `F` 修复了部分 `svg` 无法显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/591) | ||||||
|  | 7. `F` 修复了 `h5` 和 `app` 端部分情况下样式无法识别的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/518) | ||||||
|  | 8. `F` 修复了 `latex` 插件部分情况下显示不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/580) | ||||||
|  | 9. `F` 修复了 `editable` 插件表格无法删除的问题 | ||||||
|  | 10. `F` 修复了 `editable` 插件 `vue3` `h5` 端点击图片报错的问题 | ||||||
|  | 11. `F` 修复了 `editable` 插件点击表格没有菜单栏的问题 | ||||||
|  | ## v2.4.3(2024-01-21) | ||||||
|  | 1. `A` 增加 [card](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#card) 插件 [详细](https://github.com/jin-yufeng/mp-html/pull/533) by [@whoooami](https://github.com/whoooami) | ||||||
|  | 2. `F` 修复了 `svg` 中包含 `foreignobject` 可能不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/523) | ||||||
|  | 3. `F` 修复了合并单元格的表格部分情况下显示不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/561) | ||||||
|  | 4. `F` 修复了 `img` 标签设置 `object-fit` 无效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/567) | ||||||
|  | 5. `F` 修复了 `latex` 插件公式会换行的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/540)  | ||||||
|  | 6. `F` 修复了 `editable` 和 `audio` 插件共用时点击 `audio` 无法编辑的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/529) by [@whoooami](https://github.com/whoooami) | ||||||
|  | 7. `F` 修复了微信小程序部分情况下图片会报错 `replace of undefined` 的问题 | ||||||
|  | 8. `F` 修复了快手小程序图片不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/571) | ||||||
|  | ## v2.4.2(2023-05-14) | ||||||
|  | 1. `A` `editable` 插件支持修改文字颜色 [详细](https://github.com/jin-yufeng/mp-html/issues/254) | ||||||
|  | 2. `F` 修复了 `svg` 中有 `style` 不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/505) | ||||||
|  | 3. `F` 修复了使用旧版编译器可能报错 `Bad attr nodes` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/472) | ||||||
|  | 4. `F` 修复了 `app` 端可能出现无法读取 `lazyLoad` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/513) | ||||||
|  | 5. `F` 修复了 `editable` 插件在点击换图时未拼接 `domain` 的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/497) by [@TwoKe945](https://github.com/TwoKe945) | ||||||
|  | 6. `F` 修复了 `latex` 插件部分情况下不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/515)  | ||||||
|  | 7. `F` 修复了 `editable` 插件点击音视频时其他标签框不消失的问题 | ||||||
| ## v2.4.1(2022-12-25) | ## v2.4.1(2022-12-25) | ||||||
| 1. `F` 修复了没有图片时 `ready` 事件可能不触发的问题 | 1. `F` 修复了没有图片时 `ready` 事件可能不触发的问题 | ||||||
| 2. `F` 修复了加载过程中可能出现 `Root label not found` 错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/470) | 2. `F` 修复了加载过程中可能出现 `Root label not found` 错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/470) | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
| /** | /** | ||||||
|  * mp-html v2.4.1 |  * mp-html v2.5.0 | ||||||
|  * @description 富文本组件 |  * @description 富文本组件 | ||||||
|  * @tutorial https://github.com/jin-yufeng/mp-html |  * @tutorial https://github.com/jin-yufeng/mp-html | ||||||
|  * @property {String} container-style 容器的样式 |  * @property {String} container-style 容器的样式 | ||||||
|  |  | ||||||
|  | @ -10,13 +10,16 @@ | ||||||
|       <!-- #endif --> |       <!-- #endif --> | ||||||
|       <!-- #ifndef H5 || (APP-PLUS && VUE2) --> |       <!-- #ifndef H5 || (APP-PLUS && VUE2) --> | ||||||
|       <!-- 表格中的图片,使用 rich-text 防止大小不正确 --> |       <!-- 表格中的图片,使用 rich-text 防止大小不正确 --> | ||||||
|       <rich-text v-if="n.name==='img'&&n.t" :style="'display:'+n.t" :nodes="'<img class=\'_img\' style=\''+n.attrs.style+'\' src=\''+n.attrs.src+'\'>'" :data-i="i" @tap.stop="imgTap" /> |       <rich-text v-if="n.name==='img'&&n.t" :style="'display:'+n.t" :nodes="[{attrs:{style:n.attrs.style||'',src:n.attrs.src},name:'img'}]" :data-i="i" @tap.stop="imgTap" /> | ||||||
|       <!-- #endif --> |       <!-- #endif --> | ||||||
|       <!-- #ifndef H5 || APP-PLUS --> |       <!-- #ifndef H5 || APP-PLUS || MP-KUAISHOU --> | ||||||
|       <image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;height:1px;'+n.attrs.style" :src="n.attrs.src" :mode="!n.h?'widthFix':(!n.w?'heightFix':'')" :lazy-load="opts[0]" :webp="n.webp" :show-menu-by-longpress="opts[3]&&!n.attrs.ignore" :image-menu-prevent="!opts[3]||n.attrs.ignore" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" /> |       <image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;height:1px;'+n.attrs.style" :src="n.attrs.src" :mode="!n.h?'widthFix':(!n.w?'heightFix':(n.m||'scaleToFill'))" :lazy-load="opts[0]" :webp="n.webp" :show-menu-by-longpress="opts[3]&&!n.attrs.ignore" :image-menu-prevent="!opts[3]||n.attrs.ignore" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" /> | ||||||
|  |       <!-- #endif --> | ||||||
|  |       <!-- #ifdef MP-KUAISHOU --> | ||||||
|  |       <image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+n.attrs.style" :src="n.attrs.src" :lazy-load="opts[0]" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap"></image> | ||||||
|       <!-- #endif --> |       <!-- #endif --> | ||||||
|       <!-- #ifdef APP-PLUS && VUE3 --> |       <!-- #ifdef APP-PLUS && VUE3 --> | ||||||
|       <image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;'+n.attrs.style" :src="n.attrs.src||(ctrl.load?n.attrs['data-src']:'')" :mode="!n.h?'widthFix':(!n.w?'heightFix':'')" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" /> |       <image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;'+n.attrs.style" :src="n.attrs.src||(ctrl.load?n.attrs['data-src']:'')" :mode="!n.h?'widthFix':(!n.w?'heightFix':(n.m||''))" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" /> | ||||||
|       <!-- #endif --> |       <!-- #endif --> | ||||||
|       <!-- 文本 --> |       <!-- 文本 --> | ||||||
|       <!-- #ifdef MP-WEIXIN --> |       <!-- #ifdef MP-WEIXIN --> | ||||||
|  | @ -67,7 +70,7 @@ | ||||||
|       <rich-text v-else-if="!n.c&&!handler.isInline(n.name, n.attrs.style)" :id="n.attrs.id" :style="n.f" :user-select="opts[4]" :nodes="[n]" /> |       <rich-text v-else-if="!n.c&&!handler.isInline(n.name, n.attrs.style)" :id="n.attrs.id" :style="n.f" :user-select="opts[4]" :nodes="[n]" /> | ||||||
|       <!-- #endif --> |       <!-- #endif --> | ||||||
|       <!-- #ifndef H5 || ((MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE2) --> |       <!-- #ifndef H5 || ((MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE2) --> | ||||||
|       <rich-text v-else-if="!n.c" :id="n.attrs.id" :style="n.f+';display:inline'" :preview="false" :selectable="opts[4]" :user-select="opts[4]" :nodes="[n]" /> |       <rich-text v-else-if="!n.c" :id="n.attrs.id" :style="'display:inline;'+n.f" :preview="false" :selectable="opts[4]" :user-select="opts[4]" :nodes="[n]" /> | ||||||
|       <!-- #endif --> |       <!-- #endif --> | ||||||
|       <!-- 继续递归 --> |       <!-- 继续递归 --> | ||||||
|       <view v-else-if="n.c===2" :id="n.attrs.id" :class="'_block _'+n.name+' '+n.attrs.class" :style="n.f+';'+n.attrs.style"> |       <view v-else-if="n.c===2" :id="n.attrs.id" :class="'_block _'+n.name+' '+n.attrs.class" :style="n.f+';'+n.attrs.style"> | ||||||
|  | @ -184,7 +187,15 @@ export default { | ||||||
|      * @param {Event} e |      * @param {Event} e | ||||||
|      */ |      */ | ||||||
|     play (e) { |     play (e) { | ||||||
|       this.root.$emit('play') |       const i = e.currentTarget.dataset.i | ||||||
|  |       const node = this.childs[i] | ||||||
|  |       this.root.$emit('play', { | ||||||
|  |         source: node.name, | ||||||
|  |         attrs: { | ||||||
|  |           ...node.attrs, | ||||||
|  |           src: node.src[this.ctrl[i] || 0] | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|       // #ifndef APP-PLUS |       // #ifndef APP-PLUS | ||||||
|       if (this.root.pauseVideo) { |       if (this.root.pauseVideo) { | ||||||
|         let flag = false |         let flag = false | ||||||
|  | @ -299,7 +310,7 @@ export default { | ||||||
|      * @description 检查是否所有图片加载完毕 |      * @description 检查是否所有图片加载完毕 | ||||||
|      */ |      */ | ||||||
|     checkReady () { |     checkReady () { | ||||||
|       if (!this.root.lazyLoad) { |       if (this.root && !this.root.lazyLoad) { | ||||||
|         this.root._unloadimgs -= 1 |         this.root._unloadimgs -= 1 | ||||||
|         if (!this.root._unloadimgs) { |         if (!this.root._unloadimgs) { | ||||||
|           setTimeout(() => { |           setTimeout(() => { | ||||||
|  |  | ||||||
|  | @ -71,7 +71,8 @@ const config = { | ||||||
|     viewbox: 'viewBox', |     viewbox: 'viewBox', | ||||||
|     attributename: 'attributeName', |     attributename: 'attributeName', | ||||||
|     repeatcount: 'repeatCount', |     repeatcount: 'repeatCount', | ||||||
|     repeatdur: 'repeatDur' |     repeatdur: 'repeatDur', | ||||||
|  |     foreignobject: 'foreignObject' | ||||||
|   } |   } | ||||||
| } | } | ||||||
| const tagSelector={} | const tagSelector={} | ||||||
|  | @ -321,6 +322,7 @@ Parser.prototype.onTagName = function (name) { | ||||||
|   this.tagName = this.xml ? name : name.toLowerCase() |   this.tagName = this.xml ? name : name.toLowerCase() | ||||||
|   if (this.tagName === 'svg') { |   if (this.tagName === 'svg') { | ||||||
|     this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感
 |     this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感
 | ||||||
|  |     config.ignoreTags.style = undefined // svg 标签内 style 可用
 | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -331,6 +333,12 @@ Parser.prototype.onTagName = function (name) { | ||||||
|  */ |  */ | ||||||
| Parser.prototype.onAttrName = function (name) { | Parser.prototype.onAttrName = function (name) { | ||||||
|   name = this.xml ? name : name.toLowerCase() |   name = this.xml ? name : name.toLowerCase() | ||||||
|  |   // #ifdef (VUE3 && (H5 || APP-PLUS)) || APP-PLUS-NVUE
 | ||||||
|  |   if (name.includes('?') || name.includes(';')) { | ||||||
|  |     this.attrName = undefined | ||||||
|  |     return | ||||||
|  |   } | ||||||
|  |   // #endif
 | ||||||
|   if (name.substr(0, 5) === 'data-') { |   if (name.substr(0, 5) === 'data-') { | ||||||
|     if (name === 'data-src' && !this.attrs.src) { |     if (name === 'data-src' && !this.attrs.src) { | ||||||
|       // data-src 自动转为 src
 |       // data-src 自动转为 src
 | ||||||
|  | @ -457,7 +465,7 @@ Parser.prototype.onOpenTag = function (selfClose) { | ||||||
|           node.webp = 'T' |           node.webp = 'T' | ||||||
|         } |         } | ||||||
|         // data url 图片如果没有设置 original-src 默认为不可预览的小图片
 |         // data url 图片如果没有设置 original-src 默认为不可预览的小图片
 | ||||||
|         if (attrs.src.includes('data:') && !attrs['original-src']) { |         if (attrs.src.includes('data:') && this.options.previewImg !== 'all' && !attrs['original-src']) { | ||||||
|           attrs.ignore = 'T' |           attrs.ignore = 'T' | ||||||
|         } |         } | ||||||
|         if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) { |         if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) { | ||||||
|  | @ -551,6 +559,13 @@ Parser.prototype.onOpenTag = function (selfClose) { | ||||||
|       if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) { |       if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) { | ||||||
|         node.h = 'T' |         node.h = 'T' | ||||||
|       } |       } | ||||||
|  |       if (node.w && node.h && styleObj['object-fit']) { | ||||||
|  |         if (styleObj['object-fit'] === 'contain') { | ||||||
|  |           node.m = 'aspectFit' | ||||||
|  |         } else if (styleObj['object-fit'] === 'cover') { | ||||||
|  |           node.m = 'aspectFill' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } else if (node.name === 'svg') { |     } else if (node.name === 'svg') { | ||||||
|       siblings.push(node) |       siblings.push(node) | ||||||
|       this.stack.push(node) |       this.stack.push(node) | ||||||
|  | @ -677,11 +692,19 @@ Parser.prototype.popNode = function () { | ||||||
|         return |         return | ||||||
|       } |       } | ||||||
|       const name = config.svgDict[node.name] || node.name |       const name = config.svgDict[node.name] || node.name | ||||||
|  |       if (name === 'foreignObject') { | ||||||
|  |         for (const child of (node.children || [])) { | ||||||
|  |           if (child.attrs && !child.attrs.xmlns) { | ||||||
|  |             child.attrs.xmlns = 'http://www.w3.org/1999/xhtml' | ||||||
|  |             break | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|       src += '<' + name |       src += '<' + name | ||||||
|       for (const item in node.attrs) { |       for (const item in node.attrs) { | ||||||
|         const val = node.attrs[item] |         const val = node.attrs[item] | ||||||
|         if (val) { |         if (val) { | ||||||
|           src += ` ${config.svgDict[item] || item}="${val}"` |           src += ` ${config.svgDict[item] || item}="${val.replace(/"/g, '')}"` | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       if (!node.children) { |       if (!node.children) { | ||||||
|  | @ -703,6 +726,7 @@ Parser.prototype.popNode = function () { | ||||||
|     node.children = undefined |     node.children = undefined | ||||||
|     // #endif
 |     // #endif
 | ||||||
|     this.xml = false |     this.xml = false | ||||||
|  |     config.ignoreTags.style = true | ||||||
|     return |     return | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -839,6 +863,10 @@ Parser.prototype.popNode = function () { | ||||||
|     if (node.flag && node.c) { |     if (node.flag && node.c) { | ||||||
|       // 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现
 |       // 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现
 | ||||||
|       styleObj.display = 'grid' |       styleObj.display = 'grid' | ||||||
|  |       if (styleObj['border-collapse'] === 'collapse') { | ||||||
|  |         styleObj['border-collapse'] = undefined | ||||||
|  |         spacing = 0 | ||||||
|  |       } | ||||||
|       if (spacing) { |       if (spacing) { | ||||||
|         styleObj['grid-gap'] = spacing + 'px' |         styleObj['grid-gap'] = spacing + 'px' | ||||||
|         styleObj.padding = spacing + 'px' |         styleObj.padding = spacing + 'px' | ||||||
|  | @ -856,6 +884,23 @@ Parser.prototype.popNode = function () { | ||||||
|         for (let i = 0; i < nodes.length; i++) { |         for (let i = 0; i < nodes.length; i++) { | ||||||
|           if (nodes[i].name === 'tr') { |           if (nodes[i].name === 'tr') { | ||||||
|             trList.push(nodes[i]) |             trList.push(nodes[i]) | ||||||
|  |           } else if (nodes[i].name === 'colgroup') { | ||||||
|  |             let colI = 1 | ||||||
|  |             for (const col of (nodes[i].children || [])) { | ||||||
|  |               if (col.name === 'col') { | ||||||
|  |                 const style = col.attrs.style || '' | ||||||
|  |                 const start = style.indexOf('width') ? style.indexOf(';width') : 0 | ||||||
|  |                 // 提取出宽度
 | ||||||
|  |                 if (start !== -1) { | ||||||
|  |                   let end = style.indexOf(';', start + 6) | ||||||
|  |                   if (end === -1) { | ||||||
|  |                     end = style.length | ||||||
|  |                   } | ||||||
|  |                   width[colI] = style.substring(start ? start + 7 : 6, end) | ||||||
|  |                 } | ||||||
|  |                 colI += 1 | ||||||
|  |               } | ||||||
|  |             } | ||||||
|           } else { |           } else { | ||||||
|             traversal(nodes[i].children || []) |             traversal(nodes[i].children || []) | ||||||
|           } |           } | ||||||
|  | @ -982,11 +1027,26 @@ Parser.prototype.popNode = function () { | ||||||
|       node.children = [table] |       node.children = [table] | ||||||
|       attrs = table.attrs |       attrs = table.attrs | ||||||
|     } |     } | ||||||
|  |   } else if ((node.name === 'tbody' || node.name === 'tr') && node.flag && node.c) { | ||||||
|  |     node.flag = undefined; | ||||||
|  |     (function traversal (nodes) { | ||||||
|  |       for (let i = 0; i < nodes.length; i++) { | ||||||
|  |         if (nodes[i].name === 'td') { | ||||||
|  |           // 颜色样式设置给单元格避免丢失
 | ||||||
|  |           for (const style of ['color', 'background', 'background-color']) { | ||||||
|  |             if (styleObj[style]) { | ||||||
|  |               nodes[i].attrs.style = style + ':' + styleObj[style] + ';' + (nodes[i].attrs.style || '') | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } else { | ||||||
|  |           traversal(nodes[i].children || []) | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     })(children) | ||||||
|   } else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) { |   } else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) { | ||||||
|     for (let i = this.stack.length; i--;) { |     for (let i = this.stack.length; i--;) { | ||||||
|       if (this.stack[i].name === 'table') { |       if (this.stack[i].name === 'table' || this.stack[i].name === 'tbody' || this.stack[i].name === 'tr') { | ||||||
|         this.stack[i].flag = 1 // 指示含有合并单元格
 |         this.stack[i].flag = 1 // 指示含有合并单元格
 | ||||||
|         break |  | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } else if (node.name === 'ruby') { |   } else if (node.name === 'ruby') { | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| { | { | ||||||
|     "id": "mp-html", |     "id": "mp-html", | ||||||
|     "displayName": "mp-html 富文本组件【全端支持,支持编辑、latex等扩展】", |     "displayName": "mp-html 富文本组件【全端支持,支持编辑、latex等扩展】", | ||||||
|     "version": "v2.4.1", |     "version": "v2.5.0", | ||||||
|     "description": "一个强大的富文本组件,高效轻量,功能丰富", |     "description": "一个强大的富文本组件,高效轻量,功能丰富", | ||||||
|     "keywords": [ |     "keywords": [ | ||||||
|         "富文本", |         "富文本", | ||||||
|  |  | ||||||
|  | @ -1,3 +1,7 @@ | ||||||
|  | ## 1.2.2(2023-01-28) | ||||||
|  | - 修复 运行/打包 控制台警告问题 | ||||||
|  | ## 1.2.1(2022-09-05) | ||||||
|  | - 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:[https://ask.dcloud.net.cn/question/150473](https://ask.dcloud.net.cn/question/150473) | ||||||
| ## 1.2.0(2021-11-19) | ## 1.2.0(2021-11-19) | ||||||
| - 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) | - 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) | ||||||
| - 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge) | - 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge) | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| <template> | <template> | ||||||
| 	<view class="uni-badge--x"> | 	<view class="uni-badge--x"> | ||||||
| 		<slot /> | 		<slot /> | ||||||
| 		<text v-if="text" :class="classNames" :style="[badgeWidth, positionStyle, customStyle, dotStyle]" | 		<text v-if="text" :class="classNames" :style="[positionStyle, customStyle, dotStyle]" | ||||||
| 			class="uni-badge" @click="onClick()">{{displayValue}}</text> | 			class="uni-badge" @click="onClick()">{{displayValue}}</text> | ||||||
| 	</view> | 	</view> | ||||||
| </template> | </template> | ||||||
|  | @ -130,16 +130,13 @@ | ||||||
| 				const match = whiteList[this.absolute] | 				const match = whiteList[this.absolute] | ||||||
| 				return match ? match : whiteList['rightTop'] | 				return match ? match : whiteList['rightTop'] | ||||||
| 			}, | 			}, | ||||||
| 			badgeWidth() { |  | ||||||
| 				return { |  | ||||||
| 					width: `${this.width}px` |  | ||||||
| 				} |  | ||||||
| 			}, |  | ||||||
| 			dotStyle() { | 			dotStyle() { | ||||||
| 				if (!this.isDot) return {} | 				if (!this.isDot) return {} | ||||||
| 				return { | 				return { | ||||||
| 					width: '10px', | 					width: '10px', | ||||||
|  | 					minWidth: '0', | ||||||
| 					height: '10px', | 					height: '10px', | ||||||
|  | 					padding: '0', | ||||||
| 					borderRadius: '10px' | 					borderRadius: '10px' | ||||||
| 				} | 				} | ||||||
| 			}, | 			}, | ||||||
|  | @ -160,7 +157,7 @@ | ||||||
| 	}; | 	}; | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style lang="scss" scoped> | <style lang="scss" > | ||||||
| 	$uni-primary: #2979ff !default; | 	$uni-primary: #2979ff !default; | ||||||
| 	$uni-success: #4cd964 !default; | 	$uni-success: #4cd964 !default; | ||||||
| 	$uni-warning: #f0ad4e !default; | 	$uni-warning: #f0ad4e !default; | ||||||
|  | @ -195,10 +192,13 @@ | ||||||
| 		display: flex; | 		display: flex; | ||||||
| 		overflow: hidden; | 		overflow: hidden; | ||||||
| 		box-sizing: border-box; | 		box-sizing: border-box; | ||||||
|  | 		font-feature-settings: "tnum"; | ||||||
|  | 		min-width: 20px; | ||||||
| 		/* #endif */ | 		/* #endif */ | ||||||
| 		justify-content: center; | 		justify-content: center; | ||||||
| 		flex-direction: row; | 		flex-direction: row; | ||||||
| 		height: 20px; | 		height: 20px; | ||||||
|  | 		padding: 0 4px; | ||||||
| 		line-height: 18px; | 		line-height: 18px; | ||||||
| 		color: #fff; | 		color: #fff; | ||||||
| 		border-radius: 100px; | 		border-radius: 100px; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| { | { | ||||||
|   "id": "uni-badge", |   "id": "uni-badge", | ||||||
|   "displayName": "uni-badge 数字角标", |   "displayName": "uni-badge 数字角标", | ||||||
|   "version": "1.2.0", |   "version": "1.2.2", | ||||||
|   "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。", |   "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。", | ||||||
|   "keywords": [ |   "keywords": [ | ||||||
|     "", |     "", | ||||||
|  | @ -18,11 +18,7 @@ | ||||||
|   "directories": { |   "directories": { | ||||||
|     "example": "../../temps/example_temps" |     "example": "../../temps/example_temps" | ||||||
|   }, |   }, | ||||||
|   "dcloudext": { | "dcloudext": { | ||||||
|     "category": [ |  | ||||||
|       "前端组件", |  | ||||||
|       "通用组件" |  | ||||||
|     ], |  | ||||||
|     "sale": { |     "sale": { | ||||||
|       "regular": { |       "regular": { | ||||||
|         "price": "0.00" |         "price": "0.00" | ||||||
|  | @ -39,10 +35,11 @@ | ||||||
|       "data": "无", |       "data": "无", | ||||||
|       "permissions": "无" |       "permissions": "无" | ||||||
|     }, |     }, | ||||||
|     "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" |     "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", | ||||||
|  |     "type": "component-vue" | ||||||
|   }, |   }, | ||||||
|   "uni_modules": { |   "uni_modules": { | ||||||
|     "dependencies": [], |     "dependencies": ["uni-scss"], | ||||||
|     "encrypt": [], |     "encrypt": [], | ||||||
|     "platforms": { |     "platforms": { | ||||||
|       "cloud": { |       "cloud": { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 puhui999
						puhui999