物流寄件小程序的设计与实现

1.课题背景

随着互联网和移动设备的普及,电子商务的快速发展,快递行业也迎来了快速发展的时期。随着人们对生活品质的要求不断提高,对快递寄件服务的要求也越来越高。因此,开发一款高效、智能的快递寄件小程序成为了当前快递行业的一个热门课题。

快递寄件小程序有着广泛的应用场景。例如,用户可以通过手机APP或者小程序在线下单,实现寄件、打印运单、付款等一系列服务,方便快捷。对于快递公司来说,快递寄件小程序可以大大提高快递业务的效率和服务质量,优化运营流程,提高运营收益。

当前,快递寄件小程序的研究和开发已经成为了快递行业中的一项重要课题。其中,主要研究内容包括:快递寄件小程序的需求分析、设计与开发、运营与管理等方面。

首先,需求分析是快递寄件小程序研究的第一步。通过对用户的需求分析,了解用户的基本需求和使用习惯,为后续的设计和开发提供依据。同时,还需要考虑到不同用户群体的需求,例如老年人、残疾人、外国人等,为不同用户设计不同的界面和操作方式,提高用户体验。

其次,设计与开发是快递寄件小程序研究的核心环节。在设计时,需要考虑界面设计、用户体验、功能设计等多方面因素,使得小程序具有良好的用户交互性和易用性。在开发时,则需要考虑技术选型、安全性、兼容性等多个方面,实现快递寄件小程序的高效、稳定、安全的运行。

最后,运营与管理则是快递寄件小程序研究的重要保障。在运营方面,需要考虑推广、营销、客户服务等方面,使得小程序能够被更多用户使用。在管理方面,则需要考虑运营数据统计、维护、升级等方面,保证小程序的稳定性和可持续性。

总之,快递寄件小程序的研究和开发,是当前快递行业中的一项重要课题。通过不断地完善和优化,快递寄件小程序可以更好地服务于用户,提高快递行业的效率和服务质量,创造更大的社会价值。

2.分组及角色

团队人员角色及其职责,角色可重复,所有人都要参与开发

序号

角色

职责

负责人名字

1

项目经理

把控项目总体设计,开发进度的计划及进度管理,定制相应的开发规范,负责各个环节的工作评审,协调团队开发人员之间工作。

建议写组长

2

需求分析工程师

提供详细的策划方案和需分析。

建议写全部的

3

开发工程师

根据项目总体设计来设计数据库和功能模块的实现。

写几个人

4

UI设计工程师

根据项目需求设计项目的界面,图标,Logo等。

写几个人

5

测试工程师

负责测试程序。

写全部,交叉测试

6

实施运维人员

负责项目后期上线的线上实施,维护。

建议挑选部分人

3.系统分析

3.1用例分析

用户用例图:

管理员用例图:

3.2功能分析

3.2.1小程序端

小程序的需求分析为系统的功能设计奠定了基础和提供了参考,通过需求分析对小程序的功能进行了具体设计,以满足用户需求,设计出适应市场的小程序。本小程序主要分为四大模块:首页、查快递、福利、我的、下单模块。每个模块都有对应功能,最后实现寄件、查看功能。

各模块主要功能如下:

(1)首页

① 用户可在首页查看系统投放的广告banner图;

② 寄快递部分,用户可以直接点击寄快递直接进入下单界面,输入寄件需要的信息,完成下单;

③ 查运费部分,用户可以直接查运费直接进入查运费界面,输入相关信息,从而了解寄件的费用情况。

④ 资讯轮播,用户可以看到推送的资讯信息。

⑤ 活动链接模块,用户可以看到链接的热门外卖红包、电影票等多个生活服务入口。

⑥ 我的订单等多个快捷入口,首页提供了直接进入我的订单查看列表、我的优惠券等多个地方。

(2)查快递模块

查快递模块是查询快递信息的一个入口,提供了查看全部快递、待揽件快递、运输中快递、已签收快递、已取消快递及其查看运单详情的功能。除此之外提供了按运单号、寄件人手机号或收件人手机号查询的功能。

(3)订单模块

订单模块是用户在需要寄快递时,输入下单需要的收件人信息、寄件人信息等候点击立即下单,并完成支付形成的订单。在里面包含了撤销订单、立即支付等多个操作

(4)福利模块

福利模块提供了签到领取积分、积分查看、积分明细、积分兑换等多个给用户的福利功能。

(5)我的模块

我的模块是对用户的相关信息进行管理。

① 用户可在个人界面查看个人的头像或者上传个人的头像,查看自己的积分;通过查询相关订单信息;

② 余额查看、账户重置、优惠券查看等功能;

③ 寄快递的快递入口;

④ 积分兑换、查运费、退出等多个功能;

3.2.2 后台管理

根据管理需求,后台可以管理管理员信息、快递公司信息,对平台用户进行管理,同时可以查询订单信息、对数据进行统计的功能。

(1) 管理员可查看用户信息;

(2) 管理员可查看用户的地址簿信息;

(3) 管理员可查看用户用户的订单信息及其状态;

(4) 管理员可查看用户的搜索历史,了解用户关注的产品关键信息;

(5) 管理员可以管理管理员的信息,对其进行新增、修改、删除、查询等操作。

(6) 管理可以管理快递公司的信息。

4.架构设计

系统架构设计图:

 小程序寄件总流程设计图:

 5.UI设计

(1)小程序首页

 (2)查快递

 (3)福利

 (4)我的

 (5)寄快递

(6)地址簿

 (7)地址新增

(8)选择物品信息

 (9)查运费

(10)我的优惠券

(11)积分兑换

 (12)余额

  (13)提现

   (14)充值

    (15)补差价

 6.​​​​​数据库设计

该系统的主要数据库表设计有:小程序端用户表、宣传广告表、收货地址表、管理员表、订单表等等。主要的逻辑设计及结构如下所示。用户表存储的是微信小程序用户的昵称、省、市、县、openid、头像、积分、会员等级等情况信息。

