edit.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <div>
  3. <el-form
  4. ref="ruleForm"
  5. :rules="rules"
  6. :model="sizeForm"
  7. label-suffix=":"
  8. label-position="right"
  9. label-width="90px"
  10. >
  11. <dg-row>
  12. <dg-col :span="12">
  13. <el-form-item label="方案名称" prop="name">
  14. {{ sizeForm.name }}
  15. <!-- <el-input
  16. v-model.trim="sizeForm.name"
  17. show-word-limit
  18. placeholder="请输入方案名称"
  19. clearable
  20. disabled
  21. /> -->
  22. </el-form-item>
  23. </dg-col>
  24. </dg-row>
  25. <dg-row>
  26. <dg-col :span="12">
  27. <el-form-item label="方案状态" prop="state">
  28. <dg-select
  29. style="width: 100%;"
  30. v-model="sizeForm.state"
  31. placeholder="请选择方案状态"
  32. code="DM_APPLY_STATUS"
  33. >
  34. </dg-select>
  35. </el-form-item>
  36. </dg-col>
  37. </dg-row>
  38. <dg-row>
  39. <dg-col :span="24">
  40. <el-form-item label="检测规则" prop="ruleContent">
  41. <!-- DSJPFJQFX DSJPFHBMDMZFX JQBYTJBWZFX -->
  42. <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
  43. <p>
  44. 鉴权时,必要条件不完整。
  45. </p>
  46. <div>
  47. 鉴权类型:
  48. <dg-radio-group
  49. v-model="sizeForm.authType"
  50. enum="AuthenticationNecessaryParamEnum"
  51. @change="setNecessaryParams"
  52. call-off
  53. ></dg-radio-group>
  54. </div>
  55. <div class="form-inline">
  56. <label>必要参数:</label>
  57. <dg-checkbox-group
  58. v-model="sizeForm.necessaryParams"
  59. enum="AuthenticationTypeEnum"
  60. disabled
  61. ></dg-checkbox-group>
  62. </div>
  63. </div>
  64. <div v-else class="form-inline">
  65. <el-form-item label="" prop="interval">
  66. <el-input style="width: 80px;" v-model.trim="sizeForm.interval"></el-input>
  67. </el-form-item>
  68. &nbsp;{{ ruleText }}&nbsp;
  69. <el-form-item label="" prop="frequency"
  70. ><el-input style="width: 80px;" v-model.trim="sizeForm.frequency"></el-input>
  71. </el-form-item>
  72. &nbsp;次
  73. </div>
  74. </el-form-item>
  75. </dg-col>
  76. </dg-row>
  77. <dg-row>
  78. <dg-col :span="24">
  79. <el-form-item label="规则说明" prop="ruleExplain">
  80. {{ sizeForm.ruleExplain }}
  81. <!-- <el-input
  82. type="textarea"
  83. rows="4"
  84. v-model.trim="sizeForm.ruleExplain"
  85. placeholder="请输入规则说明"
  86. clearable
  87. show-word-limit
  88. disabled
  89. maxlength="500"
  90. /> -->
  91. </el-form-item>
  92. </dg-col>
  93. </dg-row>
  94. <dg-row>
  95. <dg-col :span="24">
  96. <el-form-item label="风险内容" prop="contentFormat">
  97. {{ sizeForm.contentFormat }}
  98. </el-form-item>
  99. </dg-col>
  100. </dg-row>
  101. <dg-row>
  102. <dg-col :span="24">
  103. <el-form-item label="处理意见" prop="handleOpinion">
  104. <el-input
  105. type="textarea"
  106. rows="4"
  107. v-model.trim="sizeForm.handleOpinion"
  108. placeholder="请输入处理意见"
  109. clearable
  110. show-word-limit
  111. maxlength="500"
  112. />
  113. </el-form-item>
  114. </dg-col>
  115. </dg-row>
  116. </el-form>
  117. <div class="dg-layer-demo" v-footer>
  118. <dg-button @click="handleClose">取消</dg-button>
  119. <dg-button type="primary" @click="handlSave">确定</dg-button>
  120. </div>
  121. </div>
  122. </template>
  123. <script>
  124. import { saveAuthRisk } from "@/api/log-manage";
  125. export default {
  126. name: "auth-risk-edit",
  127. props: {
  128. formData: Object
  129. },
  130. computed: {
  131. ruleText() {
  132. if (this.sizeForm.type === "DSJPFJQFX") return "分钟内,鉴权次数超过";
  133. return "分钟内,命中红/白名单超过";
  134. }
  135. },
  136. data() {
  137. return {
  138. necessaryParams: [],
  139. sizeForm: {
  140. interval: "",
  141. frequency: "",
  142. authType: "",
  143. necessaryParams: ""
  144. },
  145. rules: {
  146. handleOpinion: [{ required: true, message: "请输入处理意见", trigger: "blur" }],
  147. name: [{ required: true, message: "请输入方案名称", trigger: "blur" }],
  148. interval: [{ required: true, message: "请输入分钟数", trigger: "blur" }],
  149. frequency: [{ required: true, message: "请输入次数", trigger: "blur" }],
  150. state: [{ required: true, message: "请选择方案状态", trigger: "blur" }],
  151. ruleContent: [{ required: true }]
  152. }
  153. };
  154. },
  155. methods: {
  156. init() {
  157. this.sizeForm = Object.assign({}, this.formData, this.sizeForm);
  158. if (this.sizeForm.type === "JQBYTJBWZFX") {
  159. this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
  160. if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
  161. this.sizeForm.authType = this.necessaryParams[0].type;
  162. this.setNecessaryParams(this.sizeForm.authType);
  163. }
  164. return;
  165. }
  166. const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
  167. this.sizeForm.interval = interval;
  168. this.sizeForm.frequency = frequency;
  169. },
  170. setNecessaryParams(key) {
  171. const seleted = this.necessaryParams.find(item => item.type === key);
  172. if (seleted) {
  173. this.sizeForm.necessaryParams = seleted.params
  174. .map(item => {
  175. return item.name;
  176. })
  177. .join(",");
  178. }
  179. },
  180. handleClose() {
  181. this.$emit("success", true);
  182. },
  183. async handlSave() {
  184. const that = this;
  185. const valid = await new Promise(resolve => this.$refs.ruleForm.validate(resolve));
  186. if (!valid) return;
  187. const sizeForm = { ...this.sizeForm };
  188. if (["DSJPFHBMDMZFX", "DSJPFJQFX"].includes(this.sizeForm.type)) {
  189. sizeForm.ruleContent = JSON.stringify({ frequency: sizeForm.frequency, interval: sizeForm.interval });
  190. }
  191. saveAuthRisk(sizeForm.id, sizeForm)
  192. .then(() => {
  193. that.handleClose(true);
  194. that.$message.success("保存成功");
  195. })
  196. .catch(error => that.$notify.error({ title: "错误", message: error }));
  197. }
  198. },
  199. created() {
  200. this.init();
  201. }
  202. };
  203. </script>
  204. <style lang="scss" scoped>
  205. .form-inline {
  206. display: flex;
  207. label {
  208. min-width: 5.4em;
  209. }
  210. }
  211. </style>