2 Commits 737cc1097e ... da2a741f78

Author SHA1 Message Date
  liranlong da2a741f78 Merge branch 'master' of http://117.72.14.118:3000/kl/zj-mobile-oa 2 months ago
  liranlong 79ec73b40f 修改详情页 2 months ago

+ 576 - 0
components/mySelectTree/mySelectTree.vue

@@ -0,0 +1,576 @@
+<template>
+	<view class="uni-stat__select">
+		<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">
+					<view class="uni-select__input-text">{{label}}</view>
+				</view>
+				<view class="uni-select--mask" v-if="showSelector" @click="toggleSelector" />
+				<view class="uni-select__selector" :style="getOffsetByPlacement" v-if="showSelector">
+					<view :class="placement=='bottom'?'uni-popper__arrow_bottom':'uni-popper__arrow_top'"></view>
+					<scroll-view scroll-y="true" class="uni-select__selector-scroll">
+						<view class="uni-select__selector-empty" v-if="mixinDatacomResData.length === 0">
+							<text>{{emptyTips}}</text>
+						</view>
+						<view v-else class="uni-select__selector-item" v-for="(item,index) in mixinDatacomResData" :key="index">
+							<view style="text-align: left;" class="uni-select__selector-item-title">
+								{{formatItemName(item)}}
+							</view>
+							<view class="uni-select__selector-item-file" v-for="(iitem,iindex) in item.file" @click="change(iitem)" :key="iindex">
+								<view :class="{'uni-select__selector__disabled': iitem.disable}">
+									{{formatItemName(iitem)}}
+								</view>
+								<view style="flex:1;margin: 20rpx 20rpx; border-bottom: 1rpx dashed #000;">
+								</view>
+								<view class="">
+									{{iitem.pageNum}}页
+								</view>
+							</view>
+						</view>
+					</scroll-view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * DataChecklist 数据选择器
+	 * @description 通过数据渲染的下拉框组件
+	 * @tutorial https://uniapp.dcloud.io/component/uniui/uni-data-select
+	 * @property {String} value 默认值
+	 * @property {Array} localdata 本地数据 ,格式 [{text:'',value:''}]
+	 * @property {Boolean} clear 是否可以清空已选项
+	 * @property {Boolean} emptyText 没有数据时显示的文字 ,本地数据无效
+	 * @property {String} label 左侧标题
+	 * @property {String} placeholder 输入框的提示文字
+	 * @property {Boolean} disabled 是否禁用
+	 * @property {String} placement 弹出位置
+	 * 	@value top   		顶部弹出
+	 * 	@value bottom		底部弹出(default)
+	 * @event {Function} change  选中发生变化触发
+	 */
+
+	export default {
+		name: "uni-data-select",
+		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
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			// 格式化输出 用法 field="_id as value, version as text, uni_platform as label" format="{label} - {text}"
+			format: {
+				type: String,
+				default: ''
+			},
+			placement: {
+				type: String,
+				default: 'bottom'
+			}
+		},
+		data() {
+			return {
+				showSelector: false,
+				current: '',
+				mixinDatacomResData: [],
+				apps: [],
+				channels: [],
+				cacheKey: "uni-data-select-lastSelectedValue",
+			};
+		},
+		created() {
+			this.debounceGet = this.debounce(() => {
+				this.query();
+			}, 300);
+			if (this.collection && !this.localdata.length) {
+				this.debounceGet();
+			}
+		},
+		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;
+			},
+			getOffsetByPlacement() {
+				switch (this.placement) {
+					case 'top':
+						return "bottom:calc(100% + 12px);";
+					case 'bottom':
+						return "top:calc(100% + 12px);";
+				}
+			}
+		},
+
+		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;
+			},
+
+			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() {
+				if (this.disabled) {
+					return
+				}
+
+				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;
+
+	.uni-stat__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-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__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;
+		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{
+		/* #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-item {
+		/* #ifndef APP-NVUE */
+		//display: flex;
+		cursor: pointer;
+		/* #endif */
+		line-height: 35px;
+		font-size: 14px;
+		/* border-bottom: solid 1px $uni-border-3; */
+		padding: 0px 10px;
+	}
+	.uni-select__selector-item-title{
+		align-items: left;
+		font-weight: 700;
+	}
+	
+	.uni-select__selector-item-file {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		cursor: pointer;
+		/* #endif */
+		line-height: 35px;
+		font-size: 14px;
+		/* border-bottom: solid 1px $uni-border-3; */
+		padding: 0px 10px;
+	}
+
+	.uni-select__selector-item-file:hover {
+		background-color: #f9f9f9;
+		color: #6f9acd;
+	}
+
+	.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_bottom,
+	.uni-popper__arrow_bottom::after,
+	.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_bottom {
+		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_bottom::after {
+		content: " ";
+		top: 1px;
+		margin-left: -6px;
+		border-top-width: 0;
+		border-bottom-color: #fff;
+	}
+
+	.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;
+		font-weight: 700;
+		align-items: left;
+	}
+
+	.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;
+	}
+</style>

+ 265 - 0
pages/information/information - 副本.vue