表6.1 用户信息表

字段

字段类型

长度

是否NULL

字段说明

user_id

int unsigned

0

用户id

parent_id

int

0

上级

unionid

varchar

64

unionid

open_id

varchar

64

openid

openid

varchar

64

openid

province

int

0

city

int

0

area

int

0

县或区

requestCode

varchar

32

请求码

account

varchar

64

邮件或者手机

password

char

32

密码

pay_password

char

32

支付密码

face

varchar

500

头像

ext0

varchar

15

为了兼容DISCUZ 设立的用户名存储的字段

nickname

varchar

32

昵称

integral

int

0

积分

prestige

int

0

声望,影响等级的

money

int

0

账户余额

stock

int

0

股权

draw

int

0

奖金表

moneys

int

0

账户余额

qrcode

varchar

256

二维码

qrcode1

varchar

256

二维码1

qrcode2

varchar

256

二维码2

qrcode3

varchar

256

二维码3

guide

int

0

级别

rank_id

tinyint

0

等级ID

gold

int

0

是否会员

frozen_money

int

0

会员余额-冻结金

frozen_gold

int

0

冻结金-商家资金

reg_time

int

0

注册时间

reg_ip

varchar

15

区域ip

last_time

int

0

最后登录时间

last_ip

varchar

32

最后登录IP

frozen_money_time

int

0

会员余额-冻结金修改时间

frozen_gold_time

int

0

修改商家资金冻结时间

prestige_frozen

int

0

威望冻结金

is_prestige_frozen

tinyint

1

0代表威望已冻结,1已解冻

closed

tinyint

1

-1代表需要激活   0 代表正常  1 代表删除

uc_id

int

0

email

varchar

64

认证的邮件

mobile

varchar

11

认证的手机号码

lock_num

int

0

锁定

token

char

32

token

qq

varchar

11

qq

count_team

int

0

团队人数

count_user_price

int

0

个人业绩

count_team_price

int

0

团队业绩

is_lock

tinyint

1

是否锁定

is_lock_time

int

0

锁定时间

is_aux

tinyint

1

会员是否实名认证

管理员信息表存储的是管理员id、用户名、密码、角色id、手机号等基本信息。

表6.2 管理员信息表

字段

字段类型

长度

是否NULL

字段说明

admin_id

int unsigned

0

管理员id

type

tinyint

1

类型

user_id

int

0

用户id

username

varchar

32

用户名

password

char

32

密码

role_id

int

0

角色id

city_id

int

0

城市id

area_id

int

0

区域id'

business_id

int

0

business_id

mobile

varchar

11

手机号

lock_admin_mum

int

0

锁定最小时间

is_lock

tinyint

1

是否锁定

is_admin_lock

tinyint

1

is_admin_lock_time

int

0

锁定最小时间

create_time

int

0

创建时间

create_ip

varchar

15

创建ip

last_time

int

0

最近登录时间

last_ip

varchar

20

最近登录ip

is_ip

tinyint

1

is_username_lock

tinyint

1

是否锁定

closed

tinyint

1

用户地址信息表存储的是地址id、地址类型、用户id、省、市、县等基本信息。

表6.3 用户地址信息表

字段

字段类型

长度

是否NULL

字段说明

addr_id

int unsigned

0

地址id

type

int

0

类型

is_dw

int

0

是否已得物

user_id

int

0

用户id

city_id

int

0

城市id

area_id

int

0

地区id

business_id

int

0

镇id

name

varchar

255

姓名

mobile

varchar

20

固定电话

phone

varchar

11

手机号

getAddr

varchar

128

获取地址

addr

varchar

1024

地址

info

varchar

128

信息

lng

varchar

16

经度

lat

varchar

16

纬度

province

varchar

11

area

varchar

11

city

varchar

256

linkMan

varchar

256

联系人

createTime

varchar

11

创建时间

address

varchar

256

详细地址

is_default

tinyint

1

是否默认

closed

tinyint

1

删除状态

省信息表存储的是编号、省名称、中心经度、中心纬度、区号等基本信息。

表6.4 省信息表

字段

字段类型

长度

是否NULL

字段说明

id

int

0

主键id

adcode

varchar

10

编号

name

varchar

100

省名称

lat

double

0

中心纬度

lng

double

0

中心经度

citycode

varchar

10

区号

user_id

int

0

会员绑定

ratio

int

0

分成费率

市信息表存储的是城市名称、管理员id、代理id、照片、拼音、经度、纬度、级别类型等基本信息。

表6.5 市信息表

字段

字段类型

长度

是否NULL

字段说明

city_id

int unsigned

0

城市id

name

varchar

64

城市名称

user_id

int

0

管理员ID

agent_id

int

0

代理ID

photo

varchar

255

照片

pinyin

varchar

32

拼音

is_open

tinyint

1

是否打开

domain

tinyint

1

领域

lng

varchar

15

经度

lat

varchar

15

纬度

orderby

tinyint

0

序号

first_letter

char

1

第一个字符

theme

varchar

21

目的

closed

tinyint

1

是否隐藏

create_time

varchar

15

创建时间

create_ip

varchar

32

创建ip

pid

smallint

0

上级城市ID

ShortName

varchar

64

简称

LevelType

tinyint

0

级别类型

CityCode

tinyint

0

城市编码

ZipCode

tinyint

0

邮政编号

MergerName

varchar

255

合并名称

ParentId

int

0

父级id

hot

tinyint

1

0代表普通城市;1代表热门城市

县区信息表存储的是城市id、县区名称、排序、名字、级别类型、城市编码、邮政编码、合并名称等基本信息。

表6.6 县区信息表

字段

字段类型

长度

是否NULL

字段说明

area_id

int unsigned

0

县区id

city_id

int

0

城市id

area_name

varchar

32

县区名称

orderby

tinyint

0

排序

Name

varchar

255

名字

LevelType

tinyint

0

级别类型

CityCode

tinyint

0

城市编码

ZipCode

tinyint

0

