Quellcode durchsuchen

小程序 -文件大小 调整2M

zhengkaixin vor 2 Jahren
Ursprung
Commit
0d048da523
30 geänderte Dateien mit 1965 neuen und 1644 gelöschten Zeilen
  1. 4 1
      apis/utils/init.js
  2. 257 243
      components/ApproveList.vue
  3. 1 1
      config/.env.dev.js
  4. 2 1
      config/.env.prod.js
  5. 2 1
      config/.env.test.js
  6. 18 22
      pages.json
  7. 280 0
      pages/otherFunctions/components/u-notice-bar.vue
  8. 1 2
      pages/otherFunctions/equipmentRetrieval/equipmentDetail.vue
  9. 8 4
      pages/otherFunctions/homePage.vue
  10. 0 0
      pages/projectDepartment/components/l-signature/context.js
  11. 0 0
      pages/projectDepartment/components/l-signature/l-signature.vue
  12. 0 0
      pages/projectDepartment/components/l-signature/props.js
  13. 0 0
      pages/projectDepartment/components/l-signature/render.js
  14. 0 0
      pages/projectDepartment/components/l-signature/signature.js
  15. 0 0
      pages/projectDepartment/components/l-signature/utils.js
  16. 645 0
      pages/projectDepartment/components/u-calendar.vue
  17. 4 0
      pages/projectDepartment/exportApplication/deliveryDetails.vue
  18. 8 3
      pages/projectDepartment/exportApplication/deliveryFrom.vue
  19. 5 1
      pages/projectDepartment/exportProcess/deliveryDetails.vue
  20. 4 0
      pages/projectDepartment/exportProcess/deliveryInfo.vue
  21. 4 0
      pages/projectDepartment/exportReturn/deliveryDetails.vue
  22. 4 0
      pages/projectDepartment/exportReturn/deliveryFrom.vue
  23. 692 0
      pages/storeManagement/components/u-upload.vue
  24. 4 0
      pages/storeManagement/equipmentDelivery/deliveryDetails.vue
  25. 0 384
      pages/storeManagement/equipmentDelivery/deliveryList.vue
  26. 13 4
      pages/storeManagement/equipmentEnter/deliveryDetails.vue
  27. 0 364
      pages/storeManagement/equipmentEnter/returnList.vue
  28. 0 533
      pages/storeManagement/equipmentEnter/verification.vue
  29. 9 4
      pages/storeManagement/equipmentInspection/planDetail.vue
  30. 0 76
      uni.scss

+ 4 - 1
apis/utils/init.js

