first commit

main
xuziying 1 year ago
commit ec53f829e6
  1. 31
      .eslintrc.js
  2. 19
      app.js
  3. 44
      app.json
  4. 18
      app.wxss
  5. 265
      components/echarts/ec-canvas.js
  6. 4
      components/echarts/ec-canvas.json
  7. 4
      components/echarts/ec-canvas.wxml
  8. 4
      components/echarts/ec-canvas.wxss
  9. 45
      components/echarts/echarts.js
  10. 111
      components/echarts/wx-canvas.js
  11. BIN
      images/banner.png
  12. BIN
      images/bush.png
  13. BIN
      images/意见反馈.png
  14. BIN
      images/我的1.png
  15. BIN
      images/我的2.png
  16. BIN
      images/第三方物流.png
  17. BIN
      images/绑定微信.png
  18. BIN
      images/统计.png
  19. BIN
      images/自建物流.png
  20. BIN
      images/货运物流.png
  21. BIN
      images/首页1.png
  22. BIN
      images/首页2.png
  23. 118
      pages/about/about.js
  24. 4
      pages/about/about.json
  25. 39
      pages/about/about.wxml
  26. 63
      pages/about/about.wxss
  27. 66
      pages/details/details.js
  28. 4
      pages/details/details.json
  29. 53
      pages/details/details.wxml
  30. 18
      pages/details/details.wxss
  31. 130
      pages/feedback/feedback.js
  32. 4
      pages/feedback/feedback.json
  33. 28
      pages/feedback/feedback.wxml
  34. 59
      pages/feedback/feedback.wxss
  35. 232
      pages/freiLogistics/freiLogistics.js
  36. 4
      pages/freiLogistics/freiLogistics.json
  37. 101
      pages/freiLogistics/freiLogistics.wxml
  38. 139
      pages/freiLogistics/freiLogistics.wxss
  39. 85
      pages/handover/handover.js
  40. 4
      pages/handover/handover.json
  41. 54
      pages/handover/handover.wxml
  42. 84
      pages/handover/handover.wxss
  43. 137
      pages/index/index.js
  44. 6
      pages/index/index.json
  45. 37
      pages/index/index.wxml
  46. 70
      pages/index/index.wxss
  47. 66
      pages/login/login.js
  48. 4
      pages/login/login.json
  49. 18
      pages/login/login.wxml
  50. 43
      pages/login/login.wxss
  51. 299
      pages/meLogistics/meLogistics.js
  52. 4
      pages/meLogistics/meLogistics.json
  53. 111
      pages/meLogistics/meLogistics.wxml
  54. 139
      pages/meLogistics/meLogistics.wxss
  55. 100
      pages/queryfrei/queryfrei.js
  56. 4
      pages/queryfrei/queryfrei.json
  57. 67
      pages/queryfrei/queryfrei.wxml
  58. 71
      pages/queryfrei/queryfrei.wxss
  59. 100
      pages/queryme/queryme.js
  60. 4
      pages/queryme/queryme.json
  61. 72
      pages/queryme/queryme.wxml
  62. 75
      pages/queryme/queryme.wxss
  63. 100
      pages/querythree/querythree.js
  64. 4
      pages/querythree/querythree.json
  65. 67
      pages/querythree/querythree.wxml
  66. 72
      pages/querythree/querythree.wxss
  67. 232
      pages/threeLogistics/threeLogistics.js
  68. 4
      pages/threeLogistics/threeLogistics.json
  69. 100
      pages/threeLogistics/threeLogistics.wxml
  70. 139
      pages/threeLogistics/threeLogistics.wxss
  71. 56
      project.config.json
  72. 90
      project.private.config.json
  73. 7
      sitemap.json
  74. 87
      utils/dateSetting.js

@ -0,0 +1,31 @@
/*
* Eslint config file
* Documentation: https://eslint.org/docs/user-guide/configuring/
* Install the Eslint extension before using this feature.
*/
module.exports = {
env: {
es6: true,
browser: true,
node: true,
},
ecmaFeatures: {
modules: true,
},
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
},
globals: {
wx: true,
App: true,
Page: true,
getCurrentPages: true,
getApp: true,
Component: true,
requirePlugin: true,
requireMiniProgram: true,
},
// extends: 'eslint:recommended',
rules: {},
}

@ -0,0 +1,19 @@
// app.js
App({
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
},
globalData: {
userInfo: null
}
})

@ -0,0 +1,44 @@
{
"pages": [
"pages/index/index",
"pages/about/about",
"pages/meLogistics/meLogistics",
"pages/details/details",
"pages/threeLogistics/threeLogistics",
"pages/freiLogistics/freiLogistics",
"pages/queryme/queryme",
"pages/querythree/querythree",
"pages/queryfrei/queryfrei",
"pages/feedback/feedback",
"pages/handover/handover",
"pages/login/login"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#27adb0",
"navigationBarTitleText": "物流端",
"navigationBarTextStyle": "white",
"backgroundColor": "#27adb0"
},
"tabBar": {
"color": "#000",
"selectedColor": "#27adb0",
"borderStyle": "black",
"list": [
{
"iconPath": "images/首页1.png",
"selectedIconPath": "images/首页2.png",
"pagePath": "pages/index/index",
"text": "首页"
},
{
"iconPath": "images/我的1.png",
"selectedIconPath": "images/我的2.png",
"pagePath": "pages/about/about",
"text": "我的"
}
]
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}

@ -0,0 +1,18 @@
/**app.wxss**/
page{
background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1)
}
.box{
background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1);
min-height: 1300rpx;
padding: 20rpx;
font-size: 28rpx;
}
.back{
padding: 20rpx;
border-radius: 15rpx;
background-color: #fff;
border: 1rpx #eceaea solid;
}

@ -0,0 +1,265 @@
import WxCanvas from './wx-canvas';
import * as echarts from './echarts';
let ctx;
function compareVersion(v1, v2) {
v1 = v1.split('.')
v2 = v2.split('.')
const len = Math.max(v1.length, v2.length)
while (v1.length < len) {
v1.push('0')
}
while (v2.length < len) {
v2.push('0')
}
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i])
const num2 = parseInt(v2[i])
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
return 0
}
Component({
properties: {
canvasId: {
type: String,
value: 'ec-canvas'
},
ec: {
type: Object
},
forceUseOldCanvas: {
type: Boolean,
value: false
}
},
data: {
isUseNewCanvas: false
},
ready: function () {
// Disable prograssive because drawImage doesn't support DOM as parameter
// See https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html
echarts.registerPreprocessor(option => {
if (option && option.series) {
if (option.series.length > 0) {
option.series.forEach(series => {
series.progressive = 0;
});
}
else if (typeof option.series === 'object') {
option.series.progressive = 0;
}
}
});
if (!this.data.ec) {
console.warn('组件需绑定 ec 变量,例:<ec-canvas id="mychart-dom-bar" '
+ 'canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>');
return;
}
if (!this.data.ec.lazyLoad) {
this.init();
}
},
methods: {
init: function (callback) {
const version = wx.getSystemInfoSync().SDKVersion
const canUseNewCanvas = compareVersion(version, '2.9.0') >= 0;
const forceUseOldCanvas = this.data.forceUseOldCanvas;
const isUseNewCanvas = canUseNewCanvas && !forceUseOldCanvas;
this.setData({ isUseNewCanvas });
if (forceUseOldCanvas && canUseNewCanvas) {
console.warn('开发者强制使用旧canvas,建议关闭');
}
if (isUseNewCanvas) {
// console.log('微信基础库版本大于2.9.0,开始使用<canvas type="2d"/>');
// 2.9.0 可以使用 <canvas type="2d"></canvas>
this.initByNewWay(callback);
} else {
const isValid = compareVersion(version, '1.9.91') >= 0
if (!isValid) {
console.error('微信基础库版本过低,需大于等于 1.9.91。'
+ '参见:https://github.com/ecomfe/echarts-for-weixin'
+ '#%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82');
return;
} else {
console.warn('建议将微信基础库调整大于等于2.9.0版本。升级后绘图将有更好性能');
this.initByOldWay(callback);
}
}
},
initByOldWay(callback) {
// 1.9.91 <= version < 2.9.0:原来的方式初始化
ctx = wx.createCanvasContext(this.data.canvasId, this);
const canvas = new WxCanvas(ctx, this.data.canvasId, false);
echarts.setCanvasCreator(() => {
return canvas;
});
// const canvasDpr = wx.getSystemInfoSync().pixelRatio // 微信旧的canvas不能传入dpr
const canvasDpr = 1
var query = wx.createSelectorQuery().in(this);
query.select('.ec-canvas').boundingClientRect(res => {
if (typeof callback === 'function') {
this.chart = callback(canvas, res.width, res.height, canvasDpr);
}
else if (this.data.ec && typeof this.data.ec.onInit === 'function') {
this.chart = this.data.ec.onInit(canvas, res.width, res.height, canvasDpr);
}
else {
this.triggerEvent('init', {
canvas: canvas,
width: res.width,
height: res.height,
canvasDpr: canvasDpr // 增加了dpr,可方便外面echarts.init
});
}
}).exec();
},
initByNewWay(callback) {
// version >= 2.9.0:使用新的方式初始化
const query = wx.createSelectorQuery().in(this)
query
.select('.ec-canvas')
.fields({ node: true, size: true })
.exec(res => {
const canvasNode = res[0].node
this.canvasNode = canvasNode
const canvasDpr = wx.getSystemInfoSync().pixelRatio
const canvasWidth = res[0].width
const canvasHeight = res[0].height
const ctx = canvasNode.getContext('2d')
const canvas = new WxCanvas(ctx, this.data.canvasId, true, canvasNode)
echarts.setCanvasCreator(() => {
return canvas
})
if (typeof callback === 'function') {
this.chart = callback(canvas, canvasWidth, canvasHeight, canvasDpr)
} else if (this.data.ec && typeof this.data.ec.onInit === 'function') {
this.chart = this.data.ec.onInit(canvas, canvasWidth, canvasHeight, canvasDpr)
} else {
this.triggerEvent('init', {
canvas: canvas,
width: canvasWidth,
height: canvasHeight,
dpr: canvasDpr
})
}
})
},
canvasToTempFilePath(opt) {
if (this.data.isUseNewCanvas) {
// 新版
const query = wx.createSelectorQuery().in(this)
query
.select('.ec-canvas')
.fields({ node: true, size: true })
.exec(res => {
const canvasNode = res[0].node
opt.canvas = canvasNode
wx.canvasToTempFilePath(opt)
})
} else {
// 旧的
if (!opt.canvasId) {
opt.canvasId = this.data.canvasId;
}
ctx.draw(true, () => {
wx.canvasToTempFilePath(opt, this);
});
}
},
touchStart(e) {
if (this.chart && e.touches.length > 0) {
var touch = e.touches[0];
var handler = this.chart.getZr().handler;
handler.dispatch('mousedown', {
zrX: touch.x,
zrY: touch.y,
preventDefault: () => {},
stopImmediatePropagation: () => {},
stopPropagation: () => {}
});
handler.dispatch('mousemove', {
zrX: touch.x,
zrY: touch.y,
preventDefault: () => {},
stopImmediatePropagation: () => {},
stopPropagation: () => {}
});
handler.processGesture(wrapTouch(e), 'start');
}
},
touchMove(e) {
if (this.chart && e.touches.length > 0) {
var touch = e.touches[0];
var handler = this.chart.getZr().handler;
handler.dispatch('mousemove', {
zrX: touch.x,
zrY: touch.y,
preventDefault: () => {},
stopImmediatePropagation: () => {},
stopPropagation: () => {}
});
handler.processGesture(wrapTouch(e), 'change');
}
},
touchEnd(e) {
if (this.chart) {
const touch = e.changedTouches ? e.changedTouches[0] : {};
var handler = this.chart.getZr().handler;
handler.dispatch('mouseup', {
zrX: touch.x,
zrY: touch.y,
preventDefault: () => {},
stopImmediatePropagation: () => {},
stopPropagation: () => {}
});
handler.dispatch('click', {
zrX: touch.x,
zrY: touch.y,
preventDefault: () => {},
stopImmediatePropagation: () => {},
stopPropagation: () => {}
});
handler.processGesture(wrapTouch(e), 'end');
}
}
}
});
function wrapTouch(event) {
for (let i = 0; i < event.touches.length; ++i) {
const touch = event.touches[i];
touch.offsetX = touch.x;
touch.offsetY = touch.y;
}
return event;
}

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

