• 微信小程序开发之会议oa(首页搭建)


    前言:

    上一篇我们掌握了关于小程序的框架,这篇博客带你完成小程序版的会议OA首页。效果如下:

    一,

    1.1先创建OA首页页面:

    首先我们先建一个新项目,在app.json中编写代码

    1. {
    2. "pages": [
    3. "pages/index/index",
    4. "pages/meeting/list/list",
    5. "pages/vote/list/list",
    6. "pages/ucenter/index/index"
    7. ],
    8. "window": {
    9. "backgroundTextStyle": "light",
    10. "navigationBarBackgroundColor": "#fff",
    11. "navigationBarTitleText": "Weixin",
    12. "navigationBarTextStyle": "black"
    13. },
    14. "tabBar": {
    15. "list": [
    16. {
    17. "pagePath": "pages/index/index",
    18. "text": "首页",
    19. "iconPath": "/static/tabBar/coding.png",
    20. "selectedIconPath": "/static/tabBar/coding-active.png"
    21. },
    22. {
    23. "pagePath": "pages/meeting/list/list",
    24. "iconPath": "/static/tabBar/sdk.png",
    25. "selectedIconPath": "/static/tabBar/sdk-active.png",
    26. "text": "会议"
    27. },
    28. {
    29. "pagePath": "pages/vote/list/list",
    30. "iconPath": "/static/tabBar/template.png",
    31. "selectedIconPath": "/static/tabBar/template-active.png",
    32. "text": "投票"
    33. },
    34. {
    35. "pagePath": "pages/ucenter/index/index",
    36. "iconPath": "/static/tabBar/component.png",
    37. "selectedIconPath": "/static/tabBar/component-active.png",
    38. "text": "设置"
    39. }
    40. ]
    41. },
    42. "style": "v2",
    43. "sitemapLocation": "sitemap.json"
    44. }

    出现报错,因为我们资源没有导入:

    检查没有问题了:

    1.2关于小程序中的弹性布局

    什么是Flex弹性布局?
    Flex 弹性布局(Flexbox)是一种用于在容器中进行灵活排列和对齐元素的布局模型。它是 CSS3 引入的一种布局方式,旨在解决传统布局方式的限制和局限性。

    Flexbox 使用一维布局模型,将容器划分为主轴(main axis)和交叉轴(cross axis)。主轴是元素的排列方向,可以水平或垂直,而交叉轴与主轴垂直,用于对齐元素。通过使用弹性容器和弹性项目,Flexbox 提供了更加灵活的元素排列方式。

    Flexbox 提供了一系列的 CSS 属性,用于控制容器和项目的行为。其中包括:

    display: flex:将容器设置为弹性容器,以便使用 Flexbox 布局。
    flex-direction:确定主轴的方向,可以是水平(row)或垂直(column)。
    justify-content:定义主轴上项目的对齐方式(居中、开始、结束、空间等)。
    align-items:定义交叉轴上项目的对齐方式(居中、开始、结束、拉伸等)。
    flex-wrap:定义项目是否换行排列。
    flex-grow、flex-shrink 和 flex-basis:控制项目在主轴上的扩展、收缩和初始大小。
    order:定义项目的排列顺序。
    通过这些属性的灵活组合,使用 Flexbox 可以轻松实现多种不同的布局效果,而无需依赖复杂的 CSS 或 JavaScript。它特别适用于响应式设计和移动端布局,能够更好地适应不同屏幕大小和设备。

    flex弹性布局的特点?
    在没有加入flex的时候view块状元素是超出了我们的box盒范围的。但是加入了之后,就可以非常直观的看到我们每一个块状元素设置的大小都是100rpx,12个view块状元素加起来就是1200rpx,但是页面的总宽高设置的是750rpx,但是意外的是750rpx的页面承载了12个view快状元素,这个就是Flex弹性布局的特点。 

    Flex 弹性布局的常见属性:
    1.display: 

                    1.定义一个容器为 Flex 容器。

                    2.可以取值为 flex 或 inline-flex。
    2.flex-direction:

                    1.定义 Flex 容器的主轴方向。
                    2.可以取值为 row(水平方向)、row-reverse(反向水平方向)、column(垂直                       方向)或 column-reverse(反向垂直方向)。
    3.flex-wrap:

                    1.定义 Flex 容器的项是否换行。
                    2.可以取值为 nowrap(不换行)、wrap(换行)或 wrap-reverse(反向换行)。
    4.justify-content:

                    1.定义 Flex 容器内 Flex 项在主轴上的对齐方式。
                    2.可以取值为 flex-start、flex-end、center、space-between、space-around 或                 space-evenly。
    5.align-items:

                    1.定义 Flex 容器内 Flex 项在交叉轴上的对齐方式。
                    2.可以取值为 flex-start、flex-end、center、baseline 或 stretch。
    6.align-content:

                    1.定义多根交叉轴线的对齐方式。
                    2.仅在容器有多行的情况下有效。
                    3.可以取值为 flex-start、flex-end、center、space-between、space-around 或                    stretch。
    7.flex:

                    1.是 flex-grow、flex-shrink 和 flex-basis 的缩写。
                    2.用于设置 Flex 项的伸缩性。
    8.flex-grow:

                    1.定义了 Flex 项在容器内分配额外空间的能力。
                    2.值为一个非负整数,表示相对于其他 Flex 项的放大比例。
    9.flex-shrink:

                    1.定义了 Flex 项在容器内收缩的能力。
                    2.值为一个非负整数,表示相对于其他 Flex 项的收缩比例。
    10.flex-basis:

                    1.定义了 Flex 项在分配额外空间之前的初始尺寸。
                    2.可以设置为一个长度值或百分比。
    11.order:

                    1.定义了 Flex 项的排列顺序。
                    2.值为一个整数,决定了项的排列顺序,值越小越靠前。

    tab上(一级菜单)演示一下弹性布局到底是什么来帮助大家理解,我们在投票界面来给大家展示一下,首先在list.wxml中编写以下代码

    list.wxml:

    1. <!--pages/vote/list/list.wxml-->
    2. <!-- <text>pages/vote/list/list.wxml</text> -->
    3. <view class="box">
    4. <view>1</view>
    5. <view>2</view>
    6. <view>3</view>
    7. <view>4</view>
    8. <view>5</view>
    9. <view>6</view>
    10. <view>7</view>
    11. <view>8</view>
    12. <view>9</view>
    13. <view>10</view>
    14. <view>11</view>
    15. <view>12</view>
    16. </view>

    然后在list.wxss中加入样式来帮助大家更直观的看到效果

    1. /* pages/vote/list/list.wxss */
    2. .box{
    3. height:750rpx;
    4. width:750rpx;
    5. background-color: greenyellow;
    6. }
    7. view{
    8. height: 100rpx;
    9. width: 100rpx;
    10. border: 1px solid red;
    11. }

    现在没有使用flex布局的效果:

    可以看到非常的不友好,这里我们就要使用到弹性布局了。

    flex-wrap属性:它可能取三个值。分别如下

    (1)nowrap(默认):不换行。

    (2)wrap:换行,第一行在上方。

    (3)wrap-reverse:换行,第一行在下方。

    • flex-start(默认值):左对齐
    • flex-end:右对齐
    • center: 居中
    • space-between:两端对齐,项目之间的间隔都相等。
    • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

    把flex-derection属性的代码注释后,在list.wxss中编写以下代码

    1. display: flex;
    2. flex-flow: row wrap;

    二,轮播图后台数据获取及组件使用

    新建一个名为config的文件夹,文件夹下新建api.js专门放接口地址

    建好之后在api.js中编写以下代码:

    1. // 以下是业务服务器API地址
    2. // 本机开发API地址
    3. var WxApiRoot = 'http://localhost:8080/demo/wx/';
    4. // 测试环境部署api地址
    5. // var WxApiRoot = 'http://192.168.0.101:8070/demo/wx/';
    6. // 线上平台api地址
    7. //var WxApiRoot = 'https://www.oa-mini.com/demo/wx/';
    8. module.exports = {
    9. IndexUrl: WxApiRoot + 'home/index', //首页数据接口
    10. SwiperImgs: WxApiRoot+'swiperImgs', //轮播图
    11. MettingInfos: WxApiRoot+'meeting/list', //会议信息
    12. };

    然后在index.js中编写代码:

    1. const api = require("../../config/api")
    2. data: {
    3. imgSrcs:[]
    4. },
    5. loadSwiperImgs(){
    6. let that=this;
    7. wx.request({
    8. url: api.SwiperImgs,
    9. dataType: 'json',
    10. success(res) {
    11. console.log(res)
    12. that.setData({
    13. imgSrcs:res.data.images
    14. })
    15. }
    16. })
    17. },

    请求出现错误:解决将验证关闭

    Json的数据:

    1. {
    2. "data": {
    3. "images":[
    4. {
    5. "img": "https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png",
    6. "text": "1"
    7. },
    8. {
    9. "img": "https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png",
    10. "text": "2"
    11. },
    12. {
    13. "img": "https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner3.png",
    14. "text": "3"
    15. },
    16. {
    17. "img": "https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner4.png",
    18. "text": "4"
    19. },
    20. {
    21. "img": "https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner5.png",
    22. "text": "5"
    23. },
    24. {
    25. "img": "https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner6.png",
    26. "text": "6"
    27. }
    28. ]
    29. },
    30. "statusCode": "200",
    31. "header": {
    32. "content-type":"applicaiton/json;charset=utf-8"
    33. }
    34. }

     然后我们重新编译代码,控制器效果图:

    在index.wxml中编写以下代码:

    1. <!--pages/index/index.wxml-->
    2. <view>
    3. <swiper indicator-dots="true" autoplay="true" >
    4. <block wx:for="{{imgSrcs}}" wx:key="*text">
    5. <swiper-item>
    6. <image src=" {{item.img}}"></image>
    7. </swiper-item>
    8. </block>
    9. </swiper>
    10. </view>

    三,实现会议展示

    3.1首页布局

    先在index.wxml中编写以下代码

    1. <view class="mobi-title">
    2. <text class="mobi-icon"></text>
    3. <text>会议信息</text>
    4. </view>
    5. <block wx:for-items="{{lists}}" wx:for-item="item" wx:key="item.id">
    6. <view class="list" data-id="{{item.id}}">
    7. <view class="list-img">
    8. <image class="video-img" mode="scaleToFill" src="{{item.image}}"></image>
    9. </view>
    10. <view class="list-detail">
    11. <view class="list-title"><text>{{item.title}}</text></view>
    12. <view class="list-tag">
    13. <view class="state">{{item.state}}</view>
    14. <view class="join"><text class="list-num">{{item.num}}</text>人报名</view>
    15. </view>
    16. <view class="list-info"><text>{{item.location}}</text>|<text>{{item.starttime}}</text></view>
    17. </view>
    18. </view>
    19. </block>
    20. <view class="section bottom-line">
    21. <text>到底啦</text>
    22. </view>

    然后在index.wxss中编写以下样式:

    1. /* pages/index/index.wxss */
    2. .mobi-title{
    3. background-color: lightgray;
    4. padding: 10px;
    5. }
    6. .mobi-icon{
    7. border: 1rpx solid rgb(250, 126, 126);
    8. margin-right: 5px;
    9. }
    10. .mobi-title text{
    11. font-weight: 700;
    12. color: lightslategrey;
    13. }
    14. .list{
    15. display: flex;
    16. align-items: center;
    17. border-bottom: 3px solid lightgray;
    18. }
    19. .list-img{
    20. padding: 0 10px;
    21. }
    22. .video-img{
    23. height: 80px;
    24. width: 80px;
    25. }
    26. .list-title{
    27. font-weight: 700;
    28. margin: 3px 0;
    29. }
    30. .list-tag{
    31. display: flex;
    32. align-items: center;
    33. }
    34. .state{
    35. border: 2px solid lightblue;
    36. padding: 3px 6px;
    37. color: lightblue;
    38. margin: 0 5px 10px 0;
    39. }
    40. .join{
    41. color: lightgray;
    42. }
    43. .list-num{
    44. color: red;
    45. font-weight: 700;
    46. }
    47. .list-info{
    48. color: lightgray;
    49. font-size: 12px;
    50. }

    总体效果展示:

  • 相关阅读:
    如何提高跨境店铺的权重—扬帆凌远
    XPS—专项文献阅读-科学指南针
    uni-app的下拉搜索选择组合框
    清华美院「后羿雕塑」像外国人,引全网争议.....
    openh264解码数据流向分析
    关于使用NodeJS+Express搭建服务器访问静态资源的一些填坑经验
    Python生成二维码
    RKE2部署高可用Rancher2.6.5
    Java:Java有多流行,有哪些主要应用程序?
    js获取当前时间
  • 原文地址:https://blog.csdn.net/m0_73647713/article/details/133880167