<template>
	<view class="tm-password ">
		
		<view @click="show=!show" class="flex-center flex-between">
			<view class="tm-password-item flex-center  "
			 :class="[
				 width>0?'':'mx-12',
				 `round-${round}`,
				 `shadow-${color_tmeme}-${shadow}`,
				 model==='line'?black_tmeme?(strVal.length==index?' grey-darken-3 ':'border-grey-a-1 grey-darken-3 '):`border-${color_tmeme}-b-3`:'',
				 model==='box'?(black_tmeme?(strVal.length==index?'grey-darken-3 ':'border-grey-a-1 grey-darken-3 '):(strVal.length==index?'':`border-${color_tmeme}-a-1 `)):'',
				 model==='fill'?black_tmeme?'grey-darken-3 ':bgColor:'',
				 
			 ]"
			v-for="(item,index) in strLength" 
			:key="index"
			:style="{
				width:width>0?'auto':(100/strLength)+'%',
				height:height+'rpx'
			}"
			>
				<view
				 :style="{width:width>0?width+'rpx':'atuo'}"
				 :class="[
					`round-${round}`,
					strVal.length==index?'aniOn '+(model!=='line'&&model!=='box'?`border-${color_tmeme}-a-2 shadow-${color_tmeme}-6`:''):'',
					strVal.length==index?(model=='box'?`border-${color_tmeme}-a-2  shadow-${color_tmeme}-6`:''):'',
					strVal.length==index?(model=='line'&&black_tmeme?`border-${color_tmeme}-a-2  shadow-${color_tmeme}-6`:''):'',
				]"  class=" fulled fulled-height flex-center">
					<text v-if="strVal[index]&&showVal"
					class="text-weight-b text-size-lg"
					:class="[
						
						black_tmeme?'text-white':`text-${textColor_tmeme}`
					]"
					>
						{{strVal[index]?strVal[index]:""}}
					</text>
					<view
					v-if="(strVal[index]&&!showVal)||(!strVal[index]&&showVal)"
					class="tm-password-item-middle  "
					:class="[
						noval==='mline'?'mline round-5  ':'',
						noval==='round'?'mround rounded':'',
						'tm-password-item-middle-w',
						textColor_tmeme
					]"
					></view>
				</view>
			</view>
		</view>
		<tm-keyborad @confirm="$emit('confirm',strVal)" :ok-color="color_tmeme" :model="keyboradModel" :black="black_tmeme" v-model="strVal" :decimal="false" :show.sync="show"></tm-keyborad>
	</view>
</template>

<script>
	/**
	 * 密码、验证码输入框
	 * @property {String|Number} value = [] 默认:'',待输入内容,推荐使用v-model,或者value.sync
	 * @property {String|Number} round = [] 默认:4,圆角
	 * @property {String|Number} width = [] 默认:0,项目的宽,默认使用百分比的宽度。
	 * @property {String|Number} height = [] 默认:100,项目的宽
	 * @property {String|Number} shadow = [] 默认:0,投影
	 * @property {Number} code-length = [] 默认:4,输入框数
	 * @property {String} model = [line|box|fill] 默认:fill,外框的样式。line|box|fill
	 * @property {String} noval = [mline|round] 默认:round,中间未填充数据的样式。。mline|round
	 * @property {Boolean} show-val = [] 默认:false,是否展现/隐藏输入内容
	 * @property {Boolean} black = [] 默认:false,暗黑模式
	 * @property {String} color = [] 默认:primary,主题色
	 * @property {String} bg-color = [] 默认:grey-lighten-4,输入背景主题色
	 * @property {String} text-color = [] 默认:primary,文字颜色。
	 * @property {String} keyborad-model = [number|password] 默认:number,键盘类型:number|password
	 * @property {Function} input 输入内容时触发。
	 * @property {Function} confirm 输入完内容,点击确认时触发
	 * @example <tm-password v-model="num"></tm-password>
	 */
	import tmKeyborad from "@/tm-vuetify/components/tm-keyborad/tm-keyborad.vue"
	export default {
		components:{tmKeyborad},
		name:"tm-password",
		model:{
			prop:'value',
			event:'input'
		},
		props:{
			value:{
				type:String|Number,
				default:''
			},
			codeLength:{
				type:Number,
				default:4
			},
			round:{
				type:Number,
				default:4
			},
			shadow:{
				type:Number,
				default:0
			},
			bgColor:{
				type:String,
				default:'grey-lighten-4'
			},
			height:{
				type:Number,
				default:100
			},
			width:{
				type:Number,
				default:0
			},
			// 外框的样式。
			model:{
				type:String,
				default:'fill' //外形形状 line|box|fill
			},
			// 中间未填充数据的样式。
			noval:{
				type:String,
				default:'round' //mline|round
			},
			// 是否展现内容
			showVal:{
				type:Boolean,
				default:false
			},
			black:{
				type:Boolean|String,
				default:null
			},
			color:{
				type:String,
				default:'primary' 
			},
			textColor:{
				type:String,
				default:'grey-darken-3' 
			},
			keyboradModel:{
				type:String,
				default:'number' //number|password
			},
			// 跟随主题色的改变而改变。
			fllowTheme:{
				type:Boolean|String,
				default:false
			}
		},
		computed:{
			black_tmeme: function() {
				if (this.black !== null) return this.black;
				return this.$tm.vx.state().tmVuetify.black;
			},
			color_tmeme:function(){
				if(this.$tm.vx.state().tmVuetify.color!==null&&this.$tm.vx.state().tmVuetify.color && this.fllowTheme){
					return this.$tm.vx.state().tmVuetify.color;
				}
				return this.color;
			},
			textColor_tmeme:function(){
				if(this.$tm.vx.state().tmVuetify.color!==null&&this.$tm.vx.state().tmVuetify.color && this.fllowTheme){
					return this.$tm.vx.state().tmVuetify.color;
				}
				return this.textColor;
			},
			strLength:function(){
				if(this.codeLength==0||!this.codeLength) return 1;
				return this.codeLength;
			},
			strVal:{
				get:function(){
					return this.value;
				},
				set:function(val){
					let p = val;
					if(val.length > this.strLength){
						p = val.substr(0,this.strLength);;
					}
					this.$emit("input",p )
					this.$emit("update:value",p )
				}
			},
			// strCode:function(){
			// 	let val = this.strVal;
			// 	let strlen = this.strLength - this.strVal.length;
			// 	for(let i=0;i<strlen;i++){
					
			// 	}
			// }
		},
		data() {
			return {
				show:false
			};
		}
	}
</script>

<style lang="scss">
.tm-password{
	.tm-password-item{
		height: 100rpx;
		.aniOn{
			animation: easinOut 1.5s infinite linear;
		}
		.tm-password-item-middle{
			&.mline{
				width: 100%;
				height: 10upx;
			}
			&.mround{
				width: 20upx;
				height: 20upx;
			}
			&.tm-password-item-middle-w{
				width: 20upx;
			}
		}
	}
}

	@keyframes easinOut {
		0% {
			opacity: 1;
			
		}

		50% {
			opacity: 0.4;
			
		}

		100% {
			opacity: 1;
			
		}
	}
</style>