邮政编码

MergerName

varchar

255

合并名称

lng

varchar

15

经度

Lat

varchar

15

纬度

pinyin

varchar

32

拼音

user_id

int

0

管理员id

街道镇信息表存储的是街道或镇名称id'、县区id、排序、热门城市、经度、纬度等基本信息。

表6.7 街道镇信息表

字段

字段类型

长度

是否NULL

字段说明

business_id

int unsigned

0

街道镇信息id

business_name

varchar

32

街道或镇名称

area_id

int

0

县区id

orderby

tinyint

0

排序

is_hot

tinyint

1

热门城市

lng

varchar

15

经度

lat

varchar

15

纬度

订单信息表存储的是订单单号、会员id、快递公司id、订单状态、预约时间等基本信息。

表6.8 订单信息表

字段

字段类型

长度

是否NULL

字段说明

id

int unsigned

0

主键id

type

int

0

接口名称

is_pei

int

0

是否配送

pid

int

0

上级ID

deliveryId

varchar

38

快递公司返回ID

expressId

varchar

38

快递公司ID

expressNo

varchar

38

快递公司单号

user_id

int

0

会员ID

takeDesc

varchar

32

排序模式

orderStatus

int

0

订单状态

orderStatusName

varchar

11

订单状态名

realOrderState

varchar

32

订单真实状态

diffStatus

int

0

状态

orderNo

varchar

11

单号

orderRightsStatus

int

0

退款状态

requestParams

varchar

9999

php提交数组

requestParams2

text

0

易达

sendStartTime

varchar

11

预约时间开始

sendEndTime

varchar

11

预约时间结束

createTime

varchar

32

时间

wight

varchar

256

重量

preOrderFee

int

0

订单费

firstPrice

int

0

首重价格

firstPrice_jia

int

0

首重价格+

addPrice

int

0

续重价格

addPrice_jia

int

0

续重价格+

limitFirstPrice

int

0

限重首重价格

limitFirstPrice_jia

int

0

限重首重价格+

limitAddPrice

int

0

限重续重价格

limitAddPrice_jia

int

0

限重续重价格+

sumMoneyYuan

int

0

支付金额

sumMoneyYuan_old

int

0

原始金额

sumMoneyYuan_jia

int

0

加价金额

diffMoneyYuan

int

0

差价金额

insurancePrice

int

0

保价费用

insuranceValue

int

0

保价金额

packageServicePrice

int

0

包装费用

sendName

varchar

256

寄件方姓名

sendMobile

varchar

256

寄件方手机

sendCity

varchar

512

寄件方城市

sendAddress

varchar

256

寄件方地址

orderType

tinyint

1

订单类型

receiveName

varchar

32

收件姓名

receiveMobile

varchar

32

收件手机

receiveCity

varchar

32

收件城市

receiveAddress

varchar

512

收件地址

kuaidi

varchar

256

快递

goodsType

varchar

256

商品类别

cargoName

varchar

11

物品名称

totalNumber

varchar

11

数量

totalVolume

varchar

11

下单体积

review_weight

varchar

11

开单重量

review_vloumn

varchar

11

开单体积

coupon_pmt

int

0

优惠金额

coupon_download_id

int

0

下载券ID

yuyuetime

varchar

32

预约时间

remark

varchar

64

备注

message

varchar

256

异常说明

pdfUrl

varchar

256

Url

pay_time

varchar

15

字符时间

cancel_reason

varchar

256

取消说明

cancel_time

varchar

13

取消时间

reason

varchar

32

取消订单原因

closed

int

0

是否取消

create_time

int

0

创建时间

create_ip

varchar

15

创建ip

7.数据流图

系统主要业务流程的数据流图:

8.编码

(1)寄快递

