addOrEditDialog.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <ele-modal custom-class="ele-dialog-form long-dialog-form"
  3. :centered="true" :visible.sync="addOrEditDialogFlag" :title="title"
  4. append-to-body
  5. :close-on-click-modal="false" width="28%" :before-close="cancel">
  6. <el-form ref="form" :model="form" :rules="rules" class="el-form-box" label-width="110px">
  7. <headerTitle title="基本信息"/>
  8. <el-row :gutter="12">
  9. <el-col :span="12">
  10. <div style="margin:0 0 10px 70px">
  11. <span>示例</span>
  12. <span style="color: red;margin-left: 10px">
  13. {{ getExample }}
  14. </span>
  15. </div>
  16. </el-col>
  17. </el-row>
  18. <el-row :gutter="12">
  19. <el-col :span="24">
  20. <el-form-item label="分类" prop="type">
  21. <!-- <ele-tree-select-->
  22. <!-- clearable-->
  23. <!-- :data="typeList"-->
  24. <!-- v-model="form.type"-->
  25. <!-- placeholder="请选择"-->
  26. <!-- valueKey="id"-->
  27. <!-- labelKey="name"-->
  28. <!-- childrenKey="subList"-->
  29. <!-- />-->
  30. <DictSelection dictName="版本规则分类" clearable filterable v-model="form.type" :isProhibit="type=='view'">
  31. </DictSelection>
  32. <!-- <el-select v-model="form.type" filterable style="width: 100%;" :disabled="type=='view'">-->
  33. <!-- <el-option v-for="item in typeList" :key="item.id" :value="item.id" :label="item.name"></el-option>-->
  34. <!-- </el-select>-->
  35. </el-form-item>
  36. </el-col>
  37. </el-row>
  38. <el-row :gutter="12">
  39. <el-col :span="24">
  40. <el-form-item label="名称" prop="name">
  41. <el-input v-model="form.name" :disabled="type=='view'"></el-input>
  42. </el-form-item>
  43. </el-col>
  44. </el-row>
  45. <el-row :gutter="12">
  46. <el-col :span="16">
  47. <el-form-item label="大版本采用" prop="noteType">
  48. <el-select v-model="form.noteType" @change="handleNoteType" :disabled="type=='view'" style="width: 100%;">
  49. <el-option :value="1" label="字母"></el-option>
  50. <el-option :value="2" label="数字"></el-option>
  51. </el-select>
  52. </el-form-item>
  53. </el-col>
  54. <el-col :span="8">
  55. <el-form-item label="位数" prop="noteNum" label-width="50px">
  56. <el-select v-model="form.noteNum" style="width: 100%;" :disabled="type=='view'">
  57. <el-option :value="1" label="1"></el-option>
  58. <el-option :value="2" label="2"></el-option>
  59. </el-select>
  60. </el-form-item>
  61. </el-col>
  62. </el-row>
  63. <el-row :gutter="12">
  64. <el-col :span="16">
  65. <el-form-item label="大版本初始值" prop="note">
  66. <el-input v-model="form.note" :disabled="type=='view'"></el-input>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="8">
  70. <span style="margin-left: 10px;line-height: 38px;color: red">默认字母A,数字1</span>
  71. </el-col>
  72. </el-row>
  73. <el-row :gutter="12">
  74. <el-col :span="16">
  75. <el-form-item label="连接符" prop="mark">
  76. <el-input v-model="form.mark" :disabled="type=='view'"></el-input>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="12">
  80. </el-col>
  81. </el-row>
  82. <el-row :gutter="12">
  83. <el-col :span="16">
  84. <el-form-item label="小版本初始值" prop="versionNumber">
  85. <el-input type="number" v-model="form.versionNumber" :disabled="type=='view'"></el-input>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="8">
  89. <el-form-item label="位数" prop="versionNum" label-width="50px">
  90. <el-select v-model="form.versionNum" style="width: 100%;" :disabled="type=='view'">
  91. <el-option :value="1" label="1"></el-option>
  92. <el-option :value="2" label="2"></el-option>
  93. <el-option :value="3" label="3"></el-option>
  94. </el-select>
  95. </el-form-item>
  96. </el-col>
  97. </el-row>
  98. <el-row :gutter="12">
  99. <el-col :span="16">
  100. <el-form-item label="变更后版本">
  101. <el-select v-model="form.changeType" style="width: 100%;" :disabled="type=='view'">
  102. <el-option :value="1" label="提升大版本"></el-option>
  103. <el-option :value="2" label="提升小版本"></el-option>
  104. </el-select>
  105. </el-form-item>
  106. </el-col>
  107. </el-row>
  108. </el-form>
  109. <div slot="footer">
  110. <el-button v-if="type!=='view'" type="primary" @click="handleSave">保存</el-button>
  111. <el-button @click="cancel">返回</el-button>
  112. </div>
  113. </ele-modal>
  114. </template>
  115. <script>
  116. import {getDetailsByIdAPI, versionManageSaveAPI, versionManageUpdateAPI} from "@/api/versionManage";
  117. import {getInfoById} from "@/api/classifyManage";
  118. export default {
  119. name: "addOrEditDIalog",
  120. props: {
  121. addOrEditDialogFlag: Boolean,
  122. typeList: {
  123. type: Array,
  124. default: () => {
  125. return []
  126. }
  127. },
  128. },
  129. data() {
  130. return {
  131. title: '',
  132. type: '',
  133. form: {
  134. id: '',
  135. type: '',
  136. name: '',
  137. noteType: 1,
  138. noteNum: 1,
  139. note: 'A',
  140. mark: '.',
  141. versionNumber: '1',
  142. versionNum: 1,
  143. changeType: 1,
  144. },
  145. }
  146. },
  147. computed: {
  148. getExample() {
  149. let value = this.form.note || (this.form.noteType == 1 ? 'A' : '1')
  150. return value + this.form.mark + this.form.versionNumber
  151. },
  152. rules() {
  153. return {
  154. type: [{required: true, message: '请选择', trigger: 'change'}],
  155. name: [{required: true, message: '请输入', trigger: 'blur'}],
  156. noteType: [{required: true, message: '请选择', trigger: 'change'}],
  157. noteNum: [{required: true, message: '请选择', trigger: 'change'}],
  158. mark: [
  159. {required: true, message: '请输入', trigger: 'blur'},
  160. {validator: this.markValidate, trigger: ['blur']},
  161. ],
  162. note: [{required: false, validator: this.noteValidate, trigger: 'blur'}],
  163. versionNum: [
  164. {required: true, message: '请输入', trigger: ['blur', 'change']},
  165. ],
  166. versionNumber: [
  167. {required: true, message: '请输入', trigger: 'blur'},
  168. {validator: this.versionNumValidate, trigger: ['blur', 'change']},
  169. ],
  170. }
  171. }
  172. },
  173. methods: {
  174. handleNoteType(val) {
  175. this.form.note = val == 1 ? 'A' : '1'
  176. },
  177. noteValidate(rule, value, callback) {
  178. if (!value) callback()
  179. let regex = this.form.noteType == 1 ? `[A-Z]` : `[0-9]`
  180. let regexA = new RegExp(`^${regex}{${this.form.noteNum}}$`)
  181. if (!regexA.test(value)) {
  182. callback(new Error('输入格式错误'))
  183. }
  184. callback()
  185. },
  186. versionNumValidate(rule, value, callback) {
  187. if (!value) callback('请输入')
  188. let regex = `[0-9]`
  189. let regexA = new RegExp(`^${regex}{${this.form.versionNum}}$`)
  190. if (!regexA.test(value)) {
  191. callback(new Error('输入格式错误'))
  192. }
  193. callback()
  194. },
  195. markValidate(rule, value, callback) {
  196. if (!value) callback('请输入')
  197. const regex = /^[~*_\-:;,./]+$/;
  198. if (!regex.test(value)) {
  199. callback(new Error('输入格式错误,可选连接符(~ * _ \ - : ; , . /)'))
  200. }
  201. callback()
  202. },
  203. //页面初始化
  204. init(type, row = {}) {
  205. this.title = type == 'add' ? '新增' : type == 'edit' ? '修改' : '详情'
  206. this.type = type
  207. if (type !== 'add') {
  208. this.getDetail(row.id)
  209. }
  210. },
  211. async getDetail(id) {
  212. this.loading = true;
  213. this.form = await getDetailsByIdAPI(id);
  214. this.loading = false;
  215. },
  216. handleSave() {
  217. this.$refs.form.validate(async valid => {
  218. if (!valid) return
  219. const API = this.type == 'add' ? versionManageSaveAPI : versionManageUpdateAPI
  220. await API(this.form)
  221. this.$message.success('操作成功')
  222. this.cancel()
  223. this.$emit('reload')
  224. })
  225. },
  226. //关闭弹窗
  227. cancel() {
  228. this.$emit('update:addOrEditDialogFlag', false)
  229. },
  230. }
  231. }
  232. </script>
  233. <style scoped lang="scss">
  234. </style>