123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <template>
- <view class="fa-array">
- <view class="u-flex">
- <view class="u-flex-5">
- <view class="">{{ faKey }}</view>
- </view>
- <view class="u-flex-6 u-p-l-10">
- <view class="">{{ faVal }}</view>
- </view>
- </view>
- <view class="u-flex u-m-t-15" v-for="(item, index) in list" :key="index">
- <view class="u-flex-5"><u-input v-model="item.key" :trim="trim" :border="border" /></view>
- <view class="u-m-l-15 u-m-r-15 u-flex-5"><u-input v-model="item.value" :trim="trim" :border="border" /></view>
- <view class="u-p-l-15 u-p-r-15 u-text-center close" @click="del(index)"><u-icon name="close" color="#ffffff" size="30"></u-icon></view>
- </view>
- <view class="u-text-right u-m-t-20">
- <u-button
- size="mini"
- type="primary"
- :custom-style="{ backgroundColor: lightColor, color: theme.bgColor, border: '1px solid ' + faBorderColor }"
- throttle-time="0"
- @click="add"
- >
- <u-icon name="plus" :color="theme.bgColor" size="25"></u-icon>
- <text class="u-m-l-5">追加</text>
- </u-button>
- </view>
- </view>
- </template>
- <script>
- import Emitter from '@/uni_modules/uview-ui/libs/util/emitter.js';
- export default {
- name: 'fa-array',
- mixins: [Emitter],
- props: {
- value:{
- type:String,
- default:''
- },
- faKey: {
- type: String,
- default: '键'
- },
- faVal: {
- type: String,
- default: '值'
- },
- showValue: {
- type: [String, Object],
- default: ''
- }
- },
- watch: {
- list: {
- deep: true,
- handler: function(newValue) {
- let obj = {};
- newValue.map(item => {
- if (item.key && item.value) {
- obj[item.key] = item.value;
- }
- });
- let value = this.$u.test.empty(obj)?'':JSON.stringify(obj);
- this.$emit('input', value);
- setTimeout(() => {
- this.dispatch('u-form-item', 'on-form-blur', value);
- }, 50);
- }
- },
- showValue: {
- immediate: true,
- handler(val) {
- if (val) {
- if (this.$u.test.object(val)) {
- let arr = [];
- for (let i in val) {
- arr.push({
- key: i,
- value: val[i]
- });
- }
- if (arr.length > 0) {
- this.list = arr;
- }
- } else {
- let o = JSON.parse(val);
- let arr = [];
- for (let i in o) {
- arr.push({
- key: i,
- value: o[i]
- });
- }
- if (arr.length > 0) {
- this.list = arr;
- }
- }
- }
- }
- }
- },
- data() {
- return {
- border: true,
- trim: true,
- list: [
- {
- key: '',
- value: ''
- }
- ]
- };
- },
- methods: {
- add() {
- this.list.push({
- key: '',
- value: ''
- });
- },
- del(index) {
- this.list.splice(index, 1);
- },
- getData() {
- return this.list;
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- .fa-array{
- width: 100%;
- }
- .close {
- background: #2c3e50;
- border-radius: 10rpx;
- }
- </style>
|