关键代码;

 <view class="content">

    <view class="lbt-box">

        <swiper autoplay="{ {true}}" circular="true" class="swiper" duration="500" indicatorColor="rgba(130, 130, 130, .3)" indicatorDots="true" interval="3000">

            <swiper-item wx:for="{ {bannerList}}" wx:key="index">

                <view bindtap="__e" class="swiper-item" data-event-opts="{ {[ [ 'tap',[ [ 'jumpbanner',['$0'],[ [ ['bannerList','',index] ] ] ] ] ] ]}}" src="{ {item.banner_url}}">

                    <image src="{ {item.banner_url}}"></image>

                </view>

            </swiper-item>

        </swiper>

    </view>

    <view class="express-box">

        <view class="express-top">

            <view class="express-top-left">主流快递运费比价寄</view>

            <view class="express-top-right">

                <image src="https://express.17huaban.com/attachs/imge/zt.png"></image>

                <image src="https://express.17huaban.com/attachs/imge/yd.png"></image>

                <image src="https://express.17huaban.com/attachs/imge/db.png"></image>

                <image src="https://express.17huaban.com/attachs/imge/jd.png"></image>

                <image src="https://express.17huaban.com/attachs/imge/zt.png"></image>

                <image src="https://express.17huaban.com/attachs/imge/sf.png"></image>

                <image src="https://express.17huaban.com/attachs/imge/yd.png"></image>

            </view>

        </view>

        <view class="express-middle">

            <view bindtap="__e" class="express-ji" data-event-opts="{ {[ [ 'tap',[ [ 'top_jump',[1] ] ] ] ]}}">

                <view class="express-ji-img" style="margin-left:68rpx;">

                    <image src="https://cps.mingduyun.com/static/tubiao/111.jpg"></image>

                </view>

                <view class="express-ji-text">寄快递</view>

            </view>

            <view class="express-shu"></view>

            <view bindtap="__e" class="express-ji" data-event-opts="{ {[ [ 'tap',[ [ 'top_jump',[2] ] ] ] ]}}">

                <view class="express-ji-img" style="margin-left:105rpx;">

                    <image src="https://cps.mingduyun.com/static/tubiao/222.jpg"></image>

                </view>

                <view class="express-ji-text">查运费</view>

            </view>

        </view>

        <view class="win-info">

            <view class="swiper-icon">

                <image src="https://express.17huaban.com/attachs/imge/praise.png"></image>

            </view>

            <view class="swiper-view" wx:if="{ {newsList.length==1&&configindex}}">

                <view class="swiper-text">{ {'欢迎使用'+configindex.index_title+'寄快递折扣平台'}}</view>

            </view>

            <swiper autoplay="{ {true}}" circular="{ {true}}" class="win-info-swiper" disableTouch="{ {true}}" interval="{ {5000}}" vertical="{ {true}}" wx:else>

                <swiper-item class="u-swiper-item" wx:for="{ {newsList}}" wx:key="index">

                    <view class="swiper-view">

                        <view class="swiper-text">{ {item.title}}</view>

                    </view>

                </swiper-item>

            </swiper>

        </view>

    </view>

    <view>

        <view class="four-box">

            <view bindtap="__e" class="four-view" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',[item],[ [ ['menuList','',index,'url','appid'] ],[ ['menuList','',index,'check'] ] ] ] ] ] ]}}" wx:for="{ {menuList}}" wx:key="index">

                <view class="four-view-text">

                    <view class="fvt-title">{ {item.name}}</view>

                    <view class="fvt-content">{ {item.info}}</view>

                </view>

                <view class="fvt-img-box">

                    <view class="fvt-img">

                        <image src="{ {item.icon}}"></image>

                    </view>

                </view>

            </view>

        </view>

        <view class="four-box" wx:if="{ {configindex.jt_cps==1}}">

            <view bindtap="__e" class="four-view" data-event-opts="{ {[ [ 'tap',[ [ 'to_detail',['$0'],[ [ ['bottomList','',index] ] ] ] ] ] ]}}" style="position:relative;" wx:for="{ {bottomList}}" wx:key="index">

                <view class="four-view-text">

                    <view class="fvt-title">{ {item.text_top}}</view>

                    <view class="fvt-content">{ {item.text_bot}}</view>

                </view>

                <view class="fvt-img-box">

                    <view class="fvt-img">

                        <image src="{ {item.icon}}"></image>

                    </view>

                </view>

            </view>

        </view>

    </view>

    <view class="three-box">

        <view bindtap="__e" class="three-view" data-event-opts="{ {[ [ 'tap',[ [ 'to_next',['$0'],[ [ ['content_list','',index,'url'] ] ] ] ] ] ]}}" wx:for="{ {content_list}}" wx:key="index">

            <view class="three-view-img">

                <image src="{ {item.icon}}"></image>

                <view style="width:20rpx;height:20rpx;margin-top:-88rpx;margin-left:42rpx;">

                    <uni-badge bind:__l="__l" text="{ {uInfo.trade_num}}" type="error" vueId="8dd740cc-1"></uni-badge>

                </view>

            </view>

            <view class="three-view-text">{ {item.name}}</view>

        </view>

    </view>

    

    <view class="two-box">

        <view bindtap="__e" class="two-box-view" data-event-opts="{ {[ [ 'tap',[ [ 'top_jump',[3] ] ] ] ]}}">

            <image src="https://express.17huaban.com/attachs/imge/bot-img2.png"></image>

        </view>

        <view bindtap="__e" class="two-box-view" data-event-opts="{ {[ [ 'tap',[ [ 'top_jump',[4] ] ] ] ]}}">

            <image src="https://express.17huaban.com/attachs/imge/bot-img.png"></image>

        </view>

    </view>

    <view class="two-box" wx:if="{ {site.pay.unit_id_1&&site.pay.unit_id_1}}">

      <view class="adContainer">

          <ad unit-id="{ {site.pay.unit_id_1}}" ad-intervals="30"></ad>

      </view>

    </view>

    

    <view class="balance-paybx " wx:if="{ {myhandleCount>0}}">

        <view class="fl-b-between">

            <view class="iconfont" style="font-size:50rpx;margin-left:20rpx;"></view>

            <view class="follow-text">{ {'您有'+myhandleCount+'笔运单需要补费'}}</view>

            <view catchtap="__e" class="follow-btn" data-event-opts="{ {[ [ 'tap',[ [ 'top_jump',[7] ] ] ] ]}}">去补缴</view>

        </view>

    </view>

    <view class="bottom-text savepadding">

        <view catchtap="__e" class="bottom-text-box" data-event-opts="{ {[ [ 'tap',[ [ 'top_jump',[6] ] ] ] ]}}">

            <view class="bottom-text-box-logo">

                <image src="{ {configindex.logo}}"></image>

            </view>

            <view class="bottom-text-box-text">{ {'新手必看,'+configindex.index_title+'怎么寄快递最便宜?'}}</view>

        </view>

    </view>

    <view catchtap="__e" class="kefu" data-event-opts="{ {[ [ 'tap',[ [ 'top_jump',[5] ] ] ] ]}}">

        <view class="kefu">

            <view class="kefu-img">

                <image src="https://express.17huaban.com/attachs/imge/kefu.png"></image>

            </view>

            <view class="kefu-text">在线咨询</view>

        </view>

    </view>

    <view class="hongbao-model data-v-a1" wx:if="{ {hongbaoShow}}">

        <view class="hongbao data-v-a1">

            <view class="data-v-a1" style="position:relative;">

                <image bindload="__e" class="data-v-a1" data-event-opts="{ {[ [ 'load',[ [ 'redbagload',['$event'] ] ] ] ]}}" mode="widthFix" src="{ {newren_hb_url}}" style="width:450rpx;"></image>

                <view class="data-v-a1" style="color:#ff4141;font-weight:bold;position:absolute;top:calc(50% - 55rpx);left:50%;transform:translate(-50%,-50%);" wx:if="{ {delayShow}}">

                    <text class="data-v-a1" style="font-size:60rpx;">{ {hongbaoList.reduce_price}}</text>

                    <text class="data-v-a1" style="font-size:30rpx;">元</text>

                </view>

                <view class="data-v-a1" style="color:#ff4141;position:absolute;top:calc(50% + 45rpx);left:50%;transform:translate(-50%,-50%);font-size:38rpx;" wx:if="{ {delayShow}}">{ {hongbaoList.title}}</view>

                <view class="data-v-a1" style="position:absolute;top:calc(50% + 170rpx);left:50%;transform:translate(-50%,-50%);">

                    <image bindtap="__e" class="data-v-a1" data-event-opts="{ {[ [ 'tap',[ ['gethongbao'] ] ] ]}}" mode="widthFix" src="https://express.17huaban.com/attachs/imge/coin.png" style="width:150rpx;"></image>

                </view>

            </view>

            <image bindtap="__e" class="data-v-a1" data-event-opts="{ {[ [ 'tap',[ ['closehongbao'] ] ] ]}}" mode="widthFix" src="https://express.17huaban.com/attachs/imge/closed.png" style="width:60rpx;height:60rpx;"></image>

        </view>

    </view>

    <view class="hongbao-model-mask data-v-a1" wx:if="{ {hongbaoShow}}"></view>

    <index-tip bind:__l="__l" class="data-v-a1" showTips="{ {showTips}}" vueId="8dd740cc-2"></index-tip>

    <view bindtap="__e" catchtouchmove="__e" class="movable data-v-a1" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',['/subpages/pages/mailing-consult/mailing-consult'] ] ] ],[ 'touchmove',[ [ 'touchmove',['$event'] ] ] ] ]}}" style="{ {'position:fixed;right:0;top:80%;'+'top:'+(leftTop==0?'80%':leftTop+'px')+';'}}"></view>

    <wyb-popup bgColor="rgba(0,0,0,0)" bind:__l="__l" bind:hide="__e" class="data-v-a1 vue-ref" data-event-opts="{ {[ [ '^hide',[ ['hidepopup'] ] ] ]}}" data-ref="popup" height="552" radius="20" showCloseIcon="{ {false}}" type="center" vueId="8dd740cc-3" vueSlots="{ {['default']}}" width="384">

        <view bindtap="__e" class="data-v-a1" data-event-opts="{ {[ [ 'tap',[ [ 'hideNewyearNotice',['$event'] ] ] ] ]}}" style="position:relative;height:100%;"></view>

        <view bindtap="__e" class="close-btn-newyear-activity data-v-a1" data-event-opts="{ {[ [ 'tap',[ [ 'hideNewyearNotice',['$event'] ] ] ] ]}}">

            <image mode class="data-v-a1" src="https://express.17huaban.com/attachs/imge/closed.png" style="width:100%;height:100%;"></image>

        </view>

    </wyb-popup>

    <view class="hongbao-model-mask data-v-a1" wx:if="{ {hongbaoShow1}}"></view>

    <wyb-popup bgColor="#fff" bind:__l="__l" class="data-v-a1 vue-ref" data-ref="popup_wh" height="360" maskClickClose="{ {false}}" radius="10" showCloseIcon="{ {false}}" type="center" vueId="8dd740cc-4" vueSlots="{ {['default']}}" width="600">

        <view class="data-v-a1" style="padding:40rpx;">

            <view class="data-v-a1" style="text-align:center;margin-bottom:30rpx;font-size:32rpx;font-weight:bold;">{ {''+wh_title+''}}</view>

            <view class="data-v-a1" style="margin-bottom:10rpx;">尊敬的用户:</view>

            <view class="data-v-a1" style="line-height:50rpx;">

                <text class="data-v-a1" decode="{ {true}}">{ {wh_text}}</text>

            </view>

        </view>

    </wyb-popup>

    <view class="hongbao-model-mask data-v-a1" wx:if="{ {hongbaoShow2}}"></view>

    <wyb-popup bgColor="#fff" bind:__l="__l" class="data-v-a1 vue-ref" data-ref="popup_wh1" height="360" maskClickClose="{ {false}}" radius="10" showCloseIcon="{ {false}}" type="center" vueId="8dd740cc-5" vueSlots="{ {['default']}}" width="600">

        <view class="data-v-a1" style="padding:40rpx;">

            <view class="data-v-a1" style="text-align:center;margin-bottom:30rpx;font-size:32rpx;font-weight:bold;">{ {wh_title}}</view>

            <view class="data-v-a1" style="margin-bottom:10rpx;">尊敬的用户:</view>

            <view class="data-v-a1" style="line-height:50rpx;">

                <text class="data-v-a1" decode="{ {true}}">{ {wh_text}}</text>

            </view>

        </view>

        <view bindtap="__e" class="close-btn-newyear-activity1 data-v-a1" data-event-opts="{ {[ [ 'tap',[ [ 'hideNewyearNotice2',['$event'] ] ] ] ]}}">

            <image mode class="data-v-a1" src="https://express.17huaban.com/attachs/imge/closed.png" style="width:100%;height:100%;"></image>

        </view>

    </wyb-popup>

