c5_labsci/fapp/ciyon_ap/components/ciy-inputcyc/ciy-inputcyc.vue

215 lines
4.2 KiB
Vue

<template>
<view class="_cyc" :class="{_bb:bb,_left:left,_disabled:disabled}">
<input type="hidden" :name="name" :value="tvalue" style="display:none;" />
<input v-if="hasmore" type="hidden" :name="name+'_num'" :value="num" style="display:none;" />
<input v-if="hasmore" type="hidden" :name="name+'_unit'" :value="unit" style="display:none;" />
<ciy-input @change="chgnum" :disabled="disabled" style="width:4em;" v-model="num"></ciy-input>
<view class="_unit">
<ciy-select @change="chgunit" :disabled="disabled" v-model="unit" :rows="trowcnt" align="center" :range="trange"></ciy-select>
</view>
</view>
</template>
<script>
export default {
behaviors: ['uni://form-field-group'],
emits: ['change', 'update:modelValue'],
props: {
name: {
type: String
},
modelValue: {
type: [String, Number],
default: ''
},
value: {
type: [String, Number],
default: ''
},
disabled: {
type: Boolean,
default: false
},
initevent: {
type: Boolean,
default: false
},
hasmore: {
type: Boolean,
default: false
},
bb: {
type: Boolean,
default: false
},
left: {
type: Boolean,
default: false
},
range: {
type: String,
default: 'month,day,min'
},
},
data() {
return {
v: '',
num: 0,
unit: ''
};
},
watch: {
value: {
handler(newD, oldD) {
this.setvalue(newD, oldD);
}
},
modelValue: {
handler(newD, oldD) {
this.setvalue(newD, oldD);
}
},
},
computed: {
tvalue() {
if (this.unit == 'month') {
return -this.toint(this.num);
} else if (this.unit == 'day') {
return this.toint(this.num) * 86400;
} else if (this.unit == 'hour') {
return this.toint(this.num) * 3600;
} else if (this.unit == 'min') {
return this.toint(this.num) * 60;
} else {
return this.num;
}
},
trange() {
var rg = [];
var rs = this.range.split(',');
for (var i = 0; i < rs.length; i++) {
rg.push({
id: rs[i],
name: this.lang('cyc.' + rs[i])
})
}
return rg;
},
trowcnt() {
var cnt = this.range.split(',').length;
if(cnt > 4)
return 3;
return cnt;
},
},
mounted() {
this.setvalue(this.value || this.modelValue);
if (this.initevent) {
this.$emit('change', {
name: this.name,
from: 'init',
value: this.tvalue,
num: this.num,
unit: this.unit
});
}
},
methods: {
setvalue(val, old) {
var vi = this.toint(val);
if (vi == 0)
vi = 86400;
var unit = 'day';
var num = 0;
if (vi < 0) {
unit = 'month';
num = -vi;
} else if (vi % 86400 == 0) {
unit = 'day';
num = this.toint(vi / 86400);
} else if (vi % 3600 == 0) {
unit = 'hour';
num = this.toint(vi / 3600);
} else if (vi % 60 == 0) {
unit = 'min';
num = this.toint(vi / 60);
} else {
unit = 'sec';
num = this.toint(vi);
}
if (this.unit != unit)
this.unit = unit;
if (this.num != num)
this.num = num;
},
chgnum(e) {
this.$emit('update:modelValue', this.tvalue);
this.$emit('change', {
name: this.name,
from: 'num',
value: this.tvalue,
num: this.toint(this.num),
unit: this.unit
});
},
chgunit(e) {
this.$emit('update:modelValue', this.tvalue);
this.$emit('change', {
name: this.name,
from: 'unit',
value: this.tvalue,
num: this.num,
unit: this.unit
});
}
}
}
</script>
<style scoped>
._cyc {
padding: 0;
display: flex;
align-items: center;
justify-content: flex-end;
gap: 0.5em;
}
._cyc._left {
justify-content: flex-start;
}
._cyc input {
font-size: 1em;
height: 1em;
text-align: right;
}
._cyc._bb {
gap: 0;
}
._cyc._bb input {
background: var(--bg1);
padding: 0.5em;
border-radius: 0.5em 0 0 0.5em;
border: 1px solid var(--bg5);
}
._cyc._bb ._unit {
background: var(--bg1);
padding: 0.5em;
height: 2.5em;
border-radius: 0 0.5em 0.5em 0;
border: 1px solid var(--bg5);
}
._cyc._bb._disabled input {
background: var(--bg3);
color: var(--txt1);
}
._cyc._bb._disabled ._unit {
background: var(--bg3);
color: var(--txt1);
}
</style>