【前端】智能库房综合管理系统前端项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.5 KiB

  1. <template>
  2. <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title">
  3. <span class="dialog-right-top" />
  4. <span class="dialog-left-bottom" />
  5. <div class="setting-dialog">
  6. <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
  7. <el-form-item label="中文名称" prop="fieldCnName">
  8. <el-input v-model="form.fieldCnName" style="width: 370px;" />
  9. </el-form-item>
  10. <el-form-item label="字段标识" prop="fieldName">
  11. <el-input v-model="form.fieldName" style="width: 370px;" />
  12. </el-form-item>
  13. <el-form-item label="数据类型" prop="isDataType">
  14. <el-select v-model="form.isDataType" placeholder="请选择">
  15. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="字段长度" prop="isColumnLength">
  19. <el-input-number v-model="form.isColumnLength" controls-position="right" style="width: 370px;" />
  20. </el-form-item>
  21. <el-form-item label="默认值" prop="isDefaultValue">
  22. <el-input v-model="form.isDefaultValue" style="width: 370px;" />
  23. </el-form-item>
  24. </el-form>
  25. <div slot="footer" class="dialog-footer">
  26. <el-button type="text" @click="crud.cancelCU">
  27. 取消
  28. </el-button>
  29. <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">
  30. 确认
  31. </el-button>
  32. </div>
  33. </div>
  34. </el-dialog>
  35. </template>
  36. <script>
  37. import { form } from '@crud/crud'
  38. const defaultForm = {
  39. id: null,
  40. fieldCnName: '',
  41. fieldName: '',
  42. isDataType: 1,
  43. isColumnLength: 100,
  44. isDefaultValue: ''
  45. }
  46. export default {
  47. mixins: [form(defaultForm)],
  48. data() {
  49. var checkMaxLength = (rule, value, callback) => {
  50. if (value !== undefined && (!Number.isInteger(value) || value <= 0)) {
  51. callback(new Error('请输入正整数数字值'))
  52. } else {
  53. if (this.form.isDataType === 1 && value > 2000) {
  54. callback(new Error('字符最大长度不能超过2000位'))
  55. } else if (this.form.isDataType === 2 && value > 11) {
  56. callback(new Error('数字最大长度不能超过11位'))
  57. } else {
  58. callback()
  59. }
  60. }
  61. }
  62. var checkFieldName = (rule, value, callback) => {
  63. const reg = /^[A-Za-z][A-Za-z_]+[a-zA-Z]*$/
  64. if (reg.test(value)) {
  65. callback()
  66. } else {
  67. callback(new Error('字段标识只能由字母、字符“_”组成,并且必须以字母开头和结尾'))
  68. }
  69. }
  70. return {
  71. rules: {
  72. fieldCnName: [
  73. { required: true, message: '请输入中文名称', trigger: 'blur' }
  74. ],
  75. fieldName: [
  76. { required: true, message: '请选择字段标识', trigger: 'blur' },
  77. { validator: checkFieldName, trigger: 'blur' }
  78. ],
  79. isDataType: [
  80. { required: true, message: '请选择数据类型', trigger: 'blur' }
  81. ],
  82. isColumnLength: [
  83. { validator: checkMaxLength, trigger: 'blur' }
  84. ]
  85. },
  86. options: [
  87. {
  88. value: 1,
  89. label: '字符'
  90. },
  91. {
  92. value: 2,
  93. label: '数字'
  94. }
  95. ]
  96. }
  97. }
  98. }
  99. </script>
  100. <style rel="stylesheet/scss" lang="scss" scoped>
  101. ::v-deep .el-input-number .el-input__inner {
  102. text-align: left;
  103. }
  104. </style>