From d91c23a3dc8cb22c0a5b2bbb5a74c6aac37469b5 Mon Sep 17 00:00:00 2001
From: xuxy <1059738716@qq.com>
Date: 星期三, 03 七月 2024 11:35:02 +0800
Subject: [PATCH] update 分类过滤

---
 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue         |   27 ++-
 sub_pages/supplier/flower-manage/flower-add.vue                                    |   78 +++++++--
 manifest.json                                                                      |    3 
 pages/home/supplier-home.vue                                                       |    2 
 components/tree-filter/tree-filter.vue                                             |  354 ++++++++++++++++++++++++++++++++++++++++++++
 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue |    1 
 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js      |    5 
 pages/user/supplier-user.vue                                                       |    7 
 8 files changed, 444 insertions(+), 33 deletions(-)

diff --git a/components/tree-filter/tree-filter.vue b/components/tree-filter/tree-filter.vue
new file mode 100644
index 0000000..2a31d26
--- /dev/null
+++ b/components/tree-filter/tree-filter.vue
@@ -0,0 +1,354 @@
+<template>
+	<view class="tree-filter">
+		<view class="tree-filter-input" @click="show">
+			<slot>
+
+			</slot>
+		</view>
+
+		<view class="tree-filter-tree-cover" v-if="isOpened" @click="handleClose"></view>
+		<view class="tree-filter-tree-dialog" v-if="isOpened">
+			<view class="tree-filter-popper__arrow"></view>
+			<view class="dialog-caption">
+				<view class="title-area">
+					<text class="dialog-title">{{popupTitle}}</text>
+				</view>
+				<view class="dialog-close" @click="handleClose">
+					<view class="dialog-close-plus" data-id="close"></view>
+					<view class="dialog-close-plus dialog-close-rotate" data-id="close"></view>
+				</view>
+			</view>
+			<view v-if="filter"
+				style="margin-left:40rpx;margin-right:40rpx;;margin-top: 40rpx;border-bottom:1px solid #eee;padding-bottom:20rpx;display:flex;color:#000">
+				<input v-model="search" style="height:60rpx;line-height:60rpx;color:#000" placeholder="请输入搜索内容"></input>
+				<view @click="()=>{search='';updateSearch()}"
+					style="height:60rpx;line-height:60rpx;margin-left:auto;margin-right:0rpx">清空</view>
+				<view @click="updateSearch" style="height:60rpx;line-height:60rpx;margin-left:auto;margin-right:0rpx">搜索
+				</view>
+			</view>
+			<view>
+				<!-- 渲染多级树,首先确认层级? -->
+				<view v-if="currentLevel===-1" class="tree-filter-nodes">
+					<!-- 暂时跟节点 -->
+					<view v-for="(item,index) of localdata" :key="item.value" class="tree-filter-node"
+						@click="selecteRow(item)">
+						<view>{{item.label}}</view>
+						<view class="arrow" v-if="item.children&&item.children.length>0">
+							<uni-icons type="right"></uni-icons>
+
+						</view>
+					</view>
+				</view>
+				<view v-else>
+					<view class="tree-filter-top-titles">
+						<view v-for="(item,index) of currentNodes" :key="item.value"
+							@click="selecteRowCurrentNodesOne(item,index)" class="tree-filter-top-title">
+							<view>{{item.label || '-'}}</view>
+							<view class="arrow"><uni-icons type="right" style="color: lightgray;"></uni-icons></view>
+						</view>
+						<view class="tree-filter-top-title-tip">
+							请选择
+						</view>
+					</view>
+					<view class="tree-filter-nodes">
+						<view v-for="(item,index) of currentNodes[currentLevel].children" :key="item.value"
+							class="tree-filter-node" @click="selecteRow(item)">
+							<view>{{item.label}}</view>
+							<view class="arrow" v-if="item.children&&item.children.length>0">
+								<uni-icons type="right"></uni-icons>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<!-- 多级带搜索插叙功能的tree -->
+<script>
+	export default {
+		name: "tree-filter",
+		data() {
+			return {
+				isOpened: false,
+				search: '',
+				currentLevel: -1,
+				currentNodes: [], //数组存储
+				currentValue: {}
+			};
+		},
+		methods: {
+			async updateSearch() {
+				//todo 递归搜索下面的数据,,并标记为可展示的
+				console.log('updateSearch', this.localdata)
+				await this.$emit('search', this.search)
+				// console.log('updateSearch',this.localdata)
+				
+				// setTimeout(() => {
+				// 	console.log('updateSearch2 setTimeout', this.localdata)
+				// 	//清空
+				// 	if (this.search) {
+				// 		this.selectedClear()
+				// 	}
+				// 	if(!this.search){
+				// 		//其他的也恢复
+				// 		this.selectedClear()
+				// 	}
+				// }, 200)
+			},
+			//数据
+			selectedClear() {
+				//清空选择的数据
+				//当前层级和当前节点?
+				this.currentLevel = -1
+				this.currentNodes = []
+				this.currentValue = {}
+				this.$forceUpdate()
+			},
+			selectedSet() {
+				//设置处理的级别,需要第几个节点
+
+			},
+			selecteRowCurrentNodesOne(item, index) {
+				//选择的是最上面的
+				var lens = this.currentNodes.length - index
+				this.currentNodes.splice(index, lens)
+				this.currentLevel -= (lens + 0)
+				console.log(' this.currentNodes', this.currentNodes,this.currentLevel)
+
+			},
+			selecteRow(row) {
+				//选择某一个
+				console.log('selecteRow', row)
+				if (row.children && row.children.length > 0) {
+					//选择节点
+					this.currentNodes.push(row)
+					this.currentLevel += 1
+
+				} else {
+					//选择的是value
+					if (this.currentLevel === -1) {
+						//直接选择的
+						this.currentValue = row
+					} else {
+						this.currentValue = row
+
+					}
+					this.hide()
+					this.$emit('change', {
+						detail: {
+							value: [row]
+						}
+					})
+
+
+				}
+			},
+			//显示
+			show() {
+				this.isOpened = true
+				setTimeout(() => {
+					this.$refs.pickerView.updateData({
+						treeData: this._treeData,
+						selected: this.selected,
+						selectedIndex: this.selectedIndex
+					})
+				}, 200)
+				this.$emit('popupopened')
+			},
+			hide() {
+				this.isOpened = false
+				this.$emit('popupclosed')
+			},
+			handleClose() {
+				this.hide()
+
+			},
+		},
+		props: {
+			filter: {
+				type: Boolean,
+				default: true
+			},
+			placeholder: {
+				type: String,
+				default: '请选择'
+			},
+			localdata: {
+				type: [Array, Object],
+				default () {
+					return []
+				}
+			},
+			selectConfirmTitle: {
+				type: String,
+				default: ''
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.tree-filter {
+		.tree-filter-top-titles {
+			display: flex;
+			margin-bottom: 0rpx;
+			overflow-x: scroll;
+			flex-wrap: wrap;
+			padding-left: 40rpx;
+			padding-right: 40rpx;
+			padding-top: 20rpx;
+
+			.tree-filter-top-title {
+				margin-right: 40rpx;
+				text-align: left;
+				// color: darkgray;
+				color: #333;
+				display: flex;
+
+				.arrow {
+					margin-left: 30rpx;
+				}
+			}
+
+			.tree-filter-top-title-tip {
+				margin-right: 40rpx;
+				text-align: left;
+				color: darkgray;
+				display: inline-block;
+			}
+
+			.tree-filter-top-title::last-child {
+				// color: #333;
+			}
+		}
+
+		.tree-filter-nodes {
+			padding-left: 40rpx;
+			padding-right: 40rpx;
+
+			.tree-filter-node {
+				display: flex;
+				color: #333;
+
+				.arrow {
+					margin-left: auto;
+					margin-right: 0rpx;
+				}
+			}
+		}
+
+		.tree-filter-tree-cover {
+			position: fixed;
+			left: 0;
+			top: 0;
+			right: 0;
+			bottom: 0;
+			background-color: rgba(0, 0, 0, .4);
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex-direction: column;
+			z-index: 100;
+		}
+
+		.tree-filter-tree-dialog {
+			position: fixed;
+			padding: 20rpx;
+			padding-top: 40rpx;
+			left: 0;
+			/* #ifndef APP-NVUE */
+			top: 20%;
+			/* #endif */
+			/* #ifdef APP-NVUE */
+			top: 200px;
+			/* #endif */
+			right: 0;
+			bottom: 0;
+			background-color: #FFFFFF;
+			border-top-left-radius: 10px;
+			border-top-right-radius: 10px;
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex-direction: column;
+			z-index: 102;
+			overflow: hidden;
+			/* #ifdef APP-NVUE */
+			width: 750rpx;
+			/* #endif */
+		}
+
+		/* picker 弹出层通用的指示小三角, todo:扩展至上下左右方向定位 */
+		/* #ifndef APP-NVUE */
+		.tree-filter-popper__arrow,
+		.tree-filter-popper__arrow::after {
+			position: absolute;
+			display: block;
+			width: 0;
+			height: 0;
+			border-color: transparent;
+			border-style: solid;
+			border-width: 6px;
+		}
+
+		.tree-filter-popper__arrow {
+			filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+			top: -6px;
+			left: 10%;
+			margin-right: 3px;
+			border-top-width: 0;
+			border-bottom-color: #EBEEF5;
+		}
+
+		.tree-filter-popper__arrow::after {
+			content: " ";
+			top: 1px;
+			margin-left: -6px;
+			border-top-width: 0;
+			border-bottom-color: #fff;
+		}
+
+		/* #endif */
+		.dialog-caption {
+			position: relative;
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex-direction: row;
+			/* border-bottom: 1px solid #f0f0f0; */
+		}
+
+		.dialog-title {
+			/* font-weight: bold; */
+			line-height: 44px;
+		}
+
+		.dialog-close {
+			position: absolute;
+			top: 0;
+			right: 0;
+			bottom: 0;
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex-direction: row;
+			align-items: center;
+			padding: 0 15px;
+		}
+
+		.dialog-close-plus {
+			width: 16px;
+			height: 2px;
+			background-color: #666;
+			border-radius: 2px;
+			transform: rotate(45deg);
+		}
+
+		.dialog-close-rotate {
+			position: absolute;
+			transform: rotate(-45deg);
+		}
+
+	}
+</style>
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index fef255e..8466839 100644
--- a/manifest.json
+++ b/manifest.json
@@ -52,7 +52,8 @@
         "appid" : "wx3203fd935a6ffe09",
         "setting" : {
             "urlCheck" : false,
-            "es6" : true
+            "es6" : true,
+            "minified" : true
         },
         "usingComponents" : true,
         "plugins" : {}
diff --git a/pages/home/supplier-home.vue b/pages/home/supplier-home.vue
index cf0ae89..f393031 100644
--- a/pages/home/supplier-home.vue
+++ b/pages/home/supplier-home.vue
@@ -19,7 +19,7 @@
 				<image class="user-icon" v-if="currentInfo.picture" :src="currentInfo.picture" mode="aspectFit"></image>
 
 				<view class="name">
-					<view class="t1">{{currentInfo.nickName || currentInfo.loginName || '-'}}<span
+					<view class="t1">{{ (!!currentInfo.supplierDTO?(currentInfo.supplierDTO.name):"") || currentInfo.nickName || currentInfo.loginName || '-'}}<span
 							v-if="currentInfo.supplierDTO&&currentInfo.supplierDTO.status!=='P'">
 							({{currentInfo.supplierDTO?currentInfo.supplierDTO.statusStr:''}})</span>
 					</view>
diff --git a/pages/user/supplier-user.vue b/pages/user/supplier-user.vue
index 41ea330..c5ced80 100644
--- a/pages/user/supplier-user.vue
+++ b/pages/user/supplier-user.vue
@@ -20,7 +20,8 @@
 				<image class="user-icon" v-if="currentInfo.picture" :src="currentInfo.picture" mode="aspectFit"></image>
 
 				<view class="name">
-					<view class="t1">{{currentInfo.nickName || currentInfo.loginName || '-'}}<span
+					<view class="t1">
+						{{ (!!currentInfo.supplierDTO?(currentInfo.supplierDTO.name):"") || currentInfo.nickName || currentInfo.loginName || '-'}}<span
 							v-if="currentInfo.supplierDTO&&currentInfo.supplierDTO.status!=='P'">
 							({{currentInfo.supplierDTO?currentInfo.supplierDTO.statusStr:''}})</span>
 					</view>
@@ -55,11 +56,11 @@
 				<view class="flex">
 					<image class="icon-clock m-r-6 m-t-2" src="../../static/common/icon-call.png"></image>
 					<view class="name">
-						客服电话 :  &nbsp;&nbsp; <span class="topic-gray">{{tel}}</span>
+						客服电话 : &nbsp;&nbsp; <span class="topic-gray">{{tel}}</span>
 					</view>
 				</view>
 			</view>
-<!-- 			<view class="user-util m-t-12 " @click="callTel" v-if="selftype==='partner'">
+			<!-- 			<view class="user-util m-t-12 " @click="callTel" v-if="selftype==='partner'">
 				<view class="name">
 					账号: <span class="topic-gray">{{tel}}</span>
 				</view>
diff --git a/sub_pages/supplier/flower-manage/flower-add.vue b/sub_pages/supplier/flower-manage/flower-add.vue
index 2bbf009..b976ee1 100644
--- a/sub_pages/supplier/flower-manage/flower-add.vue
+++ b/sub_pages/supplier/flower-manage/flower-add.vue
@@ -11,11 +11,19 @@
 					<u-icon class="m-l-a" name="arrow-right"></u-icon>
 				</view> -->
 				<view class="m-l-a m-r-0 flex " :class="[!dto['category']?'desc-gray':'']">
-					<uni-data-picker @change="(e)=>{PickCategory(dto,e)}" placeholder="" @search="updateSearch"
-						:localdata="columns_categorys_picker">
+					<!-- 	<uni-data-picker ref="picker_category" @change="(e)=>{PickCategory(dto,e)}" placeholder=""
+						@search="updateSearch" :filter="true" :localdata="columns_categorys_picker">
 						{{dto.categoryStr||dto.category || '请选择'}}
-					</uni-data-picker>
-					<u-icon class="m-l-a" name="arrow-right"></u-icon>
+					</uni-data-picker> -->
+					<tree-filter ref="picker_category" @change="(e)=>{PickCategory(dto,e)}" placeholder=""
+						@search="updateSearch" :filter="true" :localdata="columns_categorys_picker"
+						selectConfirmTitle="">
+						<view class="flex">
+							<view>{{dto.categoryStr||dto.category || '请选择'}}</view>
+							<u-icon class="m-l-a" name="arrow-right"></u-icon>
+						</view>
+
+					</tree-filter>
 				</view>
 			</view>
 			<view class="form-item before-line">
@@ -191,14 +199,16 @@
 				<view class="button-green" @click="closeParamPop">返回</view>
 			</view>
 		</uni-popup>
-		<dying318picker :picker-list="columns_categorys" ref="picker_category" @confirm="confirmPickerCategory">
-		</dying318picker>
+		<!-- 		<dying318picker :picker-list="columns_categorys" ref="picker_category" @confirm="confirmPickerCategory">
+		</dying318picker> -->
 	</view>
 </template>
 
 <script>
 	import environments from '@/environments'
 	import dying318picker from '@/components/dying318-picker/Picker.vue'
+	import treeFilter from '@/components/tree-filter/tree-filter.vue'
+
 
 	import {
 		mapState
@@ -308,16 +318,31 @@
 				this.columns_categorys_picker = []
 				this.mapCategoryTree(this.columns_categorys_picker, this.columns_categorys)
 				console.log('change updateSearch', search, this.columns_categorys_picker)
+				this.$refs.picker_category.selectedClear()
 			},
 			async PickCategory(item, e) {
 				console.log('PickCategory', item, e)
 				if (e.detail.value) {
-					if (this.dto.category) {
-						await this.$message.confirm('修改分类将清空商品参数,确定修改吗')
-					} {
-						var currentnode = this.columns_categorys_dict['@' + e.detail.value[e.detail.value.length - 1]
-							.value]
-						// console.log('currentnode',currentnode,this.columns_categorys_dict,'@'+e.detail.value[e.detail.value.length - 1].value)
+					var currentnode = this.columns_categorys_dict['@' + e.detail.value[e.detail.value.length - 1]
+						.value]
+					let tmpe = e
+					if (this.dto.category && this.dto.category !== currentnode.id) {
+						this.$message.confirm('修改分类将清空商品参数,确定修改吗').then(async res => {
+							// console.log('currentnode',currentnode,this.columns_categorys_dict,'@'+e.detail.value[e.detail.value.length - 1].value)
+							this.dto.categoryStr = currentnode.name
+							this.dto.category = currentnode.id
+							this.dto.name = currentnode.name
+							this.dto.unit = currentnode.unit
+							this.dto.color = currentnode.color
+							//递归获取category的其他数据,用来做map?
+							this.$message.showLoading()
+							await this.refresh_category()
+							this.$message.hideLoading()
+						}).catch(e1 => {
+							console.log('this.$refs.picker_category', this.$refs.picker_category)
+							this.$refs.picker_category.onchange(tmpe.detail.value)
+						})
+					} else {
 						this.dto.categoryStr = currentnode.name
 						this.dto.category = currentnode.id
 						this.dto.name = currentnode.name
@@ -334,7 +359,7 @@
 				var has = true
 				if (arr) {
 					var hasTrue = false
-					if(!this.columns_categorys_search){
+					if (!this.columns_categorys_search) {
 						hasTrue = true
 					}
 					for (var item of arr) {
@@ -352,6 +377,7 @@
 						}
 						if (item.name == this.columns_categorys_search) {
 							has = true
+							hasTrue = true
 						}
 						this.columns_categorys_dict['@' + item.id] = item
 						if (item.children && item.children.length > 0) {
@@ -364,13 +390,28 @@
 						} else {
 							tmp.children = undefined
 						}
-						if (hasTrue || has) {
-							console.log('has ',tmp)
+
+						if (has) {
+							console.log('has ', tmp, hasTrue, has)
 							node.push(tmp)
-							
 						} else {
-							console.log('not has ',tmp)
+
 						}
+						if (!has && hasTrue) {
+							//说明是这个节点有的,需要判断是否需要删除
+							if (!tmp.children || tmp.children.length == 0) {
+
+							} else {
+								console.log('has ', tmp, hasTrue, has)
+								node.push(tmp)
+							}
+						}
+						// if (hasTrue || has) {
+						// 	node.push(tmp)
+
+						// } else {
+						// 	console.log('not has ', tmp)
+						// }
 
 					}
 				}
@@ -568,7 +609,8 @@
 			}
 		},
 		components: {
-			dying318picker
+			dying318picker,
+			treeFilter
 		}
 	}
 </script>
diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
index f448352..e0aa39f 100644
--- a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
+++ b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
@@ -3,6 +3,7 @@
 		<view class="uni-data-tree-input" @click="handleInput">
 			<slot :options="options" :data="inputSelected" :error="errorMessage">
 				<view class="input-value" :class="{'input-value-border': border}">
+					
 					<text v-if="errorMessage" class="selected-area error-text">{{errorMessage}}</text>
 					<view v-else-if="loading && !isOpened" class="selected-area">
 						<uni-load-more class="load-more" :contentText="loadMore" status="loading"></uni-load-more>
@@ -37,13 +38,13 @@
 					<view class="dialog-close-plus dialog-close-rotate" data-id="close"></view>
 				</view>
 			</view>
-			<view v-if="false"
-				style="margin-left:40rpx;margin-right:40rpx;; border-bottom:1px solid #eee;padding-bottom:20rpx;display:flex">
+			<view v-if="filter"  
+				style="margin-left:40rpx;margin-right:40rpx;; border-bottom:1px solid #eee;padding-bottom:20rpx;display:flex;color:#000">
 				<input v-model="search" style="height:60rpx;line-height:60rpx;color:#000" placeholder="请输入搜索内容"></input>
-				<button @click="()=>{search='';updateSearch()}"
-					style="height:60rpx;line-height:60rpx;margin-left:auto;margin-right:0rpx">清空</button>
-				<button @click="updateSearch"
-					style="height:60rpx;line-height:60rpx;margin-left:auto;margin-right:0rpx">搜索</button>
+				<view @click="()=>{search='';updateSearch()}"
+					style="height:60rpx;line-height:60rpx;margin-left:auto;margin-right:0rpx">清空</view>
+				<view @click="updateSearch"
+					style="height:60rpx;line-height:60rpx;margin-left:auto;margin-right:0rpx">搜索</view>
 			</view>
 			<data-picker-view class="picker-view" ref="pickerView" v-model="dataValue" :localdata="localdata"
 				:preload="preload" :collection="collection" :field="field" :orderby="orderby" :where="where"
@@ -112,6 +113,10 @@
 				type: Boolean,
 				default: false
 			},
+			filter: {
+				type: Boolean,
+				default: false
+			},
 			clearIcon: {
 				type: Boolean,
 				default: true
@@ -161,8 +166,8 @@
 				await this.$emit('search',this.search)
 				// console.log('updateSearch',this.localdata)
 				setTimeout(() => {
-					console.log('updateSearch2',this.localdata)
-					this.showpicker = new Date().getTime()
+					console.log('updateSearch2 setTimeout',this.localdata)
+					// this.showpicker = new Date().getTime()
 					// this.load()
 					this.$refs.pickerView.updateData({
 						treeData: this.localdata,
@@ -189,7 +194,9 @@
 				this.load();
 			},
 			load() {
+				// console.log('load',this.readonly)
 				if (this.readonly) {
+					// console.debug('load readonly')
 					this._processReadonly(this.localdata, this.dataValue);
 					return;
 				}
@@ -198,7 +205,10 @@
 				if (this.isLocalData) {
 					this.loadData();
 					this.inputSelected = this.selected.slice(0);
+					console.log('load isLocalData',this.inputSelected)
+					
 				} else if (this.isCloudDataList || this.isCloudDataTree) { // 回显 Cloud 数据
+					// console.log('load Cloud')
 					this.loading = true;
 					this.getCloudDataValue().then((res) => {
 						this.loading = false;
@@ -208,6 +218,7 @@
 						this.errorMessage = err;
 					})
 				}
+				//  console.log('load over')
 			},
 			show() {
 				this.isOpened = true
diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
index cfae22a..328a3db 100644
--- a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
+++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
@@ -216,9 +216,10 @@
           inputValue = inputValue[this.map.value];
         }
       }
-
+	
       this.selected = this._findNodePath(inputValue, this.localdata);
-    },
+		console.log('_findNodePath',inputValue,this.localdata)
+	},
 
     // 加载 Cloud 数据 (单列)
     async loadCloudDataList() {
diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
index 6ebced9..10d3e29 100644
--- a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
+++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
@@ -67,6 +67,7 @@
       }
     },
     created() {
+		console.log('created picker')
       if (!this.managedMode) {
         this.$nextTick(() => {
           this.loadData();

--
Gitblit v1.9.3