From 04839b0c8660e2ba4228a743edf8f784e2470d6c Mon Sep 17 00:00:00 2001
From: whycq <913841844@qq.com>
Date: 星期三, 19 二月 2025 09:21:12 +0800
Subject: [PATCH] #

---
 pages/phyz/bcp/bcpDbOrderV2.vue          |  485 ++++++++++++++++++++++++++++++++++++++++++++++++
 pages/phyz/orderOut/orderOutSelectV2.vue |   13 
 pages/home/orderManage.vue               |   39 +++
 manifest.json                            |    4 
 pages.json                               |    7 
 pages/home/menuHome.vue                  |    3 
 pages/phyz/checkLocDetl/locDetlList.vue  |    6 
 pages/phyz/checkLocDetl/locDetlList2.vue |    4 
 pages/phyz/order/pakinOrderSelectV2.vue  |   14 
 9 files changed, 544 insertions(+), 31 deletions(-)

diff --git a/manifest.json b/manifest.json
index 77d57e4..d094a03 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2,8 +2,8 @@
     "name" : "涓壃WMS",
     "appid" : "__UNI__DA5854D",
     "description" : "",
-    "versionName" : "20250217B",
-    "versionCode" : 141,
+    "versionName" : "20250218C",
+    "versionCode" : 143,
     "transformPx" : false,
     /* 5+App鐗规湁鐩稿叧 */
     "app-plus" : {
diff --git a/pages.json b/pages.json
index d16c419..f06f6fd 100644
--- a/pages.json
+++ b/pages.json
@@ -357,6 +357,13 @@
         		"navigationBarTitleText" : "鍗婃垚鍝佽皟鎷ㄥ崟",
         		"enablePullDownRefresh" : false
         	}
+        },{
+        	"path" : "pages/phyz/bcp/bcpDbOrderV2",
+        	"style" : 
+        	{
+        		"navigationBarTitleText" : "鍗婃垚鍝佽皟鎷ㄥ崟",
+        		"enablePullDownRefresh" : false
+        	}
         },
 		{
 			"path" : "pages/phyz/bcp/orderCar",
diff --git a/pages/home/menuHome.vue b/pages/home/menuHome.vue
index 4a94b2d..21cc225 100644
--- a/pages/home/menuHome.vue
+++ b/pages/home/menuHome.vue
@@ -99,7 +99,7 @@
 			this.token = uni.getStorageSync('token');
 			this.menu = uni.getStorageSync('menu');
 			// console.log(this.menu);
-			this.getAuth2()
+			this.getAuth()
 			// this.backGroundRepeat()
 		},
 		methods: {
@@ -164,7 +164,6 @@
 									url: `${res.data[i].code}`
 								})
 							}