@@ -0,0 +1,265 @@
+<template>
+	<view class="topBtn">
+		<u-subsection bg-color="rgb(215,224,233)" button-color="rgb(0,99,208)" active-color="white" :list="list"
+			v-model="current" @change="subChange"></u-subsection>
+		<view class="btn">
+			<u-button size="medium" type="primary">已阅</u-button>
+			<u-button size="medium" type="success">转交</u-button>
+			<u-button size="medium" type="error">退件</u-button>
+			<u-button size="medium" @click="onClose">关闭</u-button>
+		</view>
+	</view>
+	<scroll-view scroll-y="true" class="content" v-show="current === 0">
+		<image v-for="it in 48" src="../../static/666.png" mode="heightFix"></image>
+	</scroll-view>
+
+	<view class="handleFile" v-show="current === 1">
+
+		<!-- 左侧视图 -->
+		<view style="height: 100%;">
+			<view style="border-bottom: 1rpx solid #cccccc;line-height: 100rpx;display: flex;">
+				<mySelectTree class="mySelectTree" v-model="pdfValue" label="收文" :localdata="range" @change="change">
+				</mySelectTree>
+				<u-button style="float: right;line-height: 60rpx;height: 60rpx;margin-top: 10rpx;" size="medium"
+					type="primary">重新加载</u-button>
+				<uni-icons style="float: right;line-height: 40rpx;background-color: #bdc7d4;margin: 20rpx 20rpx;" type="left"
+					size="20" color="#999" />
+			</view>
+			<scroll-view scroll-y="true">
+				<image style="width: 100%;height: 12000rpx;" src="../../static/pdf.png"></image>
+
+
+			</scroll-view>
+		</view>
+
+		<!-- 右侧视图 -->
+		<scroll-view scroll-y="true">
+			<u-form :model="form" ref="form1">
+				<view style="text-align: start;font-size: 34rpx;font-weight: 700;">领导意见:</view>
+				<u-form-item prop="suggest" :borderBottom="false"><u-input type="textarea" v-model="form.suggest" border
+						height="400" /></u-form-item>
+			</u-form>
+			<view style="display: flex;">
+				<view style="flex: 1;">
+
+				</view>
+				<u-button @click="confirm" style="margin-right: 40rpx;height: 70rpx;">保存</u-button>
+				<u-button @click="confirm" style="height: 70rpx;">常用语</u-button>
+			</view>
+			<view style="text-align: start;font-size: 34rpx;font-weight: 700;line-height: 80rpx;">
+				操作
+			</view>
+			<view class="selected">
+				<view style="width: 500rpx;">
+					<uni-segmented-control :current="czcurrent" :values="czlist" @clickItem="czsubChange" />
+				</view>
+				<view style="padding: 20rpx;background-color: #f2f2f2;" v-show="!show">
+					<view style="display: flex;line-height: 80rpx;padding: 10rpx;">
+						<span style="color: #2d68ea;">转处室,直属领导:</span>
+						<u-button v-for="(item,index) in zcszsdwList" :type="zcszsdwIndex == index ?'primary' :''" class="lybut"
+							size="mini" @click="zcszsdwClick(index)">{{item.value}}</u-button>
+						<view style="flex: 1;">
+							<u-button style="float: right;margin-top: 10rpx;" size="mini">更多</u-button>
+
+						</view>
+					</view>
+					<view style="background-color: #fff;height: 100rpx;">
+
+					</view>
+				</view>
+				<view class="" v-show="show">
+					已阅后,本件转入已办件!
+				</view>
+				<view class="">
+					<u-button type="primary" style="height: 70rpx;width: 400rpx;">提交</u-button>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script setup>
+	import {
+		ref,
+		reactive,
+		nextTick
+	} from "vue"
+	import {
+		onLoad,
+		onReady
+	} from "@dcloudio/uni-app"
+
+	const show = ref(true)
+	const form1 = ref(null)
+	const rules = ref({
+		suggest: [{
+			required: true,
+			message: '请输入意见',
+			trigger: ['change', 'blur']
+		}]
+	})
+
+	const list = ref([{
+			name: '文件浏览'
+		},
+		{
+			name: '办理'
+		},
+		{
+			name: '流程图'
+		}
+	])
+	const zcszsdwIndex = ref(-1)
+	const zcszsdwList = ref([{
+			value: "处室正职",
+			ry: ["张三", "李四", "王五"]
+		},
+		{
+			value: "直属单位正职",
+			ry: ["张三", "王五"]
+		}
+	])
+
+
+	const czlist = ref(['转发', '已阅'])
+	const current = ref(0)
+	const czcurrent = ref(0)
+	const pdfValue = ref(null)
+	const range = ref([{
+			value: 0,
+			text: "文档目录",
+			file: [{
+				value: 10,
+				text: "PDF1",
+				pageNum: 5
+			}, {
+				value: 12,
+				text: "PDF222",
+				pageNum: 8
+			}]
+		},
+		{
+			value: 1,
+			text: "附件",
+			file: []
+		},
+	])
+
+	const urlParams = ref({})
+	const form = reactive({
+		suggest: ''
+	})
+
+	function change(e) {
+		console.log("e:", e);
+	}
+
+	function onClose() {
+		uni.reLaunch({
+			url: urlParams.value.url
+		})
+	}
+
+	function confirm() {
+		form1.value.validate((valid) => {
+			if (valid) {
+				uni.showToast({
+					icon: "none",
+					title: "表单验证通过"
+				})
+			}
+		})
+	}
+
+	function zcszsdwClick(index) {
+		zcszsdwIndex.value = index
+	}
+
+	function subChange() {}
+
+	function czsubChange() {
+		show.value = !show.value
+	}
+	onLoad((e) => {
+		urlParams.value = e
+		console.log(e);
+		show.value = false
+	})
+
+	onReady(() => {
+		form1.value.setRules(rules.value)
+	})
+</script>
+
+<style lang="scss" scoped>
+	body {
+		padding: 100rpx 50rpx;
+		box-sizing: border-box;
+	}
+
+	.topBtn {
+		width: calc(100vw - 100rpx);
+		height: 100rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		//margin-bottom: 20rpx;
+		border-bottom: 1rpx solid #cccccc;
+
+		.u-subsection {
+			width: 600rpx;
+		}
+
+		.btn {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+
+			uni-button {
+				margin-left: 20rpx;
+			}
+		}
+	}
+
+	.content {
+		background-color: #ebebeb;
+		border-radius: 20rpx;
+		width: calc(100vw - 100rpx);
+		;
+		height: calc(100vh - 300rpx);
+		text-align: center;
+	}
+
+	.handleFile {
+		width: calc(100vw - 100rpx);
+		;
+		height: calc(100vh - 300rpx);
+		display: flex;
+		justify-content: space-around;
+		align-items: center;
+
+		uni-scroll-view {
+			width: 45vw;
+			height: 100%;
+			background-color: #fff;
+			text-align: center;
+			padding: 20rpx;
+			box-sizing: border-box;
+		}
+	}
+
+	.selected {
+		height: 400rpx;
+	}
+
+	.mySelectTree {
+		width: 400rpx;
+	}
+
+	.lybut {
+		height: 50rpx;
+		width: 200rpx;
+		margin-top: 10rpx;
+		margin-left: 20rpx;
+	}
+</style>

