Skip to content

Commit befa02f

Browse files
committed
1. 新增parse组件
2. 修复H5端popup等弹出组件层级比uni.showToast()的toast高的问题 3. 修复modal组件异步关闭模式,可能无法清除loading的问题
1 parent 8047ade commit befa02f

File tree

16 files changed

+2036
-29
lines changed

16 files changed

+2036
-29
lines changed

pages.json

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
"easycom": {
33
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
44
},
5-
// "condition": { //模式配置,仅开发期间生效
6-
// "current": 0, //当前激活的模式(list 的索引项)
7-
// "list": [{
8-
// "name": "test", //模式名称
9-
// "path": "pages/componentsB/picker/index", //启动页面,必选
10-
// "query": "id=1&name=2" //启动参数,在页面的onLoad函数里面得到
11-
// }]
12-
// },
5+
"condition": { //模式配置,仅开发期间生效
6+
"current": 0, //当前激活的模式(list 的索引项)
7+
"list": [{
8+
"name": "test", //模式名称
9+
"path": "pages/componentsC/test/index", //启动页面,必选
10+
"query": "id=1&name=2" //启动参数,在页面的onLoad函数里面得到
11+
}]
12+
},
1313
"pages": [
1414
// 演示-组件
1515
{
@@ -486,6 +486,13 @@
486486
{
487487
"root": "pages/componentsA",
488488
"pages": [
489+
// parse-富文本解析器
490+
{
491+
"path": "parse/index",
492+
"style": {
493+
"navigationBarTitleText": "parse-富文本解析器"
494+
}
495+
},
489496
// backTop-返回顶部
490497
{
491498
"path": "backTop/index",

pages/componentsA/parse/index.vue

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<template>
2+
<view class="u-content">
3+
<u-parse :html="detail.content"></u-parse>
4+
</view>
5+
</template>
6+
7+
<script>
8+
export default {
9+
data() {
10+
return {
11+
detail: {
12+
content: `
13+
<div class="content_area" id="content_area" style="display: block;">
14+
15+
<!--repaste.body.begin--><p>  巴尼小镇是云南省怒江傈僳族自治州首个易地扶贫搬迁集中安置点。从山上的金满村搬迁到巴尼小镇,近3年的时间里,搬迁户们的生活发生了可喜的变化。</p>
16+
<p class="photo_img_20190808" style="text-align: center;"><img src="//p2.img.cctvpic.com/photoworkspace/contentimg/2020/07/16/2020071613380766481.jpg" alt="泸水市巴尼小镇易地扶贫搬迁安置点全景 李韩金摄(人民视觉)" isflag="1"></p>
17+
<p class="photo_alt_20190808" style="text-align: center;"><em></em>泸水市巴尼小镇易地扶贫搬迁安置点全景 李韩金摄(人民视觉)</p>
18+
<p>  搬出四面透风、容易漏雨的“千脚落地房”,住进如今宽敞明亮的楼房,当地居民的生活不断改善。另一边,留在山上的村民在企业帮助下改种经济林果,家庭收入节节攀升。</p>
19+
<p class="photo_img_20190808" style="text-align: center;"><img src="//p3.img.cctvpic.com/photoworkspace/contentimg/2020/07/16/2020071613382671669.jpg" alt="金满村搬迁户在巴尼小镇的扶贫车间里上班 余秀英摄(人民视觉)" isflag="1"></p>
20+
<p class="photo_alt_20190808" style="text-align: center;"><em></em>金满村搬迁户在巴尼小镇的扶贫车间里上班 余秀英摄(人民视觉)</p>
21+
<p>  这阵子,52岁的米四东心里老惦记个事:吃两碗包谷稀饭。包谷稀饭是把包谷和蚕豆混在一起,有时加点腊肉,搁在三脚架上,生火煮制而成。在高黎贡山上,包谷稀饭曾是金满村人的主食,大多数人连个菜都不舍得炒,就配一碗蘸水吃。从山上搬下来快3年了,米四东说:“在山上盼着吃大米饭,如今天天吃米饭,又想念包谷稀饭了。”</p>
22+
<p>  米四东的家在巴尼小镇,地处云南省怒江傈僳族自治州泸水市洛本卓白族乡,紧邻着怒江。这里是怒江州首个易地扶贫搬迁集中安置点,2017年国庆节,金满村首批40户村民入住,2018年最后11户村民入住新居。如今已有搬迁户168户744人,都属于白族支系勒墨人。</p>
23+
<p>  3年时间,这里的人和生活发生了哪些变化?这个夏天,记者走进了巴尼小镇。</p>
24+
<p>  曾经——</p>
25+
<p>  8公里的距离,20年的差距</p>
26+
<p>  村民叁益光的家里干净亮堂,客厅的墙上,挂着一家三口在老房子前的合影。由于山地太陡,找不到平地打地基,老房子都是篱笆为墙、木板为顶、木头为柱的“千脚落地房”的样子。四面透风的房子里面黑黢黢的,下面养牲畜,中间住人,上面放粮食。“一入雨季,屋里就怕漏雨,潮乎乎有虱子”。2017年搬迁前,金满村九成村民就住在这种房子里。</p>
27+
<p>  从巴尼小镇往背后的高黎贡山深处走,沿着一条水泥路走上8公里,就回到了金满村村委会。金满村11个村民小组,其中5个不通公路、1个是地质灾害隐患点,这6个组如今已整体搬迁。“最远的马社王底小组有16户人家,到村委会要过悬崖、涉小河、爬陡坡,走上三四个小时。”说起过往,村委会主任沈光干嘘唏不已。</p>
28+
<p>  站在村委会的院子里,只见大山围绕、白云悠悠,山外面还是山。2014年底,金满村人均收入仅有1400多元,全村1310人有建档立卡贫困户1250人。沈光干说:“在山上,一年到头辛辛苦苦,还是穷成这个样!”</p>
29+
<p>  听老人们说起以前的生活,就像听“穿越故事”一样:去邻近的县背洋芋回来种,前后得一星期,头疼脑热不舍得花钱去卫生院……“过去从金满村到巴尼小镇的8公里距离,也是发展相差20年的距离。”巴尼小镇社区副主任和碧武介绍,群众刚搬出大山时,不会用电器,连起床叠被子的习惯都没有。</p>
30+
<p>  不过,在宽敞明亮的楼房里住上一段时间,大家都知道了现代生活的好处。乡中心完小五年级的学生花燕梅一家去年搬到小镇上,每天早上走几分钟就能到学校。“搬下来好,在这里衣服不容易脏,老师也讲得好!”孩子的话,总是简单明了。</p>
31+
<p>  如今,按照“一户一宅基地”的政策,米四东在山上的老房子拆了,一家人踏踏实实住在了小镇上。米四东感慨:“还是在山下容易赚钱。”</p>
32+
<p>  山下——</p>
33+
<p>  干活更方便,管理更规范</p>
34+
<p>  在巴尼小镇,最常见的交通工具就是摩托车,还有不少人家门口停着机动三轮车、小货车和轿车。米四东说,有了钱,大家都愿意买辆摩托车,“干活方便了许多。”</p>
35+
<p>  记者了解到,巴尼小镇目前外出务工118户282人,以本地打零工为主。在小镇上,就有家扶贫车间生产民族服装,平时有20多个女工。车间的管理人员告诉记者,一个熟练女工一个月挣三四千元没问题。</p>
36+
<p>  赚得多了,还要看花得多不多,对于搬出大山的人来说,上楼后的生活成本增加了多少?</p>
37+
<p>  米四东算了算账:小镇的水费一户每年20元,电费也不贵,过日子主要就是买些吃的。“这个就丰俭由己了,青菜要买,土豆南瓜山上就有。”</p>
38+
<p>  和碧武介绍,随着巴尼小镇社区建设越来越规范,一些以前“难以想象”的方法都有了实打实的用处。“比如我们这里实行积分制管理,积极参加升国旗仪式、搞好卫生都有加分,居民可以到超市用积分兑换商品。”社区超市经营者玉花梅说,去年超市里兑换了2万多元的积分。</p>
39+
<p>  当然,搬下来的时间并不长,对大部分人来说还是处在适应阶段。在和碧武看来,村子里的人与外界的交流还是偏少,视野和观念转变得还不够快。</p>
40+
<p>  米四东就有这种体会。洛本卓白族乡是“中国民间文化艺术之乡”,金满村被列入“云南省第四批旅游特色村”。作为州级非物质文化遗产传人,米四东如今在巴尼小镇教授勒墨人的传统歌舞。“等哪天怒江大峡谷的旅游火起来了,这门技艺一定会是旅游的‘招牌’产品。”米四东心里寻思着。</p>
41+
<p>  山上——</p>
42+
<p>  既抓“生态账”,又算“经济账”</p>
43+
<p>  一边是米四东感慨“山下容易赚钱”,另一边却是仍然留在山上的5个村民小组80户人家,如今的8公里,还有20年的发展差距吗?</p>
44+
<p>  “‘两不愁三保障’早就实现了,现在村里的生活跟过去相比简直是天壤之别。眼下村里惦记的,是怎样既抓‘生态账’,又算‘经济账’。”洛本卓乡宣传委员麻继成兼任金满村党总支书记,搬迁启动前就驻村工作,到现在还扎在村里忙活调整种养殖业结构。</p>
45+
<p>  靠山吃山,金满村过去是在四五十度的山坡地上开荒种包谷,如今要进行山体生态修复,除了改种经济林果,别无他法。</p>
46+
<p>  麻继成说,乡里组织搬迁群众将原住地的土地林地出租、流转或退耕还林,采取“合作社+村党总支+农户+基地”模式,种植花椒、核桃、草果、香橼等经济作物。现在,1000多亩花椒、1000多亩核桃、600多亩草果和300多亩香橼已经成了山上的“绿色银行”。“村里今年准备再发展250亩香橼,香橼两年就能挂果,收益前景非常可观。”</p>
47+
<p>  农产品“升了级”,收入也“开了源”。麻继成说,农民在企业承包的果园里务工,每天的工资有100元,如今每天都有二三十人在果园里干活。</p>
48+
<p>  “搬出去有盼头,留下来有干劲。”如今,乡里还在加紧研究制定金满村乡村旅游规划。“等客栈、农家乐、步行街都建好了,幸福一定来敲门。”洛本卓乡党委书记郝春荣说,巩固脱贫成果、走向乡村振兴,“好日子还在后头”。</p><!--repaste.body.end-->
49+
50+
</div>
51+
`
52+
}
53+
}
54+
},
55+
onLoad() {
56+
},
57+
methods: {
58+
59+
}
60+
}
61+
</script>
62+
63+
<style lang="scss" scoped>
64+
.u-content {
65+
padding: 24rpx;
66+
font-size: 32rpx;
67+
color: $u-content-color;
68+
line-height: 1.6;
69+
}
70+
</style>

pages/componentsC/test/index.vue

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,32 @@
11
<template>
2-
<view class="">
3-
<u-checkbox-group>
4-
<u-checkbox v-model="checked" active-color="red">光影</u-checkbox>
5-
</u-checkbox-group>
2+
<view class="u-content">
3+
<u-parse :html="content" show-with-animation></u-parse>
64
</view>
75
</template>
86

97
<script>
10-
export default {
11-
data() {
12-
return {
13-
checked: true
14-
};
15-
},
16-
};
17-
</script>
8+
export default {
9+
data() {
10+
return {
11+
content: `
12+
<p>露从今夜白,月是故乡明</p>
13+
<img src="https://cdn.uviewui.com/uview/swiper/2.jpg" />
14+
`
15+
}
16+
},
17+
}
18+
</script>
19+
20+
<style lang="scss" scoped>
21+
.u-content {
22+
margin-top: 100rpx;
23+
color: $u-content-color;
24+
font-size: 32rpx;
25+
line-height: 1.8;
26+
27+
// 标签形式无效
28+
p {
29+
color: $u-tips-color;
30+
}
31+
}
32+
</style>

pages/example/components.config.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,10 @@ export default [{
252252
}, {
253253
groupName: '其他组件',
254254
list: [{
255+
path: '/pages/componentsA/parse/index',
256+
icon: 'parse',
257+
title: 'parse 富文本解析器',
258+
},{
255259
path: '/pages/componentsC/messageInput/index',
256260
icon: 'messageInput',
257261
title: 'MessageInput 验证码输入',
@@ -261,7 +265,7 @@ export default [{
261265
title: 'AvatarCropper 头像裁剪',
262266
}, {
263267
path: '/pages/componentsC/loadmore/index',
264-
icon: 'loadmore',
268+
icon: 'loadmore',
265269
title: 'Loadmore 加载更多',
266270
}, {
267271
path: '/pages/componentsB/readMore/index',

uview-ui/components/u-modal/u-modal.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,13 @@ export default {
219219
},
220220
methods: {
221221
confirm() {
222-
this.$emit('confirm');
223222
// 异步关闭
224223
if(this.asyncClose) {
225224
this.loading = true;
226225
} else {
227226
this.$emit('input', false);
228227
}
228+
this.$emit('confirm');
229229
},
230230
cancel() {
231231
this.$emit('cancel');
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
const cfg = require('./config.js'),
2+
isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
3+
4+
function CssHandler(tagStyle) {
5+
var styles = Object.assign(Object.create(null), cfg.userAgentStyles);
6+
for (var item in tagStyle)
7+
styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];
8+
this.styles = styles;
9+
}
10+
CssHandler.prototype.getStyle = function(data) {
11+
this.styles = new parser(data, this.styles).parse();
12+
}
13+
CssHandler.prototype.match = function(name, attrs) {
14+
var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : '';
15+
if (attrs.class) {
16+
var items = attrs.class.split(' ');
17+
for (var i = 0, item; item = items[i]; i++)
18+
if (tmp = this.styles['.' + item])
19+
matched += tmp + ';';
20+
}
21+
if (tmp = this.styles['#' + attrs.id])
22+
matched += tmp + ';';
23+
return matched;
24+
}
25+
module.exports = CssHandler;
26+
27+
function parser(data, init) {
28+
this.data = data;
29+
this.floor = 0;
30+
this.i = 0;
31+
this.list = [];
32+
this.res = init;
33+
this.state = this.Space;
34+
}
35+
parser.prototype.parse = function() {
36+
for (var c; c = this.data[this.i]; this.i++)
37+
this.state(c);
38+
return this.res;
39+
}
40+
parser.prototype.section = function() {
41+
return this.data.substring(this.start, this.i);
42+
}
43+
// 状态机
44+
parser.prototype.Space = function(c) {
45+
if (c == '.' || c == '#' || isLetter(c)) {
46+
this.start = this.i;
47+
this.state = this.Name;
48+
} else if (c == '/' && this.data[this.i + 1] == '*')
49+
this.Comment();
50+
else if (!cfg.blankChar[c] && c != ';')
51+
this.state = this.Ignore;
52+
}
53+
parser.prototype.Comment = function() {
54+
this.i = this.data.indexOf('*/', this.i) + 1;
55+
if (!this.i) this.i = this.data.length;
56+
this.state = this.Space;
57+
}
58+
parser.prototype.Ignore = function(c) {
59+
if (c == '{') this.floor++;
60+
else if (c == '}' && !--this.floor) this.state = this.Space;
61+
}
62+
parser.prototype.Name = function(c) {
63+
if (cfg.blankChar[c]) {
64+
this.list.push(this.section());
65+
this.state = this.NameSpace;
66+
} else if (c == '{') {
67+
this.list.push(this.section());
68+
this.Content();
69+
} else if (c == ',') {
70+
this.list.push(this.section());
71+
this.Comma();
72+
} else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
73+
this.state = this.Ignore;
74+
}
75+
parser.prototype.NameSpace = function(c) {
76+
if (c == '{') this.Content();
77+
else if (c == ',') this.Comma();
78+
else if (!cfg.blankChar[c]) this.state = this.Ignore;
79+
}
80+
parser.prototype.Comma = function() {
81+
while (cfg.blankChar[this.data[++this.i]]);
82+
if (this.data[this.i] == '{') this.Content();
83+
else {
84+
this.start = this.i--;
85+
this.state = this.Name;
86+
}
87+
}
88+
parser.prototype.Content = function() {
89+
this.start = ++this.i;
90+
if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
91+
var content = this.section();
92+
for (var i = 0, item; item = this.list[i++];)
93+
if (this.res[item]) this.res[item] += ';' + content;
94+
else this.res[item] = content;
95+
this.list = [];
96+
this.state = this.Space;
97+
}

0 commit comments

Comments
 (0)