EditNginxContent.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <template>
  2. <div class="edit-nginx-content">
  3. <div class="tab-btns tab-nowrap">
  4. <el-button
  5. v-for="env in envList"
  6. :key="env.id"
  7. size="mini"
  8. :type="curEnv.id == env.id ? 'primary' : 'default'"
  9. @click="selectEnv(env)"
  10. >{{ env.name }}
  11. </el-button>
  12. </div>
  13. <div class="part-box part-box-pad nginx-body">
  14. <div v-if="checkEditPrivilege()" class="nginx-body-action">
  15. <el-button
  16. v-if="isEdit"
  17. type="primary"
  18. size="mini"
  19. :loading="loading"
  20. @click="confirm"
  21. >提交</el-button
  22. >
  23. <el-button
  24. :type="isEdit ? 'success' : 'default'"
  25. size="mini"
  26. @click="isEdit = !isEdit"
  27. >编辑</el-button
  28. >
  29. </div>
  30. <div
  31. v-if="!isEdit"
  32. :class="['nginx-body-cont', { 'is-none': !nginxContent }]"
  33. >
  34. {{ nginxContent || "暂无内容" }}
  35. </div>
  36. <div v-else class="nginx-body-edit">
  37. <el-input v-model="nginxContent" type="textarea"></el-input>
  38. </div>
  39. </div>
  40. </div>
  41. </template>
  42. <script>
  43. import { appNginxConfig, appNginxConfigUpdate, appEnvList } from "../api";
  44. export default {
  45. name: "EditNginxContent",
  46. props: {
  47. filterData: {
  48. type: Object,
  49. default() {
  50. return {
  51. appId: "",
  52. moduleId: "",
  53. };
  54. },
  55. },
  56. isBaseline: {
  57. type: Boolean,
  58. default: false,
  59. },
  60. },
  61. data() {
  62. return {
  63. envList: [],
  64. curEnv: {},
  65. nginxContent: "",
  66. isEdit: false,
  67. loading: false,
  68. user: {},
  69. };
  70. },
  71. computed: {
  72. IS_MAINTAINER() {
  73. return this.curEnv.user && this.curEnv.user.id === this.user.id;
  74. },
  75. },
  76. created() {
  77. this.user = this.$ls.get("user", {});
  78. this.initData();
  79. },
  80. methods: {
  81. async initData() {
  82. if (this.isBaseline) {
  83. this.envList = [{ id: null, name: "基线" }];
  84. } else {
  85. await this.getEnvList();
  86. }
  87. this.selectEnv(this.envList[0]);
  88. },
  89. async getEnvList() {
  90. const res = await appEnvList({
  91. appId: this.filterData.appId,
  92. moduleId: this.filterData.moduleId,
  93. });
  94. let envList = res || [];
  95. const testValid = this.checkPrivilege("app_nginx_test");
  96. const prodValid = this.checkPrivilege("app_nginx_prod");
  97. this.envList = envList.filter((env) => {
  98. return (
  99. (testValid && env.type === "TEST") ||
  100. (prodValid && env.type === "PROD")
  101. );
  102. });
  103. },
  104. selectEnv(env) {
  105. this.curEnv = env || {};
  106. this.search();
  107. this.isEdit = false;
  108. },
  109. checkEditPrivilege() {
  110. const privilege =
  111. (this.checkPrivilege("app_nginx_test_edit") &&
  112. this.curEnv.type === "TEST") ||
  113. (this.checkPrivilege("app_nginx_prod_edit") &&
  114. this.curEnv.type === "PROD") ||
  115. (this.checkPrivilege("app_nginx_baseline_edit") && this.isBaseline);
  116. return privilege || (!this.isBaseline && this.IS_MAINTAINER);
  117. },
  118. async search() {
  119. if (!this.isBaseline && !this.curEnv.id) {
  120. this.$message.error("请选择环境!");
  121. return;
  122. }
  123. const data = await appNginxConfig({
  124. ...this.filterData,
  125. envId: this.curEnv.id,
  126. });
  127. this.nginxContent = data.content || "";
  128. },
  129. async confirm() {
  130. if (!this.checkEditPrivilege()) return;
  131. if (!this.nginxContent) {
  132. this.$message.error("请输入配置内容!");
  133. return;
  134. }
  135. if (this.nginxContent.length > 9999) {
  136. this.$message.error("请输入配置内容过长!");
  137. return;
  138. }
  139. if (this.loading) return;
  140. this.loading = true;
  141. const res = await appNginxConfigUpdate({
  142. ...this.filterData,
  143. envId: this.curEnv.id,
  144. content: this.nginxContent,
  145. }).catch(() => {});
  146. this.loading = false;
  147. if (!res) return;
  148. this.$message.success("保存成功!");
  149. },
  150. },
  151. };
  152. </script>