FieldRefer.vue 8.2 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1 2 3 4 5
<template>
  <div class="panel">
    <a-form-model ref="editForm" :model="refer" :rules="rules">
      <a-row :gutter="colsFull">
        <a-form-model-item label="类型" prop="type" :labelCol="labelColFull" :wrapperCol="wrapperColFull">
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6 7 8 9 10 11 12
          <a-select v-model="refer.type" @change="onReferTypeChanged">
            <a-select-option value="config">字段</a-select-option>
            <a-select-option value="ranges">序列</a-select-option>
            <a-select-option value="instances">实例</a-select-option>
            <a-select-option value="yaml">内容</a-select-option>
            <a-select-option value="excel">表格</a-select-option>
            <a-select-option value="text">文本</a-select-option>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13 14 15 16 17
          </a-select>
        </a-form-model-item>
      </a-row>

      <a-row :gutter="colsFull">
aaronchen2k2k's avatar
aaronchen2k2k 已提交
18
          <a-form-model-item label="文件" prop="file" :labelCol="labelColFull" :wrapperCol="wrapperColFull">
aaronchen2k2k's avatar
aaronchen2k2k 已提交
19 20
            <a-select v-model="refer.file" @change="onReferFileChanged">
              <a-select-option value="">选择</a-select-option>
21
              <a-select-option v-for="(f, i) in files" :value="f.referName" :key="i">
aaronchen2k2k's avatar
aaronchen2k2k 已提交
22 23
                <span v-if="refer.type != 'excel'">{{ f.title }}</span>
                <span v-if="refer.type == 'excel'">{{ f.referName }}</span>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
24 25
              </a-select-option>
            </a-select>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
26
          </a-form-model-item>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
27
      </a-row>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
28

aaronchen2k2k's avatar
aaronchen2k2k 已提交
29 30 31 32
      <a-row v-if="refer.type==='excel'" :gutter="colsFull">
        <a-form-model-item label="Excel表格" prop="sheet" :labelCol="labelColFull" :wrapperCol="wrapperColFull">
          <a-select v-model="refer.sheet" @change="onReferSheetChanged">
            <a-select-option value="">选择</a-select-option>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
33 34
            <a-select-option v-for="(f, i) in sheets" :value="f.sheet" :key="i">
              {{ f.sheet }}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
35 36 37 38 39
            </a-select-option>
          </a-select>
        </a-form-model-item>
      </a-row>

aaronchen2k2k's avatar
aaronchen2k2k 已提交
40 41 42
      <a-row v-if="showColSection" :gutter="colsFull">
        <a-form-model-item label="列名" prop="colName" :labelCol="labelColFull" :wrapperCol="wrapperColFull">
           <a-select v-model="refer.colName">
43 44 45 46 47 48
              <a-select-option value="">选择</a-select-option>
              <a-select-option v-for="f in fields" :key="f.name">
                {{ f.name }}
              </a-select-option>
            </a-select>
        </a-form-model-item>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
49 50
      </a-row>

aaronchen2k2k's avatar
aaronchen2k2k 已提交
51
      <a-row v-if="showCount" :gutter="colsFull">
aaronchen2k2k's avatar
aaronchen2k2k 已提交
52 53 54 55 56 57
        <a-col :span="colsHalf">
          <a-form-model-item label="取记录数" prop="count" :labelCol="labelColHalf" :wrapperCol="wrapperColHalf">
            <a-input v-model="refer.count" />
            0表示取所有记录
          </a-form-model-item>
        </a-col>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
58 59 60 61 62 63 64 65 66 67 68
      </a-row>

      <a-row v-if="showStep" :gutter="colsFull">
        <a-col :span="colsHalf">
          <a-form-model-item label="步长" prop="step" :labelCol="labelColHalf" :wrapperCol="wrapperColHalf">
            <a-input v-model="refer.step" :disabled="refer.rand" />
          </a-form-model-item>
        </a-col>
        <a-col :span="colsHalf">
          <a-form-model-item label="是否随机" prop="rand" :labelCol="labelColHalf" :wrapperCol="wrapperColHalf">
            <a-switch v-model="refer.rand" />