</view> 

实现截图;

(2)寄件下单

关键代码;

 <view class="{ {['delivery-container','data-v-a6',noticeHeight]}}">

    <view class="data-v-a6" style="background-color:#ffe4e4;box-shadow:0rpx 3rpx 5rpx 0rpx rgba(0, 0, 0, 0.08);border-radius:10rpx;margin:0 30rpx;padding:10rpx 0;margin-bottom:20rpx;font-size:23rpx;">

        <view class="data-v-a6" style="padding:10rpx 30rpx;display:flex;align-items:center;">

            <image class="data-v-a6" mode="aspectFit" src="https://express.17huaban.com/attachs/imge/warn.png" style="width:40rpx;height:40rpx;margin-right:20rpx;"></image>

            <view class="flex-full info data-v-a6">

                <text>{ {title_content}}</text>

            </view>

        </view>

    </view>

    <view class="express-info data-v-a6">

        <view class="express-item t1 flex-row data-v-a6">

            <view class="type data-v-a6">寄</view>

            <view bindtap="__e" class="flex-full info data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'addressDirectUrl',[0] ] ] ] ]}}">

                <block wx:if="{ {sendAddr===''}}">寄件信息</block>

                <block wx:else>

                    <view class="top flex-row data-v-a6">

                        <view class="name data-v-a6">{ {sendAddr.sender_name}}</view>

                        <view class="tel flex-full data-v-a6">{ {sendAddr.sender_phone||sendAddr.sender_mobile}}</view>

                    </view>

                    <view class="addr data-v-a6">{ {sendAddr.sender_address}}</view>

                </block>

            </view>

            <view bindtap="__e" class="btn data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',['/pagess/address/address?type=1',0] ] ] ] ]}}">地址簿</view>

        </view>

        <view class="express-item t2 flex-row data-v-a6">

            <view class="type data-v-a6">收</view>

            <view bindtap="__e" class="flex-full info data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'addressDirectUrl',[1] ] ] ] ]}}">

                <block wx:if="{ {receiptAddr===''}}">收件信息</block>

                <block wx:else>

                    <view class="top flex-row data-v-a6">

                        <view class="name data-v-a6">{ {receiptAddr.sender_name}}</view>

                        <view class="tel flex-full data-v-a6">{ {receiptAddr.sender_phone||receiptAddr.sender_mobile}}</view>

                    </view>

                    <view class="addr data-v-a6">{ {receiptAddr.sender_address}}</view>

                </block>

            </view>

            <view bindtap="__e" class="btn data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',['$0',1],['expressUrl'] ] ] ] ]}}">地址簿</view>

        </view>

    </view>

    <view class="goods-form data-v-a6">

        <view bindtap="__e" class="form-item flex-row data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',['/pages/delivery/goods/goods','goodsModule'] ] ] ] ]}}">

            <view class="name data-v-a6" style="display:flex;align-items:center;">物品信息<view class="bitian data-v-a6">必填</view>

            </view>

            <view class="flex-full value data-v-a6">{ {payload.cargodata.name?payload.cargodata.name+' '+payload.totalWeight+'kg':'请选择'}}</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

        <view bindtap="__e" class="form-item flex-row data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'openModal',['expressModule'] ] ] ] ]}}">

            <view class="name data-v-a6" style="display:flex;align-items:center;">选择配送公司<view class="bitian data-v-a6">必填</view>

            </view>

            <view class="flex-full value data-v-a6">{ {expressInfo?expressInfo.nickname:'请选择'}}</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

        <view bindtap="__e" class="form-item flex-row data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'openModal',['selectTimeModule'] ] ] ] ]}}" wx:if="{ {is_yuyue}}">

            <view class="name data-v-a6">预约取件时间</view>

            <view class="flex-full value data-v-a6">{ {payload.sendEndTime?payload.sendStartTime+' '+payload.sendEndTime:'请选择'}}</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

        <view bindtap="__e" class="form-item flex-row data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',['/pages/delivery/insurance/insurance','insurance'] ] ] ] ]}}" wx:if="{ {is_baojia}}">

            <view class="name data-v-a6">保价</view>

            <view class="flex-full value data-v-a6">{ {payload.insuranceValue==''?'选填':'价值'+payload.insuranceValue+'元,保费'+payload.insurancePrice+'元'}}</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

        <view class="form-item flex-row data-v-a6" wx:else>

            <view class="name data-v-a6">保价</view>

            <view class="flex-full value data-v-a6">该快递暂不支持保价</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

        <view bindtap="__e" class="form-item flex-row data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'openModal',['remarkModule'] ] ] ] ]}}">

            <view class="name data-v-a6">备注</view>

            <view class="flex-full value data-v-a6">{ {payload.remark||'选填'}}</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

    </view>

    <view class="goods-form data-v-a6">

        <navigator class="vip-module flex-row data-v-a6" url="/pagess/vip/vip" wx:if="{ {!vip}}">

            <image class="vip-icon data-v-a6" src="https://express.17huaban.com/attachs/imge/vip-icon.png"></image>

            <view class="name flex-full data-v-a6">{ {vip?'特惠寄件 尊贵特权':'开通VIP会员,寄件更优惠'}}</view>

            <view class="btn data-v-a6">{ {vip?'降级提现':'立即开通'}}</view>

        </navigator>

        <view class="form-item flex-row data-v-a6" wx:if="{ {expressInfo.name=='DEPPON'&&expressInfo.channel=='1'}}">

            <view class="name data-v-a6">优惠券</view>

            <view class="flex-full value data-v-a6">该快递暂不支持优惠券</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

        <view bindtap="__e" class="form-item flex-row data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',['/pagess/coupon/coupon','couponModule'] ] ] ] ]}}" wx:else>

            <view class="name data-v-a6">优惠券</view>

            <view class="flex-full value data-v-a6">{ {couponInfo===''?'未使用':'-¥'+couponInfo.money}}</view>

            <image class="arrow data-v-a6" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

        </view>

    </view>

    <view class="goods-form data-v-a6 notice-title" wx:if="{ {volumetext.length>0}}">

        <view class="remark-list data-v-a6" style="font-size:24rpx;padding-bottom:20rpx;">

            <view class="title data-v-a6">{ {noticeTitle+'下单须知'}}</view>

            <view class="express-item flex-row data-v-a6" style="padding:10rpx 0rpx 10rpx 0rpx !important;border-bottom:none !important;">

                <view class="info flex-full data-v-a6">

                    <view class="data-v-a6">

                        <view class="t1 data-v-a6">

                            <text class="data-v-a6">{ {volumetext}}</text>

                        </view>

                    </view>

                </view>

            </view>

        </view>

    </view>

    <view class="bottom-container flex-row data-v-a6">

        <view class="flex-full main-box data-v-a6">

            <view class="top flex-row data-v-a6">

                <view class="t1 data-v-a6">运费<text class="val data-v-a6">{ {'¥'+expressValue}}</text>

                </view>

                <view class="old data-v-a6">{ {expressInfo?expressInfo.original_cost:'0.00'}}</view>

                <view bindtap="__e" class="change-btn flex-full flex-row data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'openDetail',['$event'] ] ] ] ]}}">

                    <view class="txt data-v-a6">明细</view>

                    <image class="{ {['icon','data-v-a6',showDetail?'active-icon':'']}}" src="https://express.17huaban.com/attachs/imge/arrow-top.png"></image>

                </view>

            </view>

            <view class="bot data-v-a6">

                <checkbox-group bindchange="__e" class="data-v-a6" data-event-opts="{ {[ [ 'change',[ [ 'changeAgree',['$event'] ] ] ] ]}}">

                    <checkbox class="data-v-a6" value="on"></checkbox>

                    <text bindtap="__e" class="data-v-a6" data-event-opts="{ {[ [ 'tap',[ [ 'skipPage',['/pages/find/agreement/agreement?type=1',null] ] ] ] ]}}">阅读并同意《云递易达寄件服务协议》</text>

                </checkbox-group>

            </view>

        </view>

        <view bindtap="__e" class="{ {['btn','data-v-a6',disabled?'disabled':'']}}" data-event-opts="{ {[ [ 'tap',[ [ 'confirmOrder',['$event'] ] ] ] ]}}">{ {submitName}}</view>

    </view>

    <detail-modal bind:__l="__l" bind:change="__e" class="data-v-a6" coupon="{ {couponInfo===''?'0.00':couponInfo.money}}" data-event-opts="{ {[ [ '^change',[ ['e0'] ] ] ]}}" info="{ {expressInfo}}" insurancePrice="{ {payload.insurancePrice}}" otherCost="{ {expressInfo.otherCost}}" vip="{ {vip}}" vueId="cb4a4e80-1" wx:if="{ {showDetail}}"></detail-modal>

    <express-modal bind:__l="__l" bind:change="__e" class="data-v-a6 vue-ref" data-event-opts="{ {[ [ '^change',[ ['changeExpress'] ] ] ]}}" data-ref="expressModule" vueId="cb4a4e80-2"></express-modal>

    <remark-modal bind:__l="__l" bind:change="__e" bind:input="__e" class="data-v-a6 vue-ref" data-event-opts="{ {[ [ '^change',[ ['changePayload'] ] ],[ '^input',[ [ '__set_model',[ '','expressInfo','$event',[] ] ] ] ] ]}}" data-ref="remarkModule" value="{ {expressInfo}}" vueId="cb4a4e80-3"></remark-modal>

    <select-time-modal bind:__l="__l" bind:change="__e" class="data-v-a6 vue-ref" data-event-opts="{ {[ [ '^change',[ ['changePayload'] ] ] ]}}" data-ref="selectTimeModule" expressInfo="{ {expressInfo}}" payload="{ {payload}}" sendAddr="{ {sendAddr}}" vueId="cb4a4e80-4"></select-time-modal>

    <zb-pay-modal bind:__l="__l" bind:change="__e" class="data-v-a6 vue-ref" data-event-opts="{ {[ [ '^change',[ ['changePay'] ] ] ]}}" data-ref="zbPayModule" vueId="cb4a4e80-5"></zb-pay-modal>

