From e92aeae89a7430b326ab2157ed5004cc5c87d659 Mon Sep 17 00:00:00 2001
From: cuiqian2004 <cuiqian2004@163.com>
Date: 星期五, 28 十一月 2025 18:21:56 +0800
Subject: [PATCH] 75

---
 components/oi-form/list/select/index.vue |   57 +--
 locale/es.json                           |    1 
 pages/modal/3018_2.vue                   |   31 +
 pages/modal/3200_view.vue                |   10 
 pages/modal/5601.vue                     |    3 
 components/data-select/index.vue         |  723 ++++++++++++++++++++++++++++++++++++++++++++++++
 pages/modal/3202.vue                     |   22 +
 locale/zh-Hans.json                      |    1 
 pages/index/index.vue                    |    2 
 locale/en.json                           |    1 
 pages/modal/3202_view.vue                |   20 
 locale/zh-Hant.json                      |    1 
 pages/modal/3200.vue                     |   19 +
 manifest.json                            |    4 
 14 files changed, 832 insertions(+), 63 deletions(-)

diff --git a/components/data-select/index.vue b/components/data-select/index.vue
new file mode 100644
index 0000000..9b5b715
--- /dev/null
+++ b/components/data-select/index.vue
@@ -0,0 +1,723 @@
+<template>
+	<view class="oi-data-select">
+		<span v-if="label" class="uni-label-text hide-on-phone">{{label + '锛�}}</span>
+		<view class="uni-stat-box" :class="{'uni-stat__actived': current}">
+			<view class="uni-select" :class="{'uni-select--disabled':disabled}">
+				<view class="uni-select__input-box" @click="toggleSelector">
+					<input class="uni-select__input-text" :class="disabled?'input-disabled':''" v-model="current"
+						:placeholder="typePlaceholder" @blur="onBlur" :disabled="disabled || !filterable" />
+					<view v-if="modelValue && clear && !disabled" @click.stop="clearVal">
+						<uni-icons type="clear" color="#c0c4cc" size="24" />
+					</view>
+					<view v-else>
+						<uni-icons :type="showSelector? 'top' : 'bottom'" size="14" color="#999" />
+					</view>
+				</view>
+				<view class="uni-select--mask" v-if="showSelector" @click="toggleSelector()" />
+				<template v-if="popDown">
+					<view class="uni-select__selector" v-if="showSelector">
+						<view class="uni-popper__arrow"></view>
+						<scroll-view scroll-y="true" class="uni-select__selector-scroll">
+							<view class="uni-select__selector-empty" v-if="selections.length === 0">
+								<text>{{emptyTips}}</text>
+							</view>
+							<view v-else class="uni-select__selector-item"
+								:class="item.value == modelValue ?'selected-item':''" v-for="(item,index) in selections"
+								:key="index" @click="change(item)">
+								<text
+									:class="{'uni-select__selector__disabled': item.disable}">{{formatItemName(item)}}</text>
+							</view>
+						</scroll-view>
+					</view>
+				</template><template v-else>
+					<view class="uni-select__selector-top" v-if="showSelector">
+
+						<scroll-view scroll-y="true" class="uni-select__selector-scroll">
+							<view class="uni-select__selector-empty" v-if="selections.length === 0">
+								<text>{{emptyTips}}</text>
+							</view>
+							<view v-else class="uni-select__selector-item"
+								:class="item.value == modelValue ?'selected-item':''" v-for="(item,index) in selections"
+								:key="index" @click="change(item)">
+								<text
+									:class="{'uni-select__selector__disabled': item.disable}">{{formatItemName(item)}}</text>
+							</view>
+						</scroll-view>
+						<view class="uni-popper__arrow-top"></view>
+					</view>
+				</template>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * DataChecklist 鏁版嵁閫夋嫨鍣�+	 * @description 閫氳繃鏁版嵁娓叉煋鐨勪笅鎷夋缁勪欢
+	 * @property {String} value 榛樿鍊�+	 * @property {Array} localdata 鏈湴鏁版嵁 锛屾牸寮�[{text:'',value:''}]
+	 * @property {Boolean} clear 鏄惁鍙互娓呯┖宸查�椤�+	 * @property {Boolean} emptyText 娌℃湁鏁版嵁鏃舵樉绀虹殑鏂囧瓧 锛屾湰鍦版暟鎹棤鏁�+	 * @property {String} label 宸︿晶鏍囬
+	 * @property {String} placeholder 杈撳叆妗嗙殑鎻愮ず鏂囧瓧
+	 * @property {Boolean} disabled 鏄惁绂佺敤
+	 * @event {Function} change  閫変腑鍙戠敓鍙樺寲瑙﹀彂
+	 */
+
+	export default {
+		name: "OIDataSelect",
+		mixins: [uniCloud.mixinDatacom || {}],
+		props: {
+			localdata: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			value: {
+				type: [String, Number],
+				default: ''
+			},
+			modelValue: {
+				type: [String, Number],
+				default: ''
+			},
+			label: {
+				type: String,
+				default: ''
+			},
+			placeholder: {
+				type: String,
+				default: '璇烽�鎷�
+			},
+			emptyTips: {
+				type: String,
+				default: '鏃犻�椤�
+			},
+			clear: {
+				type: Boolean,
+				default: true
+			},
+			defItem: {
+				type: Number,
+				default: 0
+			},
+			filterable: {
+				type: Boolean,
+				default: false
+			},
+
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			// 鏍煎紡鍖栬緭鍑�鐢ㄦ硶 field="_id as value, version as text, uni_platform as label" format="{label} - {text}"
+			format: {
+				type: String,
+				default: ''
+			},
+		},
+		data() {
+			return {
+				pointY: 0,
+				scrollHeight: 40,
+				keyboardHeight: 400,
+				windowSize: {},
+				showSelector: false,
+				current: '',
+				mixinDatacomResData: [],
+				apps: [],
+				channels: [],
+				cacheKey: "OIDataSelect-lastSelectedValue",
+			};
+		},
+		created() {
+			const _this = this
+			this.debounceGet = this.debounce(() => {
+				this.query();
+			}, 300);
+			if (this.collection && !this.localdata.length) {
+				this.debounceGet();
+			}
+
+			uni.getSystemInfo({
+				success(e) {
+					_this.windowSize = {
+						width: e.windowWidth,
+						height: e.windowHeight - (e.statusBarHeight || 0)
+					}
+				},
+
+			})
+			uni.onKeyboardHeightChange((res) => {
+				//	console.log("onKeyboardHeightChange", res)
+				_this.keyboardHeight = res.height; // 鍗曚綅锛歱x
+
+			});
+		},
+		destroyed() {
+			uni.offKeyboardHeightChange(() => {}) // 
+		},
+		computed: {
+			typePlaceholder() {
+				const text = {
+					'opendb-stat-app-versions': '鐗堟湰',
+					'opendb-app-channels': '娓犻亾',
+					'opendb-app-list': '搴旂敤'
+				}
+				const common = this.placeholder
+				const placeholder = text[this.collection]
+				return placeholder ?
+					common + placeholder :
+					common
+			},
+			valueCom() {
+				// #ifdef VUE3
+				return this.modelValue;
+				// #endif
+				// #ifndef VUE3
+				return this.value;
+				// #endif
+			},
+			textShow() {
+				// 闀挎枃鏈樉绀�+				let text = this.current;
+				if (text.length > 10) {
+					return text.slice(0, 25) + '...';
+				}
+				return text;
+			},
+			selections() {
+				let list = this.mixinDatacomResData
+				if (this.filterable) {
+					if (this.current) {
+						list = this.mixinDatacomResData.filter((a) => a.text.match(new RegExp(this.current, "i")))
+
+					}
+				}
+				let height = (list.length * 35) || 35
+				if (height > 200) {
+					height = 200
+				}
+				this.scrollHeight = height + 10
+				return list
+			},
+			popDown() {
+				console.log("popDown", this.pointY, this.keyboardHeight, this.scrollHeight, this.windowSize.height)
+				if (this.filterable) {
+					if (this.pointY + this.scrollHeight > this.windowSize.height - this.keyboardHeight) {
+						return false
+					}
+				} else {
+					if (this.pointY + this.scrollHeight > this.windowSize.height) {
+						return false
+					}
+				}
+				return true
+
+			}
+		},
+
+		watch: {
+			localdata: {
+				immediate: true,
+				handler(val, old) {
+					if (Array.isArray(val) && old !== val) {
+						this.mixinDatacomResData = val
+					}
+				}
+			},
+			valueCom(val, old) {
+				this.initDefVal()
+			},
+			mixinDatacomResData: {
+				immediate: true,
+				handler(val) {
+					if (val.length) {
+						this.initDefVal()
+					}
+				}
+			},
+
+		},
+		methods: {
+			debounce(fn, time = 100) {
+				let timer = null
+				return function(...args) {
+					if (timer) clearTimeout(timer)
+					timer = setTimeout(() => {
+						fn.apply(this, args)
+					}, time)
+				}
+			},
+			// 鎵ц鏁版嵁搴撴煡璇�+			query() {
+				this.mixinDatacomEasyGet();
+			},
+			// 鐩戝惉鏌ヨ鏉′欢鍙樻洿浜嬩欢
+			onMixinDatacomPropsChange() {
+				if (this.collection) {
+					this.debounceGet();
+				}
+			},
+			initDefVal() {
+				let defValue = ''
+				if ((this.valueCom || this.valueCom === 0) && !this.isDisabled(this.valueCom)) {
+					defValue = this.valueCom
+				} else {
+					let strogeValue
+					if (this.collection) {
+						strogeValue = this.getCache()
+					}
+					if (strogeValue || strogeValue === 0) {
+						defValue = strogeValue
+					} else {
+						let defItem = ''
+						if (this.defItem > 0 && this.defItem <= this.mixinDatacomResData.length) {
+							defItem = this.mixinDatacomResData[this.defItem - 1].value
+						}
+						defValue = defItem
+					}
+					if (defValue || defValue === 0) {
+						this.emit(defValue)
+					}
+				}
+				const def = this.mixinDatacomResData.find(item => item.value === defValue)
+				this.current = def ? this.formatItemName(def) : ''
+			},
+
+			/**
+			 * @param {[String, Number]} value
+			 * 鍒ゆ柇鐢ㄦ埛缁欑殑 value 鏄惁鍚屾椂涓虹鐢ㄧ姸鎬�+			 */
+			isDisabled(value) {
+				let isDisabled = false;
+
+				this.mixinDatacomResData.forEach(item => {
+					if (item.value === value) {
+						isDisabled = item.disable
+					}
+				})
+
+				return isDisabled;
+			},
+			onBlur() {
+				if (this.modelValue) {
+					const def = this.mixinDatacomResData.find(item => item.value === this.modelValue)
+					this.current = def ? this.formatItemName(def) : ''
+				} else {
+					this.current = ""
+				}
+			},
+			clearVal() {
+				this.emit('')
+				if (this.collection) {
+					this.removeCache()
+				}
+			},
+			change(item) {
+				if (!item.disable) {
+					this.showSelector = false
+					this.current = this.formatItemName(item)
+					this.emit(item.value)
+				}
+			},
+			emit(val) {
+				this.$emit('input', val)
+				this.$emit('update:modelValue', val)
+				this.$emit('change', val)
+				if (this.collection) {
+					this.setCache(val);
+				}
+			},
+			toggleSelector(e) {
+				if (this.disabled) {
+					return
+				}
+
+
+				if (!this.showSelector) {
+					this.pointY = e.detail.y
+
+				}
+				this.showSelector = !this.showSelector
+			},
+			formatItemName(item) {
+				let {
+					text,
+					value,
+					channel_code
+				} = item
+				channel_code = channel_code ? `(${channel_code})` : ''
+
+				if (this.format) {
+					// 鏍煎紡鍖栬緭鍑�+					let str = "";
+					str = this.format;
+					for (let key in item) {
+						str = str.replace(new RegExp(`{${key}}`, "g"), item[key]);
+					}
+					return str;
+				} else {
+					return this.collection.indexOf('app-list') > 0 ?
+						`${text}(${value})` :
+						(
+							text ?
+							text :
+							`鏈懡鍚�{channel_code}`
+						)
+				}
+			},
+			// 鑾峰彇褰撳墠鍔犺浇鐨勬暟鎹�+			getLoadData() {
+				return this.mixinDatacomResData;
+			},
+			// 鑾峰彇褰撳墠缂撳瓨key
+			getCurrentCacheKey() {
+				return this.collection;
+			},
+			// 鑾峰彇缂撳瓨
+			getCache(name = this.getCurrentCacheKey()) {
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				return cacheData[name];
+			},
+			// 璁剧疆缂撳瓨
+			setCache(value, name = this.getCurrentCacheKey()) {
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				cacheData[name] = value;
+				uni.setStorageSync(this.cacheKey, cacheData);
+			},
+			// 鍒犻櫎缂撳瓨
+			removeCache(name = this.getCurrentCacheKey()) {
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				delete cacheData[name];
+				uni.setStorageSync(this.cacheKey, cacheData);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	$uni-base-color: #6a6a6a !default;
+	$uni-main-color: #333 !default;
+	$uni-secondary-color: #909399 !default;
+	$uni-border-3: #e5e5e5;
+
+	/* #ifndef APP-NVUE */
+	@media screen and (max-width: 500px) {
+		.hide-on-phone {
+			display: none;
+		}
+	}
+
+	/* #endif */
+	.oi-data-select {
+		display: flex;
+		align-items: center;
+		// padding: 15px;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+		width: 100%;
+		flex: 1;
+		box-sizing: border-box;
+
+
+		.uni-stat-box {
+			width: 100%;
+			flex: 1;
+		}
+
+		.uni-stat__actived {
+			width: 100%;
+			flex: 1;
+			// outline: 1px solid #2979ff;
+		}
+
+		.uni-label-text {
+			font-size: 14px;
+			font-weight: bold;
+			color: $uni-base-color;
+			margin: auto 0;
+			margin-right: 5px;
+		}
+
+		.uni-select {
+			font-size: 14px;
+			border: 1px solid $uni-border-3;
+			box-sizing: border-box;
+			border-radius: 4px;
+			padding: 0 5px;
+			padding-left: 10px;
+			position: relative;
+			/* #ifndef APP-NVUE */
+			display: flex;
+			user-select: none;
+			/* #endif */
+			flex-direction: row;
+			align-items: center;
+			border-bottom: solid 1px $uni-border-3;
+			width: 100%;
+			flex: 1;
+			height: 35px;
+
+			&--disabled {
+				background-color: #f5f7fa;
+				cursor: not-allowed;
+			}
+		}
+
+		.uni-select:hover {
+			border: 1px solid rgb(41, 121, 255);
+		}
+
+
+		.uni-select__label {
+			font-size: 16px;
+			// line-height: 22px;
+			height: 35px;
+			padding-right: 10px;
+			color: $uni-secondary-color;
+		}
+
+		.uni-select__input-box {
+			height: 35px;
+			position: relative;
+			/* #ifndef APP-NVUE */
+			display: flex;
+			/* #endif */
+			flex: 1;
+			flex-direction: row;
+			align-items: center;
+		}
+
+		.uni-select__input {
+			flex: 1;
+			font-size: 14px;
+			height: 22px;
+			line-height: 22px;
+		}
+
+		.uni-select__input-plac {
+			font-size: 14px;
+			color: $uni-secondary-color;
+		}
+
+		.uni-select__selector {
+			/* #ifndef APP-NVUE */
+			box-sizing: border-box;
+			/* #endif */
+			position: absolute;
+			top: calc(100% + 12px);
+			left: 0;
+			width: 100%;
+			background-color: #FFFFFF;
+			border: 1px solid #EBEEF5;
+			border-radius: 6px;
+			box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+			z-index: 3;
+			padding: 4px 0;
+		}
+
+		.uni-select__selector-top {
+			/* #ifndef APP-NVUE */
+			box-sizing: border-box;
+			/* #endif */
+			position: absolute;
+			bottom: calc(100% + 12px);
+			left: 0;
+			width: 100%;
+			background-color: #FFFFFF;
+			border: 1px solid #EBEEF5;
+			border-radius: 6px;
+			box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+			z-index: 3;
+			padding: 4px 0;
+		}
+
+
+		.uni-select__selector-scroll {
+			/* #ifndef APP-NVUE */
+			max-height: 200px;
+			box-sizing: border-box;
+			/* #endif */
+		}
+
+		/* #ifdef H5 */
+		@media (min-width: 768px) {
+			.uni-select__selector-scroll {
+				max-height: 600px;
+			}
+		}
+
+		/* #endif */
+
+		.uni-select__selector-empty,
+		.uni-select__selector-item {
+			/* #ifndef APP-NVUE */
+			display: flex;
+			cursor: pointer;
+			/* #endif */
+			line-height: 35px;
+			font-size: 14px;
+			text-align: center;
+			/* border-bottom: solid 1px $uni-border-3; */
+			padding: 0px 10px;
+		}
+
+		.uni-select__selector-empty {
+			color: #666;
+		}
+
+		.selected-item {
+			color: rgb(41, 121, 255);
+		}
+
+
+		.uni-select__selector-item:hover {
+			background-color: #f9f9f9;
+		}
+
+		.uni-select__selector-empty:last-child,
+		.uni-select__selector-item:last-child {
+			/* #ifndef APP-NVUE */
+			border-bottom: none;
+			/* #endif */
+		}
+
+		.uni-select__selector__disabled {
+			opacity: 0.4;
+			cursor: default;
+		}
+
+		/* picker 寮瑰嚭灞傛寚鍚戜笅鐨勯�鐢ㄧ殑鎸囩ず灏忎笁瑙�*/
+		.uni-popper__arrow,
+		.uni-popper__arrow::after {
+			position: absolute;
+			display: block;
+			width: 0;
+			height: 0;
+			border-color: transparent;
+			border-style: solid;
+			border-width: 6px;
+		}
+
+		.uni-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;
+		}
+
+		.uni-popper__arrow::after {
+			content: " ";
+			top: 1px;
+			margin-left: -6px;
+			border-top-width: 0;
+			border-bottom-color: #fff;
+		}
+
+		/* picker 寮瑰嚭灞傛寚鍚戜笂鐨勯�鐢ㄦ寚绀哄皬涓夎 */
+		.uni-popper__arrow-top,
+		.uni-popper__arrow-top::after {
+			position: absolute;
+			display: block;
+			width: 0;
+			height: 0;
+			border-color: transparent;
+			border-style: solid;
+			border-width: 6px;
+		}
+
+		.uni-popper__arrow-top {
+			filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+			bottom: -6px;
+			left: 10%;
+			margin-right: 3px;
+			border-bottom-width: 0;
+			border-top-color: #EBEEF5;
+		}
+
+		.uni-popper__arrow-top::after {
+			content: " ";
+			bottom: 1px;
+			margin-left: -6px;
+			border-bottom-width: 0;
+			border-top-color: #fff;
+		}
+
+		.uni-select__input-text {
+			// width: 280px;
+			width: 100%;
+			color: $uni-main-color;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			-o-text-overflow: ellipsis;
+			overflow: hidden;
+		}
+
+		.input-disabled {
+			background-color: #f3f3f3 !important;
+		}
+
+		.uni-select__input-placeholder {
+			color: $uni-base-color;
+			font-size: 12px;
+		}
+
+		.uni-select--mask {
+			position: fixed;
+			top: 0;
+			bottom: 0;
+			right: 0;
+			left: 0;
+			z-index: 2;
+		}
+	}
+
+	.large-mode {
+		.oi-data-select {
+
+
+			.uni-label-text {
+				font-size: 24px;
+			}
+			
+			
+			.uni-select {
+				font-size: 24px;
+				height: 32px;
+				line-height: 32px;
+				height: 45px;
+			}
+
+			.uni-select__label {
+				font-size: 26px;
+				height: 45px;
+			}
+			.uni-select__input-box {
+				height: 45px;
+				}
+			.uni-select__input {
+
+				font-size: 24px;
+			}
+
+			.uni-select__input-plac {
+				font-size: 24px;
+			}
+
+			.uni-select__selector-empty,
+			.uni-select__selector-item {
+				font-size: 24px;
+			}
+
+			.uni-select__input-placeholder {
+				font-size: 22px;
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/components/oi-form/list/select/index.vue b/components/oi-form/list/select/index.vue
index e9bbfb4..dec8b19 100644
--- a/components/oi-form/list/select/index.vue
+++ b/components/oi-form/list/select/index.vue
@@ -1,18 +1,36 @@
 <template>
 	<view class="oi-form-select">
 		<!-- 涓嬫媺閫夋嫨妗�-->
-		<uni-data-picker v-if="model" class="data-picker" :class="data.disabled?'input-disabled':''"
+		<!-- <uni-data-picker v-if="model" class="data-picker" :class="data.disabled?'input-disabled':''"
 			v-model="model[data.fieldId]" :localdata="data.useDict ? data.dict : data.selections" @change="onChange"
 			:readonly="data.disabled" :clear-icon="false" :popup-title="data.label"></uni-data-picker>
 		<uni-data-picker v-else class="data-picker" :class="data.disabled?'input-disabled':''" v-model="data.value"
 			:localdata="data.useDict ? data.dict : data.selections" @change="onChange" :readonly="data.disabled"
-			:clear-icon="false" :popup-title="data.label"></uni-data-picker>
+			:clear-icon="false" :popup-title="data.label"></uni-data-picker> -->
+		<!-- 		<OISelect v-if="model" v-model:value="model[data.fieldId]"
+			:dataList="data.useDict ? data.dict : data.selections" @change="onChange" :disabled="data.disabled"
+			:clearable="data.setting.clearable" :filterable="data.setting.filterable"></OISelect>
+		<OISelect v-else v-model:value="data.value" :dataList="data.useDict ? data.dict : data.selections"
+			@change="onChange" :disabled="data.disabled" :clearable="data.setting.clearable"
+			:filterable="data.setting.filterable"></OISelect> -->
+		<OIDataSelect v-if="model" v-model="model[data.fieldId]" :localdata="data.useDict ? data.dict : data.selections"
+			@change="onChange" :disabled="data.disabled" :clear="data.setting.clearable"
+			:filterable="data.setting.filterable"></OIDataSelect>
+		<OIDataSelect v-else v-model="data.value" :localdata="data.useDict ? data.dict : data.selections"
+			@change="onChange" :disabled="data.disabled" :clear="data.setting.clearable"
+			:filterable="data.setting.filterable"></OIDataSelect>
+
+
 	</view>
 </template>
 
 <script>
+	import OIDataSelect from '@/components/data-select/index.vue'
 	export default {
 		name: "OIFormSelect",
+		components: {
+			OIDataSelect
+		},
 		props: {
 			data: {
 				type: Object,
@@ -22,6 +40,10 @@
 		},
 		methods: {
 			onChange(e) {
+				if (this.model)
+					console.log(e, this.model[this.data.fieldId])
+				else
+					console.log(e, this.data.value)
 				this.$emit("on-change", e)
 			},
 
@@ -33,37 +55,8 @@
 	.oi-form-select {
 		width: 100%;
 
-		.data-picker {
-			width: 100%;
-			background: #FFF;
-			border-radius: 0 !important;
-			color: #2d8cf0;
-			/* padding: 10rpx 8rpx 12rpx; */
-			font-size: 34rpx;
-			font-family: inherit;
-			box-shadow: none !important;
-			transition-duration: 0.1s;
-			margin-top: 0rpx;
-			/* vertical-align: 10px; */
-			vertical-align: middle;
 
-			.uni-select {
-				border: 1px solid #ccc;
-				border-radius: 0 !important;
-				color: #2d8cf0;
-			}
-
-			.uni-select__input-text {
-				color: #2d8cf0;
-			}
-		}
-
-
-
-		.input-disabled {
-			background-color: #f3f3f3 !important;
-		}
 	}
 
-
+	
 </style>
\ No newline at end of file
diff --git a/locale/en.json b/locale/en.json
index c3d8b82..83dd10d 100644
--- a/locale/en.json
+++ b/locale/en.json
@@ -61,6 +61,7 @@
 	"sys.please": "please",
 	"sys.port": "Port",
 
+"page.no_data": "No matching data",
 	"page.address": "address",
 	"page.server": "Server",
 	"page.mobox3_app_type": "Mobox3 PDA application types",
diff --git a/locale/es.json b/locale/es.json
index 23e174d..77f2b9b 100644
--- a/locale/es.json
+++ b/locale/es.json
@@ -60,6 +60,7 @@
 	"sys.please": "Por favor.",
 	"sys.port": "puerto",
 
+"page.no_data": "Sin datos coincidentes",
 	"page.address": "direcci贸n",
 	"page.server": "Servidor",
 	"page.mobox3_app_type": "Tipo de aplicaci贸n PDA mobox3",
diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json
index 784886c..91ff134 100644
--- a/locale/zh-Hans.json
+++ b/locale/zh-Hans.json
@@ -60,6 +60,7 @@
 	"sys.please": "璇�,
 	"sys.port": "绔彛",
 
+"page.no_data": "鏃犲尮閰嶆暟鎹�,
 	"page.address": "鍦板潃",
 	"page.server": "鏈嶅姟鍦板潃",
 	"page.mobox3_app_type": "mobox3 pda搴旂敤绫诲瀷",
diff --git a/locale/zh-Hant.json b/locale/zh-Hant.json
index 1b86d52..fda5183 100644
--- a/locale/zh-Hant.json
+++ b/locale/zh-Hant.json
@@ -60,6 +60,7 @@
 	"sys.please": "璇�,
 	"sys.port": "绔彛",
 
+"page.no_data": "鐒″尮閰嶆暩鎿�,
 "page.address": "鍦板潃",
 	"page.server": "鏈嶅嫏鍦板潃",
 	"page.mobox3_app_type": "mobox3 pda鎳夌敤椤炲瀷",
diff --git a/manifest.json b/manifest.json
index cf4f770..18df910 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2,8 +2,8 @@
     "name" : "MoboxPDA",
     "appid" : "__UNI__56D451E",
     "description" : "",
-    "versionName" : "1.1.72",
-    "versionCode" : 1172,
+    "versionName" : "1.1.75",
+    "versionCode" : 1175,
     "transformPx" : false,
     /* 5+App鐗规湁鐩稿叧 */
     "app-plus" : {
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 6dba341..74d65ae 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -9,7 +9,7 @@
 							:style="{'background-color':app.bk_color,'color':app.bk_color}">
 							<text class="ico" :class="app.img_font_style" :style="{'color':app.txt_color}"></text>
 						</a>
-						<view @click="onClickApp(app)" class="app-name">{{app.name}}</view>
+						<view @click="onClickApp(app)" class="app-name">{{ (app.list_name || app.name)}}</view>
 					</view>
 				</view>
 			</view>
diff --git a/pages/modal/3018_2.vue b/pages/modal/3018_2.vue
index 0511d95..28d0f61 100644
--- a/pages/modal/3018_2.vue
+++ b/pages/modal/3018_2.vue
@@ -660,9 +660,9 @@
 				if (item.name == "Input" || item.name == "InputNumber" || item.name == "Textarea") {
 					this.focusFieldId = item.fieldId
 				} else if (item.name == "ImageButton") {
-					
+
 					var onClickEvent = item.bind.onClickEvent; //鍚庡浘鏍囩偣鍑诲洖璋�-					
+
 					if (!onClickEvent.id) {
 						showInfo(this.translate('icon_click_event_empty'))
 						return;
@@ -800,8 +800,7 @@
 												focusFieldId: action.value
 											})
 										});
-									}
-									else if (action.action_type == 'open_panel') {
+									} else if (action.action_type == 'open_panel') {
 										var d = dialog({
 											title: '<i class="ace-icon fa fa-info-circle"></i> ' +
 												$this.translateSys("tip"),
@@ -1236,11 +1235,17 @@
 
 			//纭畾
 			sava() {
-				if (this.after_ok?.id) { // 鐐瑰嚮纭畾鎸夐挳鍚�-					this.afterOK();
-				} else {
-					this.add();
-				}
+				this.handleButtonClick((done) => {
+					if (this.after_ok?.id) { // 鐐瑰嚮纭畾鎸夐挳鍚�+						this.afterOK();
+					} else {
+						this.add();
+					}
+					setTimeout(() => {
+						done(); // 閲嶇疆鐘舵�
+					}, 1000);
+				});
+
 
 			},
 			add() {
@@ -1662,6 +1667,14 @@
 				})
 			},
 			onButtonClicked(btn) {
+				this.handleButtonClick((done) => {
+					this.buttonClicked(btn);
+					setTimeout(() => {
+						done(); // 閲嶇疆鐘舵�
+					}, 1000);
+				});
+			},
+			buttonClicked(btn) {
 				let enviroment = {
 					button: "top",
 					button_name: btn.ShowName,
diff --git a/pages/modal/3200.vue b/pages/modal/3200.vue
index d1b38a8..8132477 100644
--- a/pages/modal/3200.vue
+++ b/pages/modal/3200.vue
@@ -846,13 +846,27 @@
 			//鍒锋柊
 			Refresh(value) {
 				//鍒锋柊褰撳墠椤甸潰
-				this.initial();
+				this.handleButtonClick((done) => {
+						this.initial();
+					setTimeout(() => {
+						done(); // 閲嶇疆鐘舵�
+					}, 1000);
+				});
+			
 				// uni.redirectTo({
 				// 	url:'../modal/3200?param='+JSON.stringify(this.param)+"&titlename="+this.title,
 				// });
 			},
 			//鐐瑰嚮鏄剧ず娴忚瀵硅薄鏄剧ず椤甸潰
-			async onViewPageClick(style) {
+			onViewPageClick(style) {
+				this.handleButtonClick((done) => {
+					this.viewPageClick(style);
+					setTimeout(() => {
+						done(); // 閲嶇疆鐘舵�
+					}, 1000);
+				});
+			},
+			async viewPageClick(style) {
 				if (this.param.ViewPage) {
 					if (this.param.ViewPage.View_UIDef) {
 						this.styledef = style;
@@ -1674,6 +1688,7 @@
 			//鐐逛腑琛ㄥ崟
 			onPanelClick(value) { //鐐瑰嚮闈㈡澘楂樹寒鏄剧ず
 				// console.log(value);
+				
 				this.setData({
 					activeItem: this.detail1StyleDefList[value]
 				})
diff --git a/pages/modal/3200_view.vue b/pages/modal/3200_view.vue
index ffb290d..9e40d67 100644
--- a/pages/modal/3200_view.vue
+++ b/pages/modal/3200_view.vue
@@ -385,7 +385,15 @@
 				})
 			},
 			//澶勭悊鐩稿叧鎸夐挳
-			async onButtonClicked(btn) {
+			onButtonClicked(btn) {
+				this.handleButtonClick((done) => {
+					this.buttonClicked(btn);
+					setTimeout(() => {
+						done(); // 閲嶇疆鐘舵�
+					}, 1000);
+				});
+			},
+			async buttonClicked(btn) {
 				var style = this.styleDef || '';
 
 				try {
diff --git a/pages/modal/3202.vue b/pages/modal/3202.vue
index 6f3d68e..44ef81f 100644
--- a/pages/modal/3202.vue
+++ b/pages/modal/3202.vue
@@ -227,7 +227,7 @@
 						};
 						runCustomEvent(dataInfo).then(result => {
 							console.log(result);
-							
+
 							if (result.ret != 0 && result.ret != 1) {
 								let cls_name = result.event_info?.cls_name
 								let event_name = result.event_info?.event_name
@@ -594,7 +594,15 @@
 				this.initial()
 			},
 			//鐐瑰嚮鏄剧ず娴忚瀵硅薄鏄剧ず椤甸潰
-			async onViewPageClick(style) {
+			onViewPageClick(style) {
+				this.handleButtonClick((done) => {
+					this.viewPageClick(style);
+					setTimeout(() => {
+						done(); // 閲嶇疆鐘舵�
+					}, 1000);
+				});
+			},
+			async viewPageClick(style) {
 				if (!this.clickItemEvent.id) {
 					return;
 				}
@@ -639,7 +647,7 @@
 					data_json,
 				}).then(result => {
 					// console.log(result);
-						hideLoading()
+					hideLoading()
 					if (result.ret != 0 && result.ret != 1) {
 						let cls_name = result.event_info?.cls_name
 						let event_name = result.event_info?.event_name
@@ -705,7 +713,7 @@
 
 				}).catch(ex => {
 					// console.log(ex);
-						hideLoading()
+					hideLoading()
 					showError(ex, this.translateSys("error") + "8.1")
 				});
 			},
@@ -759,7 +767,7 @@
 			//鎵ц瑙﹀彂浜嬩欢
 			async triggerEvent(btn, style, enviroment) {
 				const $this = this
-showLoading("loading...")
+				showLoading("loading...")
 				var obj_attr = this.head_styledef.form.model;
 				// console.log(obj_attr);
 				var input_param = Base64.encode(
@@ -797,7 +805,7 @@
 					input_param,
 					data_json,
 				}).then(result => {
-						hideLoading()
+					hideLoading()
 					// console.log(result);
 					if (result.ret != 0 && result.ret != 1) {
 						let cls_name = result.event_info?.cls_name
@@ -869,7 +877,7 @@
 
 				}).catch(ex => {
 					// console.log(ex);
-						hideLoading()
+					hideLoading()
 					showError(ex, this.translateSys("error") + "8.1")
 				});
 			},
diff --git a/pages/modal/3202_view.vue b/pages/modal/3202_view.vue
index 1dc8d95..2d21a57 100644
--- a/pages/modal/3202_view.vue
+++ b/pages/modal/3202_view.vue
@@ -506,7 +506,6 @@
 				})
 			},
 			onButtonClicked(btn) {
-
 				let enviroment = {
 					button: "top",
 					button_name: btn.ShowName,
@@ -514,11 +513,16 @@
 					function: "3202",
 					master: {},
 				};
-				if (btn.FunCode == "TriggerEvent") {
-					this.onTriggerEvent(btn, enviroment);
-				} else {
-					this.$Message.warning(this.$t("sys.unrealized"));
-				}
+				this.handleButtonClick((done) => {
+					if (btn.FunCode == "TriggerEvent") {
+						this.onTriggerEvent(btn, enviroment);
+					} else {
+						this.$Message.warning(this.$t("sys.unrealized"));
+					}
+					setTimeout(() => {
+						done(); // 閲嶇疆鐘舵�
+					}, 1000);
+				});
 
 			},
 			async onTriggerEvent(btn, enviroment) {
@@ -570,7 +574,7 @@
 					var $this = this;
 					if (!this.exit_view_event.id)
 						return
-						showLoading("loading...")
+					showLoading("loading...")
 					let data_json = [];
 					let jsonlist = [];
 					let detailStyleList = this.detail1StyleDefList;
@@ -1001,8 +1005,8 @@
 
 		.v-scroll-view {
 			flex: 1;
-			overflow: hidden;
 			width: 98%;
+			overflow: auto;
 		}
 
 		.view-bottom {
diff --git a/pages/modal/5601.vue b/pages/modal/5601.vue
index 31dc2b6..dfa190f 100644
--- a/pages/modal/5601.vue
+++ b/pages/modal/5601.vue
@@ -58,7 +58,8 @@
 										'btn-one':pageData.Button.length == 1,
 										'btn-left':(btnIndex < pageData.Button.length - 1),
 										'btn-right': btnIndex > 0 && btnIndex == pageData.Button.length - 1 ,
-										'width-50':(pageData.Button.length == 2),'width-32':(pageData.Button.length == 3),'width-30':(pageData.DropDownButton.length> 0)}" @click="onBtnClick(btn, pageData)">
+										'width-50':(pageData.Button.length == 2),'width-32':(pageData.Button.length == 3),
+										'width-30':(pageData.DropDownButton.length> 0)}" @click="onBtnClick(btn, pageData)">
 									<text v-if="btn.Style == 'img' || btn.Style == 'img_text'" class="img"></text>
 									{{btn.ShowName ||""}}
 								</button>

--
Gitblit v1.9.1