123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <script setup lang="ts">
- import { FormRules, ElForm } from "element-plus";
- import { reactive, ref } from "vue";
- import { httpUpdate, httpAdd, httpDetail } from "/@/api/parameter/card";
- import { responseHandle } from "/@/utils/responseHandle";
- import { useNav } from "/@/layout/hooks/useNav";
- enum FROM_TYPE {
- create = "create",
- edit = "edit",
- view = "view"
- }
- const { logout } = useNav();
- const showModel = ref(false);
- const TYPE = ref<FROM_TYPE>(FROM_TYPE.create);
- const formRef = ref<InstanceType<typeof ElForm>>(null);
- const loading = ref(false);
- const titleType = ref("");
- const id = ref("");
- const emit = defineEmits(["reload"]);
- const initform = {
- title: "",
- id: ""
- };
- const ruleForm = ref({ ...initform });
- const rules = reactive<FormRules>({
- title: [{ required: true, trigger: "bulr", message: "请输入卡类型" }]
- });
- const initData = async () => {
- const { code, data, message } = await httpDetail({ id: id.value });
- responseHandle({
- code,
- message,
- logout,
- handler: () => {
- console.log(data);
- Object.keys(ruleForm.value).forEach(key => {
- ruleForm.value[key] = data[key] ? data[key] + "" : "";
- });
- }
- });
- };
- async function show(node: any, did: string, isCreate: string) {
- id.value = did;
- Object.keys(ruleForm.value).forEach(key => {
- ruleForm.value[key] = initform[key] ? initform[key] + "" : "";
- });
- TYPE.value = isCreate;
- switch (TYPE.value) {
- case "create":
- titleType.value = "新建卡类型";
- break;
- case "edit":
- titleType.value = "编辑卡类型";
- break;
- case "view":
- titleType.value = "卡类型详情";
- break;
- default:
- titleType.value = "新建卡类型";
- }
- if (TYPE.value !== "create") {
- await initData();
- }
- showModel.value = true;
- }
- function handleUpdate() {
- const data = {
- ...ruleForm.value
- };
- return {
- data,
- api: httpUpdate
- };
- }
- function handleCreate() {
- const data = {
- ...ruleForm.value
- };
- return {
- data,
- api: httpAdd
- };
- }
- function handleSave() {
- formRef.value.validate(async vaild => {
- if (vaild) {
- if (loading.value) return;
- const handler =
- TYPE.value === FROM_TYPE.create ? handleCreate : handleUpdate;
- loading.value = true;
- const { api, data } = handler();
- const { message, code } = await api(data);
- loading.value = false;
- responseHandle({
- code,
- message,
- logout,
- handler: () => {
- showModel.value = false;
- emit("reload");
- }
- });
- }
- });
- }
- defineExpose({
- show
- });
- </script>
- <template>
- <el-dialog
- v-model="showModel"
- :close-on-press-escape="false"
- center
- append-to-body
- destroy-on-close
- :width="'400px'"
- :title="titleType"
- v-loading="loading"
- >
- <el-form
- ref="formRef"
- :model="ruleForm"
- :rules="rules"
- label-width="70px"
- style="margin-top: -10px"
- class="demo-ruleForm"
- status-icon
- >
- <el-row>
- <el-col :span="24">
- <el-form-item label="卡类型" prop="title">
- <ElInput
- placeholder="卡类型"
- :disabled="TYPE === 'view'"
- maxlength="50"
- v-model="ruleForm.title"
- /> </el-form-item
- ></el-col>
- </el-row>
- <div class="flex justify-end">
- <el-button
- v-if="TYPE !== 'view'"
- :loading="loading"
- :disabled="loading"
- type="primary"
- @click="handleSave"
- >保存</el-button
- >
- <el-button @click="showModel = false">取消</el-button>
- </div>
- </el-form>
- </el-dialog>
- </template>
|