</view> 

实现截图;

 (3)寄件地址簿

关键代码;

 <view class="address-container data-v-a17">

    <view class="search-module data-v-a17">

        <view class="search-box flex-row data-v-a17">

            <input bindblur="__e" bindchange="__e" bindinput="__e" class="ipt flex-full data-v-a17" data-event-opts="{ {[ [ 'change',[ [ 'loadRes',[true] ] ] ],[ 'input',[ [ '__set_model',[ '','addkey','$event',['trim'] ] ] ] ],[ 'blur',[ ['$forceUpdate'] ] ] ]}}" placeholder="请输入联系人姓名或者手机号码" type="text" value="{ {addkey}}"></input>

            <image class="icon data-v-a17" src="https://express.17huaban.com/attachs/imge/search-icon.png"></image>

        </view>

    </view>

    <view class="addlist data-v-a17" wx:if="{ {dataSource.length>0}}">

        <view class="address-item data-v-a17" wx:for="{ {dataSource}}" wx:key="index">

            <view bindtap="__e" class="top data-v-a17" data-event-opts="{ {[ [ 'tap',[ [ 'select',['$0'],[ [ ['dataSource','',index] ] ] ] ] ] ]}}">

                <view class="t1 data-v-a17">{ {''+item.sender_name+''}}<text class="tel data-v-a17">{ {item.sender_phone?item.sender_phone:item.sender_mobile}}</text>

                </view>

                <view class="t2 data-v-a17">{ {item.sender_address}}</view>

            </view>

            <view class="bot flex-row data-v-a17" style="display:flex;justify-content:flex-end;">

                <view bindtap="__e" class="btn-box flex-row data-v-a17" data-event-opts="{ {[ [ 'tap',[ [ 'edit',['$0'],[ [ ['dataSource','',index] ] ] ] ] ] ]}}">

                    <image class="icon data-v-a17" src="https://express.17huaban.com/attachs/imge/edit-btn.png"></image>

                    <text class="flex-full data-v-a17">编辑</text>

                </view>

                <view bindtap="__e" class="btn-box flex-row data-v-a17" data-event-opts="{ {[ [ 'tap',[ [ 'remove',['$0'],[ [ ['dataSource','',index,'id'] ] ] ] ] ] ]}}">

                    <image class="icon data-v-a17" src="https://express.17huaban.com/attachs/imge/delete-btn.png"></image>

                    <text class="flex-full data-v-a17">删除</text>

                </view>

            </view>

        </view>

    </view>

    <empty bind:__l="__l" class="data-v-a17" vueId="7a5cd8ee-1" wx:else></empty>

    <view bindtap="__e" class="add-btn data-v-a17" data-event-opts="{ {[ [ 'tap',[ [ 'edit',[null] ] ] ] ]}}">{ {buttonTitle}}</view>