aaronchen2k2k's avatar
aaronchen2k2k 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
          </a-form-model-item>
        </a-col>
      </a-row>

      <a-row :gutter="colsFull">
        <a-form-model-item class="center">
          <a-button @click="save" type="primary">保存</a-button>
          <a-button @click="reset" style="margin-left: 10px;">重置</a-button>
        </a-form-model-item>
      </a-row>

    </a-form-model>
  </div>
</template>

<script>
aaronchen2k2k's avatar
aaronchen2k2k 已提交
85 86
import {listReferFileForSelection, listReferSheetForSelection,
  listReferResFieldForSelection, listReferExcelColForSelection, getRefer, updateRefer,
aaronchen2k2k's avatar
aaronchen2k2k 已提交
87
} from "../api/refer";
aaronchen2k2k's avatar
aaronchen2k2k 已提交
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

export default {
  name: 'FieldReferComponent',
  data() {
    return {
      colsFull: 24,
      colsHalf: 12,
      labelColFull: { lg: { span: 4 }, sm: { span: 4 } },
      wrapperColFull: { lg: { span: 16 }, sm: { span: 16 } },
      labelColHalf: { lg: { span: 8}, sm: { span: 8 } },
      labelColHalf2: { lg: { span: 4}, sm: { span: 4 } },
      wrapperColHalf: { lg: { span: 12 }, sm: { span: 12 } },

      refer: {},
      rules: {
      },
aaronchen2k2k's avatar
aaronchen2k2k 已提交
104 105 106

      res: {},
      files: [],
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107
      sheets: [],
aaronchen2k2k's avatar
aaronchen2k2k 已提交
108
      fields: [],
109 110 111

      referFieldName: '',
      referFieldIndex: '',
aaronchen2k2k's avatar
aaronchen2k2k 已提交
112 113 114
    };
  },
  props: {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
115 116 117 118 119
    type: {
      type: String,
      default: () => ''
    },
    model: {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
120 121 122
      type: Object,
      default: () => null
    },
aaronchen2k2k's avatar
aaronchen2k2k 已提交
123
    time2: {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
124 125 126 127 128 129
      type: Number,
      default: () => 0
    },
  },

  computed: {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
130 131 132 133 134 135
    showStep() {
      return this.refer.type === 'text'
    },
    showCount() {
      return this.refer.type === 'yaml' || this.refer.type === 'ranges' || this.refer.type === 'instances'
    },
136
    showColSection() {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
137
      return this.refer.type === 'ranges' || this.refer.type === 'instances' || this.refer.type === 'excel'
aaronchen2k2k's avatar
aaronchen2k2k 已提交
138 139 140 141 142
    }
  },
  created () {
    console.log('created')

aaronchen2k2k's avatar
aaronchen2k2k 已提交
143 144 145 146
    this.loadData()
    this.$watch('time2', () => {
      console.log('time2 changed', this.time2)
      this.loadData("")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
147 148 149 150 151 152
    })
  },
  mounted () {
    console.log('mounted')
  },
  methods: {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
153
    loadData() {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
154 155
      if (!this.model.id) return

aaronchen2k2k's avatar
aaronchen2k2k 已提交
156 157
      getRefer(this.model.id, this.type).then(json => {
        console.log('getRefer', json)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
158
        this.refer = json.data
aaronchen2k2k's avatar
aaronchen2k2k 已提交
159 160 161 162

        if (this.refer.type == 'excel') {
          this.refer.file = this.refer.file.substring(0, this.refer.file.lastIndexOf('.'))
        }
aaronchen2k2k's avatar
aaronchen2k2k 已提交
163
        this.listReferFileForSelection(this.refer.type, true)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
164 165
      })
    },
166

aaronchen2k2k's avatar
aaronchen2k2k 已提交
167 168 169
    onReferTypeChanged() {
      console.log('onReferTypeChanged')
      this.listReferFileForSelection(this.refer.type, false)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
170
    },
aaronchen2k2k's avatar
aaronchen2k2k 已提交
171 172
    onReferFileChanged() {
      console.log("onReferFileChanged")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
173

aaronchen2k2k's avatar
aaronchen2k2k 已提交
174
      if (this.refer.type == 'excel') {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
175
        this.listReferSheetForSelection(false)
176
      } else {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
177
        this.listReferResFieldForSelection(false)
178
      }
aaronchen2k2k's avatar
aaronchen2k2k 已提交
179
    },
aaronchen2k2k's avatar
aaronchen2k2k 已提交
180 181 182 183
    onReferSheetChanged() {
      console.log("onReferSheetChanged")

      if (this.refer.type == 'excel') {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
184
        this.listReferResFieldForSelection(false)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
185
      }
186 187
    },

aaronchen2k2k's avatar
aaronchen2k2k 已提交
188 189 190 191 192 193 194 195 196
    save() {
      console.log('save')
      this.$refs.editForm.validate(valid => {
        console.log(valid, this.refer)
        if (!valid) {
          console.log('validation fail')
          return
        }

aaronchen2k2k's avatar
aaronchen2k2k 已提交
197 198
        if (this.refer.type === 'excel') this.refer.file = this.refer.file + '.' + this.refer.sheet

aaronchen2k2k's avatar
aaronchen2k2k 已提交
199
        this.refer.count = parseInt(this.refer.count)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
200
        this.refer.step = parseInt(this.refer.step)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
201 202
        updateRefer(this.refer, this.type).then(json => {
          console.log('updateRefer', json)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
203 204 205 206 207 208 209
        })
      })
    },
    reset() {
      console.log('reset')
      this.$refs.editForm.reset()
    },
210

aaronchen2k2k's avatar
aaronchen2k2k 已提交
211 212 213
    listReferFileForSelection(resType, init) {
      listReferFileForSelection(resType).then(json => {
        console.log('listReferFileForSelection', json)
214 215
        this.files = json.data

aaronchen2k2k's avatar
aaronchen2k2k 已提交
216 217 218 219 220 221 222 223 224 225
        if (init) {
          if (this.refer.type === 'excel') {
            this.listReferSheetForSelection(init)
          } else {
            this.listReferResFieldForSelection(init)
          }
        } else {
          this.refer.file = ''
        }
      })
aaronchen2k2k's avatar
aaronchen2k2k 已提交
226
    },
aaronchen2k2k's avatar
aaronchen2k2k 已提交
227 228
    listReferSheetForSelection(init) {
      listReferSheetForSelection(this.refer.file).then(json => {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
229
        console.log('listReferSheetForSelection', json)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
230
        this.sheets = json.data
aaronchen2k2k's avatar
aaronchen2k2k 已提交
231

aaronchen2k2k's avatar
aaronchen2k2k 已提交
232 233 234 235 236 237
        if (init) {
          this.listReferResFieldForSelection(true)
        } else {
          this.refer.sheet = ''
        }
      })
238
    },
aaronchen2k2k's avatar
aaronchen2k2k 已提交
239 240 241 242 243 244 245 246 247 248 249 250
    listReferResFieldForSelection(init) {
      let id = 0
      if (this.refer.type === 'excel') {
        listReferExcelColForSelection(this.refer.file + '.' + this.refer.sheet).then(json => {
          console.log('listReferExcelColForSelection', json)
          this.fields = json.data

          if (!init) {
            this.refer.colName = ''
          }
        })

aaronchen2k2k's avatar
aaronchen2k2k 已提交
251
      } else {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
252 253 254 255 256 257 258 259 260 261 262 263
        this.files.forEach((fi) => {
          if (fi.referName === this.refer.file) id = fi.id
        })

        listReferResFieldForSelection(id, this.refer.type).then(json => {
          console.log('listReferResFieldForSelection', json)
          this.fields = json.data

          if (!init) {
            this.refer.colName = ''
          }
        })
aaronchen2k2k's avatar
aaronchen2k2k 已提交
264
      }
aaronchen2k2k's avatar
aaronchen2k2k 已提交
265
    }
aaronchen2k2k's avatar
aaronchen2k2k 已提交
266 267 268 269 270 271 272 273 274
  }
}
</script>

<style lang="less" scoped>
  .panel {
    padding: 4px 8px;
  }
</style>