+ 200 - 99
pages/information/information.vue

@@ -1,6 +1,7 @@
 <template>
 	<view class="topBtn">
-		<u-subsection bg-color="rgb(215,224,233)" button-color="rgb(0,99,208)" active-color="white" :list="list" v-model="current" @change="subChange"></u-subsection>
+		<u-subsection bg-color="rgb(215,224,233)" button-color="rgb(0,99,208)" active-color="white" :list="list"
+			v-model="current" @change="subChange"></u-subsection>
 		<view class="btn">
 			<u-button size="medium" type="primary">已阅</u-button>
 			<u-button size="medium" type="success">转交</u-button>
@@ -11,152 +12,252 @@
 	<scroll-view scroll-y="true" class="content" v-show="current === 0">
 		<image v-for="it in 48" src="../../static/666.png" mode="heightFix"></image>
 	</scroll-view>
-	
+
 	<view class="handleFile" v-show="current === 1">
-		
+
 		<!-- 左侧视图 -->
-		<scroll-view scroll-y="true" >
-			<uni-transition :mode-class="['fade', 'slide-left']" :show="!show">
-				<image v-for="it in 48" src="../../static/666.png" mode="heightFix"></image>
-			</uni-transition>
-			<uni-transition :mode-class="['fade', 'slide-right']" :show="show">
-				选择人...
-			</uni-transition>
-		</scroll-view>
-		
+		<view style="height: 100%;">
+			<view style="border-bottom: 1rpx solid #cccccc;line-height: 100rpx;display: flex;">
+				<mySelectTree class="mySelectTree" v-model="pdfValue" label="收文" :localdata="range" @change="change">
+				</mySelectTree>
+				<u-button style="float: right;line-height: 60rpx;height: 60rpx;margin-top: 10rpx;" size="medium"
+					type="primary">重新加载</u-button>
+				<uni-icons style="float: right;line-height: 40rpx;background-color: #bdc7d4;margin: 20rpx 20rpx;" type="left"
+					size="20" color="#999" />
+			</view>
+			<scroll-view scroll-y="true">
+				<image style="width: 100%;height: 12000rpx;" src="../../static/pdf.png"></image>
+
+
+			</scroll-view>
+		</view>
+
 		<!-- 右侧视图 -->
-		<scroll-view scroll-y="true" >
+		<scroll-view scroll-y="true">
 			<u-form :model="form" ref="form1">
-				<view style="text-align: start;">委分管领导审示意见:</view>
-				<u-form-item prop="suggest"><u-input type="textarea" v-model="form.suggest" border height="400"/></u-form-item>
+				<view style="text-align: start;font-size: 34rpx;font-weight: 700;">领导意见:</view>
+				<u-form-item prop="suggest" :borderBottom="false"><u-input type="textarea" v-model="form.suggest" border
+						height="400" /></u-form-item>
 			</u-form>