-							console.log(that.elements);
 							that.elements.push({
 								title: '閫�鍑虹櫥褰�',
 								name: 'logOut',
diff --git a/pages/home/orderManage.vue b/pages/home/orderManage.vue
index 0f4f1e7..acb7dfe 100644
--- a/pages/home/orderManage.vue
+++ b/pages/home/orderManage.vue
@@ -89,6 +89,13 @@
 						url: `/phyz/bcp/bcpDbOrder`
 					},
 					{
+						title: '鍗婃垚鍝佽皟鎷ㄥ崟',
+						name: 'bcpDbOrder',
+						color: 'blue',
+						// cuIcon: 'pullup',
+						url: `/phyz/bcp/bcpDbOrderV2`
+					},
+					{
 						title: '鍗婃垚鍝佸嚭搴撳崟',
 						name: 'bcpOutOrder',
 						color: 'blue',
@@ -183,15 +190,29 @@
 				}
 				for (let i in secMenu) {
 					this.getIcon(secMenu[i].title)
-					this.elements.unshift({
-						title: secMenu[i].name,
-						name: secMenu[i].title,
-						color: this.colorList[i],
-						cuIcon: this.icon,
-						id: secMenu[i].id,
-						param: JSON.parse(secMenu[i].param),
-						url: `${secMenu[i].code}`
-					})
+					// 鍏煎2025 02 18 鑿滃崟param
+					if (secMenu[i].param) {
+						this.elements.unshift({
+							title: secMenu[i].name,
+							name: secMenu[i].title,
+							color: this.colorList[i],
+							cuIcon: this.icon,
+							id: secMenu[i].id,
+							param: JSON.parse(secMenu[i].param),
+							url: `${secMenu[i].code}`
+						})
+					} else {
+						this.elements.unshift({
+							title: secMenu[i].name,
+							name: secMenu[i].title,
+							color: this.colorList[i],
+							cuIcon: this.icon,
+							id: secMenu[i].id,
+							param: JSON.parse(secMenu[i].param),
+							url: `${secMenu[i].code}`
+						})
+					}
+					
 					
 				}
 				console.log(this.elements);
diff --git a/pages/phyz/bcp/bcpDbOrderV2.vue b/pages/phyz/bcp/bcpDbOrderV2.vue
new file mode 100644
index 0000000..bec0ba9
--- /dev/null
+++ b/pages/phyz/bcp/bcpDbOrderV2.vue
@@ -0,0 +1,485 @@
+<template>
+	<view class="container">
+		<view class="code">
+			<uni-search-bar :focus="searchValueFocus" v-model="searchValue" 
+				maxlength="500" ancel="cancel" @confirm="searchValueInput2()" @clear="clear" placeholder="杈撳叆 / 鎵弿 璁㈠崟鍙�">
+			</uni-search-bar>
+			<view class="code-title">
+				<view></view>
+				<view style="width: 100%;text-align: center;margin: 16rpx 0;">{{searchValue}} 鎬绘暟閲忥細- {{total}} -</view>
+				<view style="width: 100rpx;margin: 16rpx 0;" @click="filter()">绛涢��</view>
+			</view>
+		</view>
+		
+		<view class="list list-font-color" :class="orderDetl.color" v-for="(orderDetl,index) in dataList" :key="index">
+			<view class="list-left">
+				<view class="detl-threeCode">{{orderDetl.threeCode}}</view>
+				<view>涓诲崟鍙凤細{{orderDetl.orderNo}}</view>
+				<view>缂栧彿锛歿{orderDetl.matnr}}</view>
+				<view>鍚嶇О锛歿{orderDetl.maktx}}</view>
+				<view>绫诲瀷锛歿{orderDetl.brand}}</view>
+				<view>璋冩嫧鎬婚噺锛歿{orderDetl.anfme}}</view>
+				<view>搴撳瓨鏁伴噺锛歿{orderDetl.stock}}</view>
+				<view>宸茶皟鎷ㄦ暟閲忥細{{orderDetl.qty}}</view>
+			</view>
+			<view class="list-right" @click="goToLocDetl(orderDetl)">
+				<uni-icons type="right" size="25"  color="#fff"></uni-icons>
+			</view>
+		</view>
+		
+		
+		<!-- 鍨珮 -->
+		<view style="height: 340rpx;text-align: center;color: #b9b9b9;">
+			- 宸茬粡鍒板簳浜� -
+		</view>
+		<!-- 寮圭獥 -->
+		<view>
+			<uni-popup ref="addItem" type="dialog">
+				<view class="popup">
+					<!-- 鏍囬 -->
+					<view class="title">鍏ュ簱鏁伴噺</view>
+					<view class="popup-item">
+						<uni-number-box :value="count" :step='0.01' :max="9999999" color="#747474" @change="changeValue" />
+					</view>
+					<view class="btn">
+						<view class="btn-left" @click="addClose">鍙栨秷</view>
+						<view class="btn-right" @click="addConfirm()">娣诲姞</view>
+					</view>
+				</view>
+			</uni-popup>
+		</view>
+		<!-- 绛涢�夊脊绐� -->
+		<view>
+			<uni-popup ref="filter" type="dialog">
+				<view class="filter-popup">
+					<!-- 鏍囬 -->
+					<view class="title">绛涢��</view>
+					<view class="popup-item" style="background-color: #dfdfdf;">
+						<view class="item-cl">
+							<view>閿�鍞鍗曪細</view>
+							<input type="text" v-model="searchValue">
+						</view>
+					</view>
+					<view class="popup-item" style="background-color: #dfdfdf;">
+						<view class="item-cl">
+							<view>涓昏鍗曞彿锛�</view>
+							<input type="text" v-model="orderNo">
+						</view>
+					</view>
+					<view class="popup-item" style="background-color: #dfdfdf;">
+						<view class="item-cl">
+							<view>鍟嗗搧缂栧彿锛�</view>
+							<input type="text" v-model="matnr">
+						</view>
+					</view>
+					<view class="popup-item" style="background-color: #dfdfdf;">
+						<view class="item-cl">
+							<view>鍟嗗搧鍚嶇О锛�</view>
+							<input type="text" v-model="maktx">
+						</view>
+					</view>
+					<view class="popup-item" style="background-color: #dfdfdf;">
+						<view class="item-cl">
+							<view>鍟嗗搧绉嶇被锛�</view>
+							<input type="text" v-model="brand">
+						</view>
+					</view>
+					<view class="btn filter-btn">
+						<view class="btn-left" @click="filterClose">閲嶇疆</view>
+						<view class="btn-right" @click="filterConfirm()">纭</view>
+					</view>
+				</view>
+			</uni-popup>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data(){
+			return {
+				baseUrl: '',
+				token: '',
+				searchValueFocus: true,
+				searchValue: '',
+				orderNo: '',
+				matnr: '',
+				maktx: '',
+				brand: '',
+				total: '',
+				dataList: [],
+				orderCarList: [],
+				data: {
+					curr: 1,
+					limit: 100,
+					three_code: '',
+					matnr: '',
+					maktx: '',
+					order_no: '',
+					brand: '',
+					orderType: []
+				},
+				index: 0,
+				count: 0,
+				mask: false
+				
+			}
+		},
+		// 涓嬫媺鍒锋柊
+		onReachBottom() {
+			this.status = 'more';
+			this.getOrderDetlList(this.searchValue,10);
+		},
+		onLoad() {
+			eventChannel.on('param', function(data) {
+				var orderType = data.param.orderType
+				if (orderType != [] || orderType != null) {
+					uni.setStorageSync('dataOrderTypeBcpDb', orderType);
+					_this.data.orderType = orderType
+				} else {
+					orderType = uni.getStorageSync('dataOrderTypeBcpDb');
+					if (orderType != [] || orderType != null) {
+						_this.data.orderType = orderType
+					} else {
+						_this.data.orderType = []
+					}
+				}
+				_this.baseUrl = uni.getStorageSync('baseUrl');
+				_this.token = uni.getStorageSync('token');
+				_this.searchValue = uni.getStorageSync('threeCode');
+				_this.getOrderDetlList(_this.searchValue,10)
+				console.log("onLoad");
+			})
+		},
+		onShow() {
+			console.log(uni.getStorageSync('pakinOrderCar'));
+		},
+		onHide() {
+			uni.setStorageSync('pakinOrderCar', this.orderCarList);
+		},
+		methods: {
+			getOrderDetlList(threeCode,limit) {
+				uni.showLoading({})
+				let _this = this
+				_this.mask = true
+				_this.data.three_code = threeCode
+				_this.data.limit = limit
+				uni.request({
+					url: `${_this.baseUrl}/order/bcpDb/detls/pakin/page/auth/v2`,
+					header: {'token': uni.getStorageSync('token')},
+					data: _this.data,
+					method: 'GET',
+					success(res) {
+						uni.hideLoading()
+						res = res.data
+						if (res.code === 200) {
+							for (let k of res.data.records) {
+								if (k.anfme > k.qty && k.qty == 0) {
+									k['color'] = 'order-sts-start'
+								} else if (k.anfme > k.qty && k.qty != 0) {
+									k['color'] = 'order-sts-working'
+								} else {
+									k['color'] = 'order-sts-end'
+								}
+							}
+							let list = res.data.records
+							_this.dataList =  _this.dataList.concat(list);
+							_this.data.curr = _this.data.curr + 1
+							// _this.dataList = res.data.records
+							_this.total = res.data.total
+							_this.mask = false
+						} else if (res.code == 403) {
+							uni.showToast({ title: res.msg, icon: "error", position: 'top' })
+							setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
+						} else {
+							uni.showToast({ title: res.msg, icon: "error", position: 'top' })
+						}
+					}
+				})
+			},
+			searchValueInput2() {
+				this.dataList = []
+				this.data.curr = 1
+				uni.setStorageSync('bcpDbThreeCode', this.searchValue);
+				if (this.searchValue.length == 0) {
+					this.getOrderDetlList(this.searchValue,10)
+				} else {
+					this.getOrderDetlList(this.searchValue,10)
+				}
+				
+			},
+			clear() {
+				this.dataList = []
+				this.data.curr = 1
+				setTimeout(()=> {
+					this.getOrderDetlList(this.searchValue,10)
+				},300)
+			},
+			// 娣诲姞鍏ュ簱鍟嗗搧鑷� 寰呯粍鎵樺垪琛�
+			addItem(index) {
+				// 鍒ゆ柇娣诲姞鐨勫晢鍝佹槸鍚﹀拰宸茬粡娣诲姞鐨勯噸澶�
+				let dataList = this.dataList
+				for (let k of this.orderCarList) {
+					if (k.orderNo == dataList[index].orderNo 
+						&& k.threeCode == dataList[index].threeCode 
+						&& k.matnr == dataList[index].matnr) {
+							uni.showToast({ title: '璇峰嬁閲嶅娣诲姞鍟嗗搧锛�', icon: "none", position: 'top' })
+							return
+					}
+				}
+				this.index = index
+				this.$refs.addItem.open()
+			},
+			addClose() {
+				this.$refs.addItem.close()
+				this.count = 0
+			},
+			addConfirm() {
+				// if (this.count == 0) {
+				// 	uni.showToast({ title: '鍏ュ簱鏁伴噺涓嶅悎娉曪紒', icon: "none", position: 'top' })
+				// 	return
+				// }
+				this.dataList[this.index]['used'] = true
+				this.dataList[this.index]['pakinQty'] = this.count
+				this.orderCarList.push(this.dataList[this.index])
+				this.index = 0
+				this.count = 0
+				this.$refs.addItem.close()
+			},
+			// 鐐瑰嚮鍓嶅線 寰呯粍鎵樺垪琛�
+			orderCar() {
+				let _this = this
+				if (_this.orderCarList.length === 0) {
+					uni.showToast({ title: '璇锋坊鍔犲叆搴撳晢鍝侊紒', icon: "none", position: 'top' })
+					return
+				}
+				uni.navigateTo({
+					url: '../order/orderCar',
+					success(res) {
+						res.eventChannel.emit('item', {
+							item: _this.orderCarList
+						})
+					},
+					events: {
+						acceptDataFromOpenedPage: function(data) {
+							console.log(data);
+							if (data.data == 1) {
+								_this.orderCarList = []
+								_this.getOrderDetlList(uni.getStorageSync('bcpDbThreeCode'),10)
+							}
+						}
+					}
+				})
+			},
+			changeValue(value) {
+				this.count = value
+			},
+			// 绛涢��
+			filter() {
+				this.$refs.filter.open('bottom')
+			},
+			filterConfirm() {
+				this.dataList = []
+				this.data.curr = 1
+				this.data.maktx = this.maktx
+				this.data.matnr = this.matnr
+				this.data.order_no = this.order_no
+				this.data.brand = this.brand
+				this.getOrderDetlList(this.searchValue,10)
+				this.$refs.filter.close()
+			},
+			filterClose() {
+				this.dataList = []
+				this.data.curr = 1
+				this.data.maktx = ''
+				this.data.matnr = ''
+				this.data.order_no = ''
+				this.data.brand = ''
+				this.getOrderDetlList(this.searchValue,10)
+				this.$refs.filter.close()
+			},
+			goToLocDetl(item) {
+				let _this = this
+				uni.navigateTo({
+					url: './bcpDbList',
+					success(res) {
+						res.eventChannel.emit('item', {
+							item: item
+						})
+					},
+					events: {
+						acceptDataFromOpenedPage: function(data) {
+							_this.getOrderDetlList(this.searchValue1,10)
+						}
+					}
+				})
+			},
+			
+		}
+	}
+	
+</script>
+
+<style>
+	@import url('../../../static/css/common/order.css');
+	.list-font-color {
+		color: #fff;
+		/* background-color: #33bb44; */
+	}
+	.order-sts-start {
+		background-color: #3eb689;
+	}
+	.order-sts-working {
+		background-color: #ff9d46;
+	}
+	.order-sts-end {
+		background-color: #ff7356;
+	}
+	.detl-threeCode {
+		font-size: 28px;
+		font-weight: bold;
+	}
+	.shop-car {
+		position: fixed;
+		left: 22rpx;
+		bottom: 150rpx;
+		background-color: #2299ff;
+		width: 260rpx;
+		height: 90rpx;
+		display: flex;
+		align-items: center;
+		box-shadow: 0 0 10px 5px rgba(0, 0, 0, .6);
+		border-radius: 10rpx;
+		color: #fff;
+		font-size: 28px;
+		font-weight: bold;
+	}
+	.car-left {
+		padding: 16rpx;
+		flex: 5;
+	}
+	.car-right {
+		flex: 4;
+	}
+	
+	.mask {
+		position: absolute;
+		width: 100%;
+		height: 100vh;
+		z-index: 999;
+		top: 0;
+		left: 0;
+		background-color: rgba(0, 0, 0, .4);
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		font-size: 16px;
+		color: #fff;
+	}
+	
+	.popup {
+		width: 80vw;
+		min-height: 100rpx;
+		background-color: #FFF;
+		border-radius: 25rpx;
+		position: relative;
+	}
+	.title {
+		height: 100rpx;
+		line-height: 100rpx;
+		width: 100%;
+		color: #606266;
+		text-align: center;
+		font-size: 16px;
+	}
+	.popup-item {
+		height: 80rpx;
+		line-height: 80rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+	.popup-item-left {
+		width: 16vw;
+		padding-right: 20rpx;
+		text-align: right;
+		color: #606266;
+	}
+	.popup-item-right {
+		display: flex;
+		align-items: center;
+		width: 50vw;
+		height: 50rpx;
+		padding: 2px 5px;
+		border: 1px solid #E4E7ED;
+		border-radius: 5rpx;
+	}
+	.popup-item-right input{
+		color: #606266;
+	}
+	.btn {
+		display: flex;
+		height: 90rpx;
+		margin-top: 20rpx;
+		border-top: 1px solid #DCDFE6;
+		justify-content: center;
+		align-items: center;
+	}
+	.btn-left {
+		display: flex;
+		flex: 1;
+		height: 100%;
+		justify-content: center;
+		align-items: center;
+		color: #606266;
+		border-right: 1px solid #DCDFE6;
+	}
+	.btn-right {
+		display: flex;
+		flex: 1;
+		justify-content: center;
+		align-items: center;
+		color: #409EFF;
+	}
+	.filter-popup {
+		width: 100%;
+		height: 80vh;
+		background-color: #FFF;
+		position: relative;
+		border-radius: 30rpx 30rpx 0rpx 0rpx;
+	}
+	.filter-popup-item {
+		height: 100%;
+		width: 100%;
+		background-color: #c9cdd5;
+	}
+	.filter-popup-item-left {
+		width: 30%;
+		height: 100%;
+		background-color: #DCDFE6;
+		
+	}
+	.item-btn {
+		width: 100%;
+		height: 80rpx;
+		line-height: 80rpx;
+		background-color: #c9cdd5;
+		text-align: center;
+	}
+	.item-btn:checked {
+		background-color: #606266;
+	}
+	.filter-btn {
+		position: absolute;
+		left: 0;
+		bottom: 0;
+		width: 100%;
+		background-color: #FFF;
+	}
+	.item-cl {
+		display: flex;align-items: center;
+	}
+	.item-cl input {
+		border-bottom: 1px solid #b9b9b9;
+	}
+</style>
\ No newline at end of file
diff --git a/pages/phyz/checkLocDetl/locDetlList.vue b/pages/phyz/checkLocDetl/locDetlList.vue
index 61c4e70..5935ffc 100644
--- a/pages/phyz/checkLocDetl/locDetlList.vue
+++ b/pages/phyz/checkLocDetl/locDetlList.vue
@@ -92,7 +92,6 @@
 			// 	_this.dataList = data.item.data
 			// })
 			eventChannel.on('baseInfo', function(data) {
-				console.log(data);
 				_this.getLocDetl(data.info.locNo,data.info.barcode)
 				_this.locNo = data.info.locNo
 				_this.barcode = data.info.barcode
@@ -110,14 +109,15 @@
 					method: 'POST',
 					success(res) {
 						res = res.data
-						console.log(res);
 						if (res.code === 200) {
 							if (_this.type == 'con') {
 								_this.dataList = res.data.containerCode
 							} else {
 								_this.dataList = res.data.locNo
 							}
-							
+							// for (let k of _this.dataList) {
+							// 	k['count'] = k.anfme
+							// }
 						} else if (res.code == 403) {
 							uni.showToast({ title: res.msg, icon: "error", position: 'top' })
 							setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
diff --git a/pages/phyz/checkLocDetl/locDetlList2.vue b/pages/phyz/checkLocDetl/locDetlList2.vue
index 987ff47..c20aa19 100644
--- a/pages/phyz/checkLocDetl/locDetlList2.vue
+++ b/pages/phyz/checkLocDetl/locDetlList2.vue
@@ -116,7 +116,9 @@
 							} else {
 								_this.dataList = res.data.locNo
 							}
-							
+							// for (let k of _this.dataList) {
+							// 	k['count'] = k.anfme
+							// }
 						} else if (res.code == 403) {
 							uni.showToast({ title: res.msg, icon: "error", position: 'top' })
 							setTimeout(() => { uni.reLaunch({ url: '../../login/login' }); }, 1000);
diff --git a/pages/phyz/order/pakinOrderSelectV2.vue b/pages/phyz/order/pakinOrderSelectV2.vue
index 6b04efd..437df68 100644
--- a/pages/phyz/order/pakinOrderSelectV2.vue
+++ b/pages/phyz/order/pakinOrderSelectV2.vue
@@ -161,13 +161,13 @@
 						_this.data.orderType = []
 					}
 				}
-				
+				_this.baseUrl = uni.getStorageSync('baseUrl');
+				_this.token = uni.getStorageSync('token');
+				_this.searchValue = uni.getStorageSync('threeCode');
+				_this.getOrderDetlList(_this.searchValue,10)
+				console.log("onLoad");
 			})
