InfoDrawer.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <template>
  2. <main>
  3. <el-drawer v-model="visiable" :title="props.title" @close="emits('closeDrawer')">
  4. <section class="drawer__form">
  5. <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto">
  6. <el-form-item label="场景名称" prop="name">
  7. <el-input v-model="ruleForm.name" maxlength="100" placeholder="请输入场景名称" type="text" />
  8. </el-form-item>
  9. <el-form-item label="应用模板" prop="viewTemplateList">
  10. <el-select v-model="ruleForm.viewTemplateList" multiple placeholder="请选择应用模板"
  11. class="select__custom--multiple" value-key="id">
  12. <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item" />
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="备注" prop="remark">
  16. <el-input v-model="ruleForm.remark" maxlength="100" placeholder="请输入备注" type="textarea"
  17. :autosize="{ minRows: 3, maxRows: 6 }" />
  18. </el-form-item>
  19. <!-- <el-form-item label="状态" prop="isDisabled">
  20. <el-switch v-model="ruleForm.isDisabled" :active-value=0 :inactive-value=1 />
  21. </el-form-item> -->
  22. </el-form>
  23. </section>
  24. <footer class="drawer__btn">
  25. <el-button @click="resetForm()">重置</el-button>
  26. <el-button type="primary" @click="submitForm()">提交</el-button>
  27. </footer>
  28. </el-drawer>
  29. </main>
  30. </template>
  31. <script lang="ts" setup>
  32. import { ref, reactive, onMounted } from 'vue';
  33. import { SceneListInfo, TemplateListInfo } from '@/types/business-scene/type.ts'
  34. import type { FormInstance, FormRules } from 'element-plus'
  35. import { getAllSceneModuleList } from '@/api/template/template'
  36. import { addSceneData, editSceneData } from '@/api/sys-config/business-scene'
  37. import { AddSceneDataParam, EditSceneDataParam } from '@/types/business-scene/type'
  38. import { debounce } from 'lodash-es';
  39. import { getMessage } from './MessageBox'
  40. const visiable = ref(true)
  41. const props = defineProps<{
  42. title: string;
  43. data: SceneListInfo | undefined
  44. }>()
  45. const emits = defineEmits(['closeDrawer', 'fetchTable'])
  46. const ruleForm = reactive({
  47. name: '',
  48. viewTemplateList: [] as TemplateListInfo[],
  49. remark: '',
  50. isDisabled: 0
  51. })
  52. const options = ref<TemplateListInfo[]>([])
  53. const ruleFormRef = ref<FormInstance>();
  54. const rules = reactive<FormRules<typeof ruleForm>>({
  55. name: [{ required: true, message: '场景名称不能为空', trigger: 'change' }],
  56. viewTemplateList: [{ required: true, message: '应用模板不能为空', trigger: 'change' }],
  57. })
  58. const debounceSubmit = debounce((params) => {
  59. addSceneData(params)
  60. .then(() => {
  61. emits('fetchTable')
  62. emits('closeDrawer')
  63. getMessage("success", '添加业务场景数据成功!')
  64. })
  65. }, 500);
  66. const debounceEdit = debounce((params) => {
  67. editSceneData(params)
  68. .then(() => {
  69. emits('fetchTable')
  70. emits('closeDrawer')
  71. getMessage("success", '修改业务场景数据成功!')
  72. })
  73. }, 500);
  74. const submitForm = () => {
  75. if (!ruleFormRef.value) return;
  76. ruleFormRef.value.validate((valid) => {
  77. if (!valid) return
  78. const addParams: AddSceneDataParam = {
  79. name: ruleForm.name,
  80. viewTemplateIdList: ruleForm.viewTemplateList.map(item => item.id),
  81. remark: ruleForm.remark,
  82. // isDisabled: ruleForm.isDisabled
  83. }
  84. if (props.title !== '添加业务场景') {
  85. const editParams: EditSceneDataParam = {
  86. id: props.data?.id!,
  87. ...addParams
  88. }
  89. debounceEdit(editParams);
  90. return;
  91. }
  92. debounceSubmit(addParams);
  93. });
  94. }
  95. const resetForm = () => {
  96. if (!ruleFormRef.value) return;
  97. if (props.title !== '添加业务场景') {
  98. initRuleForm(props.data)
  99. return;
  100. }
  101. ruleFormRef.value.resetFields();
  102. }
  103. const initRuleForm = (data) => {
  104. ruleForm.name = data.name;
  105. ruleForm.viewTemplateList = data.viewTemplateList;
  106. ruleForm.remark = data.remark;
  107. ruleForm.isDisabled = data.isDisabled;
  108. }
  109. onMounted(async () => {
  110. const res = await getAllSceneModuleList();
  111. options.value = res.map(item => ({
  112. id: item.id,
  113. name: item.name
  114. }));
  115. initRuleForm(props.data)
  116. })
  117. </script>
  118. <style lang="scss" scoped>
  119. :deep(.el-drawer__body) {
  120. display: flex;
  121. flex-direction: column;
  122. gap: 10px;
  123. height: 100%;
  124. }
  125. .el-form {
  126. display: flex;
  127. flex-direction: column;
  128. gap: 20px;
  129. }
  130. .drawer__form {
  131. height: calc(100% - 32px);
  132. overflow-y: auto;
  133. }
  134. .drawer__btn {
  135. display: flex;
  136. justify-content: center;
  137. height: 32px;
  138. }
  139. .select__custom--multiple {
  140. :deep(.el-select__selection) {
  141. min-height: 25px;
  142. max-height: 120px;
  143. overflow-y: auto;
  144. }
  145. }
  146. </style>