Browse Source

测试版

qzyReal 3 years ago
parent
commit
c38dc84b11
37 changed files with 1336 additions and 791 deletions
  1. 51 30
      app/apis/api.js
  2. 1 1
      app/manifest.json
  3. 12 6
      app/pages.json
  4. 13 11
      app/pages/business-entering/declare-select.vue
  5. 34 33
      app/pages/index/index.vue
  6. 24 21
      app/pages/onely-disinfect/Index.vue
  7. 137 0
      app/pages/onely-disinfect/car-manager.vue
  8. 5 6
      app/pages/onely-disinfect/disinfect-Index.vue
  9. 389 238
      app/pages/onely-disinfect/type-business-edit.vue
  10. 3 2
      app/pages/onely-disinfect/type-business-info.vue
  11. 370 219
      app/pages/onely-disinfect/type-business.vue
  12. 1 1
      app/pages/wx/pay.vue
  13. 2 2
      app/utils/request.js
  14. 3 0
      sp-admin/sa-frame/com/sa-info.vue
  15. 6 45
      sp-admin/sa-frame/menu-list.js
  16. 1 1
      sp-admin/sa-view/car/tb-business-car-list.html
  17. 2 2
      sp-admin/sa-view/tb-business-car/tb-business-car-list.html
  18. 54 35
      sp-admin/sa-view/tb-business/tb-car-disincle-add.html
  19. 32 15
      sp-admin/sa-view/tb-business/tb-car-disincle-edit.html
  20. 2 2
      sp-admin/sa-view/tb-business/tb-car-disincle-info.html
  21. 41 16
      sp-admin/sa-view/tb-business/tb-car-disincle-list.html
  22. 2 4
      sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html
  23. 2 2
      sp-admin/sa-view/tb-item-type/tb-item-type-list.html
  24. 0 2
      sp-admin/sa-view/tb-item-type/tb-item.html
  25. 1 1
      sp-admin/static/sa.js
  26. 16 16
      sp-server/src/main/java/com/pj/api/jh/service/JhService.java
  27. 1 0
      sp-server/src/main/java/com/pj/project/tb_business/OtherBusinessBO.java
  28. 17 1
      sp-server/src/main/java/com/pj/project/tb_business/TbBusiness.java
  29. 9 19
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessController.java
  30. 1 0
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessMapper.xml
  31. 19 5
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java
  32. 5 0
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarController.java
  33. 0 1
      sp-server/src/main/java/com/pj/project/tb_declare/TbDeclareController.java
  34. 1 1
      sp-server/src/main/java/com/pj/project/tb_declare/TbDeclareMapper.xml
  35. 77 51
      sp-server/src/main/java/com/pj/project/tb_declare/TbDeclareService.java
  36. 1 1
      sp-server/src/main/java/com/pj/project/tb_item_type/TbItemTypeService.java
  37. 1 1
      sp-server/src/main/resources/application-dev.yml

+ 51 - 30
app/apis/api.js

@@ -12,12 +12,12 @@ export default {
 		return ajax.postForm('/api/register', data)
 	},
 	getItemList(data) {
-		return ajax.get('/TbItemType/getList',data)
+		return ajax.get('/TbItemType/getList', data)
 	},
 	getCustomerList(data) {
 		return ajax.get('/TbCostomer/getList', data)
 	},
-	getCurrentAuthCode(){
+	getCurrentAuthCode() {
 		return ajax.get('/admin/getCurrentAuthCode')
 	},
 	getCarList() {
@@ -38,6 +38,9 @@ export default {
 			pageSize: 50
 		})
 	},
+	getGoodsById(data) {
+		return ajax.get('/TbGoods/getById', data)
+	},
 	saveBusiness(data) {
 		return ajax.postForm('/TbBusiness/add', data)
 	},
