EditDrawer.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <script lang="ts" setup>
  2. /**
  3. * @Name: EditDrawer.vue
  4. * @Description: 产品属性-行编辑
  5. * @Author: Cheney
  6. */
  7. import { ElMessage, FormInstance, FormRules } from 'element-plus';
  8. import { Close, Finished } from '@element-plus/icons-vue';
  9. import { useResponse } from '/@/utils/useResponse';
  10. import * as api from '../api';
  11. const btnLoading = ref(false);
  12. const editOpen = defineModel({ default: false });
  13. const editDrawer = <Ref>useTemplateRef('editDrawer');
  14. const props = defineProps({
  15. rowData: Object
  16. });
  17. const { rowData } = props;
  18. const emit = defineEmits([ 'refresh' ]);
  19. interface RuleForm {
  20. name: any,
  21. key: any
  22. }
  23. const ruleFormRef = ref<FormInstance>();
  24. const ruleForm = reactive<RuleForm>({
  25. name: rowData?.name,
  26. key: rowData?.key,
  27. });
  28. const rules = reactive<FormRules<RuleForm>>({
  29. // shop_name: [ { required: true, message: '请输入店铺', trigger: 'blur' } ],
  30. });
  31. const submitForm = async (formEl: FormInstance | undefined) => {
  32. if (!formEl) return;
  33. await formEl.validate(async (valid, fields) => {
  34. if (valid) {
  35. try {
  36. const res = await useResponse(api.updateRow, { id: rowData?.id, ...ruleForm }, btnLoading);
  37. if (res && res.code == 2000) {
  38. editOpen.value = false;
  39. ElMessage.success('编辑成功');
  40. emit('refresh');
  41. }
  42. } catch (error) {
  43. console.error('Error==>', error);
  44. }
  45. } else {
  46. console.log('error submit!', fields);
  47. }
  48. });
  49. };
  50. function closeDrawer() {
  51. editDrawer.value.handleClose();
  52. }
  53. </script>
  54. <template>
  55. <div class="drawer-container">
  56. <el-drawer ref="editDrawer"
  57. v-model="editOpen"
  58. :close-on-click-modal="false"
  59. :close-on-press-escape="false"
  60. :title="`产品属性- 编辑 `"
  61. size="25%">
  62. <el-form
  63. ref="ruleFormRef"
  64. :model="ruleForm"
  65. :rules="rules"
  66. class="mx-2.5 mt-7"
  67. label-position="top"
  68. label-width="auto"
  69. status-icon>
  70. <el-form-item class="font-medium" label="属性名称" prop="name">
  71. <el-input v-model="ruleForm.name" />
  72. </el-form-item>
  73. <el-form-item class="font-medium" label="属性标识" prop="key">
  74. <el-input v-model="ruleForm.key" />
  75. </el-form-item>
  76. <el-form-item>
  77. <el-divider />
  78. <div class="flex flex-1 justify-end">
  79. <el-button :icon="Close" @click="closeDrawer">取 消</el-button>
  80. <el-button :icon="Finished" :loading="btnLoading" type="primary" @click="submitForm(ruleFormRef)">
  81. 确 定
  82. </el-button>
  83. </div>
  84. </el-form-item>
  85. </el-form>
  86. </el-drawer>
  87. </div>
  88. </template>
  89. <style scoped>
  90. .drawer-container :deep(.el-drawer__header) {
  91. border-bottom: none;
  92. font-weight: 500;
  93. }
  94. .drawer-container :deep(.el-drawer__title) {
  95. font-size: 18px;
  96. }
  97. </style>