123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- <!-- 需要配合,tm-row使用。,也可以单独使用。tm-col -->
- <template >
- <view class="tm-col" :class="[widths?'':'tm-col-'+grid, 'ma-' + margin,'mb-'+bma[1],'mx-'+bma[0]]"
- :style="{
- width:widths,
- order: order,
- verticalAlign: align,
-
- }">
-
- <view class="tm-col-body " @click="click" :style="{
- textAlign:justify
- }" :class="['pa-' + padding, aligns,` ${customClass} `,'round-'+round,color]"><slot></slot></view>
- </view>
- </template>
- <script>
- /**
- * 栅格排版COL
- * @description 请注意,可以单独使用,也可搭配row使用。
- * @property {String} color = [white|blue] 主题颜色名称更多请见文档
- * @property {String} align = [top|bottom|middle] 默认top,内容纵向对齐方式
- * @property {String} justify = [left|right|center] 内容横向对齐方式
- * @property {String|Number} width = [100%] 宽度,可以是数字其它百分比,数字时单位为upx
- * @property {String|Number} grid = [1|2|3|6|12] 列宽默认1 1-12自动计算百分比。
- * @property {String|Number} padding = [0] 内间距默认0
- * @property {String|Number} margin = [0] 外间距默认0
- * @property {String} custom-class = [] 自定义类。
- * @property {Number} round = [] 默认:0,圆角。
- * @property {Function} click = [] 点击事件
- * @property {Number} maxCol = [] 默认:12,布局的列表,比如我想一行5个,就可以用到此属性,设置为10,然后grid=2即可。
- * @property {String|Number} order = [0|1|2|3|4] 排列的顺序 默认0 可以是1-12的数字或者字符串
- */
- export default {
- props: {
- // 自定义类。
- customClass: {
- type: String,
- default: ''
- },
- // 圆角。
- round: {
- type: String|Number,
- default: '0'
- },
- // 主题色。
- color: {
- type: String,
- default: ''
- },
- // 自定义宽度。可以是数字,单位如:100vw,5%,auto,优先级高于grid
- width: {
- type: String | Number,
- default: ''
- },
- // 列宽1-12自动计算百分比。
- grid: {
- type: String | Number,
- default: 1
- },
- // 内间距。
- padding: {
- type: String | Number,
- default: '0'
- },
- // 外间距。
- margin: {
- type: String | Number,
- default: '0'
- },
- // 子项目横向对齐方式。 left|right|center
- justify:{
- type:String,
- default:'center'
- },
- // 子项目纵向对齐方式。 top|bottom|middle
- align:{
- type:String,
- default:'top'
- },
- // 排列的顺序。
- order: {
- type: String | Number,
- default: '0'
- },
- maxCol:{
- type:Number,
- default:12
- }
- },
- data() {
- return {
-
- widths:'',
- bma:[0,0],
-
- };
- },
- computed: {
- maxCol_count:function() {
- return this.maxCol||12;
- },
- aligns: function() {
- if(this.justify == 'left') return 'flex-start';
- if(this.justify == 'right') return 'flex-end';
- if(this.justify == 'center') return 'flex-center';
- },
- },
- async mounted() {
- let pd = this.$tm.getParentAttr("tm-row",'gutter',this.$parent);
- if(pd) this.bma = pd;
- this.$nextTick(function(){
- this.c_width();
- })
- },
- methods: {
- click(e){
- this.$emit('click',e);
- },
- c_width() {
- let t = this;
- // 如果有自定义宽度,优先使用自定的宽度,否则使用grid的比例。
- if (t.width.indexOf('%') > -1 || t.width.indexOf('vw') > -1 || t.width.indexOf('vh') > -1) {
- t.widths = t.width;
- return ;
- }
- if (t.width === 'auto') {
- t.widths = "100%";
- return;
- }
- if (!isNaN(parseFloat(t.width))) {
- t.widths = uni.upx2px(parseInt(t.width)) + 'px';
- return ;
- }
-
- t.widths = (parseInt(t.grid) / t.maxCol_count) * 100 + '%';
- // console.log(t.maxCol_count);
- }
- },
- };
- </script>
- <style lang="scss" scoped>
- .tm-col{
- height: inherit;
- display: inline-block;
-
- // #ifndef H5
- height: 100%;
- // #endif
-
-
- .tm-col-body{
- display: block;
-
- }
- }
- </style>
|