-			this.baseUrl = uni.getStorageSync('baseUrl');
-			this.token = uni.getStorageSync('token');
-			this.searchValue = uni.getStorageSync('threeCode');
-			this.getOrderDetlList(this.searchValue,10)
-			console.log("onLoad");
+			
 		},
 		onShow() {
 			console.log(uni.getStorageSync('pakinOrderCar'));
@@ -186,7 +186,7 @@
 					url: `${_this.baseUrl}/order/detls/pakin/page/auth/v2`,
 					header: {'token': uni.getStorageSync('token')},
 					data: _this.data,
-					method: 'POST',
+					method: 'GET',
 					success(res) {
 						uni.hideLoading()
 						res = res.data
diff --git a/pages/phyz/orderOut/orderOutSelectV2.vue b/pages/phyz/orderOut/orderOutSelectV2.vue
index a0090c2..05ad07d 100644
--- a/pages/phyz/orderOut/orderOutSelectV2.vue
+++ b/pages/phyz/orderOut/orderOutSelectV2.vue
@@ -133,13 +133,12 @@
 						_this.data.orderType = []
 					}
 				}
-				
+				_this.baseUrl = uni.getStorageSync('baseUrl');
+				_this.token = uni.getStorageSync('token');
+				_this.searchValue = uni.getStorageSync('threeCode');
+				_this.getOrderDetlList(_this.searchValue,10)
+				console.log("onLoad");
 			})
-			this.baseUrl = uni.getStorageSync('baseUrl');
-			this.token = uni.getStorageSync('token');
-			this.searchValue1 = uni.getStorageSync('threeCodeOut193');
-			this.searchValue2 = uni.getStorageSync('threeCodeOut2');
-			this.getOrderDetlList(this.searchValue1,10)
 		},
 		methods: {
 			getOrderDetlList(threeCode,limit) {
@@ -153,7 +152,7 @@
 					url: `${_this.baseUrl}/orderDetl/pakout/list/authV7`,
 					header: {'token': uni.getStorageSync('token')},
 					data: _this.data,
-					method: 'POST',
+					method: 'GET',
 					success(res) {
 						uni.hideLoading({})
 						res = res.data

--
Gitblit v1.9.1