-			<button type="primary" @click="confirm" style="margin-bottom: 40rpx;">意见确认</button>
-			
+			<view style="display: flex;">
+				<view style="flex: 1;">
+
+				</view>
+				<u-button @click="confirm" style="margin-right: 40rpx;height: 70rpx;">保存</u-button>
+				<u-button @click="confirm" style="height: 70rpx;">常用语</u-button>
+			</view>
+			<view style="text-align: start;font-size: 34rpx;font-weight: 700;line-height: 80rpx;">
+				操作
+			</view>
 			<view class="selected">
-				<button @click="choosePeople">转交人选择</button>
+				<view style="width: 500rpx;">
+					<uni-segmented-control :current="czcurrent" :values="czlist" @clickItem="czsubChange" />
+				</view>
+				<view style="padding: 20rpx;background-color: #f2f2f2;" v-show="!show">
+					<view style="display: flex;line-height: 80rpx;padding: 10rpx;">
+						<span style="color: #2d68ea;">转处室,直属领导:</span>
+						<u-button v-for="(item,index) in zcszsdwList" :type="zcszsdwIndex == index ?'primary' :''" class="lybut"
+							size="mini" @click="zcszsdwClick(index)">{{item.value}}</u-button>
+						<view style="flex: 1;">
+							<u-button style="float: right;margin-top: 10rpx;" size="mini">更多</u-button>
+
+						</view>
+					</view>
+					<view style="background-color: #fff;height: 100rpx;">
+
+					</view>
+				</view>
+				<view class="" v-show="show">
+					已阅后,本件转入已办件!
+				</view>
+				<view class="">
+					<u-button type="primary" style="height: 70rpx;width: 400rpx;">提交</u-button>
+				</view>
 			</view>
 		</scroll-view>
 	</view>
 </template>
 
