yxk_h5_master/components/xinsoft-form-input/xinsoft-form-input.vue

438 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<!-- type:text -->
<view class="input_container" v-if="'text'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<input :disabled="!define.disabled" class="input_" :class="{'input_disabled' : !define.disabled}" type="text" :placeholder="define.placeholder" v-model="fieldSource[define.fieldName]" >
</view>
</view>
<!-- type:number -->
<view class="input_container" v-if="'number'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<input :disabled="!define.disabled" class="input_" :class="{'input_disabled' : !define.disabled}" type="number" :placeholder="define.placeholder" v-model.number="fieldSource[define.fieldName]" >
</view>
</view>
<!-- type:date -->
<view class="input_container" v-else-if="'date'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view class="uni-list-cell-db">
<picker class="picker_" mode="date" :value="date" :disabled="!define.disabled" :start="define.start" :end="define.end" :fields="define.fields" @change="bindDateChange">
<input class="input_" :class="{'input_disabled' : !define.disabled}" disabled="false" type="text" v-model="fieldSource[define.fieldName]">
</picker>
<uni-icons type="arrowdown" class="icon_dowm" color="#333" size="16"></uni-icons>
</view>
</view>
</view>
<!-- type:time -->
<view class="input_container" v-else-if="'time'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view class="uni-list-cell-db">
<picker class="picker_" mode="time" :value="time" :disabled="!define.disabled" start="00:00" end="23:59" @change="bindTimeChange">
<input class="input_" :class="{'input_disabled' : !define.disabled}" type="text" disabled="false" v-model="fieldSource[define.fieldName]">
</picker>
<uni-icons type="arrowdown" class="icon_dowm" color="#333" size="16"></uni-icons>
</view>
</view>
</view>
<!-- type:textarea -->
<view class="textarea_container" v-else-if="'textarea'===define.type">
<view class="name_">{{define.title}}</view>
<view class="textarea_out" :class="[{'isrequired':define.required}]">
<textarea class="textarea_" :class="{'input_disabled' : !define.disabled}" :disabled="!define.disabled" :placeholder="define.placeholder" v-model="fieldSource[define.fieldName]"></textarea>
</view>
</view>
<!-- type:selector -->
<view class="input_container" v-else-if="'selector'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view class="uni-list-cell-db">
<picker class="picker_" mode="selector" :disabled="!define.disabled" :value="selectorValue" :range="define.dataSource" @change="bindPickerChange">
<input class="input_" :class="{'input_disabled' : !define.disabled}" type="text" disabled="false" v-model="fieldSource[define.fieldName]">
</picker>
<uni-icons type="arrowdown" class="icon_dowm" color="#333" size="16"></uni-icons>
</view>
</view>
</view>
<!-- type:id-selector -->
<view class="input_container" v-else-if="'id-selector'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view class="uni-list-cell-db">
<picker class="picker_" mode="selector" :disabled="!define.disabled" :value="idSelectValue" :range="define.dataSource" :range-key="define.displayFieldName" @change="bindIdPickerChange">
<input class="input_" :class="{'input_disabled' : !define.disabled}" type="text" disabled="false" :value="idSelectText">
</picker>
<uni-icons type="arrowdown" class="icon_dowm" color="#333" size="16"></uni-icons>
</view>
</view>
</view>
<!-- type:multi-selector ps暂时不用 -->
<view class="input_container" v-else-if="'multi-selector'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view class="uni-list-cell-db">
<picker class="picker_" mode="multiSelector" :disabled="!define.disabled" :value="mutilSelectValue" :range="define.dataSource" @change="bindPickerChangeMulti">
<input class="input_" :class="{'input_disabled' : !define.disabled}" type="text" disabled="false" v-model="fieldSource[define.fieldName]">
</picker>
<uni-icons type="arrowdown" class="icon_dowm" color="#333" size="16"></uni-icons>
</view>
</view>
</view>
<!-- type:kd-vlookup-edit -->
<view class="input_container" v-else-if="'kd-vlookup-edit'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view @click="kdVlookupEdit_show_search(define.disabled)">
<input class="input_" :class="{'input_disabled' : !define.disabled}" disabled="false" type="text" v-model="fieldSource[define.fieldName]" style="padding-right: 64px;" :placeholder="define.placeholder">
<view class="input_search" >
<uni-icons type="search" color="#bbb" size="20" style="display: block;"></uni-icons>
</view>
</view>
<uni-icons type="clear" color="#bbb" size="20" class="clearinput" v-if="fieldSource[define.fieldName]!=''&&define.disabled&&define.canClear" @click="clear_input()"></uni-icons>
</view>
</view>
<!-- type:kd-vlookup-scan -->
<view class="input_container" v-else-if="'kd-vlookup-scan'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view @click="kdVlookupEdit_show_scan(define.disabled)">
<input class="input_" :class="{'input_disabled' : !define.disabled}" disabled="false" type="text" v-model="fieldSource[define.fieldName]" style="padding-right: 64px;" :placeholder="define.placeholder">
<view class="input_search" >
<uni-icons type="scan" color="#bbb" size="20" style="display: block;"></uni-icons>
</view>
</view>
<uni-icons type="clear" color="#bbb" size="20" class="clearinput" v-if="fieldSource[define.fieldName]!=''&&define.disabled&&define.canClear" @click="clear_input()"></uni-icons>
</view>
</view>
<!-- type:kd-vlookup-scan-edit -->
<view class="input_container" v-else-if="'kd-vlookup-scan-edit'===define.type">
<view class="name_">{{define.title}}</view>
<view class="input_out" :class="[{'isrequired':define.required}]">
<view >
<input class="input_" :class="{'input_disabled' : !define.disabled}" disabled="false" type="text" v-model="fieldSource[define.fieldName]" style="padding-right: 64px;" :placeholder="define.placeholder">
<view class="input_search1" @click="kdVlookupEdit_show_search(define.disabled)">
<uni-icons type="search" color="#bbb" size="20" style="display: block;"></uni-icons>
</view>
<view class="input_search" @click="kdVlookupEdit_show_scan(define.disabled)">
<uni-icons type="scan" color="#bbb" size="20" style="display: block;"></uni-icons>
</view>
</view>
<uni-icons type="clear" color="#bbb" size="20" class="clearinput" v-if="fieldSource[define.fieldName]!=''&&define.disabled&&define.canClear" @click="clear_input()"></uni-icons>
</view>
</view>
<!-- <view class="mysearchlist" style="z-index: 10000;">
<xinsoft-search-list ref="mysearchlist"
:singleRow="define.singleRow"
:url_="define.url"
:form_id="define.formId"
:fieldName="define.showFields"
:orderStr="define.orderStr"
:showsearch.sync="kdVlookupEditShowSearch"
:itemInfo_.sync="kdVlookupEditValue">
</xinsoft-search-list>
</view> -->
</view>
</template>
<script>
// import xinsoftSearchList from '@/components/xinsoft-search-list/xinsoft-search-list.vue'
import uniIcons from '@/components/uni-icons/uni-icons.vue'
export default {
name: 'xinsoft-form-input',
components: {
// xinsoftSearchList,
uniIcons
},
props: {
itemDefine: {
type: Object,
required: true
},
bindSource: {
type: Object,
required: true
}
},
data() {
const currentDate = this.getDate({
format: true
})
return {
define: this.itemDefine,
fieldSource: this.bindSource,
date: currentDate,
time: '00:00',
selectorValue:'',
idSelectValue:this.bindSource[this.itemDefine.fieldName],
idSelectText:this.bindSource[this.itemDefine.fieldText],
mutilSelectValue:[],
// kdVlookupEditValue:[],
// kdVlookupEditText:"",
// kdVlookupEditShowSearch:false
}
},
mounted() {
//如果为日期类型,则默认赋值当天日期
if(this.define.type === 'date') {
this.fieldSource[this.define.fieldName] = this.date
}
},
watch: {
fieldSource: {
handler: function(newVal, oldVal) {
this.$emit('update:bindSource', newVal)
},
deep: true
},
// kdVlookupEditValue: {
// handler: function(newVal, oldVal) {
// this.fieldSource[this.define.fieldName] = newVal[this.define.fieldIndex[0]]
// this.fieldSource[this.define.fieldText] = newVal[this.define.fieldIndex[1]]
// this.kdVlookupEditText = newVal[newVal[this.define.fieldIndex[1]]]
// },
// deep: true
// },
bindSource: {
handler: function(newVal, oldVal) {
this.fieldSource = newVal
if(this.define.type === 'id-selector') {
this.idSelectValue = newVal[this.define.fieldName]
this.idSelectText = newVal[this.define.fieldText]
}
if(this.define.type === 'kd-vlookup-edit') {
// this.kdVlookupEditText = newVal[this.define.fieldText]
}
if(this.define.type === 'date') {
this.fieldSource[this.define.fieldName] = this.date
}
},
deep: true
}
},
methods: {
bindDateChange(e) {
this.fieldSource[this.define.fieldName] = this.date = e.target.value
},
bindTimeChange(e) {
this.fieldSource[this.define.fieldName] = this.time = e.target.value
},
bindPickerChange(e) {
this.selectorValue = e.target.value
this.fieldSource[this.define.fieldName] = this.define.dataSource[e.target.value]
},
bindIdPickerChange(e) {
this.idSelectText = this.define.dataSource[e.target.value][this.define.displayFieldName]
this.idSelectValue = e.target.value
this.fieldSource[this.define.fieldName] = this.define.dataSource[e.target.value][this.define.valueFieldName]
this.fieldSource[this.define.fieldText] = this.define.dataSource[e.target.value][this.define.displayFieldName]
},
bindPickerChangeMulti(e) {
this.mutilSelectValue = e.target.value
let selectArray = []
e.target.value.forEach((x) => {
selectArray.push(this.define.dataSource[x])
})
this.fieldSource[this.define.fieldName] = selectArray
},
//点击搜索
kdVlookupEdit_show_search(isDisabled) {
uni.hideKeyboard()
if(!isDisabled){//不可编辑
return
}
this.$emit('toSearch')
// this.kdVlookupEditShowSearch = true;
// this.$refs.mysearchlist.set_request('');
},
//点击扫码
kdVlookupEdit_show_scan(isDisabled) {
uni.hideKeyboard()
if(!isDisabled){//不可编辑
return
}
this.$emit('toScan')
// this.kdVlookupEditShowSearch = true;
// this.$refs.mysearchlist.set_request('');
},
changeSearch() {
this.$nextTick(function() {
this.$emit("update:value_", this.search_value)
})
},
clear_input() {
// this.kdVlookupEditText = '';
this.fieldSource[this.define.fieldName] = ''
// this.fieldSource[this.define.fieldText] = ''
},
//获取当前日期格式yyyy-mm-dd
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
}
}
}
</script>
<style scoped>
.mysearchlist {
z-index: 1;
}
.input_container,
.textarea_container {
z-index: 0;
position: relative;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
width: 100%;
min-height: 46px;
padding: 0 4%;
box-sizing: border-box;
}
.textarea_container {
min-height: 100px;
}
.input_container:after,
.textarea_container:after {
position: absolute;
width: 100%;
height: 1px;
content: '';
left: 0;
bottom: 0;
background-color: #e6e6e6;
}
.name_ {
display: flex;
top: 0;
width: 30%;
line-height: 20px;
padding: 13px 0;
font-size: 15px;
text-align: left;
}
.input_out,
.textarea_out {
position: relative;
width: 70%;
display: flex;
height:36px;
border: 1px solid #ccc;
border-radius: 1px;
box-sizing: border-box;
}
.input_,
.textarea_ {
position: absolute;
font-size: 15px;
width: 100%;
display: flex;
height: 34px;
box-sizing: border-box;
padding: 4px;
background-color: #fff;
border-radius: 2px;
}
.input_disabled{
background-color: #f5f5f5;
}
.textarea_,
.textarea_out {
height: 88px;
}
.textarea_{
height: 86px;
}
.input_search {
position: absolute;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
width: 40px;
height: 35px;
right: 0;
top: 0;
border-left: 1px solid #ccc;
}
.input_search1 {
position: absolute;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
width: 40px;
height: 35px;
right: 18%;
top: 0;
border-left: 1px solid #ccc;
}
.clearinput {
position: absolute;
right: 42px;
height: 40px;
top: 0;
display: flex;
align-items: center;
}
.uni-list-cell-db {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
}
.isrequired:before {
position: absolute;
content: "*";
font-size: 15px;
left: -10px;
top: 6px;
color: red;
}
.icon_dowm {
position: absolute;
display: block;
right: 8px;
bottom: 10px;
line-height: 16px;
}
</style>