editDicData.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <div class="system-edit-dic-container">
  3. <el-dialog :title="(ruleForm.dictCode!==0?'修改':'添加')+'字典'" v-model="isShowDialog" width="769px">
  4. <el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="90px">
  5. <el-form-item label="字典类型">
  6. <el-input v-model="ruleForm.dictType" :disabled="true" />
  7. </el-form-item>
  8. <el-form-item label="数据标签" prop="dictLabel">
  9. <el-input v-model="ruleForm.dictLabel" placeholder="请输入数据标签" />
  10. </el-form-item>
  11. <el-form-item label="数据键值" prop="dictValue">
  12. <el-input v-model="ruleForm.dictValue" placeholder="请输入数据键值" />
  13. </el-form-item>
  14. <el-form-item label="显示排序" prop="dictSort">
  15. <el-input-number v-model="ruleForm.dictSort" controls-position="right" :min="0" />
  16. </el-form-item>
  17. <el-form-item label="系统默认">
  18. <el-switch v-model="ruleForm.isDefault"
  19. active-text="是"
  20. inactive-text="否"
  21. :active-value="1"
  22. :inactive-value="0"
  23. ></el-switch>
  24. </el-form-item>
  25. <el-form-item label="状态" prop="status">
  26. <el-radio-group v-model="ruleForm.status">
  27. <el-radio :label="1" >启用</el-radio>
  28. <el-radio :label="0" >禁用</el-radio>
  29. </el-radio-group>
  30. </el-form-item>
  31. <el-form-item label="备注" prop="remark">
  32. <el-input v-model="ruleForm.remark" type="textarea" placeholder="请输入内容"></el-input>
  33. </el-form-item>
  34. </el-form>
  35. <template #footer>
  36. <span class="dialog-footer">
  37. <el-button @click="onCancel" size="default">取 消</el-button>
  38. <el-button type="primary" @click="onSubmit" size="default">{{ruleForm.dictCode!==0?'修 改':'添 加'}}</el-button>
  39. </span>
  40. </template>
  41. </el-dialog>
  42. </div>
  43. </template>
  44. <script lang="ts">
  45. import { reactive, toRefs, defineComponent,ref, unref } from 'vue';
  46. import {ElMessage} from "element-plus";
  47. import api from '/@/api/system';
  48. interface RuleFormState {
  49. dictCode: number;
  50. dictLabel: string;
  51. dictValue: string;
  52. dictSort:number;
  53. isDefault:number;
  54. status:number;
  55. remark:string;
  56. dictType:string;
  57. }
  58. interface DicState {
  59. isShowDialog: boolean;
  60. ruleForm: RuleFormState;
  61. rules:{}
  62. }
  63. export default defineComponent({
  64. name: 'systemEditDicData',
  65. props:{
  66. dictType:{
  67. type:String,
  68. default:()=>''
  69. }
  70. },
  71. setup(prop,{emit}) {
  72. const formRef = ref<HTMLElement | null>(null);
  73. const state = reactive<DicState>({
  74. isShowDialog: false,
  75. ruleForm: {
  76. dictCode: 0,
  77. dictLabel: '',
  78. dictValue: '',
  79. dictSort: 0,
  80. isDefault:0,
  81. status: 1,
  82. remark: '',
  83. dictType:prop.dictType
  84. },
  85. rules: {
  86. dictLabel: [
  87. { required: true, message: "数据标签不能为空", trigger: "blur" }
  88. ],
  89. dictValue: [
  90. { required: true, message: "数据键值不能为空", trigger: "blur" }
  91. ],
  92. dictSort: [
  93. { required: true, message: "数据顺序不能为空", trigger: "blur" }
  94. ]
  95. }
  96. });
  97. // 打开弹窗
  98. const openDialog = (row: RuleFormState|null) => {
  99. resetForm();
  100. if (row){
  101. api.dict.getData(row.dictCode).then((res:any)=>{
  102. state.ruleForm = res.data.dict
  103. })
  104. state.ruleForm = row;
  105. }
  106. state.isShowDialog = true;
  107. };
  108. const resetForm = ()=>{
  109. state.ruleForm = {
  110. dictCode: 0,
  111. dictLabel: '',
  112. dictValue: '',
  113. dictSort: 0,
  114. isDefault:0,
  115. status: 1,
  116. remark: '',
  117. dictType:prop.dictType
  118. }
  119. };
  120. // 关闭弹窗
  121. const closeDialog = () => {
  122. state.isShowDialog = false;
  123. };
  124. // 取消
  125. const onCancel = () => {
  126. closeDialog();
  127. };
  128. // 新增
  129. const onSubmit = () => {
  130. const formWrap = unref(formRef) as any;
  131. if (!formWrap) return;
  132. formWrap.validate((valid: boolean) => {
  133. if (valid) {
  134. if(state.ruleForm.dictCode!==0){
  135. //修改
  136. api.dict.editData(state.ruleForm).then(()=>{
  137. ElMessage.success('字典数据修改成功');
  138. closeDialog(); // 关闭弹窗
  139. emit('dataList')
  140. })
  141. }else{
  142. //添加
  143. api.dict.addData(state.ruleForm).then(()=>{
  144. ElMessage.success('字典数据添加成功');
  145. closeDialog(); // 关闭弹窗
  146. emit('dataList')
  147. })
  148. }
  149. }
  150. });
  151. };
  152. return {
  153. openDialog,
  154. closeDialog,
  155. onCancel,
  156. onSubmit,
  157. formRef,
  158. ...toRefs(state),
  159. };
  160. },
  161. });
  162. </script>