add.vue 4.98 KB
Newer Older
xulili's avatar
xulili committed
1
<template>
xulili's avatar
xulili committed
2 3 4 5 6
  <div>
    <el-dialog
      custom-class="party-dialog"
      title="新建机构"
      :visible.sync="dialogVisible"
xulili's avatar
xulili committed
7
      width="550px"
xulili's avatar
xulili committed
8 9 10 11 12 13 14 15 16 17 18 19
      :before-close="handleClose"
    >
      <div class="dialog-content">
        <el-form
          ref="form"
          :rules="rules"
          :model="form"
          label-width="80px"
          label-position="top"
          class="party-form"
        >
          <el-form-item label="父级节点:">
xulili's avatar
xulili committed
20 21 22 23 24
            <el-input v-model="form.parentName" readonly></el-input>
            <div style="float:right">
              <el-button @click="handlefocus" round>修改</el-button>
              <el-button @click="form.parentName = ''" round>重置</el-button>
            </div>
xulili's avatar
xulili committed
25 26 27 28 29 30
          </el-form-item>
          <el-form-item label="机构名称:" prop="name">
            <el-input
              v-model="form.name"
              placeholder="请填写"
              clearable
qzhxx's avatar
qzhxx committed
31
              oninput="value = value.trim()"
xulili's avatar
xulili committed
32 33 34 35 36 37 38 39
            ></el-input>
          </el-form-item>
          <el-form-item label="机构地理位置:" prop="areaId">
            <el-cascader
              v-model="form.areaId"
              change-on-select
              :props="cascaderProps"
              :options="areaOptions"
xulili's avatar
xulili committed
40
            >
xulili's avatar
xulili committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
            </el-cascader>
          </el-form-item>
          <el-form-item label="备注">
            <el-input
              v-model="form.remarks"
              type="textarea"
              placeholder="请输入"
            ></el-input>
          </el-form-item>
        </el-form>
      </div>
      <div slot="footer" class="dialog-footer btn-group">
        <el-button @click="handleCancle()">取 消</el-button>
        <el-button type="primary" @click="handleSubmit()" :disabled="disabled"
          >确 定</el-button
        >
      </div>
    </el-dialog>
    <org-trees
      ref="orgTree"
      :treeData="treeData"
      @selected="handleSelectParent"
    />
  </div>
xulili's avatar
xulili committed
65 66 67
</template>
<script>
import { getAreas } from "@/config/area";
xulili's avatar
xulili committed
68
import orgTrees from "./orgTree";
xulili's avatar
xulili committed
69 70 71
export default {
  data() {
    return {
xulili's avatar
xulili committed
72
      dialogVisible: false,
xulili's avatar
xulili committed
73 74 75 76
      form: {
        name: "",
        areaId: [],
        remarks: "",
xulili's avatar
xulili committed
77 78
        parentId: "",
        parentName: "",
xulili's avatar
xulili committed
79 80
      },
      disabled: false,
xulili's avatar
xulili committed
81
      areaOptions: [],
xulili's avatar
xulili committed
82 83
      cascaderProps: {
        label: "name",
xulili's avatar
xulili committed
84
        value: "code",
xulili's avatar
xulili committed
85
        checkStrictly: true,
xulili's avatar
xulili committed
86 87 88 89
      },
      rules: {
        name: [
          { required: true, message: "请输入机构名称", trigger: "change" },
qzhxx's avatar
qzhxx committed
90
          { min: 1, max: 20, message: "请输入1到20个字" },
xulili's avatar
xulili committed
91 92 93 94 95 96 97
        ],
        areaId: [
          { required: true, message: "请选择地理位置", trigger: "change" },
        ],
      },
    };
  },
xulili's avatar
xulili committed
98
  components: { orgTrees },
xulili's avatar
xulili committed
99
  props: {
xulili's avatar
xulili committed
100 101 102 103 104
    treeData: {
      type: Array,
      default: () => {
        return [];
      },
xulili's avatar
xulili committed
105 106 107 108 109 110 111 112
    },
  },
  mounted() {
    getAreas().then((res) => {
      this.areaOptions = res;
    });
  },
  methods: {
xulili's avatar
xulili committed
113 114 115 116 117 118 119
    handlefocus() {
      this.$refs.orgTree.dialogVisible = true;
    },
    handleSelectParent(parentData) {
      this.form.parentId = parentData.id;
      this.form.parentName = parentData.name;
    },
xulili's avatar
xulili committed
120 121 122 123
    // 弹窗关闭
    handleClose() {
      this.$confirm("确认关闭?")
        .then((_) => {
xulili's avatar
xulili committed
124
          this.handleReset();
xulili's avatar
xulili committed
125 126 127
        })
        .catch((_) => {});
    },
xulili's avatar
xulili committed
128 129 130 131 132 133 134 135 136 137
    handleReset() {
      this.dialogVisible = false;
      this.$refs.form.resetFields();
      this.form = {
        name: "",
        areaId: [],
        remarks: "",
        parentId: "",
        parentName: "",
      };
xulili's avatar
xulili committed
138
    },
xulili's avatar
xulili committed
139 140 141 142 143 144 145 146 147 148 149
    handleCancle() {
      this.handleClose();
    },
    handleSubmit() {
      // 校验用户输入值
      this.$refs.form.validate((valid) => {
        if (valid) {
          let params = {};
          params.name = this.form.name;
          params.areaId = [...this.form.areaId].pop();
          params.remarks = this.form.remarks;
xulili's avatar
xulili committed
150
          params.parentId = this.form.parentName ? this.form.parentId : "0";
xulili's avatar
xulili committed
151 152 153 154 155
          let requestparams = this.$qs.stringify(params);
          this.$https(
            {
              method: "post",
              url: "organ/add",
xulili's avatar
xulili committed
156
              authType: this.backToken,
xulili's avatar
xulili committed
157 158 159 160
            },
            requestparams
          )
            .then((res) => {
xulili's avatar
xulili committed
161 162 163 164 165 166 167 168
              if (res.status == 200) {
                if (res.data.resultCode == 200) {
                  this.$message({
                    type: "success",
                    message: res.data.message,
                  });
                  this.handleReset();
                  this.$emit("success", true);
xulili's avatar
xulili committed
169
                } else {
xulili's avatar
xulili committed
170 171 172
                  this.$message.error(res.data.message);
                  this.$emit("success", false);
                }
xulili's avatar
xulili committed
173
              } else {
xulili's avatar
xulili committed
174 175 176
                this.$message.error(res.data);
                this.$emit("success", false);
              }
xulili's avatar
xulili committed
177 178
            })
            .catch((err) => {
xulili's avatar
xulili committed
179
              console.log(err);
xulili's avatar
xulili committed
180 181 182 183 184 185 186 187 188 189 190
            });
        } else {
          return false;
        }
      });
    },
  },
};
</script>
<style lang="less" scoped>
</style>