edit.vue 7.1 KB

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