-<script setup>
-	import {ref, reactive, nextTick} from"vue"
-	import {onLoad, onReady} from "@dcloudio/uni-app"
-	
-	const show = ref(false)
-	const form1 = ref(null)
-	const rules = ref({
-		suggest: [{ required: true, message: '请输入意见', trigger: ['change', 'blur'] }]
-	})
-	
-	const list = ref([
-		{
-			name: '文件浏览'
-		}, 
-		{
-			name: '办理'
-		}, 
-		{
-			name: '流程图'
-		}
-	])
-	const current = ref(0)
-	const urlParams = ref({})
-	const form = reactive({
-		suggest: ''
-	})
-	
-	function onClose(){
-		uni.reLaunch({
-			url: urlParams.value.url
-		})
-	}
-	
-	function confirm(){
-		form1.value.validate((valid) => {
-			if (valid) {
-				uni.showToast({
-					icon: "none",
-					title: "表单验证通过"
+<script>
+	import {
+		ref,
+		reactive,
+		nextTick
+	} from "vue"
+
+
+	export default {
+		onLoad(e) {
+			this.urlParams = e.url
+		},
+		data() {
+			return {
+				urlParams:"",
+				show: true,
+				list: [{
+						name: '文件浏览'
+					},
+					{
+						name: '办理'
+					},
+					{
+						name: '流程图'
+					}
+				],
+				zcszsdwIndex: -1,
+				zcszsdwList: [{
+						value: "处室正职",
+						ry: ["张三", "李四", "王五"]
+					},
+					{
+						value: "直属单位正职",
+						ry: ["张三", "王五"]
+					}
+				],
+				czlist: ref(['转发', '已阅']),
+				current: ref(0),
+				czcurrent: ref(0),
+				pdfValue: ref(null),
+				range: ref([{
+						value: 0,
+						text: "文档目录",
+						file: [{
+							value: 10,
+							text: "PDF1",
+							pageNum: 5
+						}, {
+							value: 12,
+							text: "PDF222",
+							pageNum: 8
+						}]
+					},
+					{
+						value: 1,
+						text: "附件",
+						file: []
+					},
+				]),
+				form: {
+					suggest: ""
+				},
+				rules: {
+					suggest: [{
+						required: true,
+						message: '请输入意见',
+					}]
+				}
+			};
+		},
+		created() {
+
+		},
+		mounted() {
+			this.$refs.form1.setRules(this.rules)
+		},
+		methods: {
+			change(e) {
+				console.log("e:", e);
+			},
+
+			onClose() {
+				uni.reLaunch({
+					url: this.urlParams
 				})
+			},
+
+			confirm() {
+				this.$refs.form1.validate((valid) => {
+					if (valid) {
+						uni.showToast({
+							icon: "none",
+							title: "表单验证通过"
+						})
+					}
+				})
+			},
+
+			zcszsdwClick(index) {
+				this.zcszsdwIndex = index
+			},
+
+			subChange() {},
+
+			czsubChange() {
+				this.show = !this.show
 			}
-		})
-	}
-	function choosePeople(type) {
-		show.value = !show.value
-	}
-	
-	function subChange(){
-		// show.value = false
+		}
 	}
-	
-	onLoad((e)=>{
-		urlParams.value = e
-		console.log(e);
-	})
-	
-	onReady(()=>{
-		form1.value.setRules(rules.value)
-	})
 </script>
 
 <style lang="scss" scoped>
-	body{
+	body {
 		padding: 100rpx 50rpx;
 		box-sizing: border-box;
 	}
-	.topBtn{
+
+	.topBtn {
 		width: calc(100vw - 100rpx);
 		height: 100rpx;
 		display: flex;
 		justify-content: space-between;
 		align-items: center;
-		margin-bottom: 50rpx;
-		.u-subsection{
+		//margin-bottom: 20rpx;
+		border-bottom: 1rpx solid #cccccc;
+
+		.u-subsection {
 			width: 600rpx;
 		}
-		.btn{
+
+		.btn {
 			display: flex;
 			align-items: center;
 			justify-content: center;
-			uni-button{
+
+			uni-button {
 				margin-left: 20rpx;
 			}
 		}
 	}
-	.content{
+
+	.content {
 		background-color: #ebebeb;
 		border-radius: 20rpx;
-		width: calc(100vw - 100rpx);;
+		width: calc(100vw - 100rpx);
+		;
 		height: calc(100vh - 300rpx);
 		text-align: center;
 	}
-	.handleFile{
-		background-color: #ebebeb;
-		border-radius: 20rpx;
-		width: calc(100vw - 100rpx);;
+
+	.handleFile {
+		width: calc(100vw - 100rpx);
+		;
 		height: calc(100vh - 300rpx);
 		display: flex;
 		justify-content: space-around;
 		align-items: center;
-		uni-scroll-view{
-			border-radius: 20rpx;
+
+		uni-scroll-view {
 			width: 45vw;
-			height: 80vh;
+			height: 100%;
 			background-color: #fff;
 			text-align: center;
-			padding: 50rpx;
+			padding: 20rpx;
 			box-sizing: border-box;
 		}
 	}
-	
-	.selected{
+
+	.selected {
 		height: 400rpx;
-		background-color: #f5f9fc;
-		border-radius: 15rpx;
-		padding: 40rpx;
-		uni-button{
-			background-color: rgb(215, 224, 233);
-		}
 	}
-</style>
+
+	.mySelectTree {
+		width: 400rpx;
+	}
+
+	.lybut {
+		height: 50rpx;
+		width: 200rpx;
+		margin-top: 10rpx;
+		margin-left: 20rpx;
+	}
+</style>

+ 162 - 0
pages/information/information_old.vue

@@ -0,0 +1,162 @@
+<template>
+	<view class="topBtn">
+		<u-subsection bg-color="rgb(215,224,233)" button-color="rgb(0,99,208)" active-color="white" :list="list" v-model="current" @change="subChange"></u-subsection>
+		<view class="btn">
+			<u-button size="medium" type="primary">已阅</u-button>
+			<u-button size="medium" type="success">转交</u-button>
+			<u-button size="medium" type="error">退件</u-button>
+			<u-button size="medium" @click="onClose">关闭</u-button>
+		</view>
+	</view>
+	<scroll-view scroll-y="true" class="content" v-show="current === 0">
+		<image v-for="it in 48" src="../../static/666.png" mode="heightFix"></image>
+	</scroll-view>
+	
+	<view class="handleFile" v-show="current === 1">
+		
+		<!-- 左侧视图 -->
+		<scroll-view scroll-y="true" >
+			<uni-transition :mode-class="['fade', 'slide-left']" :show="!show">
+				<image v-for="it in 48" src="../../static/666.png" mode="heightFix"></image>
+			</uni-transition>
+			<uni-transition :mode-class="['fade', 'slide-right']" :show="show">
+				选择人...
+			</uni-transition>
+		</scroll-view>
+		
+		<!-- 右侧视图 -->
+		<scroll-view scroll-y="true" >
+			<u-form :model="form" ref="form1">
+				<view style="text-align: start;">委分管领导审示意见:</view>
+				<u-form-item prop="suggest"><u-input type="textarea" v-model="form.suggest" border height="400"/></u-form-item>
+			</u-form>
+			<button type="primary" @click="confirm" style="margin-bottom: 40rpx;">意见确认</button>
+			
+			<view class="selected">
+				<button @click="choosePeople">转交人选择</button>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script setup>
+	import {ref, reactive, nextTick} from"vue"
+	import {onLoad, onReady} from "@dcloudio/uni-app"
+	
+	const show = ref(false)
+	const form1 = ref(null)
+	const rules = ref({
+		suggest: [{ required: true, message: '请输入意见', trigger: ['change', 'blur'] }]
+	})
+	
+	const list = ref([
+		{
+			name: '文件浏览'
+		}, 
+		{
+			name: '办理'
+		}, 
+		{
+			name: '流程图'
+		}
+	])
+	const current = ref(0)
+	const urlParams = ref({})
+	const form = reactive({
+		suggest: ''
+	})
+	
+	function onClose(){
+		uni.reLaunch({
+			url: urlParams.value.url
+		})
+	}
+	
+	function confirm(){
+		form1.value.validate((valid) => {
+			if (valid) {
+				uni.showToast({
+					icon: "none",
+					title: "表单验证通过"
+				})
+			}
+		})
+	}
+	function choosePeople(type) {
+		show.value = !show.value
+	}
+	
+	function subChange(){
+		// show.value = false
+	}
+	
+	onLoad((e)=>{
+		urlParams.value = e
+		console.log(e);
+	})
+	
+	onReady(()=>{
+		form1.value.setRules(rules.value)
+	})
+</script>
+
+<style lang="scss" scoped>
+	body{
+		padding: 100rpx 50rpx;
+		box-sizing: border-box;
+	}
+	.topBtn{
+		width: calc(100vw - 100rpx);
+		height: 100rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-bottom: 50rpx;
+		.u-subsection{
+			width: 600rpx;
+		}
+		.btn{
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			uni-button{
+				margin-left: 20rpx;
+			}
+		}
+	}
+	.content{
+		background-color: #ebebeb;
+		border-radius: 20rpx;
+		width: calc(100vw - 100rpx);;
+		height: calc(100vh - 300rpx);
+		text-align: center;
+	}
+	.handleFile{
+		background-color: #ebebeb;
+		border-radius: 20rpx;
+		width: calc(100vw - 100rpx);;
+		height: calc(100vh - 300rpx);
+		display: flex;
+		justify-content: space-around;
+		align-items: center;
+		uni-scroll-view{
+			border-radius: 20rpx;
+			width: 45vw;
+			height: 80vh;
+			background-color: #fff;
+			text-align: center;
+			padding: 50rpx;
+			box-sizing: border-box;
+		}
+	}
+	
+	.selected{
+		height: 400rpx;
+		background-color: #f5f9fc;
+		border-radius: 15rpx;
+		padding: 40rpx;
+		uni-button{
+			background-color: rgb(215, 224, 233);
+		}
+	}
+</style>

BIN
static/pdf.png


+ 39 - 0
uni_modules/uni-data-select/changelog.md

@@ -0,0 +1,39 @@
+## 1.0.8(2024-03-28)
+- 修复 在vue2下:style动态绑定导致编译失败的bug
+## 1.0.7(2024-01-20)
+- 修复 长文本回显超过容器的bug,超过容器部分显示省略号
+## 1.0.6(2023-04-12)
+- 修复 微信小程序点击时会改变背景颜色的 bug
+## 1.0.5(2023-02-03)
+- 修复 禁用时会显示清空按钮
+## 1.0.4(2023-02-02)
+- 优化 查询条件短期内多次变更只查询最后一次变更后的结果
+- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue
+## 1.0.3(2023-01-16)
+- 修复 不关联服务空间报错的问题
+## 1.0.2(2023-01-14)
+- 新增  属性 `format` 可用于格式化显示选项内容
+## 1.0.1(2022-12-06)
+- 修复  当where变化时,数据不会自动更新的问题
+## 0.1.9(2022-09-05)
+- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框
+## 0.1.8(2022-08-29)
+- 修复 点击的位置不准确
+## 0.1.7(2022-08-12)
+- 新增 支持 disabled 属性
+## 0.1.6(2022-07-06)
+- 修复 pc端宽度异常的bug
+## 0.1.5
+- 修复 pc端宽度异常的bug
+## 0.1.4(2022-07-05)
+- 优化 显示样式
+## 0.1.3(2022-06-02)
+- 修复 localdata 赋值不生效的 bug
+- 新增 支持  uni.scss 修改颜色
+- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用)
+## 0.1.2(2022-05-08)
+- 修复 当 value 为 0 时选择不生效的 bug
+## 0.1.1(2022-05-07)
+- 新增 记住上次的选项(仅 collection 存在时有效)
+## 0.1.0(2022-04-22)
+- 初始化

+ 562 - 0
uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue

@@ -0,0 +1,562 @@
+<template>
+	<view class="uni-stat__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">
+					<view v-if="current" class="uni-select__input-text">{{textShow}}</view>
+					<view v-else class="uni-select__input-text uni-select__input-placeholder">{{typePlaceholder}}</view>
+					<view v-if="current && 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" />
+				<view class="uni-select__selector" :style="getOffsetByPlacement" v-if="showSelector">
+					<view :class="placement=='bottom'?'uni-popper__arrow_bottom':'uni-popper__arrow_top'"></view>
+					<scroll-view scroll-y="true" class="uni-select__selector-scroll">
+						<view class="uni-select__selector-empty" v-if="mixinDatacomResData.length === 0">
+							<text>{{emptyTips}}</text>
+						</view>
+						<view v-else class="uni-select__selector-item" v-for="(item,index) in mixinDatacomResData" :key="index"
+							@click="change(item)">
+							<text :class="{'uni-select__selector__disabled': item.disable}">{{formatItemName(item)}}</text>
+						</view>
+					</scroll-view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * DataChecklist 数据选择器
+	 * @description 通过数据渲染的下拉框组件
+	 * @tutorial https://uniapp.dcloud.io/component/uniui/uni-data-select
+	 * @property {String} value 默认值
+	 * @property {Array} localdata 本地数据 ,格式 [{text:'',value:''}]
+	 * @property {Boolean} clear 是否可以清空已选项
+	 * @property {Boolean} emptyText 没有数据时显示的文字 ,本地数据无效
+	 * @property {String} label 左侧标题
+	 * @property {String} placeholder 输入框的提示文字
+	 * @property {Boolean} disabled 是否禁用
+	 * @property {String} placement 弹出位置
+	 * 	@value top   		顶部弹出
+	 * 	@value bottom		底部弹出(default)
+	 * @event {Function} change  选中发生变化触发
+	 */
+
+	export default {
+		name: "uni-data-select",
+		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
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			// 格式化输出 用法 field="_id as value, version as text, uni_platform as label" format="{label} - {text}"
+			format: {
+				type: String,
+				default: ''
+			},
+			placement: {
+				type: String,
+				default: 'bottom'
+			}
+		},
+		data() {
+			return {
+				showSelector: false,
+				current: '',
+				mixinDatacomResData: [],
+				apps: [],
+				channels: [],
+				cacheKey: "uni-data-select-lastSelectedValue",
+			};
+		},
+		created() {
+			this.debounceGet = this.debounce(() => {
+				this.query();
+			}, 300);
+			if (this.collection && !this.localdata.length) {
+				this.debounceGet();
+			}
+		},
+		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;
+			},
+			getOffsetByPlacement() {
+				switch (this.placement) {
+					case 'top':
+						return "bottom:calc(100% + 12px);";
+					case 'bottom':
+						return "top:calc(100% + 12px);";
+				}
+			}
+		},
+
+		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;
+			},
+
+			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() {
+				if (this.disabled) {
+					return
+				}
+
+				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 */
+	.uni-stat__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__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;
+		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-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_bottom,
+	.uni-popper__arrow_bottom::after,
+	.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_bottom {
+		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_bottom::after {
+		content: " ";
+		top: 1px;
+		margin-left: -6px;
+		border-top-width: 0;
+		border-bottom-color: #fff;
+	}
+
+	.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;
+	}
+
+	.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;
+	}
+</style>

+ 86 - 0
uni_modules/uni-data-select/package.json

@@ -0,0 +1,86 @@
+{
+  "id": "uni-data-select",
+  "displayName": "uni-data-select 下拉框选择器",
+  "version": "1.0.8",
+  "description": "通过数据驱动的下拉框选择器",
+  "keywords": [
+    "uni-ui",
+    "select",
+    "uni-data-select",
+    "下拉框",
+    "下拉选"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.1.1"
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-load-more"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y",
+        "alipay": "n"
+      },
+      "client": {
+        "App": {
+          "app-vue": "u",
+          "app-nvue": "n"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "u",
+          "百度": "u",
+          "字节跳动": "u",
+        "QQ": "u",
+        "京东": "u"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 8 - 0
uni_modules/uni-data-select/readme.md

@@ -0,0 +1,8 @@
+## DataSelect 下拉框选择器
+> **组件名:uni-data-select**
+> 代码块: `uDataSelect`
+
+当选项过多时,使用下拉菜单展示并选择内容
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 25 - 0
uni_modules/uni-load-more/changelog.md

@@ -0,0 +1,25 @@
+## 1.3.6(2024-10-15)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.5(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.4(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/en.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "Pull up to show more",
+	"uni-load-more.contentrefresh": "loading...",
+	"uni-load-more.contentnomore": "No more data"
+}

+ 8 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/index.js

@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+	en,
+	'zh-Hans': zhHans,
+	'zh-Hant': zhHant
+}

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉显示更多",
+	"uni-load-more.contentrefresh": "正在加载...",
+	"uni-load-more.contentnomore": "没有更多数据了"
+}

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉顯示更多",
+	"uni-load-more.contentrefresh": "正在加載...",
+	"uni-load-more.contentnomore": "沒有更多數據了"
+}

File diff suppressed because it is too large
+ 117 - 0
uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue


+ 84 - 0
uni_modules/uni-load-more/package.json

@@ -0,0 +1,84 @@
+{
+  "id": "uni-load-more",
+  "displayName": "uni-load-more 加载更多",
+  "version": "1.3.6",
+  "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "加载更多",
+    "load-more"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y",
+        "alipay": "n"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 14 - 0
uni_modules/uni-load-more/readme.md

@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 15 - 0
uni_modules/uni-segmented-control/changelog.md

@@ -0,0 +1,15 @@
+## 1.2.3(2024-04-02)
+- 修复 修复在微信小程序下inactiveColor失效bug
+## 1.2.2(2024-03-28)
+- 修复 在vue2下:style动态绑定导致编译失败的bug
+## 1.2.1(2024-03-20)
+- 新增 inActiveColor属性,可供配置未激活时的颜色
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-segmented-control](https://uniapp.dcloud.io/component/uniui/uni-segmented-control)
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.5(2021-05-12)
+- 新增 项目示例地址
+## 1.0.4(2021-02-05)
+- 调整为uni_modules目录规范

+ 146 - 0
uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue

@@ -0,0 +1,146 @@
+<template>
+	<view :class="[styleType === 'text'?'segmented-control--text' : 'segmented-control--button' ]"
+		:style="{ borderColor: styleType === 'text' ? '' : activeColor }" class="segmented-control">
+		<view v-for="(item, index) in values" :class="[styleType === 'text' ? '' : 'segmented-control__item--button',
+					index === 0 && styleType === 'button' ? 'segmented-control__item--button--first' : '',
+					index === values.length - 1 && styleType === 'button' ? 'segmented-control__item--button--last':'']" :key="index"
+			:style="{backgroundColor: index === currentIndex && styleType === 'button' ? activeColor : styleType === 'button' ?inActiveColor:'transparent', borderColor: index === currentIndex && styleType === 'text' || styleType === 'button' ? activeColor : inActiveColor}"
+			class="segmented-control__item" @click="_onClick(index)">
+			<view>
+				<text
+					:style="{color:index === currentIndex? styleType === 'text'? activeColor: '#fff': styleType === 'text'? '#000': activeColor}"
+					class="segmented-control__text"
+					:class="styleType === 'text' && index === currentIndex ? 'segmented-control__item--text': ''">{{ item }}</text>
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * SegmentedControl 分段器
+	 * @description 用作不同视图的显示
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=54
+	 * @property {Number} current 当前选中的tab索引值,从0计数
+	 * @property {String} styleType = [button|text] 分段器样式类型
+	 * 	@value button 按钮类型
+	 * 	@value text 文字类型
+	 * @property {String} activeColor 选中的标签背景色与边框颜色
+	 * @property {String} inActiveColor 未选中的标签背景色与边框颜色
+	 * @property {Array} values 选项数组
+	 * @event {Function} clickItem 组件触发点击事件时触发,e={currentIndex}
+	 */
+
+	export default {
+		name: 'UniSegmentedControl',
+		emits: ['clickItem'],
+		props: {
+			current: {
+				type: Number,
+				default: 0
+			},
+			values: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			activeColor: {
+				type: String,
+				default: '#2979FF'
+			},
+			inActiveColor: {
+				type: String,
+				default: 'transparent'
+			},
+			styleType: {
+				type: String,
+				default: 'button'
+			}
+		},
+		data() {
+			return {
+				currentIndex: 0
+			}
+		},
+		watch: {
+			current(val) {
+				if (val !== this.currentIndex) {
+					this.currentIndex = val
+				}
+			}
+		},
+		computed: {},
+		created() {
+			this.currentIndex = this.current
+		},
+		methods: {
+			_onClick(index) {
+				if (this.currentIndex !== index) {
+					this.currentIndex = index
+					this.$emit('clickItem', {
+						currentIndex: index
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.segmented-control {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		box-sizing: border-box;
+		/* #endif */
+		flex-direction: row;
+		height: 36px;
+		overflow: hidden;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.segmented-control__item {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		box-sizing: border-box;
+		/* #endif */
+		position: relative;
+		flex: 1;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.segmented-control__item--button {
+		border-style: solid;
+		border-top-width: 1px;
+		border-bottom-width: 1px;
+		border-right-width: 1px;
+		border-left-width: 0;
+	}
+
+	.segmented-control__item--button--first {
+		border-left-width: 1px;
+		border-top-left-radius: 5px;
+		border-bottom-left-radius: 5px;
+	}
+
+	.segmented-control__item--button--last {
+		border-top-right-radius: 5px;
+		border-bottom-right-radius: 5px;
+	}
+
+	.segmented-control__item--text {
+		border-bottom-style: solid;
+		border-bottom-width: 2px;
+		padding: 6px 0;
+	}
+
+	.segmented-control__text {
+		font-size: 14px;
+		line-height: 20px;
+		text-align: center;
+	}
+</style>

+ 85 - 0
uni_modules/uni-segmented-control/package.json

@@ -0,0 +1,85 @@
+{
+  "id": "uni-segmented-control",
+  "displayName": "uni-segmented-control 分段器",
+  "version": "1.2.3",
+  "description": "分段器由至少 2 个分段控件组成,用作不同视图的显示",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "分段器",
+    "segement",
+    "顶部选择"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y",
+        "alipay": "n"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 13 - 0
uni_modules/uni-segmented-control/readme.md

@@ -0,0 +1,13 @@
+
+
+## SegmentedControl 分段器
+> **组件名:uni-segmented-control**
+> 代码块: `uSegmentedControl`
+
+
+用作不同视图的显示
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-segmented-control)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 3 - 3
unpackage/dist/cache/.vite/deps/_metadata.json

@@ -1,8 +1,8 @@
 {
-  "hash": "42f7548a",
-  "configHash": "f69bfb83",
+  "hash": "375fdf95",
+  "configHash": "05da9d85",
   "lockfileHash": "e3b0c442",
-  "browserHash": "29355399",
+  "browserHash": "016d8b2a",
   "optimized": {},
   "chunks": {}
 }

Some files were not shown because too many files changed in this diff