@@ -9,7 +9,10 @@ var app = {
 		
 		// #ifdef H5
 			console.log("SIMPLE_RUN 模式,取配置固定openId  可修改SIMPLE_RUN ")
-			carhelp.setOpenId(process.car.openId)
+			if(!carhelp.getOpenId()){
+				carhelp.setOpenId(process.car.openId)
+			}
+			
 		// #endif
 		
 		// #ifdef MP-WEIXIN

+ 257 - 243
components/ApproveList.vue

@@ -1,244 +1,258 @@
-<template>
-	<view>
-		<!-- 流程 -->
-		<view class="process">
-			<view class="title">
-				流程
-			</view>
-			<u-time-line>
-		
-				<u-time-line-item node-top="10" v-for="(item,i) in approveList" :key="i" >
-					<template v-slot:node>
-						<view>
-							<view class="u-node" style="background:#CDCDCD;">
-								<!-- 此处为uView的icon组件 -->
-								<!-- <u-icon name="checkmark" color="#fff" :size="24"></u-icon> -->
-							</view>
-						</view>
-					</template>
-		
-					<template v-slot:content>
-						<view class="u-order">
-							<view class="u-order-desc">
-								<view class="level">
-									<template v-for="(item2,index) in item.approveUserList">
-									 {{index!=0?',':''}}{{item2.name}}
-										
-									</template>
-								</view>
-								<view class="date">
-									{{item.approveTime?item.approveTime:''}}
-								</view>
-							</view>
-						
-							<view class="u-order-time">
-								<view class="photo">
-									<template v-for="(item2,index) in item.approveUserList">	
-										<u-avatar size="56" class="img" :src="item2.headImg" :key="index"></u-avatar>				
-									</template>
-								</view>
-								<view class="confirm">
-									<u-icon v-if="item.status==-1" name="more-circle-fill" :color="recordStatusColor(-1)"></u-icon>
-									
-									<u-icon v-if="item.status==0" name="more-circle-fill" :color="recordStatusColor(0)"></u-icon>
-
-									<u-icon v-if="item.status==1" name="checkmark-circle-fill" :color="recordStatusColor(1)"></u-icon>
-								<u-icon v-if="item.status==2" name="close-circle-fill" :color="recordStatusColor(2)"></u-icon>
-								
-								</view>
-								<view class="name">
-									<view v-if="item.status==-1">未开始</view>
-									<view v-if="item.status==0">未审批</view>
-									<view v-if="item.status==1">审批通过</view>
-									<view v-if="item.status==2">审批驳回</view>
-								</view>
-							</view>
-						</view>
-					</template>
-				</u-time-line-item>
-		
-		<u-time-line-item  >
-		
-					<template v-slot:content >
-						<view class="u-order">
-							<view class="u-order-desc">
-								<view class="level">
-									仓库管理
-								</view>
-								<view class="state" v-if="outRecordDetailObj&&outRecordDetailObj.outRecord&&outRecordDetailObj.outRecord.status==1">
-									
-									<view v-if="operator.status==0">等待出库</view>
-									<view v-if="operator.status==1">出库成功</view>
-								</view>
-							</view>
-							
-							<view class="u-order-time" >
-								<view class="photo">
-									<u-avatar size="56" class="img" :src="operator.userImg"></u-avatar>
-								</view>
-								<view class="confirm" >
-									
-									<u-icon v-if="operator.status==0" name="more-circle-fill" :color="recordStatusColor(0)"></u-icon>
-								
-									<u-icon v-if="operator.status==1" name="checkmark-circle-fill" :color="recordStatusColor(1)"></u-icon>
-								
-								
-								</view>
-								
-								<view class="name" v-if="outRecordDetailObj&&outRecordDetailObj.outRecord&&outRecordDetailObj.outRecord.status!=0">
-									<view v-if="operator.status==0">等待出库</view>
-									<view v-if="operator.status==1">出库成功</view>
-									
-								</view>
-								<view class="name" v-else>
-									<view >等待审批</view>
-			
-								</view>
-								
-							</view>
-						</view>
-					</template>
-				</u-time-line-item>
-			</u-time-line>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		recordStatusColor
-	} from '@/apis/status.js'
-	
-	export default {
-		name:"ApproveList",
-		props:{
-			
-			approveList:{
-				default: []
-			},
-			outRecordDetailObj:{}
-		},
-		data() {
-			return {
-				 
-			};
-		},computed:{
-			operator(){
-				var obj={
-					userImg:"",
-					status:"",
-					name:"",
-				}
-				var outRecordDetailObj =this.outRecordDetailObj;
-				if(outRecordDetailObj&&outRecordDetailObj.outRecord&&outRecordDetailObj.outRecord.status!=0){
-					if(outRecordDetailObj.outRecord.status==3){
-						obj.status=1;
-					}
-				}
-				
-				return obj
-			}
-		},
-		
-		methods:{
-			recordStatusColor
-		}
-	}
-</script>
-
-<style  scoped lang="scss">
-// 流程
-	.process {
-		background-color: #fff;
-		margin-top: 24rpx;
-		padding: 24rpx 32rpx;
-		padding-bottom:80px;
-		.title {
-			color: rgba(51, 51, 51, 1);
-			font-size: 32rpx;
-		}
-        .u-time-axis-item{
-			//margin-bottom: 76rpx;
-		}
-		.u-time-axis {
-			//padding: 18rpx 40rpx;
-		}
-
-		.u-node {
-			width: 18rpx;
-			height: 18rpx;
-			border-radius: 100rpx !important;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			background: #d0d0d0;
-		}
-		.u-order{
-			margin-bottom: 32rpx;
-		}
-		.u-order-title {
-			color: #333333;
-			font-weight: bold;
-			font-size: 32rpx;
-		}
-
-		.u-order-desc {
-			margin-bottom: 16rpx;
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-
-			.level {
-				color: #333333;
-				font-size: 32rpx;
-				font-weight: bold;
-			}
-
-			.date {
-				color: rgba(119, 119, 119, 1);
-			}
-
-			.state {
-				color: rgba(255, 121, 0, 1);
-			}
-		}
-
-		.u-order-time {
-			width: 160rpx;
-			color: #777777;
-			font-size: 28rpx;
-			margin-top: 16rpx;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-
-			.photo {
-				display: flex;
-				width: 56rpx;
-				height: 56rpx;
-				border-radius: 100px;
-				margin-bottom: 4rpx;
-
-				.img {
-					width: 100%;
-					height: 100%;
-					overflow: hidden;
-					position: relative;
-				}
-			}
-
-			.confirm {
-				position: absolute;
-				top: 46rpx;
-				left: 56rpx;
-			}
-
-			.name {
-				color: rgba(51, 51, 51, 1);
-				font-size: 24rpx;
-			}
-
-		}
-      
-	}
+<template>
+	<view>
+		<!-- 流程 -->
+		<view class="process">
+			<view class="title">
+				流程
+			</view>
+			<u-time-line>
+
+				<u-time-line-item node-top="10" v-for="(item,i) in approveList" :key="i">
+					<template v-slot:node>
+						<view>
+							<view class="u-node" style="background:#CDCDCD;">
+								<!-- 此处为uView的icon组件 -->
+								<!-- <u-icon name="checkmark" color="#fff" :size="24"></u-icon> -->
+							</view>
+						</view>
+					</template>
+
+					<template v-slot:content>
+						<view class="u-order">
+							<view class="u-order-desc">
+								<view class="level">
+									<template v-for="(item2,index) in item.approveUserList">
+										{{index!=0?',':''}}{{item2.name}}
+
+									</template>
+								</view>
+								<view class="date">
+									{{item.approveTime?item.approveTime:''}}
+								</view>
+							</view>
+
+							<view class="u-order-time">
+								<view class="photo">
+									<template v-for="(item2,index) in item.approveUserList">
+										<u-avatar size="56" class="img" :src="item2.headImg" :key="index"></u-avatar>
+									</template>
+								</view>
+								<view class="confirm">
+									<u-icon v-if="item.status==-1" name="more-circle-fill"
+										:color="recordStatusColor(-1)"></u-icon>
+
+									<u-icon v-if="item.status==0" name="more-circle-fill"
+										:color="recordStatusColor(0)"></u-icon>
+
+									<u-icon v-if="item.status==1" name="checkmark-circle-fill"
+										:color="recordStatusColor(1)"></u-icon>
+									<u-icon v-if="item.status==2" name="close-circle-fill"
+										:color="recordStatusColor(2)"></u-icon>
+
+								</view>
+								<view class="name">
+									<view v-if="item.status==-1">未开始</view>
+									<view v-if="item.status==0">未审批</view>
+									<view v-if="item.status==1">审批通过</view>
+									<view v-if="item.status==2">审批驳回</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</u-time-line-item>
+
+				<u-time-line-item>
+
+					<template v-slot:content>
+						<view class="u-order">
+							<view class="u-order-desc">
+								<view class="level">
+									仓库管理
+								</view>
+								<view class="state"
+									v-if="outRecordDetailObj&&outRecordDetailObj.outRecord&&outRecordDetailObj.outRecord.status==1">
+
+									<view v-if="operator.status==0">等待出库</view>
+									<view v-if="operator.status==1">出库成功</view>
+								</view>
+							</view>
+
+							<view class="u-order-time">
+								<view class="photo">
+									<u-avatar size="56" class="img" :src="operator.userImg"></u-avatar>
+								</view>
+								<view class="confirm">
+
+									<u-icon v-if="operator.status==0" name="more-circle-fill"
+										:color="recordStatusColor(0)"></u-icon>
+
+									<u-icon v-if="operator.status==1" name="checkmark-circle-fill"
+										:color="recordStatusColor(1)"></u-icon>
+
+
+								</view>
+
+								<view class="name"
+									v-if="outRecordDetailObj&&outRecordDetailObj.outRecord&&outRecordDetailObj.outRecord.status!=0">
+									<view v-if="operator.status==0">等待出库</view>
+									<view v-if="operator.status==1">出库成功</view>
+
+								</view>
+								<view class="name" v-else>
+									<view>等待审批</view>
+
+								</view>
+
+							</view>
+						</view>
+					</template>
+				</u-time-line-item>
+			</u-time-line>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		recordStatusColor
+	} from '@/apis/status.js'
+
+	export default {
+		name: "ApproveList",
+		props: {
+
+			approveList: {
+				default: []
+			},
+			outRecordDetailObj: {}
+		},
+		data() {
+			return {
+
+			};
+		},
+		computed: {
+			operator() {
+				var obj = {
+					userImg: "",
+					status: "",
+					name: "",
+				}
+				var outRecordDetailObj = this.outRecordDetailObj;
+				if (outRecordDetailObj && outRecordDetailObj.outRecord && outRecordDetailObj.outRecord.status != 0) {
+					if (outRecordDetailObj.outRecord.status == 3) {
+						obj.status = 1;
+					}
+				}
+
+				return obj
+			}
+		},
+
+		methods: {
+			recordStatusColor
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	// 流程
+	.process {
+		background-color: #fff;
+		margin-top: 24rpx;
+		padding: 24rpx 32rpx;
+		padding-bottom: 80px;
+
+		.title {
+			color: rgba(51, 51, 51, 1);
+			font-size: 32rpx;
+		}
+
+		.u-time-axis-item {
+			//margin-bottom: 76rpx;
+		}
+
+		.u-time-axis {
+			//padding: 18rpx 40rpx;
+		}
+
+		.u-node {
+			width: 18rpx;
+			height: 18rpx;
+			border-radius: 100rpx !important;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			background: #d0d0d0;
+		}
+
+		.u-order {
+			margin-bottom: 32rpx;
+		}
+
+		.u-order-title {
+			color: #333333;
+			font-weight: bold;
+			font-size: 32rpx;
+		}
+
+		.u-order-desc {
+			margin-bottom: 16rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.level {
+				color: #333333;
+				font-size: 32rpx;
+				font-weight: bold;
+			}
+
+			.date {
+				color: rgba(119, 119, 119, 1);
+			}
+
+			.state {
+				color: rgba(255, 121, 0, 1);
+			}
+		}
+
+		.u-order-time {
+			width: 160rpx;
+			color: #777777;
+			font-size: 28rpx;
+			margin-top: 16rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+
+			.photo {
+				display: flex;
+				width: 56rpx;
+				height: 56rpx;
+				border-radius: 100px;
+				margin-bottom: 4rpx;
+
+				.img {
+					width: 100%;
+					height: 100%;
+					overflow: hidden;
+					position: relative;
+				}
+			}
+
+			.confirm {
+				position: absolute;
+				top: 46rpx;
+				left: 56rpx;
+			}
+
+			.name {
+				color: rgba(51, 51, 51, 1);
+				font-size: 24rpx;
+			}
+
+		}
+
+	}
 </style>

+ 1 - 1
config/.env.dev.js

@@ -1,7 +1,7 @@
 const UNI_APP = {  
 	ProjectName :"荆力设备管理",
 	//BASE_URL: 'http://192.168.77.162:8086/equipment-manage-server/',
-	BASE_URL:"http://47.98.231.198:8081/equipment-manage-server/",
+	BASE_URL:"http://equipment.xiaoxinda.com:8081/equipment-manage-server/",
 	//IMG_URL:"http://www.jsrailway.com.cn/",
 	//BASE_URL: 'https://charging.xiaoxinda.com/charging-station-test/',
 	

+ 2 - 1
config/.env.prod.js

@@ -2,7 +2,8 @@ const UNI_APP = {
 	ProjectName :"荆力设备管理",
 	PREFIX : "jp-Equipment-Jingli",
 	
-	BASE_URL:"http://47.98.231.198:8081/equipment-manage-server/",
+//	BASE_URL:"http://47.98.231.198:8081/equipment-manage-server/",
+	BASE_URL:"http://equipment.xiaoxinda.com:8081/equipment-manage-server/",
 
 	NODE_ENV :"prod",
 	SIMPLE_RUN:false,

+ 2 - 1
config/.env.test.js

@@ -2,8 +2,9 @@ const UNI_APP = {
 	PREFIX : "jp-Equipment-Jingli",
 	ProjectName :"荆力设备管理",
 	
-	BASE_URL:"http://47.98.231.198:8081/equipment-manage-server/",
+	//BASE_URL:"http://47.98.231.198:8081/equipment-manage-server/",
     //BASE_URL: 'https://charging.xiaoxinda.com/charging-station-server/',
+    BASE_URL:"http://equipment.xiaoxinda.com:8081/equipment-manage-server/",
    
 
 	NODE_ENV :"test",

+ 18 - 22
pages.json

@@ -151,13 +151,6 @@
 					"enablePullDownRefresh": false
 				}
 
-			}, {
-				"path": "equipmentDelivery/deliveryList",
-				"style": {
-					//navigationBarTitleText": "",
-					"enablePullDownRefresh": false
-				}
-
 			}, {
 				"path": "equipmentDelivery/deliveriedList",
 				"style": {
@@ -172,21 +165,24 @@
 					"enablePullDownRefresh": false
 				}
 
-			}, {
-				"path": "equipmentEnter/verification",
-				"style": {
-					//navigationBarTitleText": "",
-					"enablePullDownRefresh": false
-				}
-
-			}, {
-				"path": "equipmentEnter/returnList",
-				"style": {
-					//navigationBarTitleText": "",
-					"enablePullDownRefresh": false
-				}
-
-			}, {
+			}
+			// , {
+			// 	"path": "equipmentEnter/verification",
+			// 	"style": {
+			// 		//navigationBarTitleText": "",
+			// 		"enablePullDownRefresh": false
+			// 	}
+			// }
+			// , {
+			// 	"path": "equipmentEnter/returnList",
+			// 	"style": {
+			// 		//navigationBarTitleText": "",
+			// 		"enablePullDownRefresh": false
+			// 	}
+
+			// }
+			
+			, {
 				"path": "equipmentEnter/deliveryDetails",
 				"style": {
 					//navigationBarTitleText": "",

+ 280 - 0
pages/otherFunctions/components/u-notice-bar.vue

@@ -0,0 +1,280 @@
+<template>
+	<view class="u-notice-bar-wrap" v-if="isShow" :style="{
+		borderRadius: borderRadius + 'rpx',
+	}">
+		<block v-if="mode == 'horizontal' && isCircular">
+			<u-row-notice
+				:type="type"
+				:color="color"
+				:bgColor="bgColor"
+				:list="list"
+				:volumeIcon="volumeIcon"
+				:moreIcon="moreIcon"
+				:volumeSize="volumeSize"
+				:closeIcon="closeIcon"
+				:mode="mode"
+				:fontSize="fontSize"
+				:speed="speed"
+				:playState="playState"
+				:padding="padding"
+				@change="change"
+				@getMore="getMore"
+				@close="close"
+				@click="click"
+			></u-row-notice>
+		</block>
+		<block v-if="mode == 'vertical' || (mode == 'horizontal' && !isCircular)">
+			<u-column-notice
+				:type="type"
+				:color="color"
+				:bgColor="bgColor"
+				:list="list"
+				:volumeIcon="volumeIcon"
+				:moreIcon="moreIcon"
+				:closeIcon="closeIcon"
+				:mode="mode"
+				:volumeSize="volumeSize"
+				:disable-touch="disableTouch"
+				:fontSize="fontSize"
+				:duration="duration"
+				:playState="playState"
+				:padding="padding"
+				@change="change"
+				@getMore="getMore"
+				@close="close"
+				@click="click"
+				@end="end"
+			></u-column-notice>
+		</block>
+	</view>
+</template>
+<script>
+/**
+ * noticeBar 滚动通知
+ * @description 该组件用于滚动通告场景,有多种模式可供选择
+ * @tutorial https://www.uviewui.com/components/noticeBar.html
+ * @property {Array} list 滚动内容,数组形式,见上方说明
+ * @property {String} type 显示的主题(默认warning)
+ * @property {Boolean} volume-icon 是否显示小喇叭图标(默认true)
+ * @property {Boolean} more-icon 是否显示右边的向右箭头(默认false)
+ * @property {Boolean} close-icon 是否显示关闭图标(默认false)
+ * @property {Boolean} autoplay 是否自动播放(默认true)
+ * @property {String} color 文字颜色
+ * @property {String Number} bg-color 背景颜色
+ * @property {String} mode 滚动模式(默认horizontal)
+ * @property {Boolean} show 是否显示(默认true)
+ * @property {String Number} font-size 字体大小,单位rpx(默认28)
+ * @property {String Number} volume-size 左边喇叭的大小(默认34)
+ * @property {String Number} duration 滚动周期时长,只对步进模式有效,横向衔接模式无效,单位ms(默认2000)
+ * @property {String Number} speed 水平滚动时的滚动速度,即每秒移动多少距离,只对水平衔接方式有效,单位rpx(默认160)
+ * @property {String Number} font-size 字体大小,单位rpx(默认28)
+ * @property {Boolean} is-circular mode为horizontal时,指明是否水平衔接滚动(默认true)
+ * @property {String} play-state 播放状态,play - 播放,paused - 暂停(默认play)
+ * @property {String Nubmer} border-radius 通知栏圆角(默认为0)
+ * @property {String Nubmer} padding 内边距,字符串,与普通的内边距css写法一直(默认"18rpx 24rpx")
+ * @property {Boolean} no-list-hidden 列表为空时,是否显示组件(默认false)
+ * @property {Boolean} disable-touch 是否禁止通过手动滑动切换通知,只有mode = vertical,或者mode = horizontal且is-circular = false时有效(默认true)
+ * @event {Function} click 点击通告文字触发,只有mode = vertical,或者mode = horizontal且is-circular = false时有效
+ * @event {Function} close 点击右侧关闭图标触发
+ * @event {Function} getMore 点击右侧向右图标触发
+ * @event {Function} end 列表的消息每次被播放一个周期时触发,只有mode = vertical,或者mode = horizontal且is-circular = false时有效
+ * @example <u-notice-bar :more-icon="true" :list="list"></u-notice-bar>
+ */
+export default {
+	name: "u-notice-bar",
+	props: {
+		// 显示的内容,数组
+		list: {
+			type: Array,
+			default() {
+				return [];
+			}
+		},
+		// 显示的主题,success|error|primary|info|warning
+		type: {
+			type: String,
+			default: 'warning'
+		},
+		// 是否显示左侧的音量图标
+		volumeIcon: {
+			type: Boolean,
+			default: true
+		},
+		// 音量喇叭的大小
+		volumeSize: {
+			type: [Number, String],
+			default: 34
+		},
+		// 是否显示右侧的右箭头图标
+		moreIcon: {
+			type: Boolean,
+			default: false
+		},
+		// 是否显示右侧的关闭图标
+		closeIcon: {
+			type: Boolean,
+			default: false
+		},
+		// 是否自动播放
+		autoplay: {
+			type: Boolean,
+			default: true
+		},
+		// 文字颜色,各图标也会使用文字颜色
+		color: {
+			type: String,
+			default: ''
+		},
+		// 背景颜色
+		bgColor: {
+			type: String,
+			default: ''
+		},
+		// 滚动方向,horizontal-水平滚动,vertical-垂直滚动
+		mode: {
+			type: String,
+			default: 'horizontal'
+		},
+		// 是否显示
+		show: {
+			type: Boolean,
+			default: true
+		},
+		// 字体大小,单位rpx
+		fontSize: {
+			type: [Number, String],
+			default: 28
+		},
+		// 滚动一个周期的时间长,单位ms
+		duration: {
+			type: [Number, String],
+			default: 2000
+		},
+		// 水平滚动时的滚动速度,即每秒滚动多少rpx,这有利于控制文字无论多少时,都能有一个恒定的速度
+		speed: {
+			type: [Number, String],
+			default: 160
+		},
+		// 水平滚动时,是否采用衔接形式滚动
+		// 水平衔接模式,采用的是swiper组件,水平滚动
+		isCircular: {
+			type: Boolean,
+			default: true
+		},
+		// 播放状态,play-播放,paused-暂停
+		playState: {
+			type: String,
+			default: 'play'
+		},
+		// 是否禁止用手滑动切换
+		// 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序
+		disableTouch: {
+			type: Boolean,
+			default: true
+		},
+		// 滚动通知设置圆角
+		borderRadius: {
+			type: [Number, String],
+			default: 0
+		},
+		// 通知的边距
+		padding: {
+			type: [Number, String],
+			default: '18rpx 24rpx'
+		},
+		// list列表为空时,是否显示组件
+		noListHidden: {
+			type: Boolean,
+			default: true
+		}
+	},
+	computed: {
+		// 如果设置show为false,或者设置了noListHidden为true,且list长度又为零的话,隐藏组件
+		isShow() {
+			if(this.show == false || (this.noListHidden == true && this.list.length == 0)) return false;
+			else return true;
+		}
+	},
+	methods: {
+		// 点击通告栏
+		click(index) {
+			this.$emit('click', index);
+		},
+		// 点击关闭按钮
+		close() {
+			this.$emit('close');
+		},
+		// 点击更多箭头按钮
+		getMore() {
+			this.$emit('getMore');
+		},
+		// 滚动一个周期结束,只对垂直,或者水平步进形式有效
+		end() {
+			this.$emit('end');
+		},
+		change(e){
+			
+			this.$emit('change',e);
+		}
+		
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+//@import "../../libs/css/style.components.scss";
+
+.u-notice-bar-wrap {
+	overflow: hidden;
+}
+
+.u-notice-bar {
+	padding: 18rpx 24rpx;
+	overflow: hidden;
+}
+
+.u-direction-row {
+	
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+
+.u-left-icon {
+	display: flex;
+	align-items: center;
+}
+
+.u-notice-box {
+	flex: 1;
+	display: flex;
+	overflow: hidden;
+	margin-left: 12rpx;
+}
+
+.u-right-icon {
+	margin-left: 12rpx;
+	display: flex;
+	align-items: center;
+}
+
+.u-notice-content {
+	line-height: 1;
+	white-space: nowrap;
+	font-size: 26rpx;
+	animation: u-loop-animation 10s linear infinite both;
+	text-align: right;
+	// 这一句很重要,为了能让滚动左右连接起来
+	padding-left: 100%;
+}
+
+@keyframes u-loop-animation {
+	0% {
+		transform: translate3d(0, 0, 0);
+	}
+
+	100% {
+		transform: translate3d(-100%, 0, 0);
+	}
+}
+</style>

+ 1 - 2
pages/otherFunctions/equipmentRetrieval/equipmentDetail.vue

@@ -135,8 +135,7 @@
 					</view>
 					<!-- 提示 -->
 					<view class="hint">
-						<u-alert-tips  icon="bell-fill"  type="warning" :show-icon="true" :title="title" :description="description"></u-alert-tips>
-					</view>
+					<!-- <u-alert-tips  icon="bell-fill"  type="warning" :show-icon="true" :title="title" :description="description"></u-alert-tips>-->					</view>
 					
 					<view class="inspection-contents">
 						<view class="inspection-title">

+ 8 - 4
pages/otherFunctions/homePage.vue

@@ -32,10 +32,10 @@
 		<!-- 宫格 -->
 		<view class="gird" >
 			<!-- 公告 -->
-			<view class="notice" v-if="false" >
-				<u-notice-bar mode="horizontal"
+			<view class="notice" >
+				<ujp-notice-bar mode="horizontal"
 				 bg-color="#6290f7" color="#fff"
-				 :list="['库存PDA设备将于2023年4月1日升级维护']"></u-notice-bar>
+				 :list="['库存PDA设备将于2023年4月1日升级维护']"></ujp-notice-bar>
 			
 				<!-- <u-icon name="volume-up-fill" size="40" color="#fff"></u-icon>
 				<text></text> -->
@@ -168,6 +168,7 @@
 
 <script>
 	import * as API from '@/apis/pagejs/index.js'
+	import ujpNoticeBar from "@/pages/otherFunctions/components/u-notice-bar.vue"
 	
 	export default {
 		data() {
@@ -179,6 +180,9 @@
 				}
 			}
 		},
+		components:{
+			ujpNoticeBar
+		},
 		onLoad() {
 			this.userInfo=this.carhelp.getPersonInfo()
 			//this.getUserDepartmentList()
@@ -262,7 +266,7 @@
 				
 					
 					uni.redirectTo({
-						url:"/"
+						url:"/pages/index/index"
 					})
 					
 				}).catch(error => {

+ 0 - 0
components/l-signature/context.js → pages/projectDepartment/components/l-signature/context.js


+ 0 - 0
components/l-signature/l-signature.vue → pages/projectDepartment/components/l-signature/l-signature.vue


+ 0 - 0
components/l-signature/props.js → pages/projectDepartment/components/l-signature/props.js


+ 0 - 0
components/l-signature/render.js → pages/projectDepartment/components/l-signature/render.js


+ 0 - 0
components/l-signature/signature.js → pages/projectDepartment/components/l-signature/signature.js


+ 0 - 0
components/l-signature/utils.js → pages/projectDepartment/components/l-signature/utils.js


+ 645 - 0
pages/projectDepartment/components/u-calendar.vue

@@ -0,0 +1,645 @@
+<template>
+	<u-popup closeable :maskCloseAble="maskCloseAble" mode="bottom" :popup="false" v-model="value" length="auto"
+	 :safeAreaInsetBottom="safeAreaInsetBottom" @close="close" :z-index="uZIndex" :border-radius="borderRadius" :closeable="closeable">
+		<view class="u-calendar">
+			<view class="u-calendar__header">
+				<view class="u-calendar__header__text" v-if="!$slots['tooltip']">
+					{{toolTip}}
+				</view>
+				<slot v-else name="tooltip" />
+			</view>
+			<view class="u-calendar__action u-flex u-row-center">
+				<view class="u-calendar__action__icon">
+					<u-icon v-if="changeYear" name="arrow-left-double" :color="yearArrowColor" @click="changeYearHandler(0)"></u-icon>
+				</view>
+				<view class="u-calendar__action__icon">
+					<u-icon v-if="changeMonth" name="arrow-left" :color="monthArrowColor" @click="changeMonthHandler(0)"></u-icon>
+				</view>
+				<view class="u-calendar__action__text">{{ showTitle }}</view>
+				<view class="u-calendar__action__icon">
+					<u-icon v-if="changeMonth" name="arrow-right" :color="monthArrowColor" @click="changeMonthHandler(1)"></u-icon>
+				</view>
+				<view class="u-calendar__action__icon">
+					<u-icon v-if="changeYear" name="arrow-right-double" :color="yearArrowColor" @click="changeYearHandler(1)"></u-icon>
+				</view>
+			</view>
+			<view class="u-calendar__week-day">
+				<view class="u-calendar__week-day__text" v-for="(item, index) in weekDayZh" :key="index">{{item}}</view>
+			</view>
+			<view class="u-calendar__content">
+				<!-- 前置空白部分 -->
+				<block v-for="(item, index) in weekdayArr" :key="index">
+					<view class="u-calendar__content__item"></view>
+				</block>
+				<view class="u-calendar__content__item" :class="{
+					'u-hover-class':openDisAbled(year,month,index+1),
+					'u-calendar__content--start-date': (mode == 'range' && startDate==`${year}-${month}-${index+1}`) || mode== 'date',
+					'u-calendar__content--end-date':(mode== 'range' && endDate==`${year}-${month}-${index+1}`) || mode == 'date'
+				}" :style="{backgroundColor: getColor(index,1)}" v-for="(item, index) in daysArr" :key="index"
+				 @tap="dateClick(index)">
+					<view class="u-calendar__content__item__inner" :style="{color: getColor(index,2)}">
+						<view>{{ index + 1 }}</view>
+					</view>
+					<view class="u-calendar__content__item__tips" :style="{color:activeColor}" v-if="mode== 'range' && startDate==`${year}-${month}-${index+1}` && startDate!=endDate">{{startText}}</view>
+					<view class="u-calendar__content__item__tips" :style="{color:activeColor}" v-if="mode== 'range' && endDate==`${year}-${month}-${index+1}`">{{endText}}</view>
+				</view>
+				<view class="u-calendar__content__bg-month">{{month}}</view>
+			</view>
+			<view class="u-calendar__bottom">
+				<view class="u-calendar__bottom__choose">
+					<text>{{mode == 'date' ? activeDate : startDate}}</text>
+					<text v-if="endDate">至{{endDate}}</text>
+				</view>
+				<view class="u-calendar__bottom__btn">
+					
+					<u-button :type="btnType"  shape="circle" size="default" @click="btnFix(false)">确定</u-button>
+				</view>
+			</view>
+		</view>
+	</u-popup>
+</template>
+<script>
+	/**
+	 * calendar 日历
+	 * @description 此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中。
+	 * @tutorial http://uviewui.com/components/calendar.html
+	 * @property {String} mode 选择日期的模式,date-为单个日期,range-为选择日期范围
+	 * @property {Boolean} v-model 布尔值变量,用于控制日历的弹出与收起
+	 * @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配(默认false)
+	 * @property {Boolean} change-year 是否显示顶部的切换年份方向的按钮(默认true)
+	 * @property {Boolean} change-month 是否显示顶部的切换月份方向的按钮(默认true)
+	 * @property {String Number} max-year 可切换的最大年份(默认2050)
+	 * @property {String Number} min-year 可切换的最小年份(默认1950)
+	 * @property {String Number} min-date 最小可选日期(默认1950-01-01)
+	 * @property {String Number} max-date 最大可选日期(默认当前日期)
+	 * @property {String Number} 弹窗顶部左右两边的圆角值,单位rpx(默认20)
+	 * @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭日历(默认true)
+	 * @property {String} month-arrow-color 月份切换按钮箭头颜色(默认#606266)
+	 * @property {String} year-arrow-color 年份切换按钮箭头颜色(默认#909399)
+	 * @property {String} color 日期字体的默认颜色(默认#303133)
+	 * @property {String} active-bg-color 起始/结束日期按钮的背景色(默认#2979ff)
+	 * @property {String Number} z-index 弹出时的z-index值(默认10075)
+	 * @property {String} active-color 起始/结束日期按钮的字体颜色(默认#ffffff)
+	 * @property {String} range-bg-color 起始/结束日期之间的区域的背景颜色(默认rgba(41,121,255,0.13))
+	 * @property {String} range-color 选择范围内字体颜色(默认#2979ff)
+	 * @property {String} start-text 起始日期底部的提示文字(默认 '开始')
+	 * @property {String} end-text 结束日期底部的提示文字(默认 '结束')
+	 * @property {String} btn-type 底部确定按钮的主题(默认 'primary')
+	 * @property {String} toolTip 顶部提示文字,如设置名为tooltip的slot,此参数将失效(默认 '选择日期')
+	 * @property {Boolean} closeable 是否显示右上角的关闭图标(默认true)
+	 * @example <u-calendar v-model="show" :mode="mode"></u-calendar>
+	 */
+	
+	export default {
+		name: 'u-calendar',
+		props: {
+			safeAreaInsetBottom: {
+				type: Boolean,
+				default: false
+			},
+			// 是否允许通过点击遮罩关闭Picker
+			maskCloseAble: {
+				type: Boolean,
+				default: true
+			},
+			// 通过双向绑定控制组件的弹出与收起
+			value: {
+				type: Boolean,
+				default: false
+			},
+			// 弹出的z-index值
+			zIndex: {
+				type: [String, Number],
+				default: 0
+			},
+			// 是否允许切换年份
+			changeYear: {
+				type: Boolean,
+				default: true
+			},
+			// 是否允许切换月份
+			changeMonth: {
+				type: Boolean,
+				default: true
+			},
+			// date-单个日期选择,range-开始日期+结束日期选择
+			mode: {
+				type: String,
+				default: 'date'
+			},
+			// 可切换的最大年份
+			maxYear: {
+				type: [Number, String],
+				default: 2050
+			},
+			// 可切换的最小年份
+			minYear: {
+				type: [Number, String],
+				default: 1950
+			},
+			// 最小可选日期(不在范围内日期禁用不可选)
+			minDate: {
+				type: [Number, String],
+				default: '1950-01-01'
+			},
+			/**
+			 * 最大可选日期
+			 * 默认最大值为今天,之后的日期不可选
+			 * 2030-12-31
+			 * */
+			maxDate: {
+				type: [Number, String],
+				default: ''
+			},
+			// 弹窗顶部左右两边的圆角值
+			borderRadius: {
+				type: [String, Number],
+				default: 20
+			},
+			// 月份切换按钮箭头颜色
+			monthArrowColor: {
+				type: String,
+				default: '#606266'
+			},
+			// 年份切换按钮箭头颜色
+			yearArrowColor: {
+				type: String,
+				default: '#909399'
+			},
+			// 默认日期字体颜色
+			color: {
+				type: String,
+				default: '#303133'
+			},
+			// 选中|起始结束日期背景色
+			activeBgColor: {
+				type: String,
+				default: '#2979ff'
+			},
+			// 选中|起始结束日期字体颜色
+			activeColor: {
+				type: String,
+				default: '#ffffff'
+			},
+			// 范围内日期背景色
+			rangeBgColor: {
+				type: String,
+				default: 'rgba(41,121,255,0.13)'
+			}, 
+			// 范围内日期字体颜色
+			rangeColor: {
+				type: String,
+				default: '#2979ff'
+			},
+			// mode=range时生效,起始日期自定义文案
+			startText: {
+				type: String,
+				default: '开始'
+			},
+			// mode=range时生效,结束日期自定义文案
+			endText: {
+				type: String,
+				default: '结束'
+			},
+			//按钮样式类型
+			btnType: {
+				type: String,
+				default: 'primary'
+			},
+			// 当前选中日期带选中效果
+			isActiveCurrent: {
+				type: Boolean,
+				default: true
+			},
+			// 切换年月是否触发事件 mode=date时生效
+			isChange: {
+				type: Boolean,
+				default: false
+			},
+			// 是否显示右上角的关闭图标
+			closeable: {
+				type: Boolean,
+				default: true
+			},
+			// 顶部的提示文字
+			toolTip: {
+				type: String,
+				default: '选择日期'
+			}
+		},
+		data() {
+			return {
+				// 星期几,值为1-7
+				weekday: 1, 
+				weekdayArr:[],
+				// 当前月有多少天
+				days: 0, 
+				daysArr:[],
+				showTitle: '',
+				year: 2020,
+				month: 0,
+				day: 0,
+				startYear: 0,
+				startMonth: 0,
+				startDay: 0,
+				endYear: 0,
+				endMonth: 0,
+				endDay: 0,
+				today: '',
+				activeDate: '',
+				startDate: '',
+				endDate: '',
+				isStart: true,
+				min: null,
+				max: null,
+				weekDayZh: ['日', '一', '二', '三', '四', '五', '六']
+			};
+		},
+		computed: {
+			dataChange() {
+				return `${this.mode}-${this.minDate}-${this.maxDate}`;
+			},
+			uZIndex() {
+				// 如果用户有传递z-index值,优先使用
+				return this.zIndex ? this.zIndex : this.$u.zIndex.popup;
+			}
+		},
+		watch: {
+			dataChange(val) {
+				this.init()
+			}
+		},
+		created() {
+			this.init()
+		},
+		methods: {
+			getColor(index, type) {
+				let color = type == 1 ? '' : this.color;
+				let day = index + 1
+				let date = `${this.year}-${this.month}-${day}`
+				let timestamp = new Date(date.replace(/\-/g, '/')).getTime();
+				let start = this.startDate.replace(/\-/g, '/')
+				let end = this.endDate.replace(/\-/g, '/')
+				if ((this.isActiveCurrent && this.activeDate == date) || this.startDate == date || this.endDate == date) {
+					color = type == 1 ? this.activeBgColor : this.activeColor;
+				} else if (this.endDate && timestamp > new Date(start).getTime() && timestamp < new Date(end).getTime()) {
+					color = type == 1 ? this.rangeBgColor : this.rangeColor;
+				}
+				return color;
+			},
+			init() {
+				let now = new Date();
+				let minDate = new Date(this.minDate);
+				let maxDate = new Date(this.maxDate);
+				if (now < minDate) now = minDate;
+				if (now > maxDate) now = maxDate;
+				this.year = now.getFullYear();
+				this.month = now.getMonth() + 1;
+				this.day = now.getDate();
+				this.today = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;
+				this.activeDate = this.today;
+				this.min = this.initDate(this.minDate);
+				this.max = this.initDate(this.maxDate || this.today);
+				this.startDate = "";
+				this.startYear = 0;
+				this.startMonth = 0;
+				this.startDay = 0;
+				this.endYear = 0;
+				this.endMonth = 0;
+				this.endDay = 0;
+				this.endDate = "";
+				this.isStart = true;
+				this.changeData();
+			},
+			//日期处理
+			initDate(date) {
+				let fdate = date.split('-');
+				return {
+					year: Number(fdate[0] || 1920),
+					month: Number(fdate[1] || 1),
+					day: Number(fdate[2] || 1)
+				}
+			},
+			openDisAbled: function(year, month, day) {
+				let bool = true;
+				let date = `${year}/${month}/${day}`;
+				// let today = this.today.replace(/\-/g, '/');
+				let min = `${this.min.year}/${this.min.month}/${this.min.day}`;
+				let max = `${this.max.year}/${this.max.month}/${this.max.day}`;
+				let timestamp = new Date(date).getTime();
+				if (timestamp >= new Date(min).getTime() && timestamp <= new Date(max).getTime()) {
+					bool = false;
+				}
+				return bool;
+			},
+			generateArray: function(start, end) {
+				return Array.from(new Array(end + 1).keys()).slice(start);
+			},
+			formatNum: function(num) {
+				return num < 10 ? '0' + num : num + '';
+			},
+			//一个月有多少天
+			getMonthDay(year, month) {
+				let days = new Date(year, month, 0).getDate();
+				return days;
+			},
+			getWeekday(year, month) {
+				let date = new Date(`${year}/${month}/01 00:00:00`);
+				return date.getDay();
+			},
+			checkRange(year) {
+				let overstep = false;
+				if (year < this.minYear || year > this.maxYear) {
+					uni.showToast({
+						title: "日期超出范围啦~",
+						icon: 'none'
+					})
+					overstep = true;
+				}
+				return overstep;
+			},
+			changeMonthHandler(isAdd) {
+				if (isAdd) {
+					let month = this.month + 1;
+					let year = month > 12 ? this.year + 1 : this.year;
+					if (!this.checkRange(year)) {
+						this.month = month > 12 ? 1 : month;
+						this.year = year;
+						this.changeData();
+					}
+
+				} else {
+					let month = this.month - 1;
+					let year = month < 1 ? this.year - 1 : this.year;
+					if (!this.checkRange(year)) {
+						this.month = month < 1 ? 12 : month;
+						this.year = year;
+						this.changeData();
+					}
+				}
+			},
+			changeYearHandler(isAdd) {
+				let year = isAdd ? this.year + 1 : this.year - 1;
+				if (!this.checkRange(year)) {
+					this.year = year;
+					this.changeData();
+				}
+			},
+			changeData() {
+				this.days = this.getMonthDay(this.year, this.month);
+				this.daysArr=this.generateArray(1,this.days)
+				this.weekday = this.getWeekday(this.year, this.month);
+				this.weekdayArr=this.generateArray(1,this.weekday)
+				this.showTitle = `${this.year}年${this.month}月`;
+				if (this.isChange && this.mode == 'date') {
+					this.btnFix(true);
+				}
+			},
+			dateClick: function(day) {
+				day += 1;
+				if (!this.openDisAbled(this.year, this.month, day)) {
+					this.day = day;
+					let date = `${this.year}-${this.month}-${day}`;
+					if (this.mode == 'date') {
+						this.activeDate = date;
+					} else {
+						let compare = new Date(date.replace(/\-/g, '/')).getTime() < new Date(this.startDate.replace(/\-/g, '/')).getTime()
+						if (this.isStart || compare) {
+							this.startDate = date;
+							this.startYear = this.year;
+							this.startMonth = this.month;
+							this.startDay = this.day;
+							this.endYear = 0;
+							this.endMonth = 0;
+							this.endDay = 0;
+							this.endDate = "";
+							this.activeDate = "";
+							this.isStart = false;
+						} else {
+							this.endDate = date;
+							this.endYear = this.year;
+							this.endMonth = this.month;
+							this.endDay = this.day;
+							this.isStart = true;
+						}
+					}
+				}
+			},
+			close() {
+				// 修改通过v-model绑定的父组件变量的值为false,从而隐藏日历弹窗
+				this.$emit('input', false);
+			},
+			getWeekText(date) {
+				date = new Date(`${date.replace(/\-/g, '/')} 00:00:00`);
+				let week = date.getDay();
+				return '星期' + ['日', '一', '二', '三', '四', '五', '六'][week];
+			},
+			btnFix(show) {
+				if (!show) {
+					this.close();
+				}
+				if (this.mode == 'date') {
+					let arr = this.activeDate.split('-')
+					let year = this.isChange ? this.year : Number(arr[0]);
+					let month = this.isChange ? this.month : Number(arr[1]);
+					let day = this.isChange ? this.day : Number(arr[2]);
+					//当前月有多少天
+					let days = this.getMonthDay(year, month);
+					let result = `${year}-${this.formatNum(month)}-${this.formatNum(day)}`;
+					let weekText = this.getWeekText(result);
+					let isToday = false;
+					if (`${year}-${month}-${day}` == this.today) {
+						//今天
+						isToday = true;
+					}
+					this.$emit('change', {
+						year: year,
+						month: month,
+						day: day,
+						days: days,
+						result: result,
+						week: weekText,
+						isToday: isToday,
+						// switch: show //是否是切换年月操作
+					});
+				} else {
+					if (!this.startDate || !this.endDate) return;
+					let startMonth = this.formatNum(this.startMonth);
+					let startDay = this.formatNum(this.startDay);
+					let startDate = `${this.startYear}-${startMonth}-${startDay}`;
+					let startWeek = this.getWeekText(startDate)
+
+					let endMonth = this.formatNum(this.endMonth);
+					let endDay = this.formatNum(this.endDay);
+					let endDate = `${this.endYear}-${endMonth}-${endDay}`;
+					let endWeek = this.getWeekText(endDate);
+					this.$emit('change', {
+						startYear: this.startYear,
+						startMonth: this.startMonth,
+						startDay: this.startDay,
+						startDate: startDate,
+						startWeek: startWeek,
+						endYear: this.endYear,
+						endMonth: this.endMonth,
+						endDay: this.endDay,
+						endDate: endDate,
+						endWeek: endWeek
+					});
+				}
+			}
+		}
+	};
+</script>
+
+<style scoped lang="scss">
+	//@import "../../libs/css/style.components.scss";
+	
+	.u-calendar {
+		color: $u-content-color;
+		
+		&__header {
+			width: 100%;
+			box-sizing: border-box;
+			font-size: 30rpx;
+			background-color: #fff;
+			color: $u-main-color;
+			
+			&__text {
+				margin-top: 30rpx;
+				padding: 0 60rpx;
+				 
+				display:flex;
+				justify-content: center;
+				align-items: center;
+			}
+		}
+		
+		&__action {
+			padding: 40rpx 0 40rpx 0;
+			
+			&__icon {
+				margin: 0 16rpx;
+			}
+			
+			&__text {
+				padding: 0 16rpx;
+				color: $u-main-color;
+				font-size: 32rpx;
+				line-height: 32rpx;
+				font-weight: bold;
+			}
+		}
+	
+		&__week-day {
+			display:flex;
+			align-items: center;
+			justify-content: center;
+			padding: 6px 0;
+			overflow: hidden;
+			
+			&__text {
+				flex: 1;
+				text-align: center;
+			}
+		}
+	
+		&__content {
+			width: 100%;
+			display:flex;
+			flex-wrap: wrap;
+			padding: 6px 0;
+			box-sizing: border-box;
+			background-color: #fff;
+			position: relative;
+			
+			&--end-date {
+				border-top-right-radius: 8rpx;
+				border-bottom-right-radius: 8rpx;
+			}
+			
+			&--start-date {
+				border-top-left-radius: 8rpx;
+				border-bottom-left-radius: 8rpx;
+			}
+			
+			&__item {
+				width: 14.2857%;
+				display:flex;
+				align-items: center;
+				justify-content: center;
+				padding: 6px 0;
+				overflow: hidden;
+				position: relative;
+				z-index: 2;
+				
+				&__inner {
+					height: 84rpx;
+					display:flex;
+					align-items: center;
+					justify-content: center;
+					flex-direction: column;
+					font-size: 32rpx;
+					position: relative;
+					border-radius: 50%;
+					
+					&__desc {
+						width: 100%;
+						font-size: 24rpx;
+						line-height: 24rpx;
+						transform: scale(0.75);
+						transform-origin: center center;
+						position: absolute;
+						left: 0;
+						text-align: center;
+						bottom: 2rpx;
+					}
+				}
+				
+				&__tips {
+					width: 100%;
+					font-size: 24rpx;
+					line-height: 24rpx;
+					position: absolute;
+					left: 0;
+					transform: scale(0.8);
+					transform-origin: center center;
+					text-align: center;
+					bottom: 8rpx;
+					z-index: 2;
+				}
+			}
+			
+			&__bg-month {
+				position: absolute;
+				font-size: 130px;
+				line-height: 130px;
+				left: 50%;
+				top: 50%;
+				transform: translate(-50%, -50%);
+				color: #e4e7ed;
+				z-index: 1;
+			}
+		}
+	
+		&__bottom {
+			width: 100%;
+			display:flex;
+			align-items: center;
+			justify-content: center;
+			flex-direction: column;
+			background-color: #fff;
+			padding: 0 40rpx 30rpx;
+			box-sizing: border-box;
+			font-size: 24rpx;
+			color: $u-tips-color;
+			
+			&__choose {
+				height: 50rpx;
+			}
+			
+			&__btn {
+				width: 100%;
+			}
+		}
+	}
+</style>

+ 4 - 0
pages/projectDepartment/exportApplication/deliveryDetails.vue

@@ -288,6 +288,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+			max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 8 - 3
pages/projectDepartment/exportApplication/deliveryFrom.vue

@@ -30,7 +30,7 @@
 					使用周期至<span style="color: red;">*</span>
 				</view>
 				<view class="value">
-					<u-calendar v-model="show" mode="date"  max-date="2099-01-01"  @change="change"></u-calendar>
+					<ujp-calendar v-model="show" mode="date"  max-date="2099-01-01"  @change="change"></ujp-calendar>
 
 					<u-input v-model="endTime" @click="show=true,showText='endTime'"  @clear="showText='endTime',change('')"   placeholder="请输入使用周期" 	 type="select" />
 				</view>
@@ -142,7 +142,7 @@
 
 				</view>
 				<view>
-					<u-gap height="2" bg-color="#bbb"></u-gap>
+					
 					出库数量	
 					<u-number-box bg-color="#FFFFFF"
 					 style="float: right;" v-model="item.count"></u-number-box>
@@ -195,6 +195,7 @@
 <script>
 	import equipmentRetrieval from "@/components/equipmentRetrieval"
 	import * as API from '@/apis/pagejs/projectDepartment.js'
+	import ujpCalendar from '@/pages/projectDepartment/components/u-calendar.vue'
 	
 	export default {
 		data() {
@@ -217,7 +218,7 @@
 			}
 		},
 		components:{
-			equipmentRetrieval
+			equipmentRetrieval,ujpCalendar
 		},
 		computed:{
 			 
@@ -443,6 +444,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+			max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 5 - 1
pages/projectDepartment/exportProcess/deliveryDetails.vue

@@ -169,7 +169,7 @@
 </template>
 
 <script>
-	import LSignature from '@/components/l-signature/l-signature.vue'
+	import LSignature from '@/pages/projectDepartment/components/l-signature/l-signature.vue'
 	
 	import * as API from '@/apis/pagejs/approve.js'
 	import {
@@ -452,6 +452,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+			max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 4 - 0
pages/projectDepartment/exportProcess/deliveryInfo.vue

@@ -239,6 +239,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+			max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 4 - 0
pages/projectDepartment/exportReturn/deliveryDetails.vue

@@ -198,6 +198,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+			max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 4 - 0
pages/projectDepartment/exportReturn/deliveryFrom.vue

@@ -428,6 +428,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+			max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 692 - 0
pages/storeManagement/components/u-upload.vue

@@ -0,0 +1,692 @@
+<template>
+	<view class="u-upload" v-if="!disabled">
+		<view
+			v-if="showUploadList"
+			class="u-list-item u-preview-wrap"
+			v-for="(item, index) in lists"
+			:key="index"
+			:style="{
+				width: $u.addUnit(width),
+				height: $u.addUnit(height)
+			}"
+		>
+			<view
+				v-if="deletable"
+				class="u-delete-icon"
+				@tap.stop="deleteItem(index)"
+				:style="{
+					background: delBgColor
+				}"
+			>
+				<u-icon class="u-icon" :name="delIcon" size="20" :color="delColor"></u-icon>
+			</view>
+		<!-- 	<u-line-progress
+				v-if="showProgress && item.progress > 0 && item.progress != 100 && !item.error"
+				:show-percent="true"
+				height="16"
+				class="u-progress"
+				 
+			></u-line-progress> -->
+			<template v-if="!item.view">
+				<view @tap.stop="retry(index)" v-if="item.error" class=" u-error-btn2 u-error-btn">点击重试</view>
+				<view  v-if="item.progress==100&&item.response&&item.response.result" class="u-error-btn2 u-primary-btn">上传成功</view>
+				<view  v-else-if="!item.error" class="u-error-btn2 u-warning-btn">上传中</view>
+			</template>
+			
+			
+			<image @tap.stop="doPreviewImage(item.url || item.path, index)" class="u-preview-image" v-if="!item.isImage" :src="item.url || item.path" :mode="imageMode"></image>
+		</view>
+		<slot name="file" :file="lists"></slot>
+		<view style="display: inline-block;" @tap="selectFile" v-if="maxCount > lists.length">
+			<slot name="addBtn"></slot>
+			<view
+				v-if="!customBtn"
+				class="u-list-item u-add-wrap"
+				hover-class="u-add-wrap__hover"
+				hover-stay-time="150"
+				:style="{
+					width: $u.addUnit(width),
+					height: $u.addUnit(height)
+				}"
+			>
+				<u-icon name="plus" class="u-add-btn" size="40"></u-icon>
+				<view class="u-add-tips">{{ uploadText }}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+/**
+ * upload 图片上传
+ * @description 该组件用于上传图片场景
+ * @tutorial https://www.uviewui.com/components/upload.html
+ * @property {String} action 服务器上传地址
+ * @property {String Number} max-count 最大选择图片的数量(默认99)
+ * @property {Boolean} custom-btn 如果需要自定义选择图片的按钮,设置为true(默认false)
+ * @property {Boolean} show-progress 是否显示进度条(默认true)
+ * @property {Boolean} disabled 是否启用(显示/移仓)组件(默认false)
+ * @property {String} image-mode 预览图片等显示模式,可选值为uni的image的mode属性值(默认aspectFill)
+ * @property {String} del-icon 右上角删除图标名称,只能为uView内置图标
+ * @property {String} del-bg-color 右上角关闭按钮的背景颜色
+ * @property {String | Number} index 在各个回调事件中的最后一个参数返回,用于区别是哪一个组件的事件
+ * @property {String} del-color 右上角关闭按钮图标的颜色
+ * @property {Object} header 上传携带的头信息,对象形式
+ * @property {Object} form-data 上传额外携带的参数
+ * @property {String} name 上传文件的字段名,供后端获取使用(默认file)
+ * @property {Array<String>} size-type original 原图,compressed 压缩图,默认二者都有(默认['original', 'compressed'])
+ * @property {Array<String>} source-type 选择图片的来源,album-从相册选图,camera-使用相机,默认二者都有(默认['album', 'camera'])
+ * @property {Boolean} preview-full-image	是否可以通过uni.previewImage预览已选择的图片(默认true)
+ * @property {Boolean} multiple	是否开启图片多选,部分安卓机型不支持(默认true)
+ * @property {Boolean} deletable 是否显示删除图片的按钮(默认true)
+ * @property {String Number} max-size 选择单个文件的最大大小,单位B(byte),默认不限制(默认Number.MAX_VALUE)
+ * @property {Array<Object>} file-list 默认显示的图片列表,数组元素为对象,必须提供url属性
+ * @property {Boolean} upload-text 选择图片按钮的提示文字(默认“选择图片”)
+ * @property {Boolean} auto-upload 选择完图片是否自动上传,见上方说明(默认true)
+ * @property {Boolean} show-tips 特殊情况下是否自动提示toast,见上方说明(默认true)
+ * @property {Boolean} show-upload-list 是否显示组件内部的图片预览(默认true)
+ * @event {Function} on-oversize 图片大小超出最大允许大小
+ * @event {Function} on-preview 全屏预览图片时触发
+ * @event {Function} on-remove 移除图片时触发
+ * @event {Function} on-success 图片上传成功时触发
+ * @event {Function} on-change 图片上传后,无论成功或者失败都会触发
+ * @event {Function} on-error 图片上传失败时触发
+ * @event {Function} on-progress 图片上传过程中的进度变化过程触发
+ * @event {Function} on-uploaded 所有图片上传完毕触发
+ * @event {Function} on-choose-complete 每次选择图片后触发,只是让外部可以得知每次选择后,内部的文件列表
+ * @example <u-upload :action="action" :file-list="fileList" ></u-upload>
+ */
+export default {
+	name: 'u-upload',
+	props: {
+		//是否显示组件自带的图片预览功能
+		showUploadList: {
+			type: Boolean,
+			default: true
+		},
+		// 后端地址
+		action: {
+			type: String,
+			default: ''
+		},
+		// 最大上传数量
+		maxCount: {
+			type: [String, Number],
+			default: 52
+		},
+		//  是否显示进度条
+		showProgress: {
+			type: Boolean,
+			default: true
+		},
+		// 是否启用
+		disabled: {
+			type: Boolean,
+			default: false
+		},
+		// 预览上传的图片时的裁剪模式,和image组件mode属性一致
+		imageMode: {
+			type: String,
+			default: 'aspectFill'
+		},
+		// 头部信息
+		header: {
+			type: Object,
+			default() {
+				return {};
+			}
+		},
+		// 额外携带的参数
+		formData: {
+			type: Object,
+			default() {
+				return {};
+			}
+		},
+		// 上传的文件字段名
+		name: {
+			type: String,
+			default: 'file'
+		},
+		// 所选的图片的尺寸, 可选值为original compressed
+		sizeType: {
+			type: Array,
+			default() {
+				return ['original', 'compressed'];
+			}
+		},
+		sourceType: {
+			type: Array,
+			default() {
+				return ['album', 'camera'];
+			}
+		},
+		// 是否在点击预览图后展示全屏图片预览
+		previewFullImage: {
+			type: Boolean,
+			default: true
+		},
+		// 是否开启图片多选,部分安卓机型不支持
+		multiple: {
+			type: Boolean,
+			default: false
+		},
+		// 是否展示删除按钮
+		deletable: {
+			type: Boolean,
+			default: true
+		},
+		// 文件大小限制,单位为byte
+		maxSize: {
+			type: [String, Number],
+			default: Number.MAX_VALUE
+		},
+		// 显示已上传的文件列表
+		fileList: {
+			type: Array,
+			default() {
+				return [];
+			}
+		},
+		// 上传区域的提示文字
+		uploadText: {
+			type: String,
+			default: '选择图片'
+		},
+		// 是否自动上传
+		autoUpload: {
+			type: Boolean,
+			default: true
+		},
+		// 是否显示toast消息提示
+		showTips: {
+			type: Boolean,
+			default: true
+		},
+		// 是否通过slot自定义传入选择图标的按钮
+		customBtn: {
+			type: Boolean,
+			default: false
+		},
+		// 内部预览图片区域和选择图片按钮的区域宽度
+		width: {
+			type: [String, Number],
+			default: 200
+		},
+		// 内部预览图片区域和选择图片按钮的区域高度
+		height: {
+			type: [String, Number],
+			default: 200
+		},
+		// 右上角关闭按钮的背景颜色
+		delBgColor: {
+			type: String,
+			default: '#fa3534'
+		},
+		// 右上角关闭按钮的叉号图标的颜色
+		delColor: {
+			type: String,
+			default: '#ffffff'
+		},
+		// 右上角删除图标名称,只能为uView内置图标
+		delIcon: {
+			type: String,
+			default: 'close'
+		},
+		// 如果上传后的返回值为json字符串,是否自动转json
+		toJson: {
+			type: Boolean,
+			default: true
+		},
+		// 上传前的钩子,每个文件上传前都会执行
+		beforeUpload: {
+			type: Function,
+			default: null
+		},
+		// 移除文件前的钩子
+		beforeRemove: {
+			type: Function,
+			default: null
+		},
+		// 允许上传的图片后缀
+		limitType:{
+			type: Array,
+			default() {
+				// 支付宝小程序真机选择图片的后缀为"image"
+				// https://opendocs.alipay.com/mini/api/media-image
+				return ['png', 'jpg', 'jpeg', 'webp', 'gif', 'image'];
+			}
+		},
+		// 在各个回调事件中的最后一个参数返回,用于区别是哪一个组件的事件
+		index: {
+			type: [Number, String],
+			default: ''
+		}
+	},
+	mounted() {},
+	data() {
+		return {
+			lists: [],
+			isInCount: true,
+			uploading: false
+		};
+	},
+	watch: {
+		fileList: {
+			immediate: true,
+			handler(val) {
+				val.map(value => {
+					// 首先检查内部是否已经添加过这张图片,因为外部绑定了一个对象给fileList的话(对象引用),进行修改外部fileList
+					// 时,会触发watch,导致重新把原来的图片再次添加到this.lists
+					// 数组的some方法意思是,只要数组元素有任意一个元素条件符合,就返回true,而另一个数组的every方法的意思是数组所有元素都符合条件才返回true
+					let tmp = this.lists.some(val => {
+						return val.url == value.url;
+					})
+					// 如果内部没有这个图片(tmp为false),则添加到内部
+					!tmp && this.lists.push({ url: value.url,view:value.view, error: false, progress: 100 });
+				});
+			}
+		},
+		// 监听lists的变化,发出事件
+		lists(n) {
+			this.$emit('on-list-change', n, this.index);
+		}
+	},
+	methods: {
+		// 清除列表
+		clear() {
+			this.lists = [];
+		},
+		// 重新上传队列中上传失败的所有文件
+		reUpload() {
+			this.uploadFile();
+		},
+		// 选择图片
+		selectFile() {
+			if (this.disabled) return;
+			const { name = '', maxCount, multiple, maxSize, sizeType, lists, camera, compressed, maxDuration, sourceType } = this;
+			let chooseFile = null;
+			const newMaxCount = maxCount - lists.length;
+			// 设置为只选择图片的时候使用 chooseImage 来实现
+			chooseFile = new Promise((resolve, reject) => {
+				uni.chooseImage({
+					count: multiple ? (newMaxCount > 9 ? 9 : newMaxCount) : 1,
+					sourceType: sourceType,
+					sizeType,
+					success: resolve,
+					fail: reject
+				});
+			});
+			chooseFile
+				.then(res => {
+					let file = null;
+					let listOldLength = this.lists.length;
+					res.tempFiles.map((val, index) => {
+						// 检查文件后缀是否允许,如果不在this.limitType内,就会返回false
+						if(!this.checkFileExt(val)) return ;
+						
+						// 如果是非多选,index大于等于1或者超出最大限制数量时,不处理
+						if (!multiple && index >= 1) return;
+						if (val.size > maxSize) {
+							this.$emit('on-oversize', val, this.lists, this.index);
+							this.showToast('超出允许的文件大小');
+						} else {
+							if (maxCount <= lists.length) {
+								this.$emit('on-exceed', val, this.lists, this.index);
+								this.showToast('超出最大允许的文件个数');
+								return;
+							}
+							lists.push({
+								url: val.path,
+								progress: 0,
+								error: false,
+								file: val
+							});
+						}
+					});
+					// 每次图片选择完,抛出一个事件,并将当前内部选择的图片数组抛出去
+					this.$emit('on-choose-complete', this.lists, this.index);
+					if (this.autoUpload) this.uploadFile(listOldLength);
+				})
+				.catch(error => {
+					this.$emit('on-choose-fail', error);
+				});
+		},
+		// 提示用户消息
+		showToast(message, force = false) {
+			if (this.showTips || force) {
+				uni.showToast({
+					title: message,
+					icon: 'none'
+				});
+			}
+		},
+		// 该方法供用户通过ref调用,手动上传
+		upload() {
+			this.uploadFile();
+		},
+		// 对失败的图片重新上传
+		retry(index) {
+			this.lists[index].progress = 0;
+			this.lists[index].error = false;
+			this.lists[index].response = null;
+			uni.showLoading({
+				title: '重新上传'
+			});
+			this.uploadFile(index);
+		},
+		// 上传图片
+		async uploadFile(index = 0) {
+			if (this.disabled) return;
+			if (this.uploading) return;
+			// 全部上传完成
+			if (index >= this.lists.length) {
+				this.$emit('on-uploaded', this.lists, this.index);
+				return;
+			}
+			// 检查是否是已上传或者正在上传中
+			if (this.lists[index].progress == 100) {
+				if (this.autoUpload == false) this.uploadFile(index + 1);
+				return;
+			}
+			// 执行before-upload钩子
+			if(this.beforeUpload && typeof(this.beforeUpload) === 'function') {
+				// 执行回调,同时传入索引和文件列表当作参数
+				// 在微信,支付宝等环境(H5正常),会导致父组件定义的customBack()函数体中的this变成子组件的this
+				// 通过bind()方法,绑定父组件的this,让this.customBack()的this为父组件的上下文
+				// 因为upload组件可能会被嵌套在其他组件内,比如u-form,这时this.$parent其实为u-form的this,
+				// 非页面的this,所以这里需要往上历遍,一直寻找到最顶端的$parent,这里用了this.$u.$parent.call(this)
+				// 明白意思即可,无需纠结this.$u.$parent.call(this)的细节
+				let beforeResponse = this.beforeUpload.bind(this.$u.$parent.call(this))(index, this.lists);
+				// 判断是否返回了promise
+				if (!!beforeResponse && typeof beforeResponse.then === 'function') {
+					await beforeResponse.then(res => {
+						// promise返回成功,不进行动作,继续上传
+					}).catch(err => {
+						// 进入catch回调的话,继续下一张
+						return this.uploadFile(index + 1);
+					})
+				} else if(beforeResponse === false) {
+					// 如果返回false,继续下一张图片的上传
+					return this.uploadFile(index + 1);
+				} else {
+					// 此处为返回"true"的情形,这里不写代码,就跳过此处,继续执行当前的上传逻辑
+				}
+			}
+			// 检查上传地址
+			if (!this.action) {
+				this.showToast('请配置上传地址', true);
+				return;
+			}
+			this.lists[index].error = false;
+			this.uploading = true;
+			// 创建上传对象
+			const task = uni.uploadFile({
+				url: this.action,
+				filePath: this.lists[index].url,
+				name: this.name,
+				formData: this.formData,
+				header: this.header,
+				// #ifdef MP-ALIPAY
+				fileType:'image',
+				// #endif
+				success: res => {
+					
+					// 判断是否json字符串,将其转为json格式
+					let data = this.toJson && this.$u.test.jsonString(res.data) ? JSON.parse(res.data) : res.data;
+					if (![200, 201, 204].includes(res.statusCode)) {
+						this.uploadError(index, data);
+					} else {
+						
+						if(data.result){
+							
+							// 上传成功
+							this.lists[index].response = data;
+							this.lists[index].progress = 100;
+							this.lists[index].error = false;
+							this.$forceUpdate()
+							this.$emit('on-success', data, index, this.lists, this.index);
+						}else{
+								this.uploadError(index, data.message);
+						}
+					}
+				},
+				fail: e => {
+					this.uploadError(index, e);
+				},
+				complete: res => {
+					uni.hideLoading();
+					this.uploading = false;
+					this.uploadFile(index + 1);
+					this.$emit('on-change', res, index, this.lists, this.index);
+				}
+			});
+			task.onProgressUpdate(res => {
+				if (res.progress > 0) {
+					this.lists[index].progress = res.progress;
+					this.$emit('on-progress', res, index, this.lists, this.index);
+				}
+			});
+		},
+		// 上传失败
+		uploadError(index, err) {
+			this.lists[index].progress = 0;
+			this.lists[index].error = true;
+			this.lists[index].response = null;
+			this.$emit('on-error', err, index, this.lists, this.index);
+			this.showToast('上传失败,请重试');
+		},
+		// 删除一个图片
+		deleteItem(index) {
+			uni.showModal({
+				title: '提示',
+				content: '您确定要删除此项吗?',
+				success: async (res) => {
+					if (res.confirm) {
+						// 先检查是否有定义before-remove移除前钩子
+						// 执行before-remove钩子
+						if(this.beforeRemove && typeof(this.beforeRemove) === 'function') {
+							// 此处钩子执行 原理同before-remove参数,见上方注释
+							let beforeResponse = this.beforeRemove.bind(this.$u.$parent.call(this))(index, this.lists);
+							// 判断是否返回了promise
+							if (!!beforeResponse && typeof beforeResponse.then === 'function') {
+								await beforeResponse.then(res => {
+									// promise返回成功,不进行动作,继续上传
+									this.handlerDeleteItem(index);
+								}).catch(err => {
+									// 如果进入promise的reject,终止删除操作
+									this.showToast('已终止移除');
+								})
+							} else if(beforeResponse === false) {
+								// 返回false,终止删除
+								this.showToast('已终止移除');
+							} else {
+								// 如果返回true,执行删除操作
+								this.handlerDeleteItem(index);
+							}
+						} else {
+							// 如果不存在before-remove钩子,
+							this.handlerDeleteItem(index);
+						}
+					}
+				}
+			});
+		},
+		// 执行移除图片的动作,上方代码只是判断是否可以移除
+		handlerDeleteItem(index) {
+			// 如果文件正在上传中,终止上传任务,进度在0 < progress < 100则意味着正在上传
+			if (this.lists[index].progress < 100 && this.lists[index].progress > 0) {
+				typeof this.lists[index].uploadTask != 'undefined' && this.lists[index].uploadTask.abort();
+			}
+			this.lists.splice(index, 1);
+			this.$forceUpdate();
+			this.$emit('on-remove', index, this.lists, this.index);
+			this.showToast('移除成功');
+		},
+		// 用户通过ref手动的形式,移除一张图片
+		remove(index) {
+			// 判断索引的合法范围
+			if (index >= 0 && index < this.lists.length) {
+				this.lists.splice(index, 1);
+				this.$emit('on-list-change', this.lists, this.index);
+			}
+		},
+		// 预览图片
+		doPreviewImage(url, index) {
+			if (!this.previewFullImage) return;
+			const images = this.lists.map(item => item.url || item.path);
+			uni.previewImage({
+				urls: images,
+				current: url,
+				success: () => {
+					this.$emit('on-preview', url, this.lists, this.index);
+				},
+				fail: () => {
+					uni.showToast({
+						title: '预览图片失败',
+						icon: 'none'
+					});
+				}
+			});
+		},
+		// 判断文件后缀是否允许
+		checkFileExt(file) {
+			// 检查是否在允许的后缀中
+			let noArrowExt = false;
+			// 获取后缀名
+			let fileExt = '';
+			const reg = /.+\./;
+			// 如果是H5,需要从name中判断
+			// #ifdef H5
+			fileExt = file.name.replace(reg, "").toLowerCase();
+			// #endif
+			// 非H5,需要从path中读取后缀
+			// #ifndef H5
+			fileExt = file.path.replace(reg, "").toLowerCase();
+			// #endif
+			// 使用数组的some方法,只要符合limitType中的一个,就返回true
+			noArrowExt = this.limitType.some(ext => {
+				// 转为小写
+				return ext.toLowerCase() === fileExt;
+			})
+			if(!noArrowExt) this.showToast(`不允许选择${fileExt}格式的文件`);
+			return noArrowExt;
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+//@import '../../libs/css/style.components.scss';
+
+.u-upload {
+	 
+	display: flex;
+	flex-wrap: wrap;
+	align-items: center;
+}
+
+.u-list-item {
+	width: 200rpx;
+	height: 200rpx;
+	overflow: hidden;
+	margin: 10rpx;
+	background: rgb(244, 245, 246);
+	position: relative;
+	border-radius: 10rpx;
+	/* #ifndef APP-NVUE */
+	display: flex;
+	/* #endif */
+	align-items: center;
+	justify-content: center;
+}
+
+.u-preview-wrap {
+	border: 1px solid rgb(235, 236, 238);
+}
+
+.u-add-wrap {
+	flex-direction: column;
+	color: $u-content-color;
+	font-size: 26rpx;
+}
+
+.u-add-tips {
+	margin-top: 20rpx;
+	line-height: 40rpx;
+}
+
+.u-add-wrap__hover {
+	background-color: rgb(235, 236, 238);
+}
+
+.u-preview-image {
+	display: block;
+	width: 100%;
+	height: 100%;
+	border-radius: 10rpx;
+}
+
+.u-delete-icon {
+	position: absolute;
+	top: 10rpx;
+	right: 10rpx;
+	z-index: 10;
+	background-color: $u-type-error;
+	border-radius: 100rpx;
+	width: 44rpx;
+	height: 44rpx;
+
+		display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.u-icon {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.u-progress {
+	position: absolute;
+	bottom: 10rpx;
+	left: 8rpx;
+	right: 8rpx;
+	z-index: 9;
+	width: auto;
+}
+
+.u-primary-btn {
+	background-color: #59ba73;
+}
+.u-warning-btn {
+	background-color: #e6a23c;
+}
+.u-error-btn {
+	color: #ffffff;
+	background-color: $u-type-error;
+	font-size: 20rpx;
+	padding: 4px 0;
+	text-align: center;
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	z-index: 9;
+	line-height: 1;
+}
+.u-error-btn2 {
+	color: #ffffff;
+	
+	font-size: 20rpx;
+	padding: 4px 0;
+	text-align: center;
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	z-index: 9;
+	line-height: 1;
+}
+</style>

+ 4 - 0
pages/storeManagement/equipmentDelivery/deliveryDetails.vue

@@ -271,6 +271,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+		max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 0 - 384
pages/storeManagement/equipmentDelivery/deliveryList.vue

@@ -1,384 +0,0 @@
-<template>
-	<view>
-		<u-navbar>
-			<view class="title">
-				出库设备清单<text>(18)</text>
-			</view>
-		</u-navbar>
-		<view class="list" >
-			<!-- 清单信息 -->
-			<view class="list-infos">
-				<view class="infos-head">
-					<view class="name">
-						50KV直流高压电缆
-					</view>
-					<view class="qr-code">
-						<text><img src="@/assets/img/riLine-qr-scan-line Copy@1x.png" alt=""></text>
-						<text>扫码出库</text>
-					</view>
-				</view>
-				<view class="infos">
-					<view class="infos-1">
-						<view class="infos-item">
-							<view class="item-name">
-								型号:
-							</view>
-							<view class="item-value">
-								GZYV GYVZ-50
-							</view>
-						</view>
-						<view class="infos-item">
-							<view class="item-name">
-								待出库:
-							</view>
-							<view class="item-value">
-								10
-							</view>
-						</view>
-					</view>
-					<view class="infos-2">
-						<view class="infos-item">
-							<view class="item-name">
-								单位:
-							</view>
-							<view class="item-value">
-								台
-							</view>
-						</view>
-						<view class="infos-item">
-							<view class="item-name">
-								库存:
-							</view>
-							<view class="item-value">
-								20
-							</view>
-						</view>
-
-					</view>
-
-				</view>
-				<!-- 地址 -->
-				<view class="address">
-					<view class="name">
-						位置:
-					</view>
-					<view class="value">
-						荆力总包仓库1仓库2号货架302
-					</view>
-				</view>
-
-				<view class="prepare-out"  >
-					<view class="head">
-						<view class="amount">
-							<view class="title">
-								预出库设备:
-							</view>
-							<view class="value">
-								2
-							</view>
-						</view>
-
-						<view class="unfold">
-							展开<u-icon name="arrow-down" @click="changeShow()"></u-icon>
-							<view class="option" v-if="this.show==true">
-
-							</view>
-						</view>
-
-					</view>
-					<!-- 编号 -->
-					<view class="serial-number" v-for="item in 2" :key="item">
-						<view class="item">
-							<view class="text">
-								设备编号:
-							</view>
-							<view class="number">
-								ND920182001511
-							</view>
-						</view>
-						<view class="del">
-							<img src="@/assets/img/riLine-delete-bin-line Copy@1x.png" alt="">
-						</view>
-					</view>
-				</view>
-				<!-- 备注 -->
-				<textarea placeholder="备注" name="" id="" cols="30" rows="10"></textarea>
-			</view>
-
-		</view>
-
-     <view class="list" >
-     	<!-- 清单信息 -->
-     	<view class="list-infos">
-     		<view class="infos-head">
-     			<view class="name">
-     				汽油液压机
-     			</view>
-     			<view class="qr-code">
-     				<text><img src="@/assets/img/riLine-qr-scan-line Copy@1x.png" alt=""></text>
-     				<text>扫码出库</text>
-     			</view>
-     		</view>
-     		<view class="infos">
-     			<view class="infos-1">
-     				<view class="infos-item">
-     					<view class="item-name">
-     						型号:
-     					</view>
-     					<view class="item-value">
-     						GZYV GYVZ-50
-     					</view>
-     				</view>
-     				<view class="infos-item">
-     					<view class="item-name">
-     						待出库:
-     					</view>
-     					<view class="item-value">
-     						10
-     					</view>
-     				</view>
-     			</view>
-     			<view class="infos-2">
-     				<view class="infos-item">
-     					<view class="item-name">
-     						单位:
-     					</view>
-     					<view class="item-value">
-     						台
-     					</view>
-     				</view>
-     				<view class="infos-item">
-     					<view class="item-name">
-     						库存:
-     					</view>
-     					<view class="item-value">
-     						20
-     					</view>
-     				</view>
-     
-     			</view>
-     
-     		</view>
-     		<!-- 地址 -->
-     		<view class="address">
-     			<view class="name">
-     				位置:
-     			</view>
-     			<view class="value">
-     				荆力总包仓库1仓库2号货架302
-     			</view>
-     		</view>
-     
-     		<view class="prepare-out"  >
-     			<view class="head">
-     				<view class="amount">
-     					<view class="title">
-     						预出库设备:
-     					</view>
-     					<view class="value">
-     						1
-     					</view>
-     				</view>
-     
-     				<view class="unfold">
-     					展开<u-icon name="arrow-down" @click="changeShow()"></u-icon>
-     					<view class="option" v-if="this.show==true">
-     
-     					</view>
-     				</view>
-     
-     			</view>
-     			<!-- 编号 -->
-     			<view class="serial-number" >
-     				<view class="item">
-     					<view class="text">
-     						设备编号:
-     					</view>
-     					<view class="number">
-     						ND920182001511
-     					</view>
-     				</view>
-     				<view class="del">
-     					<img src="@/assets/img/riLine-delete-bin-line Copy@1x.png" alt="">
-     				</view>
-     			</view>
-     		</view>
-     		<!-- 备注 -->
-     		<textarea placeholder="备注" name="" id="" cols="30" rows="10"></textarea>
-     	</view>
-     
-     </view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				show: false
-			}
-		},
-		methods: {
-			changeShow() {
-				this.show = !this.show
-				
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	page{
-		padding-bottom: 100px;
-	}
-	.u-navbar {
-		.title {
-			display: flex;
-			flex-direction: row;
-			align-items: center;
-			justify-content: center;
-			flex: 1;
-			position: absolute;
-			left: 0;
-			right: 0;
-			height: 30px;
-			text-align: center;
-			flex-shrink: 0;
-			font-size: 36rpx;
-			color: #101010;
-
-			text {
-				color: #2A8EFB
-			}
-		}
-	}
-
-	.list {
-		background-color: #fff;
-		margin: 24rpx;
-		padding: 22rpx 32rpx;
-
-		// 清单信息
-		.list-infos {
-			border-radius: 8px;
-
-			.infos-head {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				margin-bottom: 24rpx;
-
-				.name {
-					color: rgba(51, 51, 51, 1);
-					font-size: 32rpx;
-				}
-
-				.qr-code {
-					border-radius: 4px;
-					background: linear-gradient(180deg, rgba(22, 119, 255, 1) 0%, rgba(16, 98, 213, 1) 100%);
-					color: rgba(255, 255, 255, 1);
-					font-size: 24rpx;
-					width: 160rpx;
-					text-align: center;
-					line-height: 64rpx;
-
-					text {
-						img {
-							vertical-align: middle;
-						}
-					}
-				}
-			}
-
-			.infos {
-				margin-top: 16rpx;
-				display: flex;
-				color: #777777;
-				font-size: 24rpx;
-
-				.infos-1 {
-					margin-right: 68rpx;
-				}
-
-
-				.infos-item {
-					display: flex;
-					margin-bottom: 8rpx;
-				}
-
-			}
-
-			.address {
-				display: flex;
-				color: #777777;
-				font-size: 24rpx;
-			}
-		}
-
-		.prepare-out {
-			padding: 24rpx;
-			margin-top: 40rpx;
-			border-radius: 8px;
-			background-color: rgba(245, 246, 249, 1);
-
-			.head {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-margin-bottom: 24rpx;
-				.amount {
-					display: flex;
-					color: rgba(0, 81, 255, 1);
-					font-size: 32rpx;
-				}
-
-				.unfold {
-					color: rgba(146, 158, 165, 1);
-					font-size: 24rpx;
-					position: relative;
-
-					.u-icon--right {
-						margin-left: 8rpx;
-					}
-				}
-
-				.option {
-					width: 160rpx;
-					height: 32rpx;
-					background-color: #fff;
-					position: absolute;
-					top: 30rpx;
-					right: 0;
-				}
-			}
-
-			// 编号
-			.serial-number {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				margin-top: 16rpx;
-				color: rgba(51, 51, 51, 1);
-                font-weight: bold;
-				.item {
-					display: flex;
-				}
-			}
-
-		}
-
-		// 备注
-		uni-textarea {
-			width: 100%;
-			height: 80rpx;
-			line-height: 80rpx;
-			text-indent: 24rpx;
-			margin-top: 24rpx;
-			background-color: rgba(241, 242, 245, 1);
-			color: rgba(136, 136, 136, 1);
-			border-radius: 8px;
-			font-family: Microsoft Yahei;
-			font-size: 28rpx;
-		}
-	}
-</style>

+ 13 - 4
pages/storeManagement/equipmentEnter/deliveryDetails.vue

@@ -174,19 +174,19 @@
 				
 				<!-- 上传图片 -->
 					<view class="upload-img" v-if="info.status=='0'">
-						<u-upload width="144" height="144" :ref="'uUpload'+index" 
+						<ujp-upload width="144" height="144" :ref="'uUpload'+index" 
 						 :key="index"
 						 name="photoFile" :multiple="false"
 						 :form-data="formData" :header="header" :action="action"
-						 max-count="4"  upload-text=" " del-bg-color="#0051FF"  ></u-upload>
+						 max-count="4"  upload-text=" " del-bg-color="#0051FF"  ></ujp-upload>
 					</view>
 					<view class="upload-img" v-else >
-						<u-upload width="144" height="144"  :key="1"
+						<ujp-upload width="144" height="144"  :key="1"
 						 v-if="deviceReList[index].imgUrls"
 						 :fileList="deviceReList[index].imgUrls.split(',').map(item=>{return {url:item,view:1}})"
 						 name="photoFile" :multiple="false" :deletable="false"
 						
-						 max-count="0"  upload-text=" " del-bg-color="#0051FF"  ></u-upload>
+						 max-count="0"  upload-text=" " del-bg-color="#0051FF"  ></ujp-upload>
 					</view>
 				</view>
 		
@@ -207,11 +207,16 @@
 
 <script>
 	import * as API from '@/apis/pagejs/storeManagement.js'
+	import ujpUpload from "@/pages/storeManagement/components/u-upload.vue"
+	
 	import {
 		recordStatus,recordStatusColor
 	} from '@/apis/status.js'
 	
 	export default {
+		components:{
+			ujpUpload
+		},
 		data() {
 			return {
 				nowscan:{
@@ -790,6 +795,10 @@
 			font-size: 32rpx;
 			margin-right: 8rpx;
 			margin-left: 24rpx;
+			max-width: 200rpx;
+			overflow: hidden;
+			 text-overflow: ellipsis;
+			 white-space: nowrap
 		}
 
 		.submit {

+ 0 - 364
pages/storeManagement/equipmentEnter/returnList.vue

@@ -1,364 +0,0 @@
-<template>
-	<view>
-		<u-navbar>
-			<view class="title">
-				归还设备清单<text>(18)</text>
-			</view>
-		</u-navbar>
-		<view class="container">
-			<view class="main">
-				<view class="list-item">
-					<!--信息 -->
-					<view class="list-infos">
-						<view class="infos-head">
-							<view class="name">
-								50KV直流高压电缆检测仪
-							</view>
-							<view class="qr-code">
-								<text><img src="@/assets/img/riLine-qr-scan-line Copy@1x.png" alt=""></text>
-								<text>扫码核验</text>
-							</view>
-						</view>
-						<view class="infos">
-							<view class="infos-1">
-								<view class="infos-item">
-									<view class="item-name">
-										型号:
-									</view>
-									<view class="item-value">
-										GZYV GYVZ-50
-									</view>
-								</view>
-
-							</view>
-							<view class="infos-2">
-								<view class="infos-item">
-									<view class="item-name">
-										设备编号:
-									</view>
-									<view class="item-value">
-										ND920182001511
-									</view>
-								</view>
-
-							</view>
-
-						</view>
-
-					</view>
-					<view class="receive-options">
-						<view class="title">
-							是否收到
-						</view>
-						<view class="receive-radio">
-							<u-radio-group v-model="value" @change="radioGroupChange">
-								<u-radio @change="radioChange" v-for="(item, index) in list" :key="index"
-									:name="item.name" :disabled="item.disabled">
-									{{item.name}}
-								</u-radio>
-							</u-radio-group>
-						</view>
-					</view>
-					<!-- 备注 -->
-					<textarea placeholder="备注" name="" id="" cols="30" rows="10"></textarea>
-				
-				<!-- 上传图片 -->
-					<view class="upload-img">
-						<u-upload width="144" height="144"  upload-text="" del-bg-color="#0051FF"   :before-upload="beforeUpload"></u-upload>
-					</view>
-				</view>
-
-				<view class="list-item" >
-
-
-					<!--信息 -->
-					<view class="list-infos">
-						<view class="infos-head">
-							<view class="name">
-								50KV直流高压电缆检测仪
-							</view>
-							<view class="qr-code">
-								<text><img src="@/assets/img/riLine-qr-scan-line Copy@1x.png" alt=""></text>
-								<text>扫码核验</text>
-							</view>
-						</view>
-						<view class="infos">
-							<view class="infos-1">
-								<view class="infos-item">
-									<view class="item-name">
-										型号:
-									</view>
-									<view class="item-value">
-										GZYV GYVZ-50
-									</view>
-								</view>
-
-							</view>
-							<view class="infos-2">
-								<view class="infos-item">
-									<view class="item-name">
-										设备编号:
-									</view>
-									<view class="item-value">
-										ND920182001511
-									</view>
-								</view>
-
-							</view>
-
-						</view>
-
-					</view>
-					<view class="receive-options">
-						<view class="title">
-							是否收到
-						</view>
-						<view class="receive-radio">
-							<u-radio-group v-model="value" @change="radioGroupChange">
-								<u-radio @change="radioChange" v-for="(item, index) in list" :key="index"
-									:name="item.name" :disabled="item.disabled">
-									{{item.name}}
-								</u-radio>
-							</u-radio-group>
-						</view>
-					</view>
-					<!-- 备注 -->
-					<textarea placeholder="备注" name="" id="" cols="30" rows="10"></textarea>
-				</view>
-			</view>
-		</view>
-		
-		<view class="bottom">
-			<u-button type="primary"  @click="submit">保存</u-button>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				list: [{
-						name: '已收到',
-						disabled: false
-					},
-					{
-						name: '未收到',
-						disabled: false
-					},
-
-				],
-				// u-radio-group的v-model绑定的值如果设置为某个radio的name,就会被默认选中
-				value: '已收到',
-			};
-		},
-		methods: {
-			submit(){
-				
-			},
-			// 选中某个单选框时,由radio时触发
-			radioChange(e) {
-				// console.log(e);
-			},
-			// 选中任一radio时,由radio-group触发
-			radioGroupChange(e) {
-				// console.log(e);
-			},
-			beforeUpload(index, list) {
-							// 只上传偶数索引的文件
-							if(index % 2 == 0) return true;
-							else return false;
-						}
-		}
-	};
-</script>
-
-<style scoped lang="scss">
-	page{
-		padding-bottom: 200rpx;
-	}
-	.u-navbar {
-		.title {
-			display: flex;
-			flex-direction: row;
-			align-items: center;
-			justify-content: center;
-			flex: 1;
-			position: absolute;
-			left: 0;
-			right: 0;
-			height: 30px;
-			text-align: center;
-			flex-shrink: 0;
-			font-size: 36rpx;
-			color: #101010;
-
-			text {
-				color: #2A8EFB
-			}
-		}
-	}
-
-	.container {
-		.main {
-			padding: 0 24rpx;
-
-			.list-item {
-				border-radius: 8px;
-				padding: 24rpx;
-				background-color: #fff;
-				margin-top: 24rpx;
-			}
-
-			// 信息
-			.list-infos {
-				padding-bottom: 24rpx;
-				border-bottom: 1px solid rgba(232, 232, 232, 1);
-
-				.infos-head {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					margin-bottom: 24rpx;
-
-					.name {
-						color: rgba(51, 51, 51, 1);
-						font-size: 32rpx;
-					}
-
-					.state {
-						border: 1px solid rgba(69, 186, 69, 1);
-						border-radius: 4px;
-						color: rgba(69, 186, 69, 1);
-						font-size: 24rpx;
-						line-height: 48rpx;
-						width: 160rpx;
-						text-align: center;
-
-						text {
-							img {
-								vertical-align: middle;
-								margin-right: 4rpx;
-							}
-						}
-					}
-
-					.qr-code {
-						border-radius: 4px;
-						background: linear-gradient(180deg, rgba(22, 119, 255, 1) 0%, rgba(16, 98, 213, 1) 100%);
-						color: rgba(255, 255, 255, 1);
-						font-size: 24rpx;
-						width: 160rpx;
-						text-align: center;
-						line-height: 48rpx;
-
-						text {
-							img {
-								vertical-align: middle;
-							}
-						}
-					}
-				}
-
-				.infos {
-					margin-top: 16rpx;
-					display: flex;
-					justify-content: space-between;
-					color: #777777;
-					font-size: 24rpx;
-
-					.infos-1 {}
-
-					.infos-item {
-						display: flex;
-						margin-bottom: 8rpx;
-					}
-				}
-			}
-
-			// 接收选项
-			.receive-options {
-			 display: flex;
-				align-items: center;
-				padding: 24rpx 0;
-
-				.title {
-					color: #333333;
-					margin-right: 24rpx;
-				}
-
-				.receive-radio {
-					flex: 1;
-
-					/deep/.u-radio-group {
-						width: 100%;
-
-					}
-
-					/deep/.u-radio {
-						margin-right: 48rpx;
-					}
-				}
-
-			}
-
-			// 备注
-			uni-textarea {
-				width: 100%;
-				height: 80rpx;
-				line-height: 80rpx;
-				text-indent: 24rpx;
-				background-color: rgba(241, 242, 245, 1);
-				color: rgba(136, 136, 136, 1);
-				border-radius: 8px;
-				font-family: Microsoft Yahei;
-				font-size: 28rpx;
-			}
-			// 上传图片
-			.upload-img{
-				margin-top: 24rpx;
-				/deep/.u-add-tips{
-					margin-top: 0;
-				}
-				// 右上角删除图标
-				/deep/.u-delete-icon{
-					top: -8rpx;
-					right: -8rpx;
-					width: 36rpx;
-					height: 36rpx;
-				}
-				/deep/.u-list-item{
-					overflow: inherit;
-				}
-				/deep/.u-list-item{
-					margin-right: 8rpx;
-				}
-			}
-
-		}
-
-
-
-	}
-
-
-
-	.bottom {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		background-color: #fff;
-		margin-top: 44rpx;
-		padding: 16rpx 32rpx;
-        z-index: 999;  
-		uni-button {
-			border-radius: 8px;
-			background: linear-gradient(180deg, rgba(22, 119, 255, 1) 0%, rgba(16, 98, 213, 1) 100%);
-			color: rgba(255, 255, 255, 1);
-			font-size: 32rpx;
-			line-height: 88rpx;
-			
-		}
-	}
-</style>

+ 0 - 533
pages/storeManagement/equipmentEnter/verification.vue

@@ -1,533 +0,0 @@
-<template>
-	<view >
-		<u-navbar title="入库单详情"></u-navbar>
-		<view class="container">
-			
-		
-		
-		<!-- 归还单状态 -->
-		<view class="head">
-			<view class="photo">
-				<u-avatar size="84" :src="item.userImg"></u-avatar>
-			</view>
-			<view class="name">
-				刘群
-			</view>
-			<view class="submit">
-				提交了<text>设备归还单</text>
-			</view>
-			<view class="state">
-				待入库
-			</view>
-		</view>
-		<!-- 归还单详情 -->
-		<view class="details">
-			<view class="item">
-				<view class="name">
-					项目部
-				</view>
-				<view class="value">
-					洪湖文泉110kV变电站二期施工单位
-				</view>
-			</view>
-			<view class="item">
-				<view class="name">
-					归还仓库
-				</view>
-				<view class="value">
-					荆力总包仓库
-				</view>
-			</view>
-			<view class="item">
-				<view class="name">
-					提交时间
-				</view>
-				<view class="value">
-					2020-11-27 11:00
-				</view>
-			</view>
-		
-		</view>
-		<!-- 归还设备清单 -->
-		<view class="list">
-			<view class="list-head">
-				<view class="title">
-					归还设备清单
-				</view>
-				<view class="amount">
-					全部 <text>18</text> 件设备
-					<u-icon name="arrow-right"></u-icon>
-				</view>
-			</view>
-			<!-- 清单信息 -->
-			<view class="list-infos" >
-				<view class="infos-head">
-					<view class="name">
-						50KV直流高压电缆检测仪
-					</view>
-					<view class="state">
-					<text><img src="@/assets/img/riLine-checkbox-circle-line@1x.png" alt=""></text>	已收到	 
-					</view>
-				</view>
-				<view class="infos">
-					<view class="infos-1">
-						<view class="infos-item">
-							<view class="item-name">
-								型号:
-							</view>
-							<view class="item-value">
-								GZYV GYVZ-50
-							</view>
-						</view>
-
-					</view>
-					<view class="infos-2">
-						<view class="infos-item">
-							<view class="item-name">
-								设备编号:
-							</view>
-							<view class="item-value">
-								ND920182001511
-							</view>
-						</view>
-						
-					</view>
-
-				</view>
-
-			</view>
-			
-			<view class="list-infos" >
-				<view class="infos-head">
-					<view class="name">
-						50KV直流高压电缆检测仪
-					</view>
-					<view class="qr-code">
-						<text><img src="@/assets/img/riLine-qr-scan-line Copy@1x.png" alt=""></text>
-						<text>扫码核验</text>
-					</view>
-				</view>
-				<view class="infos">
-					<view class="infos-1">
-						<view class="infos-item">
-							<view class="item-name">
-								型号:
-							</view>
-							<view class="item-value">
-								GZYV GYVZ-50
-							</view>
-						</view>
-			
-					</view>
-					<view class="infos-2">
-						<view class="infos-item">
-							<view class="item-name">
-								设备编号:
-							</view>
-							<view class="item-value">
-								ND920182001511
-							</view>
-						</view>
-						
-					</view>
-			
-				</view>
-			
-			</view>
-
-		</view>
-		<!-- 流程 -->
-		<view class="process" >
-			<view class="title">
-				流程
-			</view>
-			<u-time-line>
-
-				<u-time-line-item node-top="10">
-					<template v-slot:node>
-						<view>
-							<view class="u-node" style="background:#CDCDCD;">
-								<!-- 此处为uView的icon组件 -->
-								<!-- <u-icon name="checkmark" color="#fff" :size="24"></u-icon> -->
-							</view>
-						</view>
-					</template>
-
-					<template v-slot:content>
-						<view>
-							<view class="u-order-desc">
-								<view class="level">
-									项目部
-								</view>
-								<view class="date">
-									2023-03-26 13:00
-								</view>
-							</view>
-							<view class="u-order-time">
-								<view class="photo">
-									
-								</view>
-								<view class="confirm">
-									<img src="@/assets/img/riFill-checkbox-circle-fill@1x.png" alt="">
-								</view>
-								<view class="name">
-									李天择
-								</view>
-							</view>
-						</view>
-					</template>
-				</u-time-line-item>
-
-				
-				
-
-				<u-time-line-item node-top="10">
-					<template v-slot:node>
-						<view class="">
-							<view class="u-node" style="background:#CDCDCD;">
-								<!-- 此处为uView的icon组件 -->
-								<!-- <u-icon name="checkmark" color="#fff" :size="24"></u-icon> -->
-							</view>
-						</view>
-					</template>
-
-					<template v-slot:content>
-						<view>
-							<view class="u-order-desc">
-								<view class="level">
-									仓库管理
-								</view>
-								<view class="state">
-									等待验收入库
-								</view>
-							</view>
-							<view class="u-order-time">
-								<view class="photo">
-									
-								</view>
-								<view class="confirm">
-									<img src="@/assets/img/riFill-gradienter-fill@1x.png" alt="">
-								</view>
-								<view class="name">
-								   周乐心
-								</view>
-							</view>
-						</view>
-					</template>
-				</u-time-line-item>
-			</u-time-line>
-		</view>
-		</view>
-    <!-- 确认出库 -->
-	
-		<view class="bottom">
-			<u-button type="primary"  @click="submit()">确认入库</u-button>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-
-			}
-		},methods:{
-			submit(){
-				
-			}
-		}
-		
-	}
-</script>
-
-<style scoped lang="scss">
-	page {
-		padding-bottom: 200rpx;
-		}
-
-	// 归还单状态
-	.head {
-		background-color: #fff;
-		padding: 24rpx 32rpx;
-		display: flex;
-		align-items: center;
-		color: #101010;
-		font-size: 32rpx;
-
-		.photo {
-			width: 84rpx;
-			height: 84rpx;
-			border-radius: 100rpx;
-
-			img {
-				width: 100%;
-				height: 100%;
-				overflow: hidden;
-			}
-		}
-
-		.name {
-			color: #101010;
-			font-size: 32rpx;
-			margin-right: 8rpx;
-			margin-left: 24rpx;
-		}
-
-		.submit {
-			text {
-				color: #3385FF;
-			}
-		}
-
-		.state {
-			line-height: 48rpx;
-			padding: 0 24rpx;
-			border-radius: 50px;
-			background-color: rgba(255, 255, 255, 1);
-			color: rgba(51, 133, 255, 1);
-			font-size: 12px;
-			text-align: center;
-			font-family: Arial;
-			border: 1px solid rgba(51, 133, 255, 1);
-			margin-left: auto;
-		}
-	}
-
-	// 归还单详情
-	.details {
-		background-color: #fff;
-		margin-top: 24rpx;
-		padding: 0 32rpx;
-
-		.item {
-			display: flex;
-			justify-content: space-between;
-			padding: 22rpx 0;
-			border-bottom: 1px solid rgba(244, 244, 244, 1);
-
-			.name {
-				color: rgba(119, 119, 119, 1);
-			}
-
-			.value {
-				color: #101010;
-			}
-		}
-	}
-
-	// 归还单列表
-	.list {
-		background-color: #fff;
-		margin-top: 24rpx;
-		padding: 22rpx 32rpx;
-
-		.list-head {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-
-			.title {
-				color: #333333;
-				font-size: 32rpx
-			}
-
-			.amount {
-				color: #777777;
-				font-size: 24rpx;
-
-				text {
-					color: #3385FF;
-				}
-
-				/deep/.u-icon--right {
-					margin-left: 8rpx;
-				}
-			}
-		}
-
-		// 清单信息
-		.list-infos {
-			border-radius: 8px;
-			background-color: #F5F6F9;
-			margin-top: 24rpx;
-			padding: 24rpx;
-
-			.infos-head {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				margin-bottom: 24rpx;
-
-				.name {
-					color: rgba(51, 51, 51, 1);
-					font-size: 32rpx;
-				}
-
-				.state {
-					border: 1px solid rgba(69, 186, 69, 1);
-					border-radius: 4px;
-					color: rgba(69, 186, 69, 1);
-					font-size: 24rpx;
-					line-height: 48rpx;
-					width: 160rpx;
-					text-align: center;
-					text{
-						img{
-							vertical-align: middle;
-							margin-right: 4rpx;
-						}
-					}
-				}
-				.qr-code {
-					border-radius: 4px;
-					background: linear-gradient(180deg, rgba(22, 119, 255, 1) 0%, rgba(16, 98, 213, 1) 100%);
-					color: rgba(255, 255, 255, 1);
-					font-size: 24rpx;
-					width: 160rpx;
-					text-align: center;
-					line-height: 48rpx;
-				
-					text {
-						img {
-							vertical-align: middle;
-						}
-					}
-				}
-			}
-
-			.infos {
-				margin-top: 16rpx;
-				display: flex;
-				justify-content: space-between;
-				color: #777777;
-				font-size: 24rpx;
-
-				.infos-1 {
-					
-				}
-
-				.infos-item {
-					display: flex;
-					margin-bottom: 8rpx;
-				}
-			}
-		}
-	}
-
-	// 流程
-	.process {
-		background-color: #fff;
-		margin-top: 24rpx;
-		padding: 24rpx 32rpx;
-		.title {
-			color: rgba(51, 51, 51, 1);
-			font-size: 32rpx;
-		}
-        .u-time-axis-item{
-			margin-bottom: 76rpx;
-		}
-		.u-time-axis {
-			padding: 18rpx 40rpx;
-		}
-
-		.u-node {
-			width: 18rpx;
-			height: 18rpx;
-			border-radius: 100rpx !important;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			background: #d0d0d0;
-		}
-
-		.u-order-title {
-			color: #333333;
-			font-weight: bold;
-			font-size: 32rpx;
-		}
-
-		.u-order-desc {
-			margin-bottom: 16rpx;
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-
-			.level {
-				color: #333333;
-				font-size: 32rpx;
-				font-weight: bold;
-			}
-
-			.date {
-				color: rgba(119, 119, 119, 1);
-			}
-
-			.state {
-				color: rgba(255, 121, 0, 1);
-			}
-		}
-
-		.u-order-time {
-			width: 90rpx;
-			color: #777777;
-			font-size: 28rpx;
-			margin-top: 16rpx;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-
-			.photo {
-				width: 56rpx;
-				height: 56rpx;
-				border-radius: 100px;
-				margin-bottom: 4rpx;
-
-				img {
-					width: 100%;
-					height: 100%;
-					overflow: hidden;
-					position: relative;
-				}
-			}
-
-			.confirm {
-				position: absolute;
-				top: 46rpx;
-				left: 56rpx;
-			}
-
-			.name {
-				color: rgba(51, 51, 51, 1);
-				font-size: 24rpx;
-			}
-
-		}
-      
-	}
-	
-	.u-time-axis{
-		.u-time-axis-item:last-of-type{
-			margin-bottom: 0;
-		}
-	}
-	// 确认出库
-	.bottom {
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		background-color: #fff;
-		margin-top: 44rpx;
-		padding: 16rpx 32rpx;
-	     z-index: 999;
-		uni-button {
-			border-radius: 8px;
-			background: linear-gradient(180deg, rgba(22, 119, 255, 1) 0%, rgba(16, 98, 213, 1) 100%);
-			color: rgba(255, 255, 255, 1);
-			font-size: 32rpx;
-			line-height: 88rpx;
-			
-		}
-	}
-</style>

+ 9 - 4
pages/storeManagement/equipmentInspection/planDetail.vue

@@ -145,11 +145,11 @@
 
 					<!-- 上传图片 -->
 					<view class="upload-img">
-						<u-upload width="144" height="144" :ref="'uUpload'+index"
+						<ujp-upload width="144" height="144" :ref="'uUpload'+index"
 						 :key="index"
 						 name="photoFile" :multiple="false"
 						 :form-data="formData" :header="header" :action="action"
-						 max-count="4"  upload-text=" " del-bg-color="#0051FF"  ></u-upload>
+						 max-count="4"  upload-text=" " del-bg-color="#0051FF"  ></ujp-upload>
 					</view>
 				</view>
 
@@ -168,11 +168,16 @@
 </template>
 
 <script>
-	import * as API from '@/apis/pagejs/storeManagement.js'
+	import * as API from '@/apis/pagejs/storeManagement.js'
+	import ujpUpload from "@/pages/storeManagement/components/u-upload.vue"
+	
 	import {
 		parseUnixTime
 	} from '@/apis/utils'
-	export default {
+	export default {
+		components:{
+			ujpUpload
+		},
 		data() {
 			return {
 				queryDate: "",

+ 0 - 76
uni.scss

@@ -1,78 +1,2 @@
-/**
- * 这里是uni-app内置的常用样式变量
- *
- * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
- * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
- *
- */
-
-/**
- * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
- *
- * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
- */
-@import 'uview-ui/theme.scss';
-/* 颜色变量 */
-
-/* 行为相关颜色 */
-$uni-color-primary: #007aff;
-$uni-color-success: #4cd964;
-$uni-color-warning: #f0ad4e;
-$uni-color-error: #dd524d;
-
-/* 文字基本颜色 */
-$uni-text-color:#333;//基本色
-$uni-text-color-inverse:#fff;//反色
-$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
-$uni-text-color-placeholder: #808080;
-$uni-text-color-disable:#c0c0c0;
-
-/* 背景颜色 */
-$uni-bg-color:#ffffff;
-$uni-bg-color-grey:#f8f8f8;
-$uni-bg-color-hover:#f1f1f1;//点击状态颜色
-$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
-
-/* 边框颜色 */
-$uni-border-color:#c8c7cc;
-
-/* 尺寸变量 */
-
-/* 文字尺寸 */
-$uni-font-size-sm:12px;
-$uni-font-size-base:14px;
-$uni-font-size-lg:16;
-
-/* 图片尺寸 */
-$uni-img-size-sm:20px;
-$uni-img-size-base:26px;
-$uni-img-size-lg:40px;
-
-/* Border Radius */
-$uni-border-radius-sm: 2px;
-$uni-border-radius-base: 3px;
-$uni-border-radius-lg: 6px;
-$uni-border-radius-circle: 50%;
-
-/* 水平间距 */
-$uni-spacing-row-sm: 5px;
-$uni-spacing-row-base: 10px;
-$uni-spacing-row-lg: 15px;
-
-/* 垂直间距 */
-$uni-spacing-col-sm: 4px;
-$uni-spacing-col-base: 8px;
-$uni-spacing-col-lg: 12px;
-
-/* 透明度 */
-$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
-
-/* 文章场景相关 */
-$uni-color-title: #2C405A; // 文章标题颜色
-$uni-font-size-title:20px;
-$uni-color-subtitle: #555555; // 二级标题颜色
-$uni-font-size-subtitle:26px;
-$uni-color-paragraph: #3F536E; // 文章段落颜色
-$uni-font-size-paragraph:15px;
 
 @import '@/uni_modules/uview-ui/theme.scss';