字段配置类型名修改
笑笑 编写于 2023-04-26 22:42:15
NewLife.CubeVue
<template>
  <div class="objform">
    <el-form
      label-position="right"
      label-width="120px"
      ref="form"
      :model="form"
    >
      <template v-for="(list, cate) in properties">
        <div v-if="list.length > 0" :key="cate">
          <div :key="cate">
            <label>
              <h2>{{ cate }}</h2>
            </label>
          </div>
          <el-form-item
            v-for="(item, k) in list"
            :key="k + cate"
            :label="item.displayName"
            :prop="item.name"
          >
            <el-switch
              v-if="item.typeStr == 'Boolean'"
              v-model="form[item.name]"
              active-color="#13ce66"
              inactive-color="#ff4949"
            />

            <el-date-picker
              v-else-if="item.typeStr == 'DateTime'"
              v-model="form[item.name]"
              type="datetime"
              format="YYYY-MM-DD HH:mm:ss"
              value-format="YYYY-MM-DD HH:mm:ss"
            />

            <el-input
              v-else
              v-model="form[item.name]"
              type="text"
              size="default"
            />
            <span>{{ item.description }}</span>
          </el-form-item>
        </div>
      </template>

      <el-form-item prop label-name>
        <div
          style="
            position: fixed;
            margin: 30px;
            float: right;
            bottom: 0px;
            right: 0px;
            z-index: 1;
          "
        >
          <el-button type="primary" @click="confirm">保存</el-button>
        </div>
      </el-form-item>
    </el-form>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
  props: ['path'],
  data() {
    return {
      form: {} as any,
      properties: [] as any,
      fields: [] as any,
    };
  },
  computed: {
    currentPath() {
      return this.path;
    },
  },
  watch: {
    $route: {
      handler: function () {
        this.init();
      },
      immediate: true,
    },
  },
  methods: {
    init() {
      this.getFields();
      this.query();
    },
    getFields() {
      let vm = this;
      vm.$api.base.getColumns(vm.currentPath).then((res) => {
        let fields = res.data;
        // 对fields根据category进行分组
        let properties = {} as any;
        fields.forEach((item: any) => {
          if (!properties[item.category]) {
            properties[item.category] = [];
          }
          properties[item.category].push(item);
        });

        vm.properties = properties;
      });
    },
    query() {
      let vm = this;
      vm.$api.config.getObject(vm.currentPath).then((res) => {
        vm.form = res.data;
      });
    },
    confirm() {
      let vm = this;
      vm.$api.config.updateObject(vm.currentPath, vm.form).then(() => {
        let msg = '保存成功';

        if (!vm.form.enableNewUI) {
          msg += ',正在跳转页面';
        }

        vm.$message({
          message: msg,
          type: 'success',
          duration: 3 * 1000,
        });

        if (!vm.form.enableNewUI) {
          location.href = '/';
        }
      });
    },
  },
});
</script>

<style scoped>
.objform {
  max-height: -moz-calc(100vh - 200px);
  max-height: -webkit-calc(100vh - 200px);
  max-height: calc(100vh - 200px);
  overflow: auto;
  box-shadow: 1px 1px 4px rgb(0 21 41 / 8%);
}

.objform h2 {
  margin: 35px 0;
}

.el-input,
.el-switch {
  width: 380px;
  margin-right: 15px;
}
</style>