@ -0,0 +1,4 @@
<!-- 新的:接口对其了H5 -->
<canvas wx:if="{{isUseNewCanvas}}" type="2d" class="ec-canvas" canvas-id="{{ canvasId }}" bindinit="init" bindtouchstart="{{ ec.disableTouch ? '' : 'touchStart' }}" bindtouchmove="{{ ec.disableTouch ? '' : 'touchMove' }}" bindtouchend="{{ ec.disableTouch ? '' : 'touchEnd' }}"></canvas>
<!-- 旧的 -->
<canvas wx:else class="ec-canvas" canvas-id="{{ canvasId }}" bindinit="init" bindtouchstart="{{ ec.disableTouch ? '' : 'touchStart' }}" bindtouchmove="{{ ec.disableTouch ? '' : 'touchMove' }}" bindtouchend="{{ ec.disableTouch ? '' : 'touchEnd' }}"></canvas>

@ -0,0 +1,4 @@
.ec-canvas {
width: 100%;
height: 100%;
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,111 @@
export default class WxCanvas {
constructor(ctx, canvasId, isNew, canvasNode) {
this.ctx = ctx;
this.canvasId = canvasId;
this.chart = null;
this.isNew = isNew
if (isNew) {
this.canvasNode = canvasNode;
}
else {
this._initStyle(ctx);
}
// this._initCanvas(zrender, ctx);
this._initEvent();
}
getContext(contextType) {
if (contextType === '2d') {
return this.ctx;
}
}
// canvasToTempFilePath(opt) {
// if (!opt.canvasId) {
// opt.canvasId = this.canvasId;
// }
// return wx.canvasToTempFilePath(opt, this);
// }
setChart(chart) {
this.chart = chart;
}
addEventListener() {
// noop
}
attachEvent() {
// noop
}
detachEvent() {
// noop
}
_initCanvas(zrender, ctx) {
zrender.util.getContext = function () {
return ctx;
};
zrender.util.$override('measureText', function (text, font) {
ctx.font = font || '12px sans-serif';
return ctx.measureText(text);
});
}
_initStyle(ctx) {
ctx.createRadialGradient = () => {
return ctx.createCircularGradient(arguments);
};
}
_initEvent() {
this.event = {};
const eventNames = [{
wxName: 'touchStart',
ecName: 'mousedown'
}, {
wxName: 'touchMove',
ecName: 'mousemove'
}, {
wxName: 'touchEnd',
ecName: 'mouseup'
}, {
wxName: 'touchEnd',
ecName: 'click'
}];
eventNames.forEach(name => {
this.event[name.wxName] = e => {
const touch = e.touches[0];
this.chart.getZr().handler.dispatch(name.ecName, {
zrX: name.wxName === 'tap' ? touch.clientX : touch.x,
zrY: name.wxName === 'tap' ? touch.clientY : touch.y,
preventDefault: () => {},
stopImmediatePropagation: () => {},
stopPropagation: () => {}
});
};
});
}
set width(w) {
if (this.canvasNode) this.canvasNode.width = w
}
set height(h) {
if (this.canvasNode) this.canvasNode.height = h
}
get width() {
if (this.canvasNode)
return this.canvasNode.width
return 0
}
get height() {
if (this.canvasNode)
return this.canvasNode.height
return 0
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

@ -0,0 +1,118 @@
// pages/about/about.js
Page({
/**
* 页面的初始数据
*/
data: {
username:'立即登录'
},
bindWx(){
wx.showModal({
title: '绑定微信',
content: '平台账号与微信账号绑定后,可以直接用微信进行登录,是否进行绑定?',
confirmText:'绑定',
complete: (res) => {
if (res.confirm) {
wx.login({
success: (res) => {
// console.log(res);
},
})
}
if (res.cancel) {
}
}
})
},
goQueryme(){
wx.navigateTo({
url: '../queryme/queryme',
})
},
goQuerythree(){
wx.navigateTo({
url: '../querythree/querythree',
})
},
goQueryfrei(){
wx.navigateTo({
url: '../queryfrei/queryfrei',
})
},
goFeekback(){
wx.navigateTo({
url: '../feedback/feedback',
})
},
goLogin(){
wx.navigateTo({
url: '../login/login',
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "我的"
}

@ -0,0 +1,39 @@
<!--pages/about/about.wxml-->
<view class="box">
<view class="top" >
<view class="userinfo">
<open-data type="userAvatarUrl"class="userimg" ></open-data>
<!-- <open-data type="userNickName"></open-data> -->
<view class="userNickName" bindtap="goLogin">{{username}}</view>
</view>
</view>
<view class="back">
<view class="com">
<view class="con">
<image src="../../images/绑定微信.png" bindtap="bindWx"></image>
<view class="text">绑定微信</view>
</view>
<view class="con" bindtap="goQueryme">
<image src="../../images/统计.png"></image>
<view class="text">自建物流查询</view>
</view>
<view class="con" bindtap="goQuerythree">
<image src="../../images/统计.png"></image>
<view class="text">第三方物流查询</view>
</view>
<view class="con" bindtap="goQueryfrei">
<image src="../../images/统计.png"></image>
<view class="text">货运物流查询</view>
</view>
<view class="con" bindtap="goFeekback">
<image src="../../images/意见反馈.png"></image>
<view class="text">意见反馈</view>
</view>
</view>
</view>
<view class="out" >退出登录</view>
</view>

@ -0,0 +1,63 @@
/* pages/about/about.wxss */
.top{
padding: 20rpx;
min-height: 350rpx;
display: flex;
align-items: center;
}
.userinfo{
padding: 10rpx;
display: flex;
align-items: center;
}
.userimg{
width: 160rpx;
height: 160rpx;
display: inline-block;
overflow: hidden;
border-radius: 50%;
border: 1rpx solid #eee;
margin-right: 40rpx;
}
.userNickName{
font-size: 30rpx;
}
.com{
width: 100%;
display: flex;
flex-wrap: wrap;
height: 350rpx;
}
.con{
width: 140rpx;
margin-left: 10rpx;
text-align: center;
margin-top: 40rpx;
width: 200rpx;
}
.con image{
width: 70rpx;
height: 60rpx;
}
.con .text{
font-size: 22rpx;
}
.out{
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 30rpx;
width: 100%;
height: 80rpx;
border:2rpx #888 solid;
background-color: #ff8c8c;
margin-top: 250rpx;
border-radius: 15rpx;
}

@ -0,0 +1,66 @@
// pages/details/details.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "详情"
}

@ -0,0 +1,53 @@
<!--pages/details/details.wxml-->
<view class="box">
<view class="back">
<view class="cen">
<label>样本条码:</label>
<view>2023050002</view>
</view>
<view class="cen">
<label>接收时间:</label>
<view>2023-5-12 11:32</view>
</view>
<view class="cen">
<label>样本状态:</label>
<view>已接收</view>
</view>
<view class="cen">
<label>物流单号:</label>
<view>M2023055568</view>
</view>
<view class="cen">
<label>物流单位:</label>
<view>顺丰</view>
</view>
<view class="cen">
<label>日 期:</label>
<view>2023-5-12 11:32</view>
</view>
<view class="cen">
<label>物流费用:</label>
<view>20.00</view>
</view>
<view class="cen">
<label>到达日期:</label>
<view>2023-5-12 16:00</view>
</view>
<view class="cen">
<label>转运箱号:</label>
<view>Z564687</view>
</view>
<view class="cen">
<label>物流车号:</label>
<view>京B85D6S</view>
</view>
<view class="cen">
<label>物流员:</label>
<view>张三</view>
</view>
<view class="cen">
<label>备 注:</label>
<view>无</view>
</view>
</view>
</view>

@ -0,0 +1,18 @@
/* pages/details/details.wxss */
.cen{
/* border-bottom: 1rpx #ececec solid; */
padding: 10rpx 20rpx;
display: flex;
}
.cen label{
width: 150rpx;
text-align: right;
margin-right: 20rpx;
}
.cen view{
background-color: #eee;
padding: 10rpx 30rpx;
width: 300rpx;
flex: 1;
border-radius: 15rpx;
}

@ -0,0 +1,130 @@
// pages/feedback/feedback.js
Page({
/**
* 页面的初始数据
*/
data: {
array: ['请选择 >','bug问题', '业务问题', '功能使用问题', '其他'],
objectArray: [
{
id: 0,
name: '请选择 >'
},
{
id: 1,
name: 'bug问题'
},
{
id: 2,
name: '业务问题'
},
{
id: 3,
name: '功能使用问题'
},
{
id: 4,
name: '其他'
}
],
index: 0,
srxI:''
},
bindPickerChange (e) {
this.setData({
index: e.detail.value
})
},
goMyorder(){
wx.switchTab({
url: '../about/about',
})
},
addImage(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
this.setData({
srcI:res.tempFiles[0].tempFilePath
})
console.log(this.data.srcI)
console.log(res.tempFiles[0].tempFilePath)
// this.up();
}
})
},
//上传图片接口地址
// up(){
// console.log(this.data.srcI)
// wx.uploadFile({
// filePath: this.data.srcI,
// name: 'file',
// url: '',
// })
// },
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "意见反馈"
}

@ -0,0 +1,28 @@
<!--pages/feedback/feedback.wxml-->
<view style="background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1);padding:20rpx;min-height: 1400rpx;" >
<view style="background-color: #fff;padding: 20rpx 30rpx 100rpx 30rpx;border-radius: 15rpx;">
<view style="font-size: 28rpx;">
<view style="display: flex;">
<text>问题类型</text>
<picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}" style="flex: 1;">
<text class="why">{{array[index]}}</text>
</picker>
</view>
<textarea class="textarea" placeholder="补充描述,有助于更好的处理问题。" placeholder-class="place"></textarea>
</view>
<view style="margin-top: 60rpx; font-size: 26rpx;">
<view>上传图片/截图</view>
<view class="addimg">
<image src="../../images/banner.png"></image>
<view bindtap="addImage">+</view>
</view>
</view>
</view>
<button class="btn" bindtap="goMyorder">提 交</button>
</view>

@ -0,0 +1,59 @@
/* pages/feedback/feedback.wxss */
page{
background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1)
}
.why{
border: 1px #333 solid;
display: inline-block;
width: 240rpx;
text-align: right;
margin-left: 20rpx;
padding: 3rpx 10rpx;
color: #5f5e5e;
border-radius: 5rpx;
}
.place{
color: #b3b1b1;
}
.textarea{
border: 2rpx #333 solid;
text-align: left;
max-width: 450rpx;
height: 180rpx;
margin: 0 auto;
margin-top: 20rpx;
font-size: 24rpx;
padding: 20rpx;
}
.addimg{
text-align: center;
display: flex;
flex-wrap: wrap;
justify-content: center;
margin-top: 20rpx;
}
.addimg image{
width: 200rpx;
height: 200rpx;
border-radius: 15rpx;
margin-right: 10rpx;
}
.addimg view{
border-radius:15rpx ;
display: flex;
justify-content: center;
align-items: center;
width: 200rpx;
height: 200rpx;
border:1rpx #222 solid;
}
.btn{
background-color: #5dc2c4;
color: #fff;
margin-top: 100rpx;
}

@ -0,0 +1,232 @@
var datePicker = require('../../utils/dateSetting')
Page({
data: {
list:[
{
'id':1,
'number':'2023050002',
'time':'2023-5-12 11:32',
'status':'已签收',
'name':'张三',
'num':'M2023055568'
},
{
'id':2,
'number':'2023050002',
'time':'2023-5-12 11:32',
'status':'已签收',
'name':'李四',
'num':'M2023055568'
}
],
pipenum:'',
ins: ['私家车','大巴',],
date: '',
start:'2020-01-01',
end:'',
time: '',
multiArray: [],
multiIndex: [0, 0, 0, 0, 0],
choose_year: "",
srcArray:[]
},
scacode(){
wx.scanCode({
success:(res)=>{
console.log(res.result);
this.setData({
pipenum:res.result
})
}
})
},
phot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
console.log(this.data.srcI)
console.log(res.tempFiles[0].tempFilePath)
// this.up();
}
})
},
//上传图片接口地址
// up(){
// console.log(this.data.srcI)
// wx.uploadFile({
// filePath: this.data.srcI,
// name: 'file',
// url: '',
// })
// },
bushPhot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
// this.up();
}
})
},
boxPhot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
// this.up();
}
})
},
//送检机构
bindPickerChange(e) {
this.setData({
index: e.detail.value
})
},
//日期
bindDateChange(e){
// console.log(e.detail.value)
this.setData({
date:e.detail.value
})
},
//最后呈现时间的函数。
bindMultiPickerChange: function (e) {
var dateStr = this.data.multiArray[0][this.data.multiIndex[0]] +
this.data.multiArray[1][this.data.multiIndex[1]] +
this.data.multiArray[2][this.data.multiIndex[2]] +
this.data.multiArray[3][this.data.multiIndex[3]] +
this.data.multiArray[4][this.data.multiIndex[4]];
this.setData({
time: dateStr
})
},
//当时间选择器呈现并进行滚动选择时间时调用该函数。开始
bindMultiPickerColumnChange: function (e) {
//e.detail.column记录哪一行发生改变,e.detail.value记录改变的值(相当于multiIndex)
switch (e.detail.column) {
//这里case的值有0/1/2/3/4,但除了需要记录年和月来确定具体的天数外,其他的都可以暂不在switch中处理。
case 0:
//记录改变的年的值
let year = this.data.multiArray[0][e.detail.value];
this.setData({
choose_year: year.substring(0, year.length - 1)
})
break;
case 1:
//根据选择的年与月,确定天数,并改变multiArray中天的具体值
let month = this.data.multiArray[1][e.detail.value];
let dayDates = datePicker.determineDay(this.data.choose_year, month.substring(0, month.length - 1));
//这里需要额外注意,改变page中设定的data,且只要改变data中某一个值,可以采用下面这种方法
this.setData({
['multiArray[2]']: dayDates
})
break;
}
//改变一个一维数组中某一个值,可供参考。
this.setData({
["multiIndex[" + e.detail.column + "]"]: e.detail.value
})
},
goDetail(){
wx.navigateTo({
url: '../details/details',
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let now = new Date(); //获取时间
let year = now.getFullYear(); //获取当前年
let month = now.getMonth() + 1; //获取当前月份
this.setData({
end: '' + year + '-' + (Array(2).join(0) + month).slice(-2) + '-' + (Array(2).join(0) + now.getDate()).slice(-2),//当前的时间
//开始
multiArray:
[
[year + "年", year + 1 + "年", year + 2 + "年"],
datePicker.determineMonth(),
datePicker.determineDay(year, month),
datePicker.determineHour(),
datePicker.determineMinute()
],
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "物流签收"
}

@ -0,0 +1,101 @@
<view class="box">
<view class="back">
<view class="top">
<input type="text" value="{{pipenum}}"/>
<view style="background-color: #eee;" bindtap="scacode">扫 码</view>
<view style="background-color: #23c559; color: #fff;" bindtap="phot">拍 照</view>
</view>
<view class="form">
<picker class="from-con" bindchange="bindPickerChange" value="{{index}}" range="{{ins}}">
<label>转运方式:</label>
<input type="text" disabled="true" placeholder="请选择转运方式" placeholder-class="place" value="{{ins[index]}}"/>
</picker>
<view class="from-con">
<label>转运箱号</label>
<input type="text" placeholder="转运箱号" placeholder-class="place" value=""/>
</view>
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChange" class="from-con">
<label>日 期:</label>
<input type="text" disabled="true" placeholder="请选择日期" placeholder-class="place" value="{{date}}"/>
</picker>
<view class="from-con">
<label>物流电话:</label>
<input type="text" placeholder="物流电话" placeholder-class="place"/>
</view>
<view class="from-con">
<label>物流费用:</label>
<input type="text" placeholder="物流费用" placeholder-class="place" value=""/>
</view>
<picker class="from-con" mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
<label>到达时间:</label>
<input value='{{time}}' placeholder='请选择到达时间' placeholder-class="place" disabled="true"/>
</picker>
<view class="from-con">
<label>车牌号:</label>
<input type="text" placeholder="车牌号" placeholder-class="place" value=""/>
</view>
<view class="from-con">
<label>物流员:</label>
<input type="text" placeholder="物流员" placeholder-class="place" value=""/>
</view>
<view class="from-con">
<label>备 注:</label>
<input type="text" placeholder="备注" placeholder-class="place" value=""/>
</view>
</view>
</view>
<view class="back">
<view class="bush">
<view style="flex: 1;">物流车拍照</view>
<button bindtap="bushPhot">拍 照</button>
</view>
<view class="bush-img">
<image src="../../images/bush.png"></image>
<image src="../../images/bush.png"></image>
</view>
</view>
<view class="back">
<view class="bush">
<view style="flex: 1;">转运箱拍照</view>
<button bindtap="boxPhot">拍 照</button>
</view>
<view class="bush-img">
<image src="../../images/bush.png"></image>
<image src="../../images/bush.png"></image>
</view>
</view>
<view class="back">
<view class="con">
<view style="flex: 1;">总计:200/管数</view>
<button style="background-color: #ddd;">修 改</button>
<button style="color: #fff;">保 存</button>
</view>
<scroll-view scroll-x class="tabel">
<view class="tr tab-top">
<view class="td1">序号</view>
<view class="td">样本条码号</view>
<view class="td">接收时间</view>
<view class="td">样本状态</view>
<view class="td">物流员</view>
<view class="td">物流单号</view>
</view>
<view class="tr" wx:for="{{list}}" wx:key="index" bindtap="goDetail">
<view class="td1">{{item.id}}</view>
<view class="td">{{item.number}}</view>
<view class="td">{{item.time}}</view>
<view class="td">{{item.status}}</view>
<view class="td">{{item.name}}</view>
<view class="td">{{item.num}}</view>
</view>
</scroll-view>
</view>
</view>

@ -0,0 +1,139 @@
/* pages/meLogistics/meLogistics.wxss */
.top{
display: flex;
justify-content: center;
font-size: 28rpx;
}
.top input{
border: 1rpx #333 solid;
border-radius: 10rpx;
padding: 5rpx 10rpx;
}
.top view{
width: 135rpx;
margin-left: 20rpx;
background-color: #eee;
display: flex;
justify-content: center;
align-items: center;
border-radius: 10rpx;
color: #333;
font-weight: 700;
}
.form{
background-color: #fff;
border-radius: 15rpx;
padding: 0rpx 30rpx;
margin-bottom: 15rpx;
}
.form .from-con{
font-size: 28rpx;
border-bottom: 2rpx #eee solid;
position: relative;
margin-top: 25rpx;
}
.from-con label{
position: absolute;
top: 5rpx;
font-weight: 900;
font-size: 28rpx;
color: #333;
}
.from-con input{
text-align: right;
padding: 10rpx;
}
.place{
color:#c4bfbf;
}
.bush{
display: flex;
justify-content:space-between;
align-items: center;
}
.bush button{
width: 200rpx !important;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
background-color: #23c559;
color:#fff;
height: 55rpx;
}
.bush-img{
display: flex;
flex-wrap: wrap;
justify-content:space-around;
padding: 20rpx 10rpx;
}
.bush-img image{
width: 270rpx;
height: 230rpx;
margin-top: 10rpx;
border: 1rpx solid #999;
/* border-radius: 15rpx; */
}
.back{
margin-top: 15rpx;
}
.con{
display: flex;
align-items: center;
}
.con button{
width: 170rpx !important;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
background-color: rgb(245, 90, 90);
height: 55rpx;
margin-left: 10rpx !important;
}
.tabel{
margin-top: 20rpx;
width: 100%;
border: 1rpx #ddd solid;
}
.tabel .tr{
display: flex;
flex-wrap: nowrap;
white-space: nowrap;
}
.tr .td{
border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 200rpx;
}
.tab-top view{
background-color: #51bdbe;
color:#fff;
font-weight: 700;
font-size: 28rpx;
}
.td1{
border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 100rpx;
}

@ -0,0 +1,85 @@
// pages/handover/handover.js
Page({
/**
* 页面的初始数据
*/
data: {
date: '',
start:'2020-01-01',
end:'',
},
sx(){
this.onLoad()
console.log("123");
},
bindDateChange(e){
// console.log(e.detail.value)
this.setData({
date:e.detail.value
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let now = new Date(); //获取时间
let year = now.getFullYear(); //获取当前年
let month = now.getMonth() + 1; //获取当前月份
this.setData({
end: '' + year + '-' + (Array(2).join(0) + month).slice(-2) + '-' + (Array(2).join(0) + now.getDate()).slice(-2),
}) //当前的时间
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "物流交接"
}

@ -0,0 +1,54 @@
<!--pages/handover/handover.wxml-->
<view class="box">
<view class="top">物流单号M2023020200012已签收。签收时间:2023年6月14日 14:36</view>
<view class="back">
<view style="display: flex;" class="from-con">
<text>日 期:</text>
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChange" class="from-con">
<input type="text" disabled="true" placeholder="请选择日期 >" placeholder-class="place" value="{{date}}"/>
</picker>
<button class="f5" bindtap="sx">刷 新</button>
</view>
<scroll-view scroll-y class="allordernum">
<view style="background-color: #ffe4c4;">物流单号:M2023051500231</view>
<view style="background-color: #ddd;">物流单号:M2023051500232</view>
<view style="background-color: #e0f7ac;">物流单号:M2023051500233</view>
<view style="background-color: #e0f7ac;">物流单号:M2023051500234</view>
<view style="background-color: #e0f7ac;">物流单号:M2023051500235</view>
</scroll-view>
</view>
<view class="back">
<scroll-view scroll-x style="width: 100%; border: 1rpx #ddd solid;">
<view class="tr top1" >
<view class="td td1">序号</view>
<view class="td">样本号</view>
<view class="td">送检机构</view>
<view class="td td2">日期</view>
<view class="td">转运箱号</view>
<view class="td">交接人</view>
<view class="td">状态</view>
</view>
<view class="tr" >
<view class="td td1">1</view>
<view class="td">Y100008645</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-6-26</view>
<view class="td">X254687</view>
<view class="td">李四</view>
<view class="td">已核收</view>
</view>
<view class="tr" >
<view class="td td1">2</view>
<view class="td">Y100008645</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-6-26</view>
<view class="td">X254687</view>
<view class="td">张三</view>
<view class="td">已核收</view>
</view>
</scroll-view>
</view>
</view>

@ -0,0 +1,84 @@
/* pages/handover/handover.wxss */
.back{
margin-top: 15rpx;
}
.top{
background-color: #fff;
padding: 10rpx 10rpx;
font-size: 22rpx;
border-radius: 15rpx;
}
.from-con{
display: flex;
align-items: center;
position: relative;
}
.from-con input{
width: 250rpx;
border: 1rpx #666 solid;
padding: 3rpx 10rpx;
text-align: right;
}
.place{
color:#c4bfbf;
}
.f5{
width: 200rpx !important;
font-size: 28rpx;
background-color: #eee;
border: 1rpx #ddd solid;
height: 60rpx;
display: flex;
align-items: center;
justify-content: center;
position: relative;
left: 40rpx;
}
.allordernum{
margin-top: 20rpx;
/* border: 1rpx #999 solid; */
background-color: #f1f1f1;
border: 1rpx #eee solid;
border-radius: 15rpx;
width: 100%;
height: 350rpx;
padding: 20rpx 0 ;
}
.allordernum view{
padding: 20rpx;
background-color: #eee;
width: 88%;
margin: 0 auto;
margin-bottom: 15rpx;
border-radius: 15rpx;
}
.tr{
display: flex;
width: 100%;
}
.tr .td{
/* border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx; */
border: 1rpx #ddd solid;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 150rpx;
}
.top1 view{
background-color: #6bc9ca;
color: #fff;
}
.td1{
min-width: 100rpx !important;
}

@ -0,0 +1,137 @@
// pages/index/index.js
import * as echarts from "../../components/echarts/echarts";
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
canvas.setChart(chart);
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
data: ['一月', '二月', '三月', '四月', '五月', '六月']
},
yAxis: {
type: 'value',
boundaryGap: [0, 0.01]
},
series: [
{
name: '核收数',
type: 'bar',
data: [10, 20, 46, 120, 90, 80]
},
{
name: '接收数',
type: 'bar',
data: [20, 56, 46, 30, 45, 60]
}
]
};
chart.setOption(option);
return chart;
};
Page({
/**
* 页面的初始数据
*/
data: {
ec: {
onInit: initChart
},
},
//自建物流
goMelogistics(){
wx.navigateTo({
url: '../meLogistics/meLogistics',
})
},
goThreelogistics(){
wx.navigateTo({
url: '../threeLogistics/threeLogistics',
})
},
goHandover(){
wx.navigateTo({
url: '../handover/handover',
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,6 @@
{
"usingComponents": {
"ec-canvas":"../../components/echarts/ec-canvas"
},
"navigationBarTitleText": "首页"
}

@ -0,0 +1,37 @@
<!--pages/index/index.wxml-->
<swiper class="banner" autoplay="true" interval="3000" circular="true" indicator-dots='true'>
<swiper-item>
<image src="../../images/banner.png"/>
</swiper-item>
<swiper-item>
<image src="../../images/banner.png"/>
</swiper-item>
</swiper>
<view class="msg">消息:XXX医院样本转运完成,完成时间:2023年6月14日</view>
<view style="padding: 20rpx;">
<view class="back">
<view class="produck-type" bindtap="goMelogistics">
<view class="item">
<image src="../../images/自建物流.png"></image>
<view>自建物流</view>
</view>
<view class="item" bindtap="goThreelogistics">
<image src="../../images/第三方物流.png"></image>
<view>第三方物流</view>
</view>
<view class="item">
<image src="../../images/货运物流.png"></image>
<view>货运物流</view>
</view>
</view>
</view>
<view class="ec-container">
<ec-canvas canvas-id="echart-pie" ec="{{ec}}"></ec-canvas>
</view>
<button class="btn" bindtap="goHandover">物流交接</button>
</view>

@ -0,0 +1,70 @@
/* pages/index/index.wxss */
.banner{
width: 100%;
height: 400rpx;
}
.banner image{
width: 100%;
height: 400rpx;
}
.msg{
background-color: #fff;
font-size: 26rpx;
padding: 10rpx;
text-align: center;
}
.produck-type{
border-radius: 15rpx ;
display: flex;
width: 100%;
background-color: #fff;
padding: 15rpx 0rpx;
margin-top: 10rpx;
/* margin-bottom: 20rpx; */
font-size: 26rpx;
justify-content:space-between;
}
.item{
width: 30%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.item image{
width: 80rpx;
height: 80rpx;
}
.btn{
background-color: #3ec6c9;
color: #fff;
margin-top: 20rpx;
border: 1rpx #d1d0d0 solid;
width: 500rpx !important;
}
.ec-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 450rpx;
background-color: #fff;
border-radius: 15rpx;
margin-top: 15rpx;
padding: 20rpx 0;
}
ec-canvas {
width: 100%;
height: 100%;
}

@ -0,0 +1,66 @@
// pages/login/login.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "登录"
}

@ -0,0 +1,18 @@
<!--pages/login/login.wxml-->
<view style="padding: 40rpx 50rpx;font-size: 55rpx;color: #fff;font-weight: 600; font-family: 'Courier New', Courier, monospace;">欢迎回来!</view>
<view style="background-color: #fff; width: 650rpx; border-radius: 20rpx; margin: 0 auto; padding: 30rpx 0;">
<view class="text">
<label>账号:</label>
<input type="text" placeholder="请输入账号" value="{{username}}" bindinput="getUsername" data-value="username"/>
</view>
<view class="text">
<label>密码:</label>
<input type="password" placeholder="请输入密码" value="{{userpwd}}" bindinput="getUserpwd" data-value="userpwd"/>
</view>
<button class="btn" bindtap="login">登 录</button>
</view>

@ -0,0 +1,43 @@
/* pages/login/login.wxss */
/* pages/login/login.wxss */
page{
background: -webkit-linear-gradient(top,#27adb0,#b6f0f0,#f8f8f8);
padding-top: 250rpx;
}
.text{
display: flex;
/* background-color: #f1f1f1; */
border-radius: 20rpx;
width: 600rpx;
margin: 0 auto;
padding: 20rpx;
align-items: center;
}
.text label{
font-weight: 900;
font-size: 30rpx;
color: #333;
}
.text input{
font-size: 28rpx;
background-color: #f5f5f5;
width: 70%;
height: 60rpx;
padding: 0 20rpx;
border-radius: 20rpx;
}
.btn{
border-radius: 20rpx;
height: 60rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
font-weight: 500;
background-color: #259c9e;
color: #fff;
margin-top: 30rpx;
width: 300rpx !important;
}

@ -0,0 +1,299 @@
// pages/meLogistics/meLogistics.js
var datePicker = require('../../utils/dateSetting')
//设定当前的时间,将其设定为常量
Page({
data: {
list:[
{
'id':1,
'number':'2023050002',
'time':'2023-5-12 11:32',
'status':'已签收',
'name':'张三',
'num':'M2023055568'
},
{
'id':2,
'number':'2023050002',
'time':'2023-5-12 11:32',
'status':'已签收',
'name':'李四',
'num':'M2023055568'
}
],
pipenum:'',
ins: ['xx卫生院','xx门诊',],
bushList:['私家车','大巴','顺丰','其他'],
bush:'',
date: '',
start:'2020-01-01',
end:'',
//开始
time: '',
multiArray: [],
multiIndex: [0, 0, 0, 0, 0],
choose_year: "",
//结束
time1: '',
multiArray1: [],
multiIndex1: [0, 0, 0, 0, 0],
choose_year1: "",
srcArray:[]
},
scacode(){
wx.scanCode({
success:(res)=>{
console.log(res.result);
this.setData({
pipenum:res.result
})
}
})
},
phot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
console.log(this.data.srcI)
console.log(res.tempFiles[0].tempFilePath)
// this.up();
}
})
},
//上传图片接口地址
// up(){
// console.log(this.data.srcI)
// wx.uploadFile({
// filePath: this.data.srcI,
// name: 'file',
// url: '',
// })
// },
bushPhot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
// this.up();
}
})
},
boxPhot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
// this.up();
}
})
},
//送检机构
bindPickerChange(e) {
this.setData({
index: e.detail.value
})
},
//运输方式
bindbushChange(e) {
this.setData({
bush: e.detail.value
})
},
//日期
bindDateChange(e){
// console.log(e.detail.value)
this.setData({
date:e.detail.value
})
},
//出发时间
//最后呈现时间的函数。
bindMultiPickerChange: function (e) {
var dateStr = this.data.multiArray[0][this.data.multiIndex[0]] +
this.data.multiArray[1][this.data.multiIndex[1]] +
this.data.multiArray[2][this.data.multiIndex[2]] +
this.data.multiArray[3][this.data.multiIndex[3]] +
this.data.multiArray[4][this.data.multiIndex[4]];
this.setData({
time: dateStr
})
},//开始
bindMultiPickerChange1: function (e) {
var dateStr = this.data.multiArray1[0][this.data.multiIndex1[0]] +
this.data.multiArray1[1][this.data.multiIndex1[1]] +
this.data.multiArray1[2][this.data.multiIndex1[2]] +
this.data.multiArray1[3][this.data.multiIndex1[3]] +
this.data.multiArray1[4][this.data.multiIndex1[4]];
this.setData({
time1: dateStr
})
},//结束
//当时间选择器呈现并进行滚动选择时间时调用该函数。开始
bindMultiPickerColumnChange: function (e) {
//e.detail.column记录哪一行发生改变,e.detail.value记录改变的值(相当于multiIndex)
switch (e.detail.column) {
//这里case的值有0/1/2/3/4,但除了需要记录年和月来确定具体的天数外,其他的都可以暂不在switch中处理。
case 0:
//记录改变的年的值
let year = this.data.multiArray[0][e.detail.value];
this.setData({
choose_year: year.substring(0, year.length - 1)
})
break;
case 1:
//根据选择的年与月,确定天数,并改变multiArray中天的具体值
let month = this.data.multiArray[1][e.detail.value];
let dayDates = datePicker.determineDay(this.data.choose_year, month.substring(0, month.length - 1));
//这里需要额外注意,改变page中设定的data,且只要改变data中某一个值,可以采用下面这种方法
this.setData({
['multiArray[2]']: dayDates
})
break;
}
//改变一个一维数组中某一个值,可供参考。
this.setData({
["multiIndex[" + e.detail.column + "]"]: e.detail.value
})
},
//当时间选择器呈现并进行滚动选择时间时调用该函数。结束
bindMultiPickerColumnChange1: function (e) {
//e.detail.column记录哪一行发生改变,e.detail.value记录改变的值(相当于multiIndex)
switch (e.detail.column) {
//这里case的值有0/1/2/3/4,但除了需要记录年和月来确定具体的天数外,其他的都可以暂不在switch中处理。
case 0:
//记录改变的年的值
let year = this.data.multiArray1[0][e.detail.value];
this.setData({
choose_year1: year.substring(0, year.length - 1)
})
break;
case 1:
//根据选择的年与月,确定天数,并改变multiArray中天的具体值
let month = this.data.multiArray1[1][e.detail.value];
let dayDates = datePicker.determineDay(this.data.choose_year, month.substring(0, month.length - 1));
//这里需要额外注意,改变page中设定的data,且只要改变data中某一个值,可以采用下面这种方法
this.setData({
['multiArray1[2]']: dayDates
})
break;
}
//改变一个一维数组中某一个值
this.setData({
["multiIndex1[" + e.detail.column + "]"]: e.detail.value
})
},
goDetail(){
wx.navigateTo({
url: '../details/details',
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let now = new Date(); //获取时间
let year = now.getFullYear(); //获取当前年
let month = now.getMonth() + 1; //获取当前月份
this.setData({
end: '' + year + '-' + (Array(2).join(0) + month).slice(-2) + '-' + (Array(2).join(0) + now.getDate()).slice(-2),//当前的时间
//开始
multiArray:
[
[year + "年", year + 1 + "年", year + 2 + "年"],
datePicker.determineMonth(),
datePicker.determineDay(year, month),
datePicker.determineHour(),
datePicker.determineMinute()
],
//结束
multiArray1:
[
[year + "年", year + 1 + "年", year + 2 + "年"],
datePicker.determineMonth(),
datePicker.determineDay(year, month),
datePicker.determineHour(),
datePicker.determineMinute()
],
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "物流签收"
}

@ -0,0 +1,111 @@
<!--pages/meLogistics/meLogistics.wxml-->
<view class="box">
<view class="back">
<view class="top">
<input type="text" value="{{pipenum}}"/>
<view style="background-color: #eee;" bindtap="scacode">扫 码</view>
<view style="background-color: #23c559; color: #fff;" bindtap="phot">拍 照</view>
</view>
<view class="form">
<view class="from-con">
<label>物流单号:</label>
<input type="text" placeholder="物流单号" placeholder-class="place" value=""/>
</view>
<picker class="from-con" bindchange="bindPickerChange" value="{{index}}" range="{{ins}}">
<label>送检机构:</label>
<input type="text" disabled="true" placeholder="请选择送检机构" placeholder-class="place" value="{{ins[index]}}"/>
</picker>
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChange" class="from-con">
<label>日期:</label>
<input type="text" disabled="true" placeholder="请选择日期" placeholder-class="place" value="{{date}}"/>
</picker>
<view class="from-con">
<label>数量:</label>
<input type="text" placeholder="数量" placeholder-class="place"/>
</view>
<picker class="from-con" bindchange="bindbushChange" range="{{bushList}}">
<label>运输方式:</label>
<input type="text" disabled="true" placeholder="请选择运输方式" placeholder-class="place" value="{{bushList[bush]}}"/>
</picker>
<view class="from-con">
<label>转运箱号:</label>
<input type="text" placeholder="转运箱号" placeholder-class="place" value=""/>
</view>
<picker class="from-con" mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
<label>出发时间:</label>
<input value='{{time}}' placeholder='请选择出发时间' placeholder-class="place" disabled="true"/>
</picker>
<picker class="from-con" mode="multiSelector" bindchange="bindMultiPickerChange1" bindcolumnchange="bindMultiPickerColumnChange1" value="{{multiIndex1}}" range="{{multiArray1}}">
<label>到达时间:</label>
<input value='{{time1}}' placeholder='请选择到达时间' placeholder-class="place" disabled="true"/>
</picker>
<view class="from-con">
<label>车牌号:</label>
<input type="text" placeholder="车牌号" placeholder-class="place" value=""/>
</view>
<view class="from-con">
<label>物流员:</label>
<input type="text" placeholder="物流员" placeholder-class="place" value=""/>
</view>
<view class="from-con">
<label>备注:</label>
<input type="text" placeholder="备注" placeholder-class="place" value=""/>
</view>
<view class="from-con">
<label>驾驶员:</label>
<input type="text" placeholder="驾驶员" placeholder-class="place" value=""/>
</view>
</view>
</view>
<view class="back">
<view class="bush">
<view style="flex: 1;">物流车拍照</view>
<button bindtap="bushPhot">拍 照</button>
</view>
<view class="bush-img">
<image src="../../images/bush.png"></image>
<image src="../../images/bush.png"></image>
</view>
</view>
<view class="back">
<view class="bush">
<view style="flex: 1;">转运箱拍照</view>
<button bindtap="boxPhot">拍 照</button>
</view>
<view class="bush-img">
<image src="../../images/bush.png"></image>
<image src="../../images/bush.png"></image>
</view>
</view>
<view class="back">
<view class="con">
<view style="flex: 1;">总计:200/管数</view>
<button style="background-color: #ddd;">修 改</button>
<button style="color: #fff;">保 存</button>
</view>
<scroll-view scroll-x class="tabel">
<view class="tr tab-top">
<view class="td1">序号</view>
<view class="td">样本条码号</view>
<view class="td">接收时间</view>
<view class="td">样本状态</view>
<view class="td">物流员</view>
<view class="td">物流单号</view>
</view>
<view class="tr" wx:for="{{list}}" wx:key="index" bindtap="goDetail">
<view class="td1">{{item.id}}</view>
<view class="td">{{item.number}}</view>
<view class="td">{{item.time}}</view>
<view class="td">{{item.status}}</view>
<view class="td">{{item.name}}</view>
<view class="td">{{item.num}}</view>
</view>
</scroll-view>
</view>
</view>

@ -0,0 +1,139 @@
/* pages/meLogistics/meLogistics.wxss */
.top{
display: flex;
justify-content: center;
font-size: 28rpx;
}
.top input{
border: 1rpx #333 solid;
border-radius: 10rpx;
padding: 5rpx 10rpx;
}
.top view{
width: 135rpx;
margin-left: 20rpx;
background-color: #eee;
display: flex;
justify-content: center;
align-items: center;
border-radius: 10rpx;
color: #333;
font-weight: 700;
}
.form{
background-color: #fff;
border-radius: 15rpx;
padding: 0rpx 30rpx;
margin-bottom: 15rpx;
}
.form .from-con{
font-size: 28rpx;
border-bottom: 2rpx #eee solid;
position: relative;
margin-top: 25rpx;
}
.from-con label{
position: absolute;
top: 5rpx;
font-weight: 900;
font-size: 28rpx;
color: #333;
}
.from-con input{
text-align: right;
padding: 10rpx;
}
.place{
color:#c4bfbf;
}
.bush{
display: flex;
justify-content:space-between;
align-items: center;
}
.bush button{
width: 200rpx !important;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
background-color: #23c559;
color:#fff;
height: 55rpx;
}
.bush-img{
display: flex;
flex-wrap: wrap;
justify-content:space-around;
padding: 20rpx 10rpx;
}
.bush-img image{
width: 270rpx;
height: 230rpx;
margin-top: 10rpx;
border: 1rpx solid #999;
border-radius: 15rpx;
}
.back{
margin-top: 15rpx;
}
.con{
display: flex;
align-items: center;
}
.con button{
width: 170rpx !important;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
background-color: rgb(245, 90, 90);
height: 55rpx;
margin-left: 10rpx !important;
}
.tabel{
margin-top: 20rpx;
width: 100%;
border: 1rpx #ddd solid;
}
.tabel .tr{
display: flex;
flex-wrap: nowrap;
white-space: nowrap;
}
.tr .td{
border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 200rpx;
}
.tab-top view{
background-color: #51bdbe;
color:#fff;
font-weight: 700;
font-size: 28rpx;
}
.td1{
border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 100rpx;
}

@ -0,0 +1,100 @@
// pages/queryfrei/queryfrei.js
var app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
date: '',
endDate:'',
start:'2020-01-01',
end:'',
array: ['全部','xx卫生院','xx门诊',],
},
//开始时间
bindDateChange(e){
// console.log(e.detail.value)
this.setData({
date:e.detail.value
})
},
//结束时间
bindDateChangeend(e){
// console.log(e.detail.value)
this.setData({
endDate:e.detail.value
})
},
bindPickerChange (e) {
// console.log( e.detail.value)
this.setData({
index: e.detail.value
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let now = new Date(); //获取时间
let year = now.getFullYear(); //获取当前年
let month = now.getMonth() + 1; //获取当前月份
this.setData({
end: '' + year + '-' + (Array(2).join(0) + month).slice(-2) + '-' + (Array(2).join(0) + now.getDate()).slice(-2),
}) //当前的时间
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "货运物流查询"
}

@ -0,0 +1,67 @@
<!--pages/queryfrei/queryfrei.wxml-->
<view style="background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1);min-height: 1300rpx;padding: 20rpx;">
<view class="form">
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChange" class="from-con">
<label>选择日期:</label>
<input type="text" disabled="true" placeholder="请选择开始日期" placeholder-class="place" value="{{date}}"/>
</picker>
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChangeend" class="from-con">
<label> </label>
<input type="text" disabled="true" placeholder="请选择结束日期" placeholder-class="place" value="{{endDate}}"/>
</picker>
<view class="from-con">
<label>物流单号:</label>
<input type="text" placeholder="物流单号" placeholder-class="place"/>
</view>
<picker class="from-con" bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
<label>送检机构:</label>
<input type="text" disabled="true" placeholder="请选择送检机构" placeholder-class="place" value="{{array[index]}}"/>
</picker>
<view class="from-con">
<label>物流员:</label>
<input type="text" placeholder="物流员" placeholder-class="place"/>
</view>
<view class="from-con">
<label>转运箱号:</label>
<input type="text" placeholder="转运箱号" placeholder-class="place"/>
</view>
<view class="from-button">
<button style="background-color: #ddd;">重 置</button>
<button style="background-color: #54b4b6; color: #fff;">查 询</button>
</view>
</view>
<view style="background-color: #fff;border-radius: 15rpx;margin-top: 15rpx; padding: 30rpx 10rpx 50rpx 10rpx;">
<scroll-view scroll-x style="width: 100%; border: 1rpx #ddd solid;">
<view class="tr top" >
<view class="td td1">序号</view>
<view class="td">物流单号</view>
<view class="td">送检机构</view>
<view class="td td2">日期</view>
<view class="td">物流费用</view>
<view class="td">转运方式</view>
</view>
<view class="tr" >
<view class="td td1">1</view>
<view class="td">JD56549856</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-5-12 14:32</view>
<view class="td">10.00</view>
<view class="td">私家车</view>
</view>
<view class="tr" >
<view class="td td1">2</view>
<view class="td">JD56549856</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-5-12 14:32</view>
<view class="td">10.00</view>
<view class="td">私家车</view>
</view>
</scroll-view>
<!-- <view style="text-align: right; font-size: 26rpx;margin-top: 30rpx;padding: 0 20rpx;">共 2 条</view> -->
</view>
</view>

@ -0,0 +1,71 @@
/* pages/queryfrei/queryfrei.wxss */
page{
background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1)
}
.form{
background-color: #fff;
border-radius: 15rpx;
padding: 20rpx 50rpx;
margin-bottom: 15rpx;
}
.form .from-con{
font-size: 28rpx;
border-bottom: 2rpx #eee solid;
position: relative;
margin-top: 25rpx;
}
.from-con label{
position: absolute;
top: 5rpx;
font-weight: 900;
font-size: 28rpx;
color: #333;
}
.from-con input{
text-align: right;
padding: 10rpx;
}
.place{
color:#c4bfbf;
}
.from-button{
display: flex;
margin-top: 20rpx;
}
.from-button button{
display: flex;
align-items: center;
justify-content: center;
width: 250rpx !important;
font-size: 28rpx;
}
.tr{
display: flex;
width: 100%;
}
.tr .td{
border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 150rpx;
}
.top view{
background-color: #6bc9ca;
color: #fff;
}
.td1{
min-width: 100rpx !important;
}
.td2{
min-width: 200rpx !important;
}

@ -0,0 +1,100 @@
var app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
date: '',
endDate:'',
start:'2020-01-01',
end:'',
array: ['全部','xx卫生院','xx门诊',],
},
//开始时间
bindDateChange(e){
// console.log(e.detail.value)
this.setData({
date:e.detail.value
})
},
//结束时间
bindDateChangeend(e){
// console.log(e.detail.value)
this.setData({
endDate:e.detail.value
})
},
bindPickerChange (e) {
// console.log( e.detail.value)
this.setData({
index: e.detail.value
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let now = new Date(); //获取时间
let year = now.getFullYear(); //获取当前年
let month = now.getMonth() + 1; //获取当前月份
this.setData({
end: '' + year + '-' + (Array(2).join(0) + month).slice(-2) + '-' + (Array(2).join(0) + now.getDate()).slice(-2),
}) //当前的时间
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "自建物流查询"
}

@ -0,0 +1,72 @@
<view style="background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1);min-height: 1300rpx;padding: 20rpx;">
<view class="form">
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChange" class="from-con">
<label>选择日期:</label>
<input type="text" disabled="true" placeholder="请选择开始日期" placeholder-class="place" value="{{date}}"/>
</picker>
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChangeend" class="from-con">
<label> </label>
<input type="text" disabled="true" placeholder="请选择结束日期" placeholder-class="place" value="{{endDate}}"/>
</picker>
<view class="from-con">
<label>物流单号:</label>
<input type="text" placeholder="物流单号" placeholder-class="place"/>
</view>
<picker class="from-con" bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
<label>送检机构:</label>
<input type="text" disabled="true" placeholder="请选择送检机构" placeholder-class="place" value="{{array[index]}}"/>
</picker>
<view class="from-con">
<label>物流员:</label>
<input type="text" placeholder="物流员" placeholder-class="place"/>
</view>
<view class="from-con">
<label>转运箱号:</label>
<input type="text" placeholder="转运箱号" placeholder-class="place"/>
</view>
<view class="from-button">
<button style="background-color: #ddd;">重 置</button>
<button style="background-color: #54b4b6; color: #fff;">查 询</button>
</view>
</view>
<view style="background-color: #fff;border-radius: 15rpx;margin-top: 15rpx; padding: 30rpx 10rpx 50rpx 10rpx;">
<scroll-view scroll-x style="width: 100%;">
<view class="tr top" >
<view class="td td1">序号</view>
<view class="td">物流单号</view>
<view class="td">送检机构</view>
<view class="td td2">日期</view>
<view class="td">样本管数</view>
<view class="td">送检机构</view>
</view>
<view class="tr" >
<view class="td td1">1</view>
<view class="td">JD56549856</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-5-12 14:32</view>
<view class="td">10</view>
<view class="td">私家车</view>
</view>
<view class="tr" >
<view class="td td1">2</view>
<view class="td">JD56549856</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-5-12 14:32</view>
<view class="td">10</view>
<view class="td">私家车</view>
</view>
</scroll-view>
<!-- <view style="text-align: right; font-size: 26rpx;margin-top: 30rpx;padding: 0 20rpx;">共 2 条</view> -->
</view>
</view>

@ -0,0 +1,75 @@
page{
background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1)
}
.form{
background-color: #fff;
border-radius: 15rpx;
padding: 20rpx 50rpx;
margin-bottom: 15rpx;
}
.form .from-con{
font-size: 28rpx;
border-bottom: 2rpx #eee solid;
position: relative;
margin-top: 25rpx;
}
.from-con label{
position: absolute;
top: 5rpx;
font-weight: 900;
font-size: 28rpx;
color: #333;
}
.from-con input{
text-align: right;
padding: 10rpx;
}
.place{
color:#c4bfbf;
}
.from-button{
display: flex;
margin-top: 20rpx;
}
.from-button button{
display: flex;
align-items: center;
justify-content: center;
width: 250rpx !important;
font-size: 28rpx;
}
.tr{
display: flex;
width: 100%;
}
.tr .td{
/* border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
border-bottom: #ddd solid 1rpx; */
border: 1rpx #ddd solid;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 150rpx;
}
.top view{
background-color: #6bc9ca;
color: #fff;
}
.td1{
min-width: 100rpx !important;
}
.td2{
min-width: 200rpx !important;
}

@ -0,0 +1,100 @@
// pages/querythree/querythree.js
var app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
date: '',
endDate:'',
start:'2020-01-01',
end:'',
array: ['全部','xx卫生院','xx门诊',],
},
//开始时间
bindDateChange(e){
// console.log(e.detail.value)
this.setData({
date:e.detail.value
})
},
//结束时间
bindDateChangeend(e){
// console.log(e.detail.value)
this.setData({
endDate:e.detail.value
})
},
bindPickerChange (e) {
// console.log( e.detail.value)
this.setData({
index: e.detail.value
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let now = new Date(); //获取时间
let year = now.getFullYear(); //获取当前年
let month = now.getMonth() + 1; //获取当前月份
this.setData({
end: '' + year + '-' + (Array(2).join(0) + month).slice(-2) + '-' + (Array(2).join(0) + now.getDate()).slice(-2),
}) //当前的时间
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "第三方物流查询"
}

@ -0,0 +1,67 @@
<!--pages/querythree/querythree.wxml-->
<view style="background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1);min-height: 1300rpx;padding: 20rpx;">
<view class="form">
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChange" class="from-con">
<label>选择日期:</label>
<input type="text" disabled="true" placeholder="请选择开始日期" placeholder-class="place" value="{{date}}"/>
</picker>
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChangeend" class="from-con">
<label> </label>
<input type="text" disabled="true" placeholder="请选择结束日期" placeholder-class="place" value="{{endDate}}"/>
</picker>
<view class="from-con">
<label>物流单号:</label>
<input type="text" placeholder="物流单号" placeholder-class="place"/>
</view>
<picker class="from-con" bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
<label>送检机构:</label>
<input type="text" disabled="true" placeholder="请选择送检机构" placeholder-class="place" value="{{array[index]}}"/>
</picker>
<view class="from-con">
<label>物流员:</label>
<input type="text" placeholder="物流员" placeholder-class="place"/>
</view>
<view class="from-con">
<label>转运箱号:</label>
<input type="text" placeholder="转运箱号" placeholder-class="place"/>
</view>
<view class="from-button">
<button style="background-color: #ddd;">重 置</button>
<button style="background-color: #54b4b6; color: #fff;">查 询</button>
</view>
</view>
<view style="background-color: #fff;border-radius: 15rpx;margin-top: 15rpx; padding: 30rpx 10rpx 50rpx 10rpx;">
<scroll-view scroll-x style="width: 100%; ">
<view class="tr top" >
<view class="td td1">序号</view>
<view class="td">物流单号</view>
<view class="td">送检机构</view>
<view class="td td2">日期</view>
<view class="td">物流费用</view>
<view class="td">转运方式</view>
</view>
<view class="tr" >
<view class="td td1">1</view>
<view class="td">JD56549856</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-5-12 14:32</view>
<view class="td">10.00</view>
<view class="td">私家车</view>
</view>
<view class="tr" >
<view class="td td1">2</view>
<view class="td">JD56549856</view>
<view class="td">XX卫生院</view>
<view class="td td2">2023-5-12 14:32</view>
<view class="td">10.00</view>
<view class="td">私家车</view>
</view>
</scroll-view>
<!-- <view style="text-align: right; font-size: 26rpx;margin-top: 30rpx;padding: 0 20rpx;">共 2 条</view> -->
</view>
</view>

@ -0,0 +1,72 @@
/* pages/querythree/querythree.wxss */
page{
background: -webkit-linear-gradient(top,#27adb0,#ebf7f7,#f1f1f1)
}
.form{
background-color: #fff;
border-radius: 15rpx;
padding: 20rpx 50rpx;
margin-bottom: 15rpx;
}
.form .from-con{
font-size: 28rpx;
border-bottom: 2rpx #eee solid;
position: relative;
margin-top: 25rpx;
}
.from-con label{
position: absolute;
top: 5rpx;
font-weight: 900;
font-size: 28rpx;
color: #333;
}
.from-con input{
text-align: right;
padding: 10rpx;
}
.place{
color:#c4bfbf;
}
.from-button{
display: flex;
margin-top: 20rpx;
}
.from-button button{
display: flex;
align-items: center;
justify-content: center;
width: 250rpx !important;
font-size: 28rpx;
}
.tr{
display: flex;
width: 100%;
}
.tr .td{
/* border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx; */
border: 1rpx #ddd solid;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 150rpx;
}
.top view{
background-color: #6bc9ca;
color: #fff;
}
.td1{
min-width: 100rpx !important;
}
.td2{
min-width: 200rpx !important;
}

@ -0,0 +1,232 @@
var datePicker = require('../../utils/dateSetting')
Page({
data: {
list:[
{
'id':1,
'number':'2023050002',
'time':'2023-5-12 11:32',
'status':'已签收',
'name':'张三',
'num':'M2023055568'
},
{
'id':2,
'number':'2023050002',
'time':'2023-5-12 11:32',
'status':'已签收',
'name':'李四',
'num':'M2023055568'
}
],
pipenum:'',
ins: ['顺丰','京东',],
date: '',
start:'2020-01-01',
end:'',
time: '',
multiArray: [],
multiIndex: [0, 0, 0, 0, 0],
choose_year: "",
srcArray:[]
},
scacode(){
wx.scanCode({
success:(res)=>{
console.log(res.result);
this.setData({
pipenum:res.result
})
}
})
},
phot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
console.log(this.data.srcI)
console.log(res.tempFiles[0].tempFilePath)
// this.up();
}
})
},
//上传图片接口地址
// up(){
// console.log(this.data.srcI)
// wx.uploadFile({
// filePath: this.data.srcI,
// name: 'file',
// url: '',
// })
// },
bushPhot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
// this.up();
}
})
},
boxPhot(){
wx.chooseMedia({
count: 1,
mediaType: ['image','video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: res=>{
// this.up();
}
})
},
//送检机构
bindPickerChange(e) {
this.setData({
index: e.detail.value
})
},
//日期
bindDateChange(e){
// console.log(e.detail.value)
this.setData({
date:e.detail.value
})
},
//最后呈现时间的函数。
bindMultiPickerChange: function (e) {
var dateStr = this.data.multiArray[0][this.data.multiIndex[0]] +
this.data.multiArray[1][this.data.multiIndex[1]] +
this.data.multiArray[2][this.data.multiIndex[2]] +
this.data.multiArray[3][this.data.multiIndex[3]] +
this.data.multiArray[4][this.data.multiIndex[4]];
this.setData({
time: dateStr
})
},
//当时间选择器呈现并进行滚动选择时间时调用该函数。开始
bindMultiPickerColumnChange: function (e) {
//e.detail.column记录哪一行发生改变,e.detail.value记录改变的值(相当于multiIndex)
switch (e.detail.column) {
//这里case的值有0/1/2/3/4,但除了需要记录年和月来确定具体的天数外,其他的都可以暂不在switch中处理。
case 0:
//记录改变的年的值
let year = this.data.multiArray[0][e.detail.value];
this.setData({
choose_year: year.substring(0, year.length - 1)
})
break;
case 1:
//根据选择的年与月,确定天数,并改变multiArray中天的具体值
let month = this.data.multiArray[1][e.detail.value];
let dayDates = datePicker.determineDay(this.data.choose_year, month.substring(0, month.length - 1));
//这里需要额外注意,改变page中设定的data,且只要改变data中某一个值,可以采用下面这种方法
this.setData({
['multiArray[2]']: dayDates
})
break;
}
//改变一个一维数组中某一个值,可供参考。
this.setData({
["multiIndex[" + e.detail.column + "]"]: e.detail.value
})
},
goDetail(){
wx.navigateTo({
url: '../details/details',
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let now = new Date(); //获取时间
let year = now.getFullYear(); //获取当前年
let month = now.getMonth() + 1; //获取当前月份
this.setData({
end: '' + year + '-' + (Array(2).join(0) + month).slice(-2) + '-' + (Array(2).join(0) + now.getDate()).slice(-2),//当前的时间
//开始
multiArray:
[
[year + "年", year + 1 + "年", year + 2 + "年"],
datePicker.determineMonth(),
datePicker.determineDay(year, month),
datePicker.determineHour(),
datePicker.determineMinute()
],
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "物流签收"
}

@ -0,0 +1,100 @@
<view class="box">
<view class="back">
<view class="top">
<input type="text" value="{{pipenum}}"/>
<view style="background-color: #eee;" bindtap="scacode">扫 码</view>
<view style="background-color: #23c559; color: #fff;" bindtap="phot">拍 照</view>
</view>
<view class="form">
<view class="from-con">
<label>物流单号:</label>
<input type="text" placeholder="物流单号" placeholder-class="place" value=""/>
</view>
<picker class="from-con" bindchange="bindPickerChange" value="{{index}}" range="{{ins}}">
<label>物流单位:</label>
<input type="text" disabled="true" placeholder="请选择物流单位" placeholder-class="place" value="{{ins[index]}}"/>
</picker>
<picker mode="date" value="date" start="start" end="end" bindchange="bindDateChange" class="from-con">
<label>日期:</label>
<input type="text" disabled="true" placeholder="请选择日期" placeholder-class="place" value="{{date}}"/>
</picker>
<view class="from-con">
<label>物流电话:</label>
<input type="text" placeholder="物流电话" placeholder-class="place"/>
</view>
<view class="from-con">
<label>物流费用:</label>
<input type="text" placeholder="物流费用" placeholder-class="place" value=""/>
</view>
<view class="from-con">
<label>转运箱号:</label>
<input type="text" placeholder="驾驶员" placeholder-class="place" value=""/>
</view>
<picker class="from-con" mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
<label>到达时间:</label>
<input value='{{time}}' placeholder='请选择到达时间' placeholder-class="place" disabled="true"/>
</picker>
<view class="from-con">
<label>物流员:</label>
<input type="text" placeholder="物流员" placeholder-class="place" value=""/>
</view>
<view class="from-con">
<label>备注:</label>
<input type="text" placeholder="备注" placeholder-class="place" value=""/>
</view>
</view>
</view>
<view class="back">
<view class="bush">
<view style="flex: 1;">物流车拍照</view>
<button bindtap="bushPhot">拍 照</button>
</view>
<view class="bush-img">
<image src="../../images/bush.png"></image>
<image src="../../images/bush.png"></image>
</view>
</view>
<view class="back">
<view class="bush">
<view style="flex: 1;">转运箱拍照</view>
<button bindtap="boxPhot">拍 照</button>
</view>
<view class="bush-img">
<image src="../../images/bush.png"></image>
<image src="../../images/bush.png"></image>
</view>
</view>
<view class="back">
<view class="con">
<view style="flex: 1;">总计:200/管数</view>
<button style="background-color: #ddd;">修 改</button>
<button style="color: #fff;">保 存</button>
</view>
<scroll-view scroll-x class="tabel">
<view class="tr tab-top">
<view class="td1">序号</view>
<view class="td">样本条码号</view>
<view class="td">接收时间</view>
<view class="td">样本状态</view>
<view class="td">物流员</view>
<view class="td">物流单号</view>
</view>
<view class="tr" wx:for="{{list}}" wx:key="index" bindtap="goDetail">
<view class="td1" bindtap="goDetail">{{item.id}}</view>
<view class="td">{{item.number}}</view>
<view class="td">{{item.time}}</view>
<view class="td">{{item.status}}</view>
<view class="td">{{item.name}}</view>
<view class="td">{{item.num}}</view>
</view>
</scroll-view>
</view>
</view>

@ -0,0 +1,139 @@
/* pages/meLogistics/meLogistics.wxss */
.top{
display: flex;
justify-content: center;
font-size: 28rpx;
}
.top input{
border: 1rpx #333 solid;
border-radius: 10rpx;
padding: 5rpx 10rpx;
}
.top view{
width: 135rpx;
margin-left: 20rpx;
background-color: #eee;
display: flex;
justify-content: center;
align-items: center;
border-radius: 10rpx;
color: #333;
font-weight: 700;
}
.form{
background-color: #fff;
border-radius: 15rpx;
padding: 0rpx 30rpx;
margin-bottom: 15rpx;
}
.form .from-con{
font-size: 28rpx;
border-bottom: 2rpx #eee solid;
position: relative;
margin-top: 25rpx;
}
.from-con label{
position: absolute;
top: 5rpx;
font-weight: 900;
font-size: 28rpx;
color: #333;
}
.from-con input{
text-align: right;
padding: 10rpx;
}
.place{
color:#c4bfbf;
}
.bush{
display: flex;
justify-content:space-between;
align-items: center;
}
.bush button{
width: 200rpx !important;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
background-color: #23c559;
color:#fff;
height: 55rpx;
}
.bush-img{
display: flex;
flex-wrap: wrap;
justify-content:space-around;
padding: 20rpx 10rpx;
}
.bush-img image{
width: 270rpx;
height: 230rpx;
margin-top: 10rpx;
border: 1rpx solid #999;
border-radius: 15rpx;
}
.back{
margin-top: 15rpx;
}
.con{
display: flex;
align-items: center;
}
.con button{
width: 170rpx !important;
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
background-color: rgb(245, 90, 90);
height: 55rpx;
margin-left: 10rpx !important;
}
.tabel{
margin-top: 20rpx;
width: 100%;
border: 1rpx #ddd solid;
}
.tabel .tr{
display: flex;
flex-wrap: nowrap;
white-space: nowrap;
}
.tr .td{
border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 200rpx;
}
.tab-top view{
background-color: #51bdbe;
color:#fff;
font-weight: 700;
font-size: 28rpx;
}
.td1{
border-right:#ddd solid 1rpx ;
border-top: #ddd solid 1rpx;
padding: 15rpx 0;
font-size: 22rpx;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
min-width: 100rpx;
}

@ -0,0 +1,56 @@
{
"description": "项目配置文件",
"setting": {
"bundle": false,
"userConfirmedBundleSwitch": false,
"urlCheck": true,
"scopeDataCheck": false,
"coverView": true,
"es6": true,
"postcss": true,
"compileHotReLoad": false,
"lazyloadPlaceholderEnable": false,
"preloadBackgroundData": false,
"minified": true,
"autoAudits": false,
"newFeature": false,
"uglifyFileName": false,
"uploadWithSourceMap": true,
"useIsolateContext": true,
"nodeModules": false,
"enhance": true,
"useMultiFrameRuntime": true,
"showShadowRootInWxmlPanel": true,
"packNpmManually": false,
"enableEngineNative": false,
"packNpmRelationList": [],
"minifyWXSS": true,
"showES6CompileOption": false,
"minifyWXML": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"condition": false,
"ignoreUploadUnusedFiles": true
},
"compileType": "miniprogram",
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 2
},
"libVersion": "2.19.4",
"packOptions": {
"ignore": [
{
"value": "/minitest",
"type": "folder"
}
],
"include": []
},
"appid": "wxf122cda1b8bbbc37",
"testRoot": "minitest/"
}

@ -0,0 +1,90 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "%E7%89%A9%E6%B5%81%E7%AB%AF",
"setting": {
"compileHotReLoad": false
},
"condition": {
"miniprogram": {
"list": [
{
"name": "",
"pathName": "pages/about/about",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/meLogistics/meLogistics",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/details/details",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/threeLogistics/threeLogistics",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/freiLogistics/freiLogistics",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/queryme/queryme",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/querythree/querythree",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/feedback/feedback",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/handover/handover",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/querythree/querythree",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/login/login",
"query": "",
"launchMode": "default",
"scene": null
}
]
}
}
}

@ -0,0 +1,7 @@
{
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
"rules": [{
"action": "allow",
"page": "*"
}]
}

@ -0,0 +1,87 @@
//将当前日期写成常量
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDay()+1;
const hour = date.getHours();
const minute = date.getMinutes();
//确定月份呈现
function determineMonth() {
let monthDates = [];
for (let i = month; i <= 12; i++) {
monthDates.push(i + "月");
}
for (let i = 1; i < month; i++) {
monthDates.push(i + "月")
}
return monthDates;
}
//根据年与月确定日的呈现
function determineDay(year, month) {
let dayDates = [];
let days;
switch (parseInt(month)) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
days = 28
} else days = 29;
}
for (let i = day; i <= days; i++) {
dayDates.push(i + "日");
}
for (let i = 1; i <= day; i++) {
dayDates.push(i + "日");
}
return dayDates;
}
//确定小时的呈现
function determineHour() {
let hourDates = [];
for (let i = hour; i <= 24; i++) {
hourDates.push(i + "时");
}
for (let i = 1; i < hour; i++) {
hourDates.push(i + "时");
}
return hourDates;
}
//确定分的呈现
function determineMinute() {
let minuteDates = [];
let minuteNum=0;
if (parseInt(minute) % 10 >= 5) {
minuteNum = (parseInt(minute / 10) + 1) * 10;
} else {
minuteNum = parseInt(minute / 10) * 10;
}
for (let i = minuteNum; i < 60; i += 5) {
minuteDates.push(i + "分")
}
for (let i = 0; i < minuteNum; i += 5) {
minuteDates.push(i + "分")
}
return minuteDates;
}
//将上述函数导出,这样引入文件后可以直接使用导出的函数
module.exports = {
determineMonth:determineMonth,
determineDay:determineDay,
determineHour:determineHour,
determineMinute:determineMinute,
}
Loading…
Cancel
Save