</view> 

实现截图;

 (4)地址添加编辑

关键代码;

 <view class="address-edit data-v-a19">

    <view class="goods-form data-v-a19">

        <view class="form-item data-v-a19" style="height:235rpx;">

            <textarea bindblur="__e" bindinput="__e" class="data-v-a19" data-event-opts="{ {[ [ 'input',[ [ '__set_model',[ '','content','$event',['trim'] ] ] ] ],[ 'blur',[ ['$forceUpdate'] ] ] ]}}" maxlength="200" placeholder="粘贴地址信息,自动拆分姓名、地址和联系方式。例:张三 13566666666 上海市上海市青浦区xx镇xx路xx号。识别后请仔细检查地址是否有误!" style="height:155rpx;line-height:36rpx;" value="{ {content}}"></textarea>

            <button bindtap="__e" class="mini-btn shibie data-v-a19" data-event-opts="{ {[ [ 'tap',[ [ 'aiarea',['$event'] ] ] ] ]}}" size="mini" type="default">识别</button>

        </view>

    </view>

    <view class="goods-form data-v-a19">

        <view class="form-item flex-row data-v-a19">

            <view class="name data-v-a19">联系人</view>

            <input bindblur="__e" bindinput="__e" class="flex-full value data-v-a19" data-event-opts="{ {[ [ 'input',[ [ '__set_model',[ '$0','name','$event',['trim'] ],['payload'] ] ] ],[ 'blur',[ ['$forceUpdate'] ] ] ]}}" placeholder="请输入" type="text" value="{ {payload.name}}"></input>

        </view>

        <view class="form-item flex-row data-v-a19">

            <view class="name data-v-a19">手机号码</view>

            <input bindblur="__e" bindinput="__e" class="flex-full value data-v-a19" data-event-opts="{ {[ [ 'input',[ [ '__set_model',[ '$0','phone','$event',['trim'] ],['payload'] ] ] ],[ 'blur',[ ['$forceUpdate'] ] ] ]}}" placeholder="例如:13566666666" type="number" value="{ {payload.phone}}"></input>

        </view>

        <view class="form-item flex-row data-v-a19">

            <view class="name data-v-a19">固定电话</view>

            <input bindblur="__e" bindinput="__e" class="flex-full value data-v-a19" data-event-opts="{ {[ [ 'input',[ [ '__set_model',[ '$0','mobile','$event',['trim'] ],['payload'] ] ] ],[ 'blur',[ ['$forceUpdate'] ] ] ]}}" placeholder="选填,例如:055112345678" type="number" value="{ {payload.mobile}}"></input>

        </view>

        <pick-regions bind:__l="__l" bind:getRegion="__e" class="data-v-a19" data-event-opts="{ {[ [ '^getRegion',[ ['handleGetRegion'] ] ] ]}}" defaultRegion="{ {defaultRegion}}" vueId="162b6693-1" vueSlots="{ {['default']}}">

            <view class="form-item flex-row data-v-a19">

                <view class="name data-v-a19">所在地区</view>

                <input class="flex-full value data-v-a19" disabled="{ {true}}" placeholder="请选择" type="text" wx:if="{ {payload.area===''}}"></input>

                <view class="flex-full value data-v-a19" wx:else>{ {payload.province+'-'+payload.city+'-'+payload.area}}</view>

                <image class="arrow data-v-a19" src="https://express.17huaban.com/attachs/imge/arrow-right.png"></image>

            </view>

        </pick-regions>

        <view class="form-item flex-row data-v-a19">

            <view class="name data-v-a19">详细地址</view>

            <input bindblur="__e" bindinput="__e" class="flex-full value data-v-a19" data-event-opts="{ {[ [ 'input',[ [ '__set_model',[ '$0','address','$event',['trim'] ],['payload'] ] ] ],[ 'blur',[ ['$forceUpdate'] ] ] ]}}" maxlength="60" placeholder="请输入" type="text" value="{ {payload.address}}"></input>

        </view>

    </view>

    <view bindtap="__e" class="submit-btn data-v-a19" data-event-opts="{ {[ [ 'tap',[ [ 'submit',['$event'] ] ] ] ]}}">确定</view>

