123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import baseComponent from '../helpers/baseComponent'
- import classNames from '../helpers/classNames'
- import styleToCssString from '../helpers/styleToCssString'
- import { colors } from '../helpers/colors'
- const defaultColors = {
- normal: colors.positive,
- progress: colors.positive,
- error: colors.assertive,
- success: colors.balanced,
- }
- baseComponent({
- properties: {
- prefixCls: {
- type: String,
- value: 'wux-progress',
- },
- percent: {
- type: Number,
- value: 0,
- observer: 'updateStyle',
- },
- strokeWidth: {
- type: Number,
- value: 10,
- observer: 'updateStyle',
- },
- activeColor: {
- type: String,
- value: '',
- observer: 'updateStyle',
- },
- backgroundColor: {
- type: String,
- value: '#f3f3f3',
- },
- status: {
- type: String,
- value: 'normal',
- observer: 'updateStyle',
- },
- shape: {
- type: String,
- value: 'round',
- },
- barStyle: {
- type: [String, Object],
- value: '',
- observer(newVal) {
- this.setData({
- extStyle: styleToCssString(newVal),
- })
- },
- },
- showInfo: {
- type: Boolean,
- value: false,
- },
- },
- data: {
- width: 0,
- style: '',
- extStyle: '',
- },
- computed: {
- classes: ['prefixCls, shape, status', function(prefixCls, shape, status) {
- const wrap = classNames(prefixCls, {
- [`${prefixCls}--${shape}`]: shape,
- [`${prefixCls}--${status}`]: status,
- })
- const outer = `${prefixCls}__outer`
- const inner = `${prefixCls}__inner`
- const bar = `${prefixCls}__bar`
- const text = `${prefixCls}__text`
- return {
- wrap,
- outer,
- inner,
- bar,
- text,
- }
- }],
- },
- methods: {
- updateStyle(opts = {}) {
- const { percent, strokeWidth, activeColor, status } = Object.assign({}, this.data, opts)
- const width = percent < 0 ? 0 : percent > 100 ? 100 : percent
- const height = strokeWidth > 0 ? strokeWidth : 10
- const backgroundColor = activeColor ? activeColor : (defaultColors[status] || defaultColors['normal'])
- const style = `background-color: ${backgroundColor}; width: ${width}%; height: ${height}px;`
- this.setData({
- width,
- style,
- })
- },
- },
- attached() {
- this.updateStyle()
- },
- })
|