@@ -57,6 +60,18 @@ export default {
 	getCustomerList(data) {
 		return ajax.get('/api/getCustomerList', data)
 	},
+	getCarType() {
+		return ajax.get('/TbItem/getItemType')
+	},
+	getTypeByGoodsId(data) {
+		return ajax.get('/TbItemType/getTypeByGoodsId', data)
+	},
+	addOtherBusiness(data) {
+		return ajax.postForm('/TbBusiness/addOtherBusiness', data)
+	},
+	editOtherBusiness(data) {
+		return ajax.postForm('/TbBusiness/editOtherBusiness', data)
+	},
 	confirmCustomer(data) {
 		return ajax.postForm('/api/confirmCustomer', data)
 	},
@@ -114,7 +129,7 @@ export default {
 	getPrePay(data) {
 		return ajax.get('/jh/init-pay', data)
 	},
-	checkPayResult(data){
+	checkPayResult(data) {
 		return ajax.get('/jh/check-pay-result', data)
 	},
 	getRedirectUrl(data) {
@@ -146,7 +161,7 @@ export default {
 		return ajax.postJson('/TbBusiness/uploadReport', data)
 	},
 	getDeclareList(data) {
-		return ajax.get('/api/getDeclareList', data)
+		return ajax.get('/TbDeclare/getNotBindList', data)
 	},
 	getAccountInfo() {
 		return ajax.get('/api/getAccountInfo')
@@ -169,44 +184,50 @@ export default {
 	checkUserType() {
 		return ajax.get('/api/checkUserType')
 	},
-	getRoleList(data){
-		return ajax.get('/role/getCustomerRoleList',data)
+	getRoleList(data) {
+		return ajax.get('/role/getCustomerRoleList', data)
 	},
-	getUserList(data){
-	 return ajax.get('/admin/getCustomerAdminList',data)	
+	getUserList(data) {
+		return ajax.get('/admin/getCustomerAdminList', data)
 	},
-	addCustomerAdmin(data){
-		return ajax.postForm('/admin/addCustomerAdmin',data)
+	addCustomerAdmin(data) {
+		return ajax.postForm('/admin/addCustomerAdmin', data)
 	},
-	editCustomerAdmin(data){
-		return ajax.postForm('/admin/editCustomerAdmin',data)
+	editCustomerAdmin(data) {
+		return ajax.postForm('/admin/editCustomerAdmin', data)
 	},
-	adminConfirm(data){
-		return ajax.postForm('/TbBusiness/confirm',data)
+	adminConfirm(data) {
+		return ajax.postForm('/TbBusiness/confirm', data)
+	},
+	addCarDisinfect(data) {
+		return ajax.postJson('/api/addCarDisinfect', data)
 	},
-	addCarDisinfect(data){
-		return ajax.postJson('/api/addCarDisinfect',data)
+	editCarDisinfect(data) {
+		return ajax.postJson('/api/editCarDisinfect', data)
 	},
-	editCarDisinfect(data){
-		return ajax.postJson('/api/editCarDisinfect',data)
+	getCarDisinFect(data) {
+		return ajax.get('/TbBusiness/getList', data)
 	},
-	getCarDisinFect(data){
-		return ajax.get('/TbBusiness/getCarDisincleList',data)	
+	getItemType(data) {
+		return ajax.get('/TbItemType/getItemTypeById', data);
 	},
-	getItemType(data){
-		return ajax.get('/TbItemType/getItemTypeById',data);
+	getOtherBusinessById(data) {
+		return ajax.get('/TbBusiness/getOtherBusinessById', data)
 	},
-	getOtherBusinessById(data){
-		return ajax.get('/TbBusiness/getOtherBusinessById',data)
+	deleteOtherBusiness(data){
+	  return ajax.postForm('/TbBusiness/deleteOtherBusiness',data)	
 	},
-	getItemTypeList(data){
-		return ajax.get('/TbItemType/getList',data)
+	getOtherBusiness(data){
+		return ajax.get('/TbBusiness/getOtherBusiness', data)
 	},
-	getItemTypeEnum(){
+	getItemTypeList(data) {
+		return ajax.get('/TbItemType/getList', data)
+	},
+	getItemTypeEnum() {
 		return ajax.get('/TbItem/getItemType')
 	},
-	searchCar(data){
-		return ajax.get('/TbBusinessCar/searchInNotOutCar',data)
+	searchCar(data) {
+		return ajax.get('/TbBusinessCar/searchInNotOutCar', data)
 	}
-	
+
 }

+ 1 - 1
app/manifest.json

@@ -85,7 +85,7 @@
     "vueVersion" : "2",
     "h5" : {
         "router" : {
-            "base" : "/h5/",
+            "base" : "/test/",
             "mode" : "history"
         },
         "devServer" : {

+ 12 - 6
app/pages.json

@@ -301,35 +301,41 @@
 			}
 
 		},
-		
+
 		{
 			"path": "pages/onely-disinfect/type-business",
 			"style": {
 				"navigationBarTitleText": ""
 			}
-		
+
 		},
-		
+
 		{
 			"path": "pages/onely-disinfect/add-remark",
 			"style": {
 				"navigationBarTitleText": ""
 			}
-		
+
 		},
 		{
 			"path": "pages/onely-disinfect/type-business-info",
 			"style": {
 				"navigationBarTitleText": ""
 			}
-		
+
 		},
 		{
 			"path": "pages/onely-disinfect/type-business-edit",
 			"style": {
 				"navigationBarTitleText": ""
 			}
-		
+
+		},
+		{
+			"path": "pages/onely-disinfect/car-manager",
+			"style": {
+				"navigationBarTitleText": ""
+			}
 		}
 
 	],

+ 13 - 11
app/pages/business-entering/declare-select.vue

@@ -13,24 +13,24 @@
 				<view class="card" v-for="(recordItem,index) in recordItemList" :key="index">
 					<view class="c">
 						<view class="item car-num-item">
-							<text class="car-num">申报时间:{{recordItem.createTime}}</text>
+							<text class="car-num">企业:{{recordItem.customerName}}</text>
 						</view>
-						<view class="item">
+						<view class="item car-num-item">
 							<text class="p1">申报人:</text>
 							<text class="p2">{{recordItem.declarePeople}}</text>
 						</view>
-						<view class="item">
-							<text class="p1">申报电话:</text>
-							<text class="p2">{{recordItem.declarePhone}}</text>
-						</view>
-						<view class="item">
+						<view class="item car-num-item">
 							<text class="p1">产品学名:</text>
 							<text class="p2">{{recordItem.goodsName}}</text>
 						</view>
-						<view class="item">
+						<view class="item car-num-item">
 							<text class="p1">越南车牌:</text>
 							<text class="p2">{{recordItem.carNo}}</text>
 						</view>
+						<view class="item car-num-item">
+							<text class="p1">申报时间:</text>
+							<text class="p2">{{recordItem.createTime}}</text>
+						</view>
 
 					</view>
 					<view class="b">
@@ -56,15 +56,17 @@
 					pageNo: 1,
 					pageSize: 10,
 					dataCount: 0,
-					declareNo: '',
-					
+					declareNo: '1',
 				},
 				status: 'loadmore',
 				recordItemList: [],
 			}
 		},
 		onLoad(options) {
-			this.p.declareNo = options.declareNo;
+			let declareNo=options.declareNo;
+			if(declareNo){
+				this.p.declareNo=declareNo;
+			}
 		},
 		methods: {
 			toDeclare(){

+ 34 - 33
app/pages/index/index.vue

@@ -74,7 +74,7 @@
 				{
 					auth: false,
 					icon: '../../static/home-icon-06.jpg',
-					text: '其他业务',
+					text: '业务管理',
 					url: '/pages/onely-disinfect/Index',
 					customer:true
 				},
@@ -107,24 +107,24 @@
 						text: '消杀申报',
 						url: '/pages/disinfect/addDisinfect',
 					},
-					{
-						id: 'tb-business',
-						auth: true,
-						icon: '../../static/home-icon-02.png',
-						text: '录入整车',
-						url: '/pages/business-entering/business-entering',
-					},
-					{
-						id: 'tb-business',
-						auth: true,
-						icon: '../../static/home-icon-03.png',
-						text: '整车业务',
-						url: '/pages/business-order/business-order',
-					},
+					// {
+					// 	id: 'tb-business',
+					// 	auth: true,
+					// 	icon: '../../static/home-icon-02.png',
+					// 	text: '录入整车',
+					// 	url: '/pages/business-entering/business-entering',
+					// },
+					// {
+					// 	id: 'tb-business',
+					// 	auth: true,
+					// 	icon: '../../static/home-icon-03.png',
+					// 	text: '整车业务',
+					// 	url: '/pages/business-order/business-order',
+					// },
 					{
 						auth: false,
-						icon: '../../static/home-icon-06.jpg',
-						text: '其他业务',
+						icon: '../../static/home-icon-03.jpg',
+						text: '业务管理',
 						url: '/pages/onely-disinfect/Index',
 						customer:true
 					},
@@ -143,14 +143,15 @@
 						url: '/pages/user/user-index',
 					}
 				],
-				adminList: [{
-						id: 'tb-business-add',
-						auth: true,
-						icon: '../../static/home-icon-02.png',
-						text: '录入整车',
-						url: '/pages/business-entering/business-entering',
+				adminList: [
+					// {
+					// 	id: 'tb-business-add',
+					// 	auth: true,
+					// 	icon: '../../static/home-icon-02.png',
+					// 	text: '录入整车',
+					// 	url: '/pages/business-entering/business-entering',
 						
-					},
+					// },
 					{
 						id: 'tb-declare',
 						auth: false,
@@ -167,18 +168,18 @@
 					},
 					{
 						auth: false,
-						icon: '../../static/home-icon-06.jpg',
-						text: '其他业务',
+						icon: '../../static/home-icon-03.jpg',
+						text: '业务管理',
 						url: '/pages/onely-disinfect/Index',
 						customer:true
 					},
-					{
-						id: 'tb-business-list',
-						auth: true,
-						icon: '../../static/home-icon-03.png',
-						text: '整车业务',
-						url: '/pages/business-order/business-order',
-					},
+					// {
+					// 	id: 'tb-business-list',
+					// 	auth: true,
+					// 	icon: '../../static/home-icon-03.png',
+					// 	text: '整车业务',
+					// 	url: '/pages/business-order/business-order',
+					// },
 					{
 						id: 'tb-business-car',
 						auth: true,

+ 24 - 21
app/pages/onely-disinfect/Index.vue

@@ -6,9 +6,6 @@
 			</view>
 			<view class="add" @click="addFn">+添加</view>
 		</view>
-		<!-- 		<u-sticky offset-top="0">
-			<u-tabs :list="tabs" @change="change" :current="current" :is-scroll="false"></u-tabs>
-		</u-sticky> -->
 		<view class="card-box">
 			<view class="card" v-for="(businessItem,index) in businessItemList" :key="index">
 				<view class="t">
@@ -22,16 +19,19 @@
 
 				<view class="c">
 					<view class="item car-num-item">
-						<text class="car-num">{{businessItem.carNo}}</text>
+						<text class="car-num">{{businessItem.carNoStr}}</text>
 					</view>
 
 					<view class="item">
-						<text class="p1">车型:</text>
-						<text class="p2">{{businessItem.cardSize}}(米)</text>
+						<text class="p1">业务项:</text>
+						<text class="p2">{{businessItem.goodsName}}</text>
 					</view>
 					<view class="item">
-						<text class="p1">载重:</text>
-						<text class="p2">{{businessItem.netWeight}}(kg)</text>
+						<text class="p1">载重(kg):</text>
+						<text class="p2">
+							<text v-if="businessItem.netWeight">{{businessItem.netWeight}}</text>
+							<text>空车</text>
+						</text>
 					</view>
 					<view class="item">
 						<text class="p1">账单确认:</text>
@@ -51,11 +51,12 @@
 				</view>
 				<view class="b">
 					<view class="btn b3" v-if="businessItem.adminConfirmInput==0
-								&&perList.indexOf('tb-flex-business-confirm')!=-1"
-								 @click="sureZdFn(businessItem)">
+								&&perList.indexOf('tb-flex-business-confirm')!=-1" @click="sureZdFn(businessItem)">
 						账单确认</view>
-						<view class="btn b3" @click="toDetail(businessItem)">详情</view>
-					<view class="btn b1" v-if="businessItem.adminConfirmInput==0&&perList.indexOf('tb-flex-business-edit')!==-1" @click="editFn(businessItem)">修改</view>
+					<view class="btn b3" @click="toDetail(businessItem)">详情</view>
+					<view class="btn b1"
+						v-if="businessItem.adminConfirmInput==0&&perList.indexOf('tb-flex-business-edit')!==-1"
+						@click="editFn(businessItem)">修改</view>
 					<view class="btn b4" v-if="businessItem.adminConfirmInput==0
 								&&perList.indexOf('tb-business-del')!==-1" @click="deleteFn(businessItem)">删除</view>
 				</view>
@@ -72,7 +73,6 @@
 		data() {
 			return {
 				p: {
-					isCar: 1,
 					adminConfirmInput: -1,
 					pageNo: 1,
 					pageSize: 3,
@@ -106,21 +106,25 @@
 			this.getBusinessList();
 			this.perList = uni.getStorageSync('perList')
 		},
-		mounted() {
-		},
+		mounted() {},
 		onBackPress() {
 			this.$common.to('/pages/index/index')
 			return true;
 		},
 		methods: {
-			addFn(){
+			addFn() {
 				this.$common.to('/pages/onely-disinfect/disinfect-Index')
 			},
 			toDetail(data) {
 				this.$common.to('/pages/onely-disinfect/type-business-info?id=' + data.id)
 			},
 			editFn(data) {
-				this.$common.to('/pages/onely-disinfect/type-business-edit?id=' + data.id)
+				this.$api.getGoodsById({
+					id: data.goodsId
+				}).then(resp => {
+					let goods = resp.data;
+					this.$common.to('/pages/onely-disinfect/type-business-edit?id=' + data.id+'&goodsJson='+JSON.stringify(goods))
+				})
 			},
 			deleteFn(data) {
 				let that = this;
@@ -129,7 +133,7 @@
 					content: "是否删除该业务?",
 					success(res) {
 						if (res.confirm) {
-							that.$api.deleteBusiness({
+							that.$api.deleteOtherBusiness({
 								id: data.id
 							}).then(resp => {
 								that.$common.toast('已删除');
@@ -143,8 +147,7 @@
 				this.$common.to('/pages/wx/payOrderTemp?id=' + data.id)
 			},
 			getBusinessList() {
-				this.p.isCar=0;
-				this.$api.getCarDisinFect(this.p).then(resp => {
+				this.$api.getOtherBusiness(this.p).then(resp => {
 					this.status = 'loadmore';
 					this.p.pageNo = resp.pageNo;
 					this.p.pageSize = resp.pageSize;
@@ -219,6 +222,7 @@
 		padding: 10rpx 20rpx;
 		font-size: 28rpx;
 	}
+
 	.card-box {
 		display: flex;
 		width: 100%;
@@ -271,7 +275,6 @@
 						width: 100%;
 						border-radius: 10rpx;
 						font-weight: bold;
-						letter-spacing: 20rpx;
 					}
 
 					.p1 {

+ 137 - 0
app/pages/onely-disinfect/car-manager.vue

@@ -0,0 +1,137 @@
+<template>
+	<view>
+		<view class="box">
+			<view class="top">
+				<text class="title">业务车辆</text>
+			</view>
+			<view class="item">
+				<view class="l"><text style="color: red;">*</text>车牌号:</view>
+				<view class="r">
+					<u-input placeholder="输入车牌号" v-model="form.carNo">
+					</u-input>
+				</view>
+			</view>
+			<view class="item">
+				<view class="l"><text style="color: red;" v-if="needCarSize==1">*</text>规格(米):</view>
+				<view class="r">
+					<u-input placeholder="输入规格" type="number" v-model="form.carSize">
+					</u-input>
+				</view>
+			</view>
+			<view class="item">
+				<view class="l">车辆类型:</view>
+				<view class="r" style="flex: 12;">
+					<picker v-if="carType.list.length>0" class="p-picker" @change="carTypeChange($event)"
+						:value="carType.index" :range="carType.list" range-key="name">
+						<text class="p-text">{{carType.list[carType.index].name}}</text>
+					</picker>
+				</view>
+			</view>
+
+			<view class="item">
+				<view class="l"><text style="color: red;" v-if="needWeight==1&&carType.index==1">*</text>载重(kg):</view>
+				<view class="r">
+					<u-input placeholder="车辆载重" v-model="form.netWeight">
+					</u-input>
+				</view>
+			</view>
+		</view>
+		<view style="margin-top: 50px;">
+			<u-button type="primary" text="确定" @click="saveFn"></u-button>
+			<u-button type="info" text="返回" @click="backFn" style="margin-top: 20rpx;"></u-button>
+		</view>
+		<!-- ---------------------------------------------------------- -->
+		<view class="bottom-safety"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				carType: {
+					index: 0,
+					list: []
+				},
+				needCarSize: 0,
+				needWeight: 0,
+				form: {
+					carNo: '',
+					carType: '',
+					netWeight: '',
+					carSize: ''
+				}
+			}
+		},
+		onLoad(options) {
+			this.form = JSON.parse(options.carJson);
+			this.needCarSize = options.needCarSize;
+			this.needWeight = options.needWeight;
+			this.getCarType();
+		},
+		methods: {
+			getCarType() {
+				this.$api.getCarType().then(resp => {
+					let list = resp.data;
+					this.carType.list = list;
+					let form=this.form;
+					if(form.netWeight&&form.netWeight>0){
+						this.carType.index=1;
+					}
+				})
+			},
+			carTypeChange(e) {
+				var value = e.detail.value; //当前picker选中的值
+				this.carType.index = value;
+			},
+			backFn(){
+			this.$common.back();	
+			},
+			saveFn() {
+				let data = this.form;
+				if (!data.carNo) {
+					this.$common.toast('请填写车牌号')
+					return false;
+				}
+				let needCarSize = this.needCarSize;
+				if (!data.carSize&&needCarSize==1) {
+					this.$common.toast('请填写车辆规格')
+					return false;
+				}
+				let needWeight = this.needWeight;
+				if (needWeight==1&&!data.netWeight&&this.carType.index==1) {
+					this.$common.toast('请填写车辆载重')
+					return false;
+				}
+				data.carNo=data.carNo.toUpperCase();
+				uni.navigateBack({
+					delta: 1,
+					success: function(resp) {
+						uni.$emit('getCar', data) //触发事件
+					}
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #fff;
+	}
+
+	.save-btn {
+		background-color: #ff4200;
+		height: 88rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		margin: 60rpx;
+		color: #fff;
+		font-size: 30rpx;
+		font-weight: bold;
+		border-radius: 10rpx;
+	}
+
+	@import '@/common/common.scss'
+</style>

+ 5 - 6
app/pages/onely-disinfect/disinfect-Index.vue

@@ -6,7 +6,7 @@
 			</view>
 		</view>
 		<view class="card-box">
-			<uni-list>
+			<uni-list >
 				<uni-list-item v-for="(item,index) in typeList"  link="reLaunch" @click="onClick(item)" >
 					<template v-slot:body>{{item.name}}</template>
 				</uni-list-item>
@@ -26,7 +26,6 @@
 				customemrId: '1',
 				typeList:[],
 				p: {
-					business: 0,
 					pageNo: 1,
 					pageSize: 3,
 					dataCount: 0
@@ -34,7 +33,7 @@
 			}
 		},
 		onShow() {
-			this.getItemTypeList();
+			this.getGoodsList();
 		},
 		onBackPress() {
 			this.$common.to('/pages/onely-disinfect/Index')
@@ -42,10 +41,10 @@
 		},
 		methods: {
 			onClick(item){
-				this.$common.to('/pages/onely-disinfect/type-business?typeId='+item.id)
+				this.$common.to('/pages/onely-disinfect/type-business?goodsJson='+JSON.stringify(item))
 			},
-			getItemTypeList(){
-				this.$api.getItemTypeList(this.p).then(resp=>{
+			getGoodsList(){
+				this.$api.getGoodsList(this.p).then(resp=>{
 					this.typeList=resp.data;
 				})
 			}

+ 389 - 238
app/pages/onely-disinfect/type-business-edit.vue

@@ -2,109 +2,107 @@
 	<view>
 		<view class="box">
 			<view class="top">
-				<text class="title">{{itemType.name}}</text>
-			</view>
-			<view class="item-line">
-				基本信息
-			</view>
-			<view class="item" v-if="!customerId||customerId=='1'">
-				<view class="l"><text style="color: red;">*</text>客户:</view>
-				<view class="r">
-					<picker v-if="customer.list.length>0" class="p-picker" @change="customerChange($event)"
-						:value="customer.index" :range="customer.list" range-key="name">
-						<text class="p-text">{{customer.list[customer.index].name}}</text>
-						<u-icon class="p-icon" name="arrow-down-fill" size="20"></u-icon>
-					</picker>
-				</view>
+				<text class="title">{{goods.name}}</text>
 			</view>
 			<view class="item">
-				<view class="l"><text style="color: red;">*</text>车牌号:</view>
+				<view class="l"><text style="color: red;" v-if="goods.needDeclare==1">*</text>申报单号:</view>
 				<view class="r">
-					<u-input @input="carInputFn" placeholder="请填写车牌号" v-model="form.carNo" />
+					<u-input placeholder="申报订单号" v-model="form.declareNo" clearable readonly>
+						<text slot="suffix" style="font-size: 50rpx;" @click="selectDeclare">+</text>
+					</u-input>
 				</view>
 			</view>
-			<view class="list" v-show="carList.length>0&&showSelect">
-				<u-radio-group v-model="form.carNo" placement="column" @change="groupChange">
-					<u-radio :customStyle="{marginBottom: '8px'}" v-for="(item, index) in carList" :key="index"
-						:label="item.carNo" :name="item.carNo">
-					</u-radio>
-				</u-radio-group>
-			</view>
 			<view class="item">
-				<view class="l">车辆类型:</view>
-				<view class="r">
-					<picker v-if="type.list.length>0" class="p-picker" id="qy" @change="bindPickerChange($event)"
-						:value="type.index" :range="type.list" range-key="name">
-						<text class="p-text">{{type.list[type.index].name}}</text>
-						<u-icon class="p-icon" name="arrow-down-fill" size="20"></u-icon>
+				<view class="l">企业:</view>
+				<view class="r" style="flex: 12;">
+					<picker :disabled="goods.needDeclare==1" v-if="customer.customerList.length>0" class="p-picker"
+						@change="customerChange($event)" :value="customer.index" :range="customer.customerList"
+						range-key="name">
+						<text class="p-text">{{customer.customerList[customer.index].name}}</text>
 					</picker>
 				</view>
 			</view>
 			<view class="item">
-				<view class="l">车辆规格:</view>
-				<view class="r">
-					<u-input placeholder="请填写车辆规格" v-model="form.carSize" />
-				</view>
-			</view>
-			<view class="item" v-if="type.index==1">
-				<view class="l">载重(kg):</view>
+				<view class="l"><text style="color: red;">*</text>货主:</view>
 				<view class="r">
-					<u-input placeholder="请填写车辆载重" v-model="form.carWeight" />
+					<u-input placeholder="输入货主" v-model="form.owner">
+					</u-input>
 				</view>
 			</view>
 			<view class="item">
 				<view class="l">作业人员:</view>
 				<view class="r">
-					<u-input placeholder="作业人员" v-model="form.operator" />
+					<u-input placeholder="输入作业人员" v-model="form.operator">
+					</u-input>
 				</view>
 			</view>
-
 			<view class="item">
-				<view class="l">作业时间:</view>
+				<view class="l"><text style="color: red;" v-if="goods.needOperateTime">*</text>作业时间:</view>
 				<view class="r">
-					<uni-datetime-picker placeholder="请选择" :clear-icon="false" type="datetime"
-						v-model="form.operateTime" />
+					<uni-datetime-picker type="datetime" v-model="form.operateTime" />
 				</view>
 			</view>
 			<view class="item-line">
-				收费明细<text style="color: red;">(总共{{totalPrice}}元)</text>
+				<u-row style="height: 40px;">
+					<u-col span=4>车辆</u-col>
+					<u-col span=8>
+						<u-button type="primary" text="添加" @click="addCar" icon="plus"
+							style="width: 60px;height: 26px;" />
+					</u-col>
+				</u-row>
+			</view>
+			<view class="item" v-for="(car,index) in car.list" :key="index">
+				<view class="l">车牌:</view>
+				<view class="r">
+					<u-input placeholder="车辆" v-model="car.carNo" readonly>
+						<view slot="suffix" style="display: flex;">
+							<u-icon @click="editCar(car)" size="20" name="edit-pen-fill" color="blue"></u-icon>
+							<u-icon style="margin-left:15rpx;" size="20" @click="delCar(car)" name="close-circle-fill"
+								color="red"></u-icon>
+						</view>
+					</u-input>
+				</view>
+			</view>
+			<view class="item-line" style="margin-top: 30rpx;">
+				业务项
+			</view>
+			<view class="business-list" v-for="(item,index) in typeList">
+				<u-row>
+					<u-col span="4">
+						<text>
+							<text style="color: red;display: inline;" v-if="item.need==1">*</text> {{item.name}}:
+						</text>
+					</u-col>
+					<u-col span="8" style="display: flex;">
+						<u-row>
+							<u-col span="10" @click="showSelect(item)">
+								{{item.itemName?item.itemName:'请选择'}}
+							</u-col>
+							<u-col span="2" @click="item.itemName='',item.itemId=''" v-if="item.itemId">
+								<u-icon style="margin-left:15rpx;display: inline;" size="20" name="close-circle-fill"
+									color="red"></u-icon>
+							</u-col>
+						</u-row>
+					</u-col>
+				</u-row>
+				<view style="display: flex;position: relative;left: 50%;">
+					<u-number-box style="margin-left: 15rpx;" v-if="item.itemName" :disabled="item.inc==0"
+						v-model="item.num"></u-number-box>
+					<text style="margin-left: 20rpx;color: red;" v-if="item.itemName">
+						¥{{item.num*item.price}}
+					</text>
+				</view>
+				<u-line></u-line>
+			</view>
+			<view class="hj" v-show="totalPrice>0">
+				合计:{{totalPrice}}元
 			</view>
-			<u-checkbox-group v-model="checkList" placement="column">
-				<uni-list v-for="item in itemType.items">
-					<uni-list-item style="display: inline;" :title="item.itemName" :note="item.price+''+item.unit">
-						<template v-slot:header>
-							<u-checkbox :name="item.id" :disabled="item.need==1" style="display: inline;">
-							</u-checkbox>
-						</template>
-
-						<template v-slot:footer>
-							<div style="position: absolute;right: 230rpx;top: 65rpx;">
-								<u-number-box :disabled="item.inc==0" v-model="item.num">
-									<view slot="minus" class="minus">
-										<u-icon name="minus" size="12"></u-icon>
-									</view>
-									<text v-if="item.inc==0" slot="input"
-										style="width: 50px;text-align: center;color: #E5E5E5;"
-										class="input">{{item.num}}</text>
-									<text v-else slot="input" style="width: 50px;text-align: center;"
-										class="input">{{item.num}}</text>
-									<view slot="plus" class="plus">
-										<u-icon name="plus" size="12"></u-icon>
-									</view>
-								</u-number-box>
-							</div>
-							<u-button v-show="item.needRemark" @click="openRemarkFn(item)" style="width: 50px;"
-								type="primary" size="mini" text="备注"></u-button>
-						</template>
-					</uni-list-item>
-				</uni-list>
-			</u-checkbox-group>
-		</view>
-		<view v-if="!form.adminConfirmInput">
-			<u-button type="primary" text="修改" @click="saveFn"></u-button>
 		</view>
+		<u-button type="primary" text="确定" @click="saveFn" v-show="perList.indexOf('tb-business-add')!==-1"></u-button>
 		<!-- ---------------------------------------------------------- -->
 		<view class="bottom-safety"></view>
+		<u-picker :show="show" :columns="columns" @confirm="confirmFn" keyName="itemName" @cancel="show=false">
+		</u-picker>
 	</view>
 </template>
 
@@ -112,212 +110,370 @@
 	export default {
 		data() {
 			return {
-				showRemark: false,
-				type: {
-					index: 1,
-					list: []
-				},
+				show: false,
+				columns: [],
 				customerId: '1',
 				customer: {
 					index: 0,
-					list: []
+					customerList: [],
+				},
+				goods: {
+					id: '',
+					name: ''
 				},
+				typeList: [],
+				allTypeList: [],
 				form: {
+					customerId: '',
+					declareNo: '',
 					carNo: '',
+					owner: '',
 					carSize: '',
-					carWeight: '',
-					operator: '',
-					operateTime: ''
-
+					goodsName: '',
+					netWeight: '',
 				},
-				list: [],
-				checkList: [],
-				businessItems: [],
-				itemType: {
-					id: '',
-					name: '',
+				show: false,
+				item: {
 					items: []
 				},
-				checkList: [],
-				showSelect: false,
-				carList: []
+				car: {
+					list: [{
+						id: '',
+						carNo: '',
+						index: 0
+					}]
+				},
+				perList: []
 			}
 		},
 		computed: {
 			totalPrice() {
-				let items = this.itemType.items;
-				let checkList = this.checkList;
-				items = items.filter(obj => checkList.indexOf(obj.id) !== -1);
+				let typeList = this.typeList.filter(obj => obj.itemName);
 				let price = 0;
-				for (let i in items) {
-					let item = items[i];
-					price = price + item.price * item.num;
+				for (let i in typeList) {
+					let type = typeList[i];
+					price = price + type.price * type.num;
 				}
 				return price;
-			}
+			},
 		},
 		onLoad(options) {
-			this.form.id = options.id;
+			let id = options.id;
+			this.form.id = id;
 			this.customerId = uni.getStorageSync('customerId');
+			this.goods = JSON.parse(options.goodsJson);
+			this.getCustomerList();
 			let that = this;
-			uni.$on('getRemark', data => {
-				that.$nextTick(function() {
-					let items = that.itemType.items;
-					items.filter(obj => obj.id == data.itemId)[0].remark = data.remark;
+			uni.$on('getSelectDeclare', declare => {
+				that.$nextTick(() => {
+					that.handlerSelectDeclare(declare)
+				})
+			})
+			uni.$on('getCar', car => {
+				that.$nextTick(() => {
+					that.handlerCar(car)
 				})
 			})
-			setTimeout(() => {
-				this.showSelect = false;
-			}, 1000)
 		},
 		onShow() {
 			this.getOtherBusinessById();
-		},
-		onBackPress() {
-			this.$common.to('/pages/onely-disinfect/Index');
-			return true;
+			this.perList = uni.getStorageSync('perList')
 		},
 		methods: {
-			carInputFn() {
-				this.$api.searchCar({
-					carNo: this.form.carNo
-				}).then(resp => {
-					this.carList = resp.data;
-					if (this.carList.length > 0) {
-						this.showSelect = true;
+			filterItems() {
+				let carList = this.car.list;
+				let filterTypeList = JSON.parse(JSON.stringify(this.allTypeList));
+				if (carList.length == 0) {
+					this.typeList = filterTypeList;
+					return;
+				}
+				let car = carList[0];
+				let checkCarList = carList.filter(car => car.carType.indexOf('空') == -1);
+				if (checkCarList.length > 0) {
+					car = checkCarList[0];
+				}
+				let carSize = car.carSize;
+				let carType = car.carType;
+				let netWeight = car.netWeight;
+				let tempList = [];
+				for (let i in filterTypeList) {
+					let type = filterTypeList[i];
+					let items = type.items;
+					if (carType) {
+						items = items.filter(item => item.itemType && item.itemType.indexOf(carType) !== -1);
+						console.log(items)
+					}
+					if (carSize && carSize > 1) {
+						items = items.filter(item => item.minLength <= carSize && item.carLength >= carSize);
+						console.log(items)
+					}
+					if (netWeight && netWeight > 1 && carType.indexOf('空') == -1) {
+						items = items.filter(item => item.minWeight <= netWeight && item.maxWeight >= netWeight);
+						console.log(items)
+					}
+					let itemIds = items.map(item => item.id);
+					if (itemIds.indexOf(type.itemId) == -1) {
+						this.cleanItem(type);
 					}
+					type.items = items;
+					tempList.push(type);
+				}
+				this.typeList = tempList;
+			},
+			getOtherBusinessById() {
+				this.$api.getOtherBusinessById({
+					id: this.form.id
+				}).then(resp => {
+					let data = resp.data;
+					this.car.list = data.cars;
+					let items = data.items;
+					this.form = data;
+					this.getTypeByGoodsId(items);
 				})
 			},
-			showWin() {
-				this.$refs.popup.open('bottom')
+			showSelect(item) {
+				this.columns = [];
+				this.columns.push(item.items);
+				this.show = true;
 			},
-			groupChange(carNo) {
-				let list = this.carList;
-				let data = list.filter(obj => obj.carNo == carNo).pop();
-				this.form.carNo = carNo;
-				this.form.carSize = data.carSize;
-				this.list = [];
-				setTimeout(() => {
-					this.showSelect = false;
-				}, 1200)
+
+			confirmFn(e) {
+				let selects = e.value;
+				if (selects.length > 0) {
+					let item = selects[0];
+					let typeId = item.typeId;
+					let typeList = this.typeList;
+					typeList.filter(obj => obj.id == typeId).forEach(obj => {
+						obj.itemId = item.id;
+						obj.itemName = item.itemName;
+						obj.inc = item.inc;
+						obj.price = item.price;
+					})
+				}
+				this.show = false;
 			},
-			getItemTypeEnum() {
-				this.$api.getItemTypeEnum().then(resp => {
-					this.type.list = resp.data;
-					this.type.index = this.type.list.map(obj => obj.name).indexOf(this.form.carType)
+			getTypeByGoodsId(items) {
+				this.$api.getTypeByGoodsId({
+					goodsId: this.goods.id
+				}).then(resp => {
+					let list = resp.data;
+					for (let i in items) {
+						let item = items[i];
+						for (let j in list) {
+							let type = list[j];
+							if (type.id == item.itemTypeId) {
+								type.items.filter(obj => obj.id == item.itemId)
+									.forEach(obj => {
+										type.num = item.num;
+										type.price = item.itemPrice;
+										type.itemName = item.itemName;
+										type.itemId = item.itemId;
+										type.inc = obj.inc;
+									})
+
+
+							}
+						}
+					}
+					this.typeList = list;
 				})
 			},
 			getCustomerList() {
-				let p = {
-					judgeStatus: 2,
+				this.$api.getCustomerList({
 					pageNo: 1,
-					pageSize: 30,
-					type: 0
-				}
-				this.$api.getCustomerList(p).then(resp => {
+					pageSize: 100
+				}).then(resp => {
 					let list = resp.data;
-					this.customer.list = list;
-					this.customer.index = list.map(obj => obj.id).indexOf(this.form.customerId);
+					let customerId = this.customerId;
+					if (customerId !== '1') {
+						this.customer.index = list.map(obj => obj.id).indexOf(customerId);
+					}
+					this.customer.customerList = list;
 				})
 			},
-			openRemarkFn(data) {
-				this.$common.to('/pages/onely-disinfect/add-remark?itemId=' + data.id + '&title=' + data.itemName +
-					'&remark=' + data.remark + '&mustRemark=' + data.mustRemark)
+			customerChange(e) {
+				var value = e.detail.value; //当前picker选中的值
+				this.customer.index = value;
+			},
+			handlerCar(car) {
+				let list = this.car.list;
+				let check = list.filter(obj => obj.carNo == car.carNo).pop();
+				if (check) {
+					check.carSize = car.carSize;
+					check.netWeight = car.netWeight;
+					check.carType = car.carType;
+				} else {
+					this.car.list.push(car);
+				}
+				this.clearEmptyCar();
 			},
-			closeFn() {
-				this.$refs.popup.close()
+			clearEmptyCar() {
+				let list = this.car.list;
+				let obj = list.filter(obj => !obj.carNo).pop();
+				if (obj) {
+					this.car.list.splice(list.indexOf(obj), 1);
+				}
+				this.filterItems();
 			},
-			getItemType() {
-				this.$api.getItemType({
-					id: this.itemType.id
-				}).then(resp => {
-					let data = resp.data;
-					let items = data.items
-						.filter(obj => obj.itemType && obj.itemType.indexOf(this.type.list[this.type.index]
-							.name) !== -1);
-					data.items = items;
-					this.itemType = data;
-					let businessItems = this.businessItems;
-					console.log(this.form.items)
-					this.checkList = this.form.items.map(obj => obj.itemId);
-					items.forEach(obj => {
-						businessItems.forEach(item => {
-							if (obj.id == item.itemId) {
-								obj.remark = item.remark;
-								obj.num = item.num;
+			handlerSelectDeclare(declare) {
+				let oldDeclareNo = this.form.declareNo;
+				if (oldDeclareNo && oldDeclareNo !== declare.declareNo) {
+					this.car.list = [];
+				}
+				this.form.declareNo = declare.declareNo;
+				this.form.cardNo = declare.carNo;
+				this.form.chinaCarNo = declare.chinaCarNo;
+				this.form.netWeight = declare.grossWeight;
+				this.form.owner = declare.sendUnit;
+				let customerList = this.customer.customerList;
+				this.customer.index = customerList.map(customer => customer.id).indexOf(declare.customerId);
+				let carNo = declare.carNo;
+				let grossWeight = declare.grossWeight;
+				let carList = this.car.list;
+				let exit = carList.filter(obj => obj.carNo == carNo).pop();
+				if (!exit) {
+					let car = {
+						carNo: carNo,
+						netWeight: grossWeight,
+						carType: '载重'
+					}
+					this.car.list.push(car)
+				}
+				this.form.cardNo = declare.carNo;
+				this.form.chinaCarNo = declare.chinaCarNo;
+				this.form.netWeight = declare.grossWeight;
+				let chinaCarNo = declare.chinaCarNo;
+				if (chinaCarNo) {
+					let list = [];
+					chinaCarNo.replace(",", ",").split(",").forEach(carNo => {
+						let exit = carList.filter(obj => obj.carNo == carNo).pop();
+						if (!exit) {
+							let car = {
+								carNo: carNo,
+								carType: '空车'
 							}
-						})
+							this.car.list.push(car)
+						}
 					})
-				})
+				}
+				this.clearEmptyCar();
 			},
-			bindPickerChange(e) {
-				this.checkList = [];
-				let index = e.detail.value;
-				this.type.index = index //当前picker选中的值
-				this.getItemType();
+
+			selectDeclare() {
+				this.$common.to('/pages/business-entering/declare-select?declareNo=' + this.form.declareNo)
 			},
-			customerChange(e) {
-				let index = e.detail.value;
-				this.customer.index = index //当前picker选中的值
+			editCar(car) {
+				let goods = this.goods;
+				this.$common.to('/pages/onely-disinfect/car-manager?carJson=' + JSON.stringify(car) + "&needCarSize=" +
+					goods.needCarSize + '&needWeight=' + goods.needWeight)
 			},
-			saveFn() {
-				if (!this.form.carNo) {
-					this.$common.toast('请输入车牌号')
+			delCar(car) {
+				let list = this.car.list;
+				if (list.length == 1) {
+					this.$common.toast('至少有一辆车');
 					return;
 				}
-				if (!this.form.operateTime) {
-					this.$common.toast('请选择作业时间')
-					return;
+				this.car.list.splice(list.indexOf(car), 1);
+				this.filterItems();
+			},
+			check() {
+				let form = this.form;
+				let goods = this.goods;
+				let needDeclare = goods.needDeclare;
+				if (needDeclare == 1 && !form.declareNo) {
+					this.$common.toast('请选择申报单');
+					return false;
 				}
-				let itemList = this.itemType.items;
-				let checkList = this.checkList;
-				let list = itemList.filter(obj => checkList.indexOf(obj.id) !== -1);
-				this.form.itemTypeId = this.itemType.id;
-				this.form.items = list;
-				this.form.carType = this.type.list[this.type.index].name
-				if (this.customerId == '1') {
-					this.form.customerId = this.customer.list[this.customer.index].id;
-				} else {
-					this.form.customerId = this.customerId
+				if (!form.owner) {
+					this.$common.toast('请填写货主');
+					return false;
+				}
+				let needOperateTime = goods.needOperateTime;
+				let operateTime = form.operateTime;
+				if (!operateTime && needOperateTime == '1') {
+					this.$common.toast('请录入作业时间');
+					return false;
+				}
+				console.log(operateTime.length)
+				if (operateTime.length < 12) {
+					this.$common.toast('请录入准确的作业时间');
+					return false;
 				}
-				let that = this;
-				let content = '确认修改该业务'
-				uni.showModal({
-					title: '提示',
-					content: content,
-					success(res) {
-						if (res.confirm) {
-							that.editFn()
+				let carList = this.car.list;
+				if (carList.length == 0) {
+					this.$common.toast('请录入车辆');
+					return false;
+				}
+				let needCarSize = goods.needCarSize;
+				let needWeight = goods.needWeight;
+				for (let i in carList) {
+					let car = carList[i];
+					if (needCarSize == 1 && !car.carSize) {
+						this.$common.toast('请补充' + car.carNo + '的规格');
+						return false;
+					}
+					if (needWeight == 1 && car.carType.indexOf('重') !== -1 && !car.netWeight) {
+						this.$common.toast('请补充' + car.carNo + '载重');
+						return false;
+					}
+				}
+				let typeList = this.typeList;
+				let selectList = [];
+				for (let i in typeList) {
+					let type = typeList[i];
+					if (type.need == 1 && !type.itemId) {
+						this.$common.toast('【' + type.name + '】必选');
+						return false;
+					}
+					if (type.itemId) {
+						let obj = {
+							typeId: type.id,
+							typeName: type.name,
+							id: type.itemId,
+							num: type.num,
+							price: type.price,
+							remark: type.remark
 						}
+						selectList.push(obj);
 					}
-				})
+				}
+				this.form.itemJson = JSON.stringify(selectList);
+				this.form.carJson = JSON.stringify(this.car.list);
+				this.form.items = null;
+				this.form.cars = null;
+				let customerList = this.customer.customerList;
+				let index = this.customer.index;
+				let customer = customerList[index];
+				this.form.customerId = customer.id;
+				this.form.customerName = customer.name;
+				this.form.goodsId = this.goods.id;
+				this.form.goodsName = this.goods.name;
+				let chinaCarNo = carList
+					.filter(car => this.$common.isCarNo(car.carNo.toUpperCase()))
+					.map(car => car.carNo.toUpperCase())
+					.join("、");
+				let yueCarNo = carList
+					.filter(car => !this.$common.isCarNo(car.carNo.toUpperCase()))
+					.map(car => car.carNo.toUpperCase())
+					.join("、");
+				this.form.cardNo = yueCarNo;
+				this.form.chinaCarNo = chinaCarNo;
+				return true;
 			},
-			getOtherBusinessById() {
-				this.$api.getOtherBusinessById({
-					id: this.form.id
-				}).then(resp => {
-					let data = resp.data;
-					this.form = data;
-					this.businessItems = data.items;
-					this.itemType.id = data.itemTypeId;
-					this.getItemType();
-					this.getCustomerList();
-					this.getItemTypeEnum();
-
-				})
+			saveFn() {
+				if (this.check()) {
+					let obj = this.$common.removeNull(this.form);
+					this.$api.editOtherBusiness(obj).then(resp => {
+						if (resp.code == 200) {
+							this.$common.toast('修改成功');
+							setTimeout(() => {
+								this.$common.to('/pages/onely-disinfect/Index')
+							}, 1000)
+						}
+					})
+				}
 			},
-			editFn() {
-				this.$api.editCarDisinfect(this.$common.removeNull(this.form)).then(resp => {
-					if (resp.code == 200) {
-						this.$common.toast('修改成功');
-						setTimeout(() => {
-							this.$common.to('/pages/onely-disinfect/Index')
-						}, 1500)
-					}
-				})
-			}
-		},
-
+		}
 	}
 </script>
 
@@ -326,17 +482,6 @@
 		background-color: #fff;
 	}
 
-	.list {
-		position: absolute;
-		left: 34%;
-		z-index: 999;
-		background: #e5e5e5;
-		padding: 10rpx 200rpx 10rpx 40rpx;
-		border-radius: 10rpx;
-		height: 120rpx;
-		overflow-y: auto;
-	}
-
 	.hs-item {
 		text-align: center;
 	}
@@ -354,6 +499,12 @@
 		font-weight: bold;
 	}
 
+	.business-list {
+		line-height: 75rpx;
+		margin: 4rpx 0 0 48rpx;
+
+	}
+
 	.save-btn {
 		background-color: #ff4200;
 		height: 88rpx;

+ 3 - 2
app/pages/onely-disinfect/type-business-info.vue

@@ -32,7 +32,8 @@
 				<view class="item">
 					<view class="l" >规格:</view>
 					<view class="r">
-						{{item.carSize}} (米)
+						<label v-if="item.carSize">{{item.carSize}} (米)</label>
+						<label v-else>-</label>
 					</view>
 				</view>
 				<view class="item" v-if="item.realInTime">
@@ -92,7 +93,7 @@
 				</view>
 			</view>
 			<view class="hj">
-				总费用:{{form.totalMoney}}元
+				总费用:{{form.itemPrice}}元
 			</view>
 			<u-button type="primary" text="返回" @click="backFn"></u-button>
 				<view style="height: 80rpx;"></view>

+ 370 - 219
app/pages/onely-disinfect/type-business.vue

@@ -2,115 +2,107 @@
 	<view>
 		<view class="box">
 			<view class="top">
-				<text class="title">{{itemType.name}}</text>
-			</view>
-
-			<view class="item-line">
-				基本信息
-			</view>
-			<view class="item" v-if="!customerId||customerId=='1'">
-				<view class="l"><text style="color: red;">*</text>客户:</view>
-				<view class="r">
-					<picker v-if="customer.list.length>0" class="p-picker" @change="customerChange($event)"
-						:value="customer.index" :range="customer.list" range-key="name">
-						<text class="p-text">{{customer.list[customer.index].name}}</text>
-						<u-icon class="p-icon" name="arrow-down-fill" size="20"></u-icon>
-					</picker>
-				</view>
+				<text class="title">{{goods.name}}</text>
 			</view>
 			<view class="item">
-				<view class="l"><text style="color: red;">*</text>车牌号:</view>
+				<view class="l"><text style="color: red;" v-if="goods.needDeclare==1">*</text>申报单号:</view>
 				<view class="r">
-					<u-input @input="carInputFn" placeholder="请填写车牌号" v-model="form.carNo" />
+					<u-input placeholder="申报订单号" v-model="form.declareNo" clearable readonly>
+						<text slot="suffix" style="font-size: 50rpx;" @click="selectDeclare">+</text>
+					</u-input>
 				</view>
 			</view>
-			<view class="list" v-show="carList.length>0&&showSelect">
-				<u-radio-group v-model="form.carNo" placement="column" @change="groupChange">
-					<u-radio :customStyle="{marginBottom: '8px'}" v-for="(item, index) in carList" :key="index"
-						:label="item.carNo" :name="item.carNo">
-					</u-radio>
-				</u-radio-group>
-			</view>
 			<view class="item">
-				<view class="l">车辆类型:</view>
-				<view class="r">
-					<picker v-if="type.list.length>0" class="p-picker" id="qy" @change="bindPickerChange($event)"
-						:value="type.index" :range="type.list" range-key="name">
-						<text class="p-text">{{type.list[type.index].name}}</text>
-						<u-icon class="p-icon" name="arrow-down-fill" size="20"></u-icon>
+				<view class="l">企业:</view>
+				<view class="r" style="flex: 12;">
+					<picker :disabled="goods.needDeclare==1" v-if="customer.customerList.length>0" class="p-picker"
+						@change="customerChange($event)" :value="customer.index" :range="customer.customerList"
+						range-key="name">
+						<text class="p-text">{{customer.customerList[customer.index].name}}</text>
 					</picker>
 				</view>
 			</view>
 			<view class="item">
-				<view class="l">车辆规格(米):</view>
-				<view class="r">
-					<u-input placeholder="请填写车辆规格" v-model="form.carSize" />
-				</view>
-			</view>
-			<view class="item" v-if="type.index==0">
-				<view class="l">载重(kg):</view>
+				<view class="l"><text style="color: red;">*</text>货主:</view>
 				<view class="r">
-					<u-input placeholder="请填写车辆载重" v-model="form.carWeight" />
+					<u-input placeholder="输入货主" v-model="form.owner">
+					</u-input>
 				</view>
 			</view>
 			<view class="item">
 				<view class="l">作业人员:</view>
 				<view class="r">
-					<u-input placeholder="请填写作业人员" v-model="form.operator" />
+					<u-input placeholder="输入作业人员" v-model="form.operator">
+					</u-input>
 				</view>
 			</view>
-
 			<view class="item">
-				<view class="l">作业时间:</view>
+				<view class="l"><text style="color: red;" v-if="goods.needOperateTime">*</text>作业时间:</view>
 				<view class="r">
-					<uni-datetime-picker placeholder="请选择" :clear-icon="false" type="datetime"
-						v-model="form.operateTime" />
+					<uni-datetime-picker type="datetime" v-model="form.operateTime" />
 				</view>
 			</view>
 			<view class="item-line">
-				收费明细<text style="color: red;">(总共{{totalPrice}}元)</text>
+				<u-row style="height: 40px;">
+					<u-col span=4>车辆</u-col>
+					<u-col span=8>
+						<u-button type="primary" text="添加" @click="addCar" icon="plus"
+							style="width: 60px;height: 26px;" />
+					</u-col>
+				</u-row>
+			</view>
+			<view class="item" v-for="(car,index) in car.list" :key="index">
+				<view class="l">车牌:</view>
+				<view class="r">
+					<u-input placeholder="车辆" v-model="car.carNo" readonly>
+						<view slot="suffix" style="display: flex;">
+							<u-icon @click="editCar(car)" size="20" name="edit-pen-fill" color="blue"></u-icon>
+							<u-icon style="margin-left:15rpx;" size="20" @click="delCar(car)" name="close-circle-fill"
+								color="red"></u-icon>
+						</view>
+					</u-input>
+				</view>
+			</view>
+			<view class="item-line" style="margin-top: 30rpx;">
+				业务项
+			</view>
+			<view class="business-list" v-for="(item,index) in typeList">
+				<u-row>
+					<u-col span="4.5">
+						<text>
+							<text style="color: red;display: inline;" v-if="item.need==1">*</text> {{item.name}}:
+						</text>
+					</u-col>
+					<u-col span="7.5">
+						<u-row>
+							<u-col span="10" @click="showSelect(item)">
+								{{item.itemName?item.itemName:'请选择'}}
+							</u-col>
+							<u-col span="2" @click="item.itemName='',item.itemId=''" v-if="item.itemId">
+								<u-icon style="margin-left:15rpx;display: inline;" size="20" name="close-circle-fill"
+									color="red"></u-icon>
+							</u-col>
+						</u-row>
+					</u-col>
+				</u-row>
+				<view style="display: flex;position: relative;left: 50%;">
+					<u-number-box style="margin-left: 15rpx;" v-if="item.itemName" :disabled="item.inc==0"
+						v-model="item.num"></u-number-box>
+					<text style="margin-left: 20rpx;color: red;" v-if="item.itemName">
+						¥{{item.num*item.price}}
+					</text>
+				</view>
+				<u-line></u-line>
+			</view>
+			<view class="hj" v-show="totalPrice>0">
+				合计:{{totalPrice}}元
 			</view>
-			<u-checkbox-group v-model="checkList" placement="column">
-				<uni-list v-for="item in itemType.items">
-					<uni-list-item style="display: inline;" :title="item.itemName" :note="item.price+''+item.unit">
-						<template v-slot:header>
-							<u-checkbox :name="item.id" :disabled="item.need==1" style="display: inline;">
-							</u-checkbox>
-						</template>
-
-						<template v-slot:footer>
-							<div style="position: absolute;right: 230rpx;top: 65rpx;">
-								<u-number-box :disabled="item.inc==0" v-model="item.num">
-									<view slot="minus" class="minus">
-										<u-icon name="minus" size="12"></u-icon>
-									</view>
-									<text v-if="item.inc==0" slot="input"
-										style="width: 50px;text-align: center;color: #E5E5E5;"
-										class="input">{{item.num}}</text>
-									<text v-else slot="input" style="width: 50px;text-align: center;"
-										class="input">{{item.num}}</text>
-									<view slot="plus" class="plus">
-										<u-icon name="plus" size="12"></u-icon>
-									</view>
-								</u-number-box>
-							</div>
-							<u-button v-show="item.needRemark" @click="openRemarkFn(item)" style="width: 50px;"
-								type="primary" size="mini" text="备注"></u-button>
-						</template>
-					</uni-list-item>
-				</uni-list>
-			</u-checkbox-group>
-		</view>
-		<view v-if="!form.adminConfirmInput">
-			<u-button type="primary" text="保存" @click="saveFn"></u-button>
 		</view>
+		<u-button type="primary" text="确定" @click="saveFn" v-show="perList.indexOf('tb-business-add')!==-1"></u-button>
 		<!-- ---------------------------------------------------------- -->
 		<view class="bottom-safety"></view>
-		<uni-popup ref="popup" type="bottom" background-color="#fff">
-			<view style="height: 300rpx;overflow-y: auto;">
-
-			</view>
-		</uni-popup>
+		<u-picker :show="show"  :columns="columns" @confirm="confirmFn" keyName="itemName" @cancel="show=false">
+		</u-picker>
 	</view>
 </template>
 
@@ -118,179 +110,343 @@
 	export default {
 		data() {
 			return {
-				showRemark: false,
-				type: {
-					index: 0,
-					list: []
-				},
+				show: false,
+				columns: [],
+				customerId: '1',
 				customer: {
 					index: 0,
-					list: []
+					customerList: [],
 				},
-				customerId: '1',
+				goods: {
+					id: '',
+					name: ''
+				},
+				typeList: [],
+				allTypeList:[],
 				form: {
 					customerId: '',
+					declareNo: '',
 					carNo: '',
+					owner: '',
 					carSize: '',
-					carWeight: '',
-					operator: '',
-					operateTime: '',
+					goodsName: '',
+					netWeight: '',
 				},
-				list: [],
-				checkList: [],
-				itemType: {
-					id: '',
-					name: '',
+				show: false,
+				item: {
 					items: []
 				},
-				showSelect:false,
-				carList: []
+				car: {
+					list: [{
+						id: '',
+						carNo: '',
+						index: 0
+					}]
+				},
+				perList: []
 			}
 		},
+		onShow() {
+			this.perList = uni.getStorageSync('perList')
+		},
 		computed: {
 			totalPrice() {
-				let items = this.itemType.items;
-				let checkList = this.checkList;
-				items = items.filter(obj => checkList.indexOf(obj.id) !== -1);
+				let typeList = this.typeList.filter(obj => obj.itemName);
 				let price = 0;
-				for (let i in items) {
-					let item = items[i];
-					price = price + item.price * item.num;
+				for (let i in typeList) {
+					let type = typeList[i];
+					price = price + type.price * type.num;
 				}
 				return price;
-			}
+			},
 		},
 		onLoad(options) {
-			let customerId = uni.getStorageSync('customerId');
-			this.customerId = customerId;
-			let typeId = options.typeId;
-			this.itemType.id = typeId;
-
-			this.getItemTypeEnum();
-			if (!customerId || customerId == '1') {
-				this.getCustomerList();
-			}
+			this.customerId = uni.getStorageSync('customerId');
+			this.goods = JSON.parse(options.goodsJson);
+			this.getCustomerList();
+			this.getTypeByGoodsId();
 			let that = this;
-			uni.$on('getRemark', data => {
-				that.$nextTick(function() {
-					let items = that.itemType.items;
-					items.filter(obj => obj.id == data.itemId)[0].remark = data.remark;
+			uni.$on('getSelectDeclare', declare => {
+				that.$nextTick(() => {
+					that.handlerSelectDeclare(declare)
+				})
+			})
+			uni.$on('getCar', car => {
+				that.$nextTick(() => {
+					that.handlerCar(car)
 				})
 			})
 		},
-
 		methods: {
-			carInputFn() {
-				this.$api.searchCar({carNo:this.form.carNo}).then(resp=>{
-					this.carList=resp.data;
-					if(this.carList.length>0){
-						this.showSelect=true;
+			filterItems() {
+				let carList = this.car.list;
+				let filterTypeList = JSON.parse(JSON.stringify(this.allTypeList));
+				if (carList.length == 0) {
+					this.typeList = filterTypeList;
+					return;
+				}
+				let car = carList[0];
+				let checkCarList = carList.filter(car => car.carType.indexOf('空') == -1);
+				if (checkCarList.length > 0) {
+					car = checkCarList[0];
+				}
+				let carSize = car.carSize;
+				let carType = car.carType;
+				let netWeight = car.netWeight;
+				let tempList = [];
+				for (let i in filterTypeList) {
+					let type = filterTypeList[i];
+					let items = type.items;
+					if (carType) {
+						items = items.filter(item => item.itemType && item.itemType.indexOf(carType) !== -1);
+						console.log(items)
 					}
-				})
+					if (carSize && carSize > 1) {
+						items = items.filter(item => item.minLength <= carSize && item.carLength >= carSize);
+						console.log(items)
+					}
+					if (netWeight && netWeight > 1 && carType.indexOf('空') == -1) {
+						items = items.filter(item => item.minWeight <= netWeight && item.maxWeight >= netWeight);
+						console.log(items)
+					}
+					let itemIds = items.map(item => item.id);
+					if (itemIds.indexOf(type.itemId) == -1) {
+						this.cleanItem(type);
+					}
+					type.items = items;
+					tempList.push(type);
+				}
+				this.typeList = tempList;
 			},
-			showWin() {
-				this.$refs.popup.open('bottom')
+			cleanItem(type) {
+				type.itemId = '';
+				type.itemName = '';
+				type.price = '';
 			},
-			groupChange(carNo) {
-				let list=this.carList;
-				let data=list.filter(obj=>obj.carNo==carNo).pop();
-				this.form.carNo=carNo;
-				this.form.carSize=data.carSize;
-				this.list=[];
-				setTimeout(()=>{
-					this.showSelect=false;
-				},1200)
+			showSelect(item) {
+				this.columns = [];
+				this.columns.push(item.items);
+				this.show = true;
 			},
-			getItemTypeEnum() {
-				this.$api.getItemTypeEnum().then(resp => {
-					this.type.list = resp.data;
-					this.getItemType();
+			confirmFn(e) {
+				let selects = e.value;
+				if (selects.length > 0) {
+					let item = selects[0];
+					let typeId = item.typeId;
+					let typeList = this.typeList;
+					typeList.filter(obj => obj.id == typeId).forEach(obj => {
+						obj.itemId = item.id;
+						obj.itemName = item.itemName;
+						obj.inc = item.inc;
+						obj.price = item.price;
+					})
+				}
+				this.show = false;
+			},
+			getTypeByGoodsId() {
+				this.$api.getTypeByGoodsId({
+					goodsId: this.goods.id
+				}).then(resp => {
+					let list=resp.data;
+					this.allTypeList=JSON.parse(JSON.stringify(list));
+					this.typeList = list;
 				})
 			},
 			getCustomerList() {
-				let p = {
-					judgeStatus: 2,
+				this.$api.getCustomerList({
 					pageNo: 1,
-					pageSize: 30,
-					sortType: 20
-				}
-				this.$api.getCustomerList(p).then(resp => {
-					this.customer.list = resp.data;
+					pageSize: 100
+				}).then(resp => {
+					let list = resp.data;
+					let customerId = this.customerId;
+					if (customerId !== '1') {
+						this.customer.index = list.map(obj => obj.id).indexOf(customerId);
+					}
+					this.customer.customerList = list;
 				})
 			},
-			openRemarkFn(data) {
-				this.$common.to('/pages/onely-disinfect/add-remark?itemId=' + data.id + '&title=' + data.itemName +
-					'&remark=' + data.remark + '&mustRemark=' + data.mustRemark)
+			customerChange(e) {
+				var value = e.detail.value; //当前picker选中的值
+				this.customer.index = value;
 			},
-			closeFn() {
-				this.$refs.popup.close()
+			handlerCar(car) {
+				let list = this.car.list;
+				let check = list.filter(obj => obj.carNo == car.carNo).pop();
+				if (check) {
+					check.carSize = car.carSize;
+					check.netWeight = car.netWeight;
+					check.carType = car.carType;
+				} else {
+					this.car.list.push(car);
+				}
+				this.clearEmptyCar();
 			},
-			getItemType() {
-				this.$api.getItemType({
-					id: this.itemType.id
-				}).then(resp => {
-					let data = resp.data;
-					let items = data.items
-						.filter(obj => obj.itemType && obj.itemType.indexOf(this.type.list[this.type.index]
-							.name) !== -1);
-					data.items = items;
-					this.itemType = data;
-					this.checkList = items.filter(obj => obj.need == 1).map(obj => obj.id)
-
-				})
+			clearEmptyCar() {
+				let list = this.car.list;
+				let obj = list.filter(obj => !obj.carNo).pop();
+				if (obj) {
+					this.car.list.splice(list.indexOf(obj), 1);
+				}
+				this.filterItems();
+			},
+			handlerSelectDeclare(declare) {
+				let oldDeclareNo=this.form.declareNo;
+				if(oldDeclareNo&&oldDeclareNo!==declare.declareNo){
+					this.car.list=[];
+				}
+				this.form.declareNo = declare.declareNo;
+				this.form.cardNo = declare.carNo;
+				this.form.chinaCarNo = declare.chinaCarNo;
+				this.form.netWeight = declare.grossWeight;
+				this.form.owner = declare.sendUnit;
+				let customerList = this.customer.customerList;
+				this.customer.index = customerList.map(customer => customer.id).indexOf(declare.customerId);
+				let carNo = declare.carNo;
+				let grossWeight = declare.grossWeight;
+				let carList = this.car.list;
+				let exit = carList.filter(obj => obj.carNo == carNo).pop();
+				if (!exit) {
+					let car = {
+						carNo: carNo,
+						netWeight: grossWeight,
+						carType: '载重'
+					}
+					this.car.list.push(car)
+				}
+				this.form.cardNo = declare.carNo;
+				this.form.chinaCarNo = declare.chinaCarNo;
+				this.form.netWeight = declare.grossWeight;
+				let chinaCarNo = declare.chinaCarNo;
+				if (chinaCarNo) {
+					let list = [];
+					chinaCarNo.replace(",", ",").split(",").forEach(carNo => {
+						let exit = carList.filter(obj => obj.carNo == carNo).pop();
+						if (!exit) {
+							let car = {
+								carNo: carNo,
+								carType: '空车'
+							}
+							this.car.list.push(car)
+						}
+					})
+				}
+				this.clearEmptyCar();
 			},
-			bindPickerChange(e) {
-				let index = e.detail.value;
-				this.type.index = index //当前picker选中的值
-				this.getItemType();
+
+			selectDeclare() {
+				this.$common.to('/pages/business-entering/declare-select?declareNo=' + this.form.declareNo)
 			},
-			customerChange(e) {
-				let index = e.detail.value;
-				this.customer.index = index //当前picker选中的值
+			editCar(car) {
+				let goods = this.goods;
+				this.$common.to('/pages/onely-disinfect/car-manager?carJson=' + JSON.stringify(car) + "&needCarSize=" +
+					goods.needCarSize + '&needWeight=' + goods.needWeight)
 			},
-			saveFn() {
-				if (!this.form.carNo) {
-					this.$common.toast('请输入车牌号')
+			
+			delCar(car) {
+				let list = this.car.list;
+				if (list.length == 1) {
+					this.$common.toast('至少有一辆车');
 					return;
 				}
-				if (!this.form.operateTime) {
-					this.$common.toast('请选择作业时间')
-					return;
+				this.car.list.splice(list.indexOf(car), 1);
+				this.filterItems();
+			},
+			check() {
+				let form = this.form;
+				let goods = this.goods;
+				let needDeclare = goods.needDeclare;
+				if (needDeclare == 1 && !form.declareNo) {
+					this.$common.toast('请选择申报单');
+					return false;
 				}
-				let itemList = this.itemType.items;
-				let checkList = this.checkList;
-				let list = itemList.filter(obj => checkList.indexOf(obj.id) !== -1);
-				if (this.customerId == '1' || !this.customerId) {
-					this.form.customerId = this.customer.list[this.customer.index].id;
-				} else {
-					this.form.customerId = this.customerId
+				if (!form.owner) {
+					this.$common.toast('请填写货主');
+					return false;
+				}
+				let needOperateTime = goods.needOperateTime;
+				let operateTime = form.operateTime;
+				if (!operateTime && needOperateTime == '1') {
+					this.$common.toast('请录入作业时间');
+					return false;
+				}
+				if (operateTime.length < 12) {
+					this.$common.toast('请录入准确的作业时间');
+					return false;
+				}
+				let carList = this.car.list;
+				if (carList.length == 0) {
+					this.$common.toast('请录入车辆');
+					return false;
+				}
+				let needCarSize = goods.needCarSize;
+				let needWeight = goods.needWeight;
+				for (let i in carList) {
+					let car = carList[i];
+					if (needCarSize == 1 && !car.carSize) {
+						this.$common.toast('请补充' + car.carNo + '的规格');
+						return false;
+					}
+					if (needWeight == 1 && car.carType.indexOf('重') !== -1 && !car.netWeight) {
+						this.$common.toast('请补充' + car.carNo + '载重');
+						return false;
+					}
 				}
-				this.form.itemTypeId = this.itemType.id;
-				this.form.items = list;
-				this.form.carType = this.type.list[this.type.index].name
-				let that = this;
-				let content = '确认录入该车辆的业务?'
-				uni.showModal({
-					title: '提示',
-					content: content,
-					success(res) {
-						if (res.confirm) {
-							that.addFn();
+				let typeList = this.typeList;
+				let selectList = [];
+				for (let i in typeList) {
+					let type = typeList[i];
+					if (type.need == 1 && !type.itemId) {
+						this.$common.toast('【' + type.name + '】必选');
+						return false;
+					}
+					if (type.itemId) {
+						let obj = {
+							typeId: type.id,
+							typeName: type.name,
+							id: type.itemId,
+							num: type.num,
+							price: type.price,
+							remark: type.remark
 						}
+						selectList.push(obj);
 					}
-				})
+				}
+				this.form.itemJson = JSON.stringify(selectList);
+				this.form.carJson = JSON.stringify(this.car.list);
+				this.form.items = null;
+				let customerList = this.customer.customerList;
+				let index = this.customer.index;
+				let customer = customerList[index];
+				this.form.customerId = customer.id;
+				this.form.customerName = customer.name;
+				this.form.goodsId = this.goods.id;
+				this.form.goodsName = this.goods.name;
+				let chinaCarNo = carList
+					.filter(car => this.$common.isCarNo(car.carNo.toUpperCase()))
+					.map(car => car.carNo.toUpperCase())
+					.join("、");
+				let yueCarNo = carList
+					.filter(car => !this.$common.isCarNo(car.carNo.toUpperCase()))
+					.map(car => car.carNo.toUpperCase())
+					.join("、");
+				this.form.cardNo = yueCarNo;
+				this.form.chinaCarNo = chinaCarNo;
+				return true;
 			},
-			addFn() {
-				this.$api.addCarDisinfect(this.$common.removeNull(this.form)).then(resp => {
-					if (resp.code == 200) {
-						this.$common.to('/pages/onely-disinfect/addSuccess?typeId=' + this.itemType.id)
-					} else {
-						this.$common.toast(resp.msg);
-					}
-				})
+			saveFn() {
+				if (this.check()) {
+					let obj = this.$common.removeNull(this.form);
+					this.$api.addOtherBusiness(obj).then(resp => {
+						if (resp.code == 200) {
+							this.$common.toast('录入成功');
+							setTimeout(() => {
+								this.$common.to('/pages/onely-disinfect/Index')
+							}, 1000)
+						}
+					})
+				}
 			},
-		},
-
+		}
 	}
 </script>
 
@@ -303,17 +459,6 @@
 		text-align: center;
 	}
 
-	.list {
-		position: absolute;
-		left: 34%;
-		z-index: 999;
-		background: #e5e5e5;
-		padding: 10rpx 200rpx 10rpx 40rpx;
-		border-radius: 10rpx;
-		height: 120rpx;
-		overflow-y: auto;
-	}
-
 	.item-line {
 		color: #a2a2a2;
 		padding: 5px 0 10px 29px;
@@ -327,6 +472,12 @@
 		font-weight: bold;
 	}
 
+	.business-list {
+		line-height: 75rpx;
+		margin: 4rpx 0 0 48rpx;
+
+	}
+
 	.save-btn {
 		background-color: #ff4200;
 		height: 88rpx;

+ 1 - 1
app/pages/wx/pay.vue

@@ -52,7 +52,7 @@
 								</u-checkbox>
 							</view>
 							<view class="c">{{item.name}}</view>
-							<view class="r">{{item.price}}</view>
+							<view class="r">¥{{item.price}}</view>
 						</label>
 					</view>
 				</u-checkbox-group>

+ 2 - 2
app/utils/request.js

@@ -1,5 +1,5 @@
-const server = 'http://127.0.0.1:8099/pro';
-// const server = 'https://pco.aseanbusiness.cn/pro';
+// const server = 'http://127.0.0.1:8099/pro';
+const server = 'https://pco.aseanbusiness.cn/pro';
 // const server = 'https://dxkaa1.bgigc.com/pro';
 
 import common from '../common/js/common.js';

+ 3 - 0
sp-admin/sa-frame/com/sa-info.vue

@@ -238,4 +238,7 @@
 </script>
 
 <style scoped>
+	.br{
+		margin: 0;
+	}
 </style>

+ 6 - 45
sp-admin/sa-frame/menu-list.js

@@ -275,48 +275,10 @@ var menuList = [{
 		name: '业务管理',
 		icon: 'el-icon-edit-outline',
 		parent: true,
-		childList: [{
-				id: 'tb-business-list',
-				name: '整车业务',
-				url: 'sa-view/tb-business/tb-business-list.html',
-				childList: [{
-
-						id: 'tb-business-add',
-						name: '添加业务',
-						isShow: false
-					},
-					{
-
-						id: 'tb-business-del',
-						name: '删除业务',
-						isShow: false
-					},
-					{
-						id: 'tb-business-edit',
-						name: '修改业务',
-						isShow: false,
-						childList: [{
-							id: 'tb-business-car-change',
-							name: '确认出入场',
-							isShow: false,
-						}]
-					},
-					{
-						id: 'tb-business-confirm',
-						name: '确认账单',
-						isShow: false,
-					},
-					{
-						id: 'tb-business-pay',
-						name: '支付账单',
-						isShow: false,
-					},
-
-				]
-			},
+		childList: [
 			{
 				id: 'tb-car-disincle-list',
-				name: '其他业务',
+				name: '业务管理',
 				url: 'sa-view/tb-business/tb-car-disincle-list.html',
 				childList: [{
 						id: 'tb-flex-business-add',
@@ -375,16 +337,15 @@ var menuList = [{
 						isShow: false
 					},
 					{
-						id: 'tb-goods-item-type',
-						name: '编辑收费项',
+						id: 'tb-goods-del',
+						name: '删除业务项',
 						isShow: false
 					},
 					{
-						id: 'tb-goods-del',
-						name: '删除业务项',
+						id: 'tb-goods-item-type',
+						name: '编辑收费项',
 						isShow: false
 					},
-
 				]
 			}, {
 				id: 'tb-item-type-list',

+ 1 - 1
sp-admin/sa-view/car/tb-business-car-list.html

@@ -153,7 +153,7 @@
 				},
 				methods: {
 					checkFn(data) {
-						sa.ajax('/TbBusiness/getById?id=' + data.businessId, function(resp) {
+						sa.ajax('/TbBusiness/getById?id=' + this.p.businessId, function(resp) {
 							let business = resp.data;
 							if (!business.outReport) {
 								//sa.error('未上传')

+ 2 - 2
sp-admin/sa-view/tb-business-car/tb-business-car-list.html

@@ -77,12 +77,12 @@
 				<el-table class="data-table" ref="data-table" :data="dataList">
 					<sa-td name="业务流水号" prop="no" width=140></sa-td>
 					<sa-td name="车牌号" prop="carNo" width=120></sa-td>
-					<el-table-column label="车辆规格">
+				<!-- 	<el-table-column label="车辆规格">
 						<template slot-scope="s">
 							<label v-if="!s.row.carSize">-</label>
 							<label v-else>{{s.row.carSize}}</label>
 						</template>
-					</el-table-column>
+					</el-table-column> -->
 					<el-table-column label="车牌颜色">
 						<template slot-scope="s">
 							<label v-if="!s.row.color">-</label>

+ 54 - 35
sp-admin/sa-view/tb-business/tb-car-disincle-add.html

@@ -74,11 +74,12 @@
 											</sa-item>
 										</el-col>
 										<el-col span=8>
-											<div class="c-item" v-if="goods.needDeclare==1">
+											<div class="c-item">
 												<label class="c-label">
-													<span style="color: red;" >*</span>
+													<span style="color: red;" v-if="goods.needDeclare==1">*</span>
 													申报单号:</label>
-												<el-input v-model="m.declareNo" placeholder="选择申报单" :readonly="goods.needDeclare==1" clearable>
+												<el-input v-model="m.declareNo" placeholder="选择申报单"
+													:readonly="goods.needDeclare==1" clearable>
 												</el-input>
 												<div style="cursor: pointer;color: blue;display: inline;"
 													@click="handlerDeclare">
@@ -93,15 +94,23 @@
 											</div>
 										</el-col>
 										<el-col span=8>
-											<div class="c-item" v-if="currentCustomerId=='1'">
+											<div class="c-item">
 												<label class="c-label"><span style="color: red;">*</span>客户:</label>
-												<el-select :disabled="goods.needDeclare||m.declareNo" v-model="m.customerId"
-													placeholder="请选择">
+												<el-select
+													:disabled="goods.needDeclare||m.declareNo||currentCustomerId!='1'"
+													v-model="m.customerId" placeholder="请选择">
 													<el-option v-for="item in customerList" :key="item.id"
 														:label="item.name" :value="item.id">
 													</el-option>
 												</el-select>
 											</div>
+											<div class="c-item">
+												<label class="c-label">
+													<span style="color: red;">*</span>
+													货主:</label>
+												<el-input v-model="m.owner" placeholder="填写货主" clearable>
+												</el-input>
+											</div>
 										</el-col>
 									</el-row>
 								</div>
@@ -242,6 +251,8 @@
 						</el-table-column>
 						<el-table-column prop="customerName" label="申报公司" width=200>
 						</el-table-column>
+						<el-table-column prop="sendUnit" label="货主"  width=200>
+						</el-table-column>
 						<el-table-column prop="createTime" width="140" label="申报时间">
 						</el-table-column>
 						<el-table-column prop="declareNo" width="180" label="申报单号">
@@ -309,7 +320,7 @@
 							dataCount: 0,
 							declarePeople: '',
 							production: '',
-							businessId: ''
+							declareNo: '1'
 						}
 					},
 					goods: {
@@ -355,8 +366,8 @@
 						this.declare.visible = true;
 						this.getDeclareList();
 					},
-					currentPageChange(page){
-						this.declare.p.pageNo=page;
+					currentPageChange(page) {
+						this.declare.p.pageNo = page;
 						this.getDeclareList();
 					},
 					getDeclareList() {
@@ -364,13 +375,17 @@
 						if (currentCustomerId != '1') {
 							this.declare.p.customerId = this.currentCustomerId;
 						}
+						let declareNo = this.m.declareNo;
+						if (declareNo) {
+							this.declare.p.declareNo = declareNo;
+						}
 						sa.ajax('/TbDeclare/getNotBindList', sa.removeNull(this.declare.p), function(resp) {
 							let list = resp.data;
 							this.declare.list = list;
 							this.declare.p.pageNo = resp.pageNo;
 							this.declare.p.dataCount = resp.dataCount;
 							list.forEach(row => {
-								if (row.declareNo == this.m.declareNo&&this.m.declareNo) {
+								if (row.declareNo == this.m.declareNo && this.m.declareNo) {
 									this.$nextTick(() => {
 										this.$refs['declareTable'].toggleRowSelection(row, true)
 									})
@@ -397,6 +412,7 @@
 							this.m.declareNo = declare.declareNo;
 							this.m.customerId = declare.customerId;
 							this.m.customerName = declare.customerName;
+							this.m.owner = declare.sendUnit;
 							let carNo = declare.carNo;
 							let grossWeight = declare.grossWeight;
 							let carList = this.car.list;
@@ -441,7 +457,7 @@
 						if (item) {
 							type.inc = item.inc;
 							type.price = item.price;
-							type.needRemark=item.needRemark
+							type.needRemark = item.needRemark
 						}
 					},
 					confirmAdd() {
@@ -458,8 +474,8 @@
 							sa.error('请填入车辆规格')
 							return false;
 						}
-						if(carType.indexOf('空')!==-1){
-							netWeight=0;
+						if (carType.indexOf('空') !== -1) {
+							netWeight = 0;
 						}
 						let list = this.car.list;
 						let index = list.map(obj => obj.carNo).indexOf(carNo);
@@ -487,8 +503,8 @@
 						}
 						let car = carList[0];
 						let checkCarList = carList.filter(car => car.carType.indexOf('空') == -1);
-						if(checkCarList.length>0){
-							car=checkCarList[0];
+						if (checkCarList.length > 0) {
+							car = checkCarList[0];
 						}
 						let carSize = car.carSize;
 						let carType = car.carType;
@@ -498,7 +514,7 @@
 							let type = filterTypeList[i];
 							let items = type.items;
 							if (carType) {
-								items = items.filter(item => item.itemType&& item.itemType.indexOf(carType) !== -1);
+								items = items.filter(item => item.itemType && item.itemType.indexOf(carType) !== -1);
 								console.log(items)
 							}
 							if (carSize && carSize > 1) {
@@ -588,7 +604,7 @@
 							judgeStatus: 2
 						}, function(res) {
 							let list = res.data;
-							if (list.length > 0) {
+							if (list.length == 1) {
 								let customer = list[0];
 								this.m.customerId = customer.id;
 								this.m.customerName = customer.name;
@@ -619,6 +635,10 @@
 							sa.error('请选择作业时间');
 							return false;
 						}
+						if (!m.owner) {
+							sa.error('请填写货主');
+							return false;
+						}
 						if (this.car.list.length == 0) {
 							sa.error('请录入车辆');
 							return false;
@@ -628,11 +648,11 @@
 						for (let i in typeList) {
 							let type = typeList[i];
 							if (type.need == 1 && !type.itemId) {
-								sa.error('【'+type.name + '】必选');
+								sa.error('【' + type.name + '】必选');
 								return false;
 							}
 							if (type.needRemark == 1 && !type.remark) {
-								sa.error('请输入【'+type.name + '】的备注');
+								sa.error('请输入【' + type.name + '】的备注');
 								return false;
 							}
 							if (type.itemId) {
@@ -641,8 +661,8 @@
 									typeName: type.name,
 									id: type.itemId,
 									num: type.num,
-									price:type.price,
-									remark:type.remark
+									price: type.price,
+									remark: type.remark
 								}
 								selectList.push(obj);
 							}
@@ -650,16 +670,16 @@
 						let carList = this.car.list;
 						m.itemJson = JSON.stringify(selectList);
 						m.carJson = JSON.stringify(carList);
-						let chinaCarNo=carList
-						.filter(car=>sa.isCarNo(car.carNo.toUpperCase()))
-						.map(car=>car.carNo.toUpperCase())
-						.join("、");
-						let yueCarNo=carList
-						.filter(car=>!sa.isCarNo(car.carNo.toUpperCase()))
-						.map(car=>car.carNo.toUpperCase())
-						.join("、");
-						m.cardNo=yueCarNo;
-						m.chinaCarNo=chinaCarNo;
+						let chinaCarNo = carList
+							.filter(car => sa.isCarNo(car.carNo.toUpperCase()))
+							.map(car => car.carNo.toUpperCase())
+							.join("、");
+						let yueCarNo = carList
+							.filter(car => !sa.isCarNo(car.carNo.toUpperCase()))
+							.map(car => car.carNo.toUpperCase())
+							.join("、");
+						m.cardNo = yueCarNo;
+						m.chinaCarNo = chinaCarNo;
 						sa.ajax('/TbBusiness/addOtherBusiness', sa.removeNull(m), function(res) {
 							sa.alert('增加成功', this.clean);
 						}.bind(this));
@@ -672,12 +692,10 @@
 					getCurrentCustomer() {
 						sa.ajax('/TbCostomer/getCurrentCustomerId', function(resp) {
 							let id = resp.data;
-							if (id == 1) {
-								this.getCustomerList();
-							} else {
+							this.currentCustomerId = id;
+							if (id != 1) {
 								this.m.customerId = id;
 							}
-							this.currentCustomerId = id;
 						}.bind(this));
 					},
 				},
@@ -685,6 +703,7 @@
 					this.getCurrentCustomer();
 					this.getGoods();
 					this.getItemType();
+					this.getCustomerList();
 				}
 			})
 		</script>

+ 32 - 15
sp-admin/sa-view/tb-business/tb-car-disincle-edit.html

@@ -91,15 +91,23 @@
 											</div>
 										</el-col>
 										<el-col span=8>
-											<div class="c-item" v-if="currentCustomerId=='1'">
+											<div class="c-item">
 												<label class="c-label"><span style="color: red;">*</span>客户:</label>
-												<el-select :disabled="goods.needDeclare||m.declareNo"
+												<el-select
+													:disabled="goods.needDeclare||m.declareNo||currentCustomerId!=1"
 													v-model="m.customerId" placeholder="请选择">
 													<el-option v-for="item in customerList" :key="item.id"
 														:label="item.name" :value="item.id">
 													</el-option>
 												</el-select>
 											</div>
+											<div class="c-item">
+												<label class="c-label">
+													<span style="color: red;">*</span>
+													货主:</label>
+												<el-input v-model="m.owner" placeholder="填写货主" clearable>
+												</el-input>
+											</div>
 										</el-col>
 									</el-row>
 								</div>
@@ -207,7 +215,7 @@
 							<el-input-number class="item-num" v-model="car.form.carSize" :min="1" :max="50">
 							</el-input-number>
 						</div>
-						<div class="c-item" v-if="car.form.carType.indexOf('空')==-1">
+						<div class="c-item" v-if="car.form.carType&&car.form.carType.indexOf('空')==-1">
 							<label class="c-label">
 								<span style="color: red;" v-if="goods.needCarSize==1">*</span>
 								载重(kg):</label>
@@ -240,6 +248,8 @@
 						</el-table-column>
 						<el-table-column prop="customerName" label="申报公司" width=200>
 						</el-table-column>
+						<el-table-column prop="sendUnit" label="货主" width=200>
+						</el-table-column>
 						<el-table-column prop="createTime" width="140" label="申报时间">
 						</el-table-column>
 						<el-table-column prop="declareNo" width="180" label="申报单号">
@@ -307,7 +317,7 @@
 							dataCount: 0,
 							declarePeople: '',
 							production: '',
-							businessId: ''
+							declareNo: '1'
 						}
 					},
 					goods: {
@@ -357,7 +367,10 @@
 						if (currentCustomerId != '1') {
 							this.declare.p.customerId = this.currentCustomerId;
 						}
-						this.declare.p.declareNo = this.m.declareNo;
+						let declareNo = this.m.declareNo;
+						if (declareNo) {
+							this.declare.p.declareNo = declareNo;
+						}
 						sa.ajax('/TbDeclare/getNotBindList', sa.removeNull(this.declare.p), function(resp) {
 							let list = resp.data;
 							this.declare.list = list;
@@ -391,6 +404,7 @@
 							this.m.declareNo = declare.declareNo;
 							this.m.customerId = declare.customerId;
 							this.m.customerName = declare.customerName;
+							this.m.owner = declare.sendUnit;
 							let carNo = declare.carNo;
 							let grossWeight = declare.grossWeight;
 							let carList = this.car.list;
@@ -473,15 +487,19 @@
 					},
 					filterItems() {
 						let carList = this.car.list;
+						let length = carList.filter(obj => !obj.carType).length;
+						if (carList.length == length) {
+							return;
+						}
 						let filterTypeList = JSON.parse(JSON.stringify(this.filterTypeList));
 						if (carList.length == 0) {
 							this.itemTypeList = filterTypeList;
 							return;
 						}
 						let car = carList[0];
-						let checkCarList = carList.filter(car => car.carType.indexOf('空') == -1);
-						if(checkCarList.length>0){
-							car=checkCarList[0];
+						let checkCarList = carList.filter(car => car.carType && car.carType.indexOf('空') == -1);
+						if (checkCarList.length > 0) {
+							car = checkCarList[0];
 						}
 						let carSize = car.carSize;
 						let carType = car.carType;
@@ -496,7 +514,7 @@
 							if (carSize && carSize > 1) {
 								items = items.filter(item => item.minLength <= carSize && item.carLength >= carSize);
 							}
-							if (netWeight && netWeight > 1 && carType.indexOf('空') == -1) {
+							if (netWeight && netWeight > 1 && carType && carType.indexOf('空') == -1) {
 								items = items.filter(item => item.minWeight <= netWeight && item.maxWeight >= netWeight);
 							}
 							let itemIds = items.map(item => item.id);
@@ -560,7 +578,6 @@
 									}
 								}
 							}
-
 							this.itemTypeList = list;
 							this.filterTypeList = JSON.parse(JSON.stringify(this.itemTypeList));
 							this.filterItems();
@@ -612,6 +629,10 @@
 							sa.error('请选择作业时间');
 							return false;
 						}
+						if (!m.owner) {
+							sa.error('请填写货主');
+							return false;
+						}
 						if (this.car.list.length == 0) {
 							sa.error('请录入车辆');
 							return false;
@@ -663,11 +684,6 @@
 					getCurrentCustomer() {
 						sa.ajax('/TbCostomer/getCurrentCustomerId', function(resp) {
 							let id = resp.data;
-							if (id == 1) {
-								this.getCustomerList();
-							} else {
-								this.m.customerId = id;
-							}
 							this.currentCustomerId = id;
 						}.bind(this));
 					},
@@ -684,6 +700,7 @@
 				mounted: function() {
 					this.getCurrentCustomer();
 					this.getOtherBusinessById();
+					this.getCustomerList();
 					this.getItemType();
 				}
 			})

+ 2 - 2
sp-admin/sa-view/tb-business/tb-car-disincle-info.html

@@ -44,11 +44,11 @@
 												<sa-info name="业务费用" br>{{m.itemPrice}}(元)</sa-info>
 											</el-col>
 											<el-col span="12">
+												<sa-info name="货主" br>{{m.owner}}</sa-info>
 												<sa-info name="业务编号" br>{{m.no}}</sa-info>
 												<sa-info name="录入时间" br>{{m.createTime}}</sa-info>
-												<sa-info type="enum" name="支付状态" :value="m.payStatus"
+												<sa-info type="enum" style="margin-top: 0px;" name="支付状态" :value="m.payStatus"
 													:jv="{1: '未支付', 2: '已支付未确认', 3: '已支付已确认'}" br></sa-info>
-												<sa-info name="支付时间" br>{{m.payTime}}</sa-info>
 											</el-col>
 										</el-row>
 									</div>

+ 41 - 16
sp-admin/sa-view/tb-business/tb-car-disincle-list.html

@@ -26,10 +26,22 @@
 	<body>
 		<div class="vue-box" style="display: none;" :style="'display: block;'">
 			<div class="c-panel">
+				<div style="float: right;right: 20px;margin-top: 10px;">
+					<label>刷新频率:</label>
+					<el-select v-model="fresh.value" placeholder="请选择" @change="restartTimmer">
+						<el-option label="10s" :value="10"></el-option>
+						<el-option label="20s" :value="20"></el-option>
+						<el-option label="30s" :value="30"></el-option>
+						<el-option label="50s" :value="50"></el-option>
+						<el-option label="60s" :value="60"></el-option>
+					</el-select>
+				</div>
 				<!-- ------------- 检索参数 ------------- -->
 				<div class="c-title">检索参数</div>
 				<el-form ref="form" :model='p' @submit.native.prevent>
 					<sa-item type="text" name="车牌号" placeholder="车牌号" v-model="p.carNo"></sa-item>
+					<sa-item type="text" name="客户" placeholder="客户" v-model="p.customerName"></sa-item>
+					<sa-item type="text" name="货主" placeholder="客户" v-model="p.owner"></sa-item>
 					<div class="c-item">
 						<label class="c-label">确认状态:</label>
 						<el-select v-model="p.adminConfirmInput" placeholder="请选择" @change="f5()">
@@ -39,23 +51,22 @@
 						</el-select>
 					</div>
 					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
-					<el-button type="info" icon="el-icon-search" @click="p.carNo = '';p.adminConfirmInput=-1; f5()">重置
+					<el-button type="info" icon="el-icon-search" @click="p.carNo = '';p.adminConfirmInput=-1;p.customerName='';p.owner=''; f5()">重置
 					</el-button>
 					<el-button v-if="sa.isAuth('tb-flex-business-add')" size="mini" type="primary" @click="add()">
 						新增</el-button>
 					<br />
 				</el-form>
 				<!-- ------------- 数据列表 ------------- -->
-				<el-table class="data-table" ref="data-table" :data="dataList">
+				<el-table class="data-table" ref="data-table" :data="dataList" style="margin-top: 20px;">
 					<el-table-column type="index" width="50"></el-table-column>
 					<sa-td name="业务单号" prop="no" width="160"></sa-td>
 					<sa-td name="客户名称" prop="customerName" width="190"></sa-td>
+					<sa-td name="货主" prop="owner" width="160"></sa-td>
 					<sa-td name="业务项" prop="goodsName" width="160"></sa-td>
 					<el-table-column label="车牌号" width="160">
 						<template slot-scope="s">
-							<label v-if="s.row.cardNo&&!s.row.chinaCarNo">{{s.row.cardNo}}</label>
-							<label v-if="s.row.cardNo&&s.row.chinaCarNo">{{s.row.cardNo}}、{{s.row.chinaCarNo}}</label>
-							<label v-if="!s.row.cardNo&&s.row.chinaCarNo">{{s.row.chinaCarNo}}</label>
+							<label>{{s.row.carNoStr}}</label>
 						</template>
 					</el-table-column>
 					<sa-td name="作业时间" prop="operateTime" width="160"></sa-td>
@@ -64,7 +75,7 @@
 					<sa-td name="业务费用(元)" prop="itemPrice" width="120"></sa-td>
 					<sa-td width="160" name="创建时间" prop="createTime"></sa-td>
 					</sa-td>
-					<el-table-column label="操作" width="360px" fixed="right">
+					<el-table-column label="操作" width="420px" fixed="right">
 						<template slot-scope="s">
 							<el-button class="c-btn" type="primary" v-if="sa.isAuth('tb-flex-business-confirm')
 								&&currentCustomerId=='1'&&s.row.adminConfirmInput==0" @click="confirmFn(s.row)">账单确认</el-button>
@@ -75,9 +86,9 @@
 								v-if="currentCustomerId=='1'||(s.row.adminConfirmInput==0&&sa.isAuth('tb-flex-business-edit'))"
 								@click="update(s.row)">
 								修改</el-button>
-								<el-button v-if="sa.isAuth('tb-flex-business-edit')" class="c-btn" type="primary"
-									@click="carFn(s.row)">车辆管理
-								</el-button>
+							<el-button v-if="sa.isAuth('tb-flex-business-edit')" class="c-btn" type="primary"
+								@click="carFn(s.row)">车辆管理
+							</el-button>
 							<el-button class="c-btn" type="primary" v-if="(currentCustomerId=='1'||(sa.isAuth('tb-flex-business-pay')))
 								&&s.row.payStatus!=='3'" @click="handlerPay(s.row)">
 								线下收费</el-button>
@@ -136,13 +147,10 @@
 						}
 					},
 					p: { // 查询参数  
-						id: '', // 主键 
-						no: '', // 编号 
 						adminConfirmInput: -1,
+						customerName:'',
+						owner:'',
 						carNo: '', // 车牌号 
-						outDayTime: '', // 离境时间 
-						partMoney: '', // 停车费用 
-						partTime: '', // 停车时常(分) 
 						pageNo: 1, // 当前页 
 						pageSize: 20, // 页大小 
 						sortType: 0 // 排序方式 
@@ -155,15 +163,28 @@
 					}
 				},
 				methods: {
+					stopTimmer() {
+						if (this.timmer != null) {
+							clearInterval(this.timmer);
+						}
+					},
+					restartTimmer() {
+						this.stopTimmer();
+						let val = this.fresh.value;
+						this.timmer = setInterval(() => {
+							this.f5();
+						}, val * 1000)
+					},
 					businessFn(data) {
 						sa.ajaxNoLoading('/TbBusinessCar/getOtherBusinessCarByBusinessId', {
 							businessId: data.id
 						}, function(resp) {
 							let list = resp.data;
 							let str = list.map(car => car.carNo).join('、');
-							let businessCarIds=list.map(car => car.id).join(',');
+							let businessCarIds = list.map(car => car.id).join(',');
 							sa.showIframe('绑定车辆', 'tb-business-car-business.html?id=' + data.id +
-								'&businessCarId=' + data.businessCarId + '&carNo=' + str+'&businessCarIds='+businessCarIds, '90%', "90%");
+								'&businessCarId=' + data.businessCarId + '&carNo=' + str +
+								'&businessCarIds=' + businessCarIds, '90%', "90%");
 						}.bind(this))
 					},
 					carFn(data) {
@@ -244,6 +265,7 @@
 							this.dataList = res.data; // 数据
 							this.dataCount = res.dataCount; // 数据总数 
 							sa.f5TableHeight(); // 刷新表格高度 
+							this.restartTimmer();
 						}.bind(this));
 					},
 				},
@@ -254,6 +276,9 @@
 					this.getCurrendCustomer();
 					this.f5();
 				},
+				beforeDestroy() {
+					this.stopTimmer();
+				}
 			})
 		</script>
 	</body>

+ 2 - 4
sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html

@@ -94,9 +94,7 @@
 					<sa-td name="收费项目" prop="feeType" type="enum"
 						   :jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车费', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>
 					<sa-td name="业务类型" prop="itemTypeName" ></sa-td>
-					<sa-td name="货品种类" prop="" ></sa-td>
 					<sa-td name="车牌号" prop="carNo" width="90px" ></sa-td>
-					<sa-td name="车型" prop="itemName" ></sa-td><!--业务项-->
 					<sa-td name="重量(kg)" prop="weight" ></sa-td>
 					<sa-td name="数量" prop="num" ></sa-td>
 					<sa-td name="单价" prop="unitPrice" ></sa-td>
@@ -121,8 +119,8 @@
 							<span>{{Number(s.row.noTaxPrice).toFixed(2)}}</span>
 						</template>
 					</el-table-column>
-					<sa-td name="收款方式" prop="payType" type="enum" :jv="{3: '微信支付'}"></sa-td>
-					<sa-td name="收款种类" prop="payMode" type="enum" :jv="{1: '直接收款'}"></sa-td>
+				<!-- 	<sa-td name="收款方式" prop="payType" type="enum" :jv="{3: '微信支付'}"></sa-td>
+					<sa-td name="收款种类" prop="payMode" type="enum" :jv="{1: '直接收款'}"></sa-td> -->
 <!--					<sa-td name="系统流水号" prop="tradeNo" width="140px" ></sa-td>-->
 					<el-table-column label="系统流水号" width="140px">
 						<template slot-scope="s">

+ 2 - 2
sp-admin/sa-view/tb-item-type/tb-item-type-list.html

@@ -35,8 +35,8 @@
 					<sa-td name="排序" prop="sort"></sa-td>
 					<el-table-column label="操作" fixed="right" width="260px">
 						<template slot-scope="s">
-							<el-button class="c-btn" type="success"  @click="get(s.row)">二维码
-							</el-button>
+							<!-- <el-button class="c-btn" type="success"  @click="get(s.row)">二维码
+							</el-button> -->
 							<el-button v-if="sa.isAuth('tb-item-type-relation')" class="c-btn" type="success" @click="itemFn(s.row)">收费明细
 							</el-button>
 							<el-button v-if="sa.isAuth('tb-item-type-edit')" class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改

+ 0 - 2
sp-admin/sa-view/tb-item-type/tb-item.html

@@ -46,8 +46,6 @@
 
 					<sa-td name="明细数量" prop="inc" type="switch" :jv="{1: '多个[#005500]', 0: '单个[#ff0000]'}"
 						@change="s => updateNum(s.row)" width="100"></sa-td>
-					<sa-td name="是否必须" prop="need" type="switch" :jv="{1: '是[#005500]', 0: '否[#ff0000]'}"
-						@change="s => updateStatus(s.row)"></sa-td>
 					<sa-td name="备注" prop="needRemark" type="switch" :jv="{1: '必填[#005500]', 0: '选填[#ff0000]'}"
 						@change="s => updateRemarkNeed(s.row)" width="100"></sa-td>
 					<!-- <sa-td name="状态" prop="mustRemark" type="switch" :jv="{1: '必填[#005500]', 0: '选填[#ff0000]'}"

+ 1 - 1
sp-admin/static/sa.js

@@ -22,7 +22,7 @@ var sa = {
 		api_url: 'https://dxkaa1.bgigc.com/pro',
 		web_url: 'http://www.baidu.com'
 	}
-	sa.cfg = cfg_dev; // 最终环境 , 上线前请选择正确的环境
+	sa.cfg = cfg_test; // 最终环境 , 上线前请选择正确的环境
 })();
 
 

+ 16 - 16
sp-server/src/main/java/com/pj/api/jh/service/JhService.java

@@ -103,18 +103,18 @@ public class JhService {
         String sign = MerchantApiUtil.getSign(params, paySecrit);
         params.put("sign", sign);
         String jsonParam = JSONUtil.toJsonStr(params);
-//        String initPayUrl = jhConfig.getServerUrl() + "/uaps-web-gateway/cnpPay/initPay";
-//        String result = jhHttpUtils.postJson(initPayUrl, jsonParam);
-//        StaticLog.info("调用聚合支付返回:{}", result);
-//        JSONObject jsonResult = JSONUtil.parseObj(result);
-//        if (StrUtil.equals("0000", jsonResult.getStr("resultCode"))) {
-//            JSONObject payMessage = JSONUtil.parseObj(jsonResult.getStr("payMessage"));
-//            String p = payMessage.getStr("package");
-//            Map<String, String> r = wxService.getPayP(payMessage.getStr("timeStamp"), payMessage.getStr("nonceStr"), openid, p);
-//            StaticLog.info("re:{}", JSONUtil.toJsonStr(r));
-//            JSONObject object = JSONUtil.parseObj(payMessage);
-//
-//            object.set("outTradeNo", out_trade_no);
+        String initPayUrl = jhConfig.getServerUrl() + "/uaps-web-gateway/cnpPay/initPay";
+        String result = jhHttpUtils.postJson(initPayUrl, jsonParam);
+        StaticLog.info("调用聚合支付返回:{}", result);
+        JSONObject jsonResult = JSONUtil.parseObj(result);
+        if (StrUtil.equals("0000", jsonResult.getStr("resultCode"))) {
+            JSONObject payMessage = JSONUtil.parseObj(jsonResult.getStr("payMessage"));
+            String p = payMessage.getStr("package");
+            Map<String, String> r = wxService.getPayP(payMessage.getStr("timeStamp"), payMessage.getStr("nonceStr"), openid, p);
+            StaticLog.info("re:{}", JSONUtil.toJsonStr(r));
+            JSONObject object = JSONUtil.parseObj(payMessage);
+
+            object.set("outTradeNo", out_trade_no);
             TbOrder tbOrder = new TbOrder();
             tbOrder.setAttach(JSONUtil.toJsonStr(atchMap))
                     .setOpenid(openid)
@@ -122,10 +122,10 @@ public class JhService {
                     .setOutTradeNo(out_trade_no).setPrice(money);
             tbOrderService.save(tbOrder);
             taskService.addTask(new CheckPayStatusTask(RandomUtil.randomNumbers(12), 2000, out_trade_no));
-//            return BeanUtil.beanToMap(object);
-//        }
-//        throw new Exception("生成订单失败");
-        return new HashMap<>();
+            return BeanUtil.beanToMap(object);
+        }
+        throw new Exception("生成订单失败");
+      //  return new HashMap<>();
     }
 
     public Map<String, Object> buildCheckParams(String outTradeNo) {

+ 1 - 0
sp-server/src/main/java/com/pj/project/tb_business/OtherBusinessBO.java

@@ -25,6 +25,7 @@ public class OtherBusinessBO implements Serializable {
     private String goodsId;
     private String carJson;
     private String itemJson;
+    private String owner;
     private Double netWeight;
     private List<TbItem> items=new ArrayList<>();
     private List<TbBusinessCar> cars=new ArrayList<>();

+ 17 - 1
sp-server/src/main/java/com/pj/project/tb_business/TbBusiness.java

@@ -235,6 +235,8 @@ public class TbBusiness extends Model<TbBusiness> implements Serializable {
 
 
     private String itemTypeName;
+    private String owner;
+
 
 
     private Integer payStep=2;
@@ -246,7 +248,21 @@ public class TbBusiness extends Model<TbBusiness> implements Serializable {
     private List<TbBusinessItem> items = new ArrayList<>();
     @TableField(exist = false)
     private List<TbBusinessCar> cars = new ArrayList<>();
-
+    @TableField(exist = false)
+    private String carNoStr;
+
+    public String getCarNoStr() {
+        List<String>list=new ArrayList<>();
+        String carNo=getCardNo();
+        String chinaCarNo=getChinaCarNo();
+        if (StrUtil.isNotEmpty(carNo)){
+            list.add(carNo);
+        }
+        if (StrUtil.isNotEmpty(chinaCarNo)){
+            list.add(chinaCarNo);
+        }
+        return StrUtil.join("、",list);
+    }
 
     @Getter
     @AllArgsConstructor

+ 9 - 19
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessController.java

@@ -68,25 +68,6 @@ public class TbBusinessController {
         return tbBusinessService.addOrUpdate(t);
     }
 
-    /**
-     * 删
-     */
-    @RequestMapping("delete")
-    @SaCheckPermission(TbBusiness.PERMISSION_INPUT)
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxJson delete(String id) {
-        TbBusiness db = tbBusinessService.getById(id);
-        if (db != null) {
-            tbBusinessService.storeMsg(db.getCustomerId(), "业务订单【" + db.getNo() + "】已删除。" + DateUtil.now() + "。");
-        }
-        tbBusinessService.removeById(id);
-        tbBusinessItemService.removeByBusinessId(id);
-
-        tbBusinessCarService.removeByBusinessId(id);
-        tbDeclareService.removeBusinessId(id);
-
-        return AjaxJson.getSuccess();
-    }
 
     /**
      * 改
@@ -161,6 +142,15 @@ public class TbBusinessController {
         t.setCars(cars);
         return AjaxJson.getSuccessData(t);
     }
+    /**
+     * 查 - 根据id
+     */
+    @RequestMapping("checkReport")
+    public AjaxJson checkReport(String businessCarId) {
+        List<TbBusiness>businessList= tbBusinessService.findOtherBusinessByCarId(businessCarId);
+        return AjaxJson.getSuccessData(businessList);
+    }
+
 
 
     /**

+ 1 - 0
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessMapper.xml

@@ -12,6 +12,7 @@
             <if test=' this.has("id") '>and id = #{id}</if>
             <if test=' this.has("customerId") '>and customer_id = #{customerId}</if>
             <if test=' this.has("customerName") '>and customer_name like concat('%', #{customerName} ,'%')</if>
+            <if test=' this.has("owner") '>and owner like concat('%', #{owner} ,'%')</if>
             <if test=' this.has("no") '>and no = #{no}</if>
             <if test=' this.has("cardNo") '>and card_no like concat('%', #{cardNo} ,'%')</if>
             <if test=' this.has("cardSize") '>and card_size = #{cardSize}</if>

+ 19 - 5
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java

@@ -508,11 +508,12 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
             cars.add(tbBusinessCarService.getById(businessCarId));
         }
         businessList = businessList.stream().filter(tbBusiness -> {
-            Integer payStep = tbBusiness.getPayStep();
+            TbGoods tbGoods=tbGoodsService.getById(tbBusiness.getGoodsId());
+            Integer payStep = tbGoods.getPayStep();
             //确认订单后方可缴费
             return TbGoods.PayStep.AFTER_CONFIRM.getCode().equals(payStep) && tbBusiness.getAdminConfirmInput() == 1
                     //或者下单后可缴费
-                    || TbGoods.PayStep.BEFORE_CONFIRM.getCode().equals(payStep);
+                    || TbGoods.PayStep.BEFORE_CONFIRM.getCode().equals(payStep)&& tbBusiness.getAdminConfirmInput() >=0;
         }).collect(Collectors.toList());
         businessList.forEach(tbBusiness -> {
             List<TbBusinessCar> businessCars = tbBusinessCarService.findOtherBusinessCar(tbBusiness.getId());
@@ -568,6 +569,9 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         List<Map<String, Object>> itemList = new ArrayList<>();
         for (TbBusinessItem item : items) {
             BigDecimal itemPrice = item.getItemPrice().multiply(new BigDecimal(item.getNum()));
+            if (item.getPayStatus()==1){
+                continue;
+            }
             itemsPrice = itemsPrice.add(itemPrice);
             Map<String, Object> itemMap = new HashMap<>();
             itemMap.put("id", item.getId());
@@ -731,7 +735,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                 .setNo(no).setGoodsName(tbGoods.getName()).setGoodsId(otherBusinessBO.getGoodsId())
                 .setPayStep(tbGoods.getPayStep()).setDeclareNo(declareNo).setCardNo(otherBusinessBO.getCardNo());
         tbBusiness.setCreateTime(now).setBusinessType(TbBusiness.BusinessType.CAR_DISINCLE.getCode())
-                .setItemPrice(price).setTotalMoney(price);
+                .setItemPrice(price).setTotalMoney(price).setOwner(otherBusinessBO.getOwner());
         tbBusiness.setChinaCarNo(otherBusinessBO.getChinaCarNo());
         this.save(tbBusiness);
         Integer chinaCarPay = tbGoods.getChinaCarPay();
@@ -778,6 +782,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         if (StrUtil.isNotEmpty(declareNo)) {
             TbDeclare declare = tbDeclareService.findByDeclareNo(declareNo);
             declare.setBusinessId(tbBusiness.getId());
+            tbDeclareService.updateById(declare);
         }
         itemList.forEach(tbBusinessItem -> tbBusinessItem.setBusinessId(tbBusiness.getId()));
         tbBusinessItemService.saveBatch(itemList);
@@ -797,7 +802,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         }
         List<TbItem> tbItems = otherBusinessBO.getItems();
         if (tbItems.isEmpty()) {
-            throw new BusinessException("请选择明细");
+            throw new BusinessException("请选择收费明细");
         }
         List<TbBusinessCar> cars = otherBusinessBO.getCars();
         if (cars.isEmpty()) {
@@ -907,10 +912,13 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         String declareNo = otherBusinessBO.getDeclareNo();
         if (!StrUtil.equals(declareNo, dbBusiness.getDeclareNo())) {
             tbDeclareService.rebackDeclareNo(dbBusiness.getDeclareNo());
+           TbDeclare tbDeclare= tbDeclareService.findByDeclareNo(declareNo);
+           tbDeclare.setBusinessId(dbBusiness.getId());
+           tbDeclareService.updateById(tbDeclare);
         }
         dbBusiness.setCardSize(otherBusinessBO.getCarSize()).setNetWeight(otherBusinessBO.getNetWeight())
                 .setOperator(otherBusinessBO.getOperator()).setOperateTime(otherBusinessBO.getOperateTime())
-                .setNo(no).setGoodsId(otherBusinessBO.getGoodsId())
+                .setNo(no).setGoodsId(otherBusinessBO.getGoodsId()).setOwner(otherBusinessBO.getOwner())
                 .setDeclareNo(declareNo).setCardNo(otherBusinessBO.getCardNo());
         dbBusiness.setBusinessType(TbBusiness.BusinessType.CAR_DISINCLE.getCode())
                 .setItemPrice(price).setTotalMoney(price);
@@ -988,4 +996,10 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
     }
 
 
+    public TbBusiness findByDeclareNo(String declareNo) {
+        QueryWrapper<TbBusiness>ew=new QueryWrapper<>();
+        ew.eq("declare_no",declareNo).orderByDesc("id");
+        List<TbBusiness>list=this.list(ew);
+        return  list.isEmpty()?null:list.get(0);
+    }
 }

+ 5 - 0
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarController.java

@@ -8,6 +8,8 @@ import java.util.List;
 import cn.hutool.core.util.StrUtil;
 import com.pj.constants.UserTypeEnum;
 import com.pj.project.tb_business.TbBusiness;
+import com.pj.project.tb_business.TbBusinessService;
+import com.pj.project.tb_business_item.TbBusinessItem;
 import com.pj.project.tb_costomer.TbCostomer;
 import com.pj.utils.so.SoMap;
 import org.aspectj.weaver.loadtime.Aj;
@@ -21,6 +23,8 @@ import com.pj.project4sp.SP;
 import com.pj.current.satoken.StpUserUtil;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 
+import javax.annotation.Resource;
+
 
 /**
  * Controller: tb_business_car --
@@ -37,6 +41,7 @@ public class TbBusinessCarController {
     @Autowired
     TbBusinessCarService tbBusinessCarService;
 
+
     /**
      * 查 - 根据id
      */

+ 0 - 1
sp-server/src/main/java/com/pj/project/tb_declare/TbDeclareController.java

@@ -84,7 +84,6 @@ public class TbDeclareController {
 	@RequestMapping("getNotBindList")
 	public AjaxJson getNotBindList() {
 		SoMap so = SoMap.getRequestSoMap();
-		//so.put("bind",1);
 		List<TbDeclare> list = tbDeclareService.getList(so.startPage());
 		return AjaxJson.getPageData(so.getDataCount(), list);
 	}

+ 1 - 1
sp-server/src/main/java/com/pj/project/tb_declare/TbDeclareMapper.xml

@@ -50,7 +50,7 @@
         update tb_declare set business_id=null  where business_id=#{businessId}
     </update>
     <update id="rebackDeclareNo">
-        update  tb_declare set declare_no=null  where  declare_no=#{declareNo}
+        update  tb_declare set business_id=null  where  declare_no=#{declareNo}
     </update>
 
 

+ 77 - 51
sp-server/src/main/java/com/pj/project/tb_declare/TbDeclareService.java

@@ -6,6 +6,8 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.pj.project.tb_business.TbBusiness;
+import com.pj.project.tb_business.TbBusinessService;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -13,62 +15,86 @@ import org.springframework.stereotype.Service;
 import com.pj.utils.sg.*;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+
 /**
- * Service: tb_declare -- 
- * @author lzm 
+ * Service: tb_declare --
+ *
+ * @author lzm
  */
 @Service
 @Transactional
 public class TbDeclareService extends ServiceImpl<TbDeclareMapper, TbDeclare> implements IService<TbDeclare> {
 
-	/** 底层 Mapper 对象 */
-	@Autowired
-	TbDeclareMapper tbDeclareMapper;
-
-	/** 增 */
-	int add(TbDeclare t){
-		return tbDeclareMapper.add(t);
-	}
-
-	/** 删 */
-	int delete(Long id){
-		return tbDeclareMapper.delete(id);
-	}
-
-	/** 改 */
-	int update(TbDeclare t){
-	    if(StrUtil.isEmpty(t.getBusinessId())){
-	        t.setBusinessId(null);
+    /**
+     * 底层 Mapper 对象
+     */
+    @Autowired
+    TbDeclareMapper tbDeclareMapper;
+
+    @Resource
+    private TbBusinessService tbBusinessService;
+
+    /**
+     * 增
+     */
+    int add(TbDeclare t) {
+        return tbDeclareMapper.add(t);
+    }
+
+    /**
+     * 删
+     */
+    int delete(Long id) {
+        return tbDeclareMapper.delete(id);
+    }
+
+    /**
+     * 改
+     */
+    int update(TbDeclare t) {
+        String declareNo = t.getDeclareNo();
+        TbDeclare db = this.getById(t.getId());
+        if (StrUtil.isEmpty(t.getBusinessId())) {
+            t.setBusinessId(null);
+            this.rebackDeclareNo(declareNo);
         }
-		return tbDeclareMapper.update(t);
-	}
-
-	/** 查 */
-	TbDeclare getById(Long id){
-		return tbDeclareMapper.getById(id);
-	}
-
-	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
-	public List<TbDeclare> getList(SoMap so) {
-		return tbDeclareMapper.getList(so);	
-	}
-
-
-
-
-	public TbDeclare findByDeclareNo(String declareNo) {
-		QueryWrapper<TbDeclare>ew=new QueryWrapper<>();
-		ew.eq("declare_no",declareNo);
-		return getOne(ew);
-	}
-
-
-
-	public void removeBusinessId(String businessId) {
-		tbDeclareMapper.removeBusinessId(businessId);
-	}
-
-	public void rebackDeclareNo(String declareNo) {
-		tbDeclareMapper.rebackDeclareNo(declareNo);
-	}
+        if (StrUtil.equals(db.getSendUnit(), t.getSendUnit())) {
+           TbBusiness tbBusiness= tbBusinessService.findByDeclareNo(db.getDeclareNo());
+           if (tbBusiness!=null){
+               tbBusiness.setOwner(t.getSendUnit());
+           }
+        }
+        return tbDeclareMapper.update(t);
+    }
+
+    /**
+     * 查
+     */
+    TbDeclare getById(Long id) {
+        return tbDeclareMapper.getById(id);
+    }
+
+    /**
+     * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+     */
+    public List<TbDeclare> getList(SoMap so) {
+        return tbDeclareMapper.getList(so);
+    }
+
+
+    public TbDeclare findByDeclareNo(String declareNo) {
+        QueryWrapper<TbDeclare> ew = new QueryWrapper<>();
+        ew.eq("declare_no", declareNo);
+        return getOne(ew);
+    }
+
+
+    public void removeBusinessId(String businessId) {
+        tbDeclareMapper.removeBusinessId(businessId);
+    }
+
+    public void rebackDeclareNo(String declareNo) {
+        tbDeclareMapper.rebackDeclareNo(declareNo);
+    }
 }

+ 1 - 1
sp-server/src/main/java/com/pj/project/tb_item_type/TbItemTypeService.java

@@ -127,7 +127,7 @@ public class TbItemTypeService extends ServiceImpl<TbItemTypeMapper, TbItemType>
                 list.stream()
                         .filter(relationTypeItem -> relationTypeItem.getItemId().equals(item.getId()) && relationTypeItem.getTypeId().equals(typeId))
                         .findFirst().ifPresent(relationTypeItem -> {
-                    item.setInc(relationTypeItem.getInc()).setNeedRemark(relationTypeItem.getNeedRemark());
+                    item.setInc(relationTypeItem.getInc()).setNeedRemark(relationTypeItem.getNeedRemark()).setTypeId(relationGoodsType.getTypeId());
                 });
             }
             tbItemType.setItems(items);

+ 1 - 1
sp-server/src/main/resources/application-dev.yml

@@ -6,7 +6,7 @@ spring:
     # 数据源配置
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
-        url: jdbc:mysql://127.0.0.1:3306/pco_system?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: 123456
         # 是否打开sql监控台  (生产环境请务必关闭此选项)