</view> 

实现截图;

9.测试

当前小程序由于是开发版,并未发布因此不可对外让用户使用,可不可以生成小程序二维码让用户扫码去使用,仅可以在电脑的模拟器或者本人的手机上,因此没有办法测试小程序的兼容性。但是,在这里对本系统的功能进行了大量功能性测试,具体内容如下所示。

(1)测试目的

软件测试的目的是为了发现并纠正软件中的错误、缺陷和漏洞,以确保软件产品的质量和稳定性,提高用户的满意度和信任度。同时,软件测试也可以帮助开发团队发现潜在的问题,并为软件产品的改进提供支持。

(2)小程序的核心功能测试过程

以下部分是对小程序端主要功能的测试,包括了:

① 微信登录;

② 寄快递信息填写;

③ 选择地址簿,添加地址;

④ 下单支付的功能;

⑤ 历史下单记录功能查看;

⑥ 查快递;

⑦ 查运费。

测试结果如表11.1:

表11.1测试结果表

功能模块

测试结果

微信登录功能

未发现问题

寄快递信息填写

未发现问题

选择地址簿,添加地址

未发现问题

下单支付的功能

未发现问题

历史下单记录功能查看

未发现问题

查快递

未发现问题

查运费

未发现问题

以下部分是对后台管理系统主要功能的测试,包括了:

① 后台登录;

② 管理员管理;

③ 会员管理;

④ 订单管理功能;

⑤ 帮助中心管理;

⑥ 用户地址管理。

测试结果如表11.2:

表11.2测试结果表

功能模块

测试结果

后台登录

未发现问题

管理员管理

未发现问题

会员管理

未发现问题

订单管理功能

未发现问题

帮助中心管理

未发现问题

用户地址管理

未发现问题

喜欢的点赞收藏加关注私信沟通 

猜你喜欢

转载自blog.csdn.net/lf21qp/article/details/131218150