123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- // 主要用于日和星期的互斥使用
- const TYPE_NOT_SET = 'TYPE_NOT_SET'
- const TYPE_EVERY = 'TYPE_EVERY'
- const TYPE_RANGE = 'TYPE_RANGE'
- const TYPE_LOOP = 'TYPE_LOOP'
- const TYPE_WORK = 'TYPE_WORK'
- const TYPE_LAST = 'TYPE_LAST'
- const TYPE_SPECIFY = 'TYPE_SPECIFY'
- const DEFAULT_VALUE = '?'
- export default {
- model: {
- prop: 'prop',
- event: 'change'
- },
- props: {
- prop: {
- type: String,
- default: DEFAULT_VALUE
- },
- disabled: {
- type: Boolean,
- default: false
- }
- },
- data () {
- const type = TYPE_EVERY
- return {
- DEFAULT_VALUE,
- // 类型
- type,
- // 启用日或者星期互斥用
- TYPE_NOT_SET,
- TYPE_EVERY,
- TYPE_RANGE,
- TYPE_LOOP,
- TYPE_WORK,
- TYPE_LAST,
- TYPE_SPECIFY,
- // 对于不同的类型,所定义的值也有所不同
- valueRange: {
- start: 0,
- end: 0
- },
- valueLoop: {
- start: 0,
- interval: 1
- },
- valueWeek: {
- start: 0,
- end: 0
- },
- valueList: [],
- valueWork: 1,
- maxValue: 0,
- minValue: 0
- }
- },
- watch: {
- prop (newVal, oldVal) {
- if (newVal === this.value_c) {
- // console.info('skip ' + newVal)
- return
- }
- this.parseProp(newVal)
- }
- },
- computed: {
- value_c () {
- let result = []
- switch (this.type) {
- case TYPE_NOT_SET:
- result.push('?')
- break
- case TYPE_EVERY:
- result.push('*')
- break
- case TYPE_RANGE:
- result.push(`${this.valueRange.start}-${this.valueRange.end}`)
- break
- case TYPE_LOOP:
- result.push(`${this.valueLoop.start}/${this.valueLoop.interval}`)
- break
- case TYPE_WORK:
- result.push(`${this.valueWork}W`)
- break
- case TYPE_LAST:
- result.push('L')
- break
- case TYPE_SPECIFY:
- if (this.valueList.length === 0) {
- this.valueList.push(this.minValue)
- }
- result.push(this.valueList.join(','))
- break
- default:
- result.push(this.DEFAULT_VALUE)
- break
- }
- return result.length > 0 ? result.join('') : this.DEFAULT_VALUE
- },
- // 指定值范围区间,介于最小值和最大值之间
- specifyRange() {
- let range = []
- for (let i = this.minValue; i <= this.maxValue; i++) {
- range.push(i)
- }
- return range
- },
- },
- methods: {
- parseProp (value) {
- if (value === this.value_c) {
- // console.info('same ' + value)
- return
- }
- if (typeof (this.preProcessProp) === 'function') {
- value = this.preProcessProp(value)
- }
- try {
- if (!value || value === this.DEFAULT_VALUE) {
- this.type = TYPE_EVERY
- } else if (value.indexOf('?') >= 0) {
- this.type = TYPE_NOT_SET
- } else if (value.indexOf('-') >= 0) {
- this.type = TYPE_RANGE
- const values = value.split('-')
- if (values.length >= 2) {
- this.valueRange.start = parseInt(values[0])
- this.valueRange.end = parseInt(values[1])
- }
- } else if (value.indexOf('/') >= 0) {
- this.type = TYPE_LOOP
- const values = value.split('/')
- if (values.length >= 2) {
- this.valueLoop.start = value[0] === '*' ? 0 : parseInt(values[0])
- this.valueLoop.interval = parseInt(values[1])
- }
- } else if (value.indexOf('W') >= 0) {
- this.type = TYPE_WORK
- const values = value.split('W')
- if (!values[0] && !isNaN(values[0])) {
- this.valueWork = parseInt(values[0])
- }
- } else if (value.indexOf('L') >= 0) {
- this.type = TYPE_LAST
- const values = value.split('L')
- this.valueLast = parseInt(values[0])
- } else if (value.indexOf(',') >= 0 || !isNaN(value)) {
- this.type = TYPE_SPECIFY
- this.valueList = value.split(',').map(item => parseInt(item))
- } else {
- this.type = TYPE_EVERY
- }
- } catch (e) {
- // console.info(e)
- this.type = TYPE_EVERY
- }
- }
- }
- }
|