3
0

ModifyAppConfigItem.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <template>
  2. <el-dialog
  3. class="modify-app-config-item"
  4. :visible.sync="modalIsShow"
  5. :title="title"
  6. top="10vh"
  7. width="600px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @opened="visibleChange"
  12. >
  13. <el-form
  14. ref="modalFormComp"
  15. :model="modalForm"
  16. :rules="rules"
  17. label-width="100px"
  18. >
  19. <el-form-item
  20. v-if="!isEdit && group && group.available && group.available.length"
  21. prop="selectAvailableKey"
  22. label="可选配置项:"
  23. >
  24. <el-select
  25. v-model="selectAvailableKey"
  26. placeholder="请选择未配置的配置项"
  27. class="width-full"
  28. @change="availableKeyChange"
  29. >
  30. <el-option
  31. v-for="item in group.available"
  32. :key="item.key"
  33. :value="item.key"
  34. :label="item.key"
  35. ></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item prop="key" label="配置项:">
  39. <span v-if="isEdit || isStrictKey">
  40. {{ modalForm.key }}
  41. </span>
  42. <el-input
  43. v-else
  44. v-model.trim="modalForm.key"
  45. placeholder="请输入配置项"
  46. clearable
  47. ></el-input>
  48. </el-form-item>
  49. <el-form-item prop="value" label="配置值:">
  50. <value-modify
  51. v-model="modalForm.value"
  52. :available="available"
  53. ></value-modify>
  54. </el-form-item>
  55. <el-form-item v-if="modalForm.comment" label="注释:">
  56. {{ modalForm.comment }}
  57. </el-form-item>
  58. </el-form>
  59. <div slot="footer">
  60. <el-button type="danger" @click="cancel" plain>取消</el-button>
  61. <el-button type="primary" :disabled="isSubmit" @click="submit"
  62. >确认</el-button
  63. >
  64. </div>
  65. </el-dialog>
  66. </template>
  67. <script>
  68. import { appConfigItemUpdate } from "../api";
  69. import ValueModify from "./ValueModify.vue";
  70. const initModalForm = {
  71. appId: "",
  72. moduleId: "",
  73. versionId: "",
  74. envId: "",
  75. key: "",
  76. value: "",
  77. comment: ""
  78. };
  79. export default {
  80. name: "modify-app-config-item",
  81. components: {
  82. ValueModify
  83. },
  84. props: {
  85. instance: {
  86. type: Object,
  87. default() {
  88. return {};
  89. }
  90. },
  91. // name,prefix,available,unvalidKeys
  92. group: {
  93. type: Object,
  94. default: null
  95. }
  96. },
  97. data() {
  98. const keyValidator = (rule, value, callback) => {
  99. if (this.isEdit) return callback();
  100. if (
  101. this.group &&
  102. this.group.available &&
  103. !this.group.available.length &&
  104. !value.startsWith(this.group.prefix)
  105. ) {
  106. return callback(
  107. new Error(`配置项需要带有${this.group.prefix}的前缀。`)
  108. );
  109. }
  110. if (this.selectAvailableKey.includes(".*.")) {
  111. const regCont = this.selectAvailableKey
  112. .split(".")
  113. .join("\\.")
  114. .replace("*", ".*");
  115. const reg = new RegExp(`^${regCont}$`);
  116. if (!reg.test(value) || value === this.selectAvailableKey) {
  117. return callback(
  118. new Error(`配置项需要满足${this.selectAvailableKey}的格式。`)
  119. );
  120. }
  121. }
  122. if (this.group.unvalidKeys.includes(value)) {
  123. return callback(new Error("配置项已经存在"));
  124. }
  125. callback();
  126. };
  127. return {
  128. modalIsShow: false,
  129. isSubmit: false,
  130. modalForm: { ...initModalForm },
  131. rules: {
  132. selectAvailableKey: [
  133. {
  134. required: true,
  135. validator: (rule, value, callback) => {
  136. if (!this.selectAvailableKey) {
  137. callback(new Error("请选择未配置的配置项"));
  138. } else {
  139. callback();
  140. }
  141. },
  142. trigger: "change"
  143. }
  144. ],
  145. key: [
  146. {
  147. required: true,
  148. message: "请输入配置项",
  149. trigger: "change"
  150. },
  151. {
  152. max: 100,
  153. message: "配置项不能超过100字符",
  154. trigger: "change"
  155. },
  156. {
  157. validator: keyValidator,
  158. trigger: "change"
  159. }
  160. ],
  161. value: [
  162. {
  163. required: true,
  164. message: "请设置配置值",
  165. trigger: "change"
  166. }
  167. ]
  168. },
  169. available: null,
  170. selectAvailableKey: "",
  171. selectAvailable: {},
  172. isStrictKey: false
  173. };
  174. },
  175. computed: {
  176. isEdit() {
  177. return !!this.instance.key;
  178. },
  179. title() {
  180. return this.instance.key ? "编辑" : "添加" + "应用配置配置项";
  181. }
  182. },
  183. methods: {
  184. initData(val) {
  185. this.modalForm = this.$objAssign(initModalForm, val);
  186. this.$refs.modalFormComp.clearValidate();
  187. },
  188. visibleChange() {
  189. this.selectAvailableKey = "";
  190. this.selectAvailable = {};
  191. this.isStrictKey = false;
  192. this.available = this.instance.available;
  193. this.initData(this.instance);
  194. },
  195. cancel() {
  196. this.modalIsShow = false;
  197. },
  198. open() {
  199. this.modalIsShow = true;
  200. },
  201. availableKeyChange() {
  202. this.selectAvailable = this.group.available.find(
  203. item => item.key === this.selectAvailableKey
  204. );
  205. this.isStrictKey = !this.selectAvailableKey.includes(".*.");
  206. this.modalForm.key = this.selectAvailableKey;
  207. this.modalForm.value = this.selectAvailable.defaultValue || null;
  208. this.available = this.selectAvailable;
  209. this.$refs.modalFormComp.validate().catch(() => {});
  210. },
  211. async submit() {
  212. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  213. if (!valid) return;
  214. if (this.isSubmit) return;
  215. this.isSubmit = true;
  216. let datas = { ...this.modalForm };
  217. const data = await appConfigItemUpdate(datas).catch(() => {});
  218. this.isSubmit = false;
  219. if (!data) return;
  220. this.$message.success("修改成功!");
  221. this.$emit("modified", data);
  222. this.cancel();
  223. }
  224. }
  225. };
  226. </script>