gradingRuleDetail.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <div>
  3. <el-form ref="form" :model="form" :rules="rules" label-width="108px">
  4. <el-form-item label="规则名称:" prop="ruleName">
  5. <el-input
  6. placeholder="请输入"
  7. maxlength="50"
  8. v-autoTrim="{ obj: form, key: 'ruleName' }"
  9. v-model="form.ruleName"
  10. >
  11. </el-input>
  12. </el-form-item>
  13. <el-form-item label="规则描述:" prop="ruleDescription">
  14. <el-input
  15. placeholder="请输入"
  16. maxlength="300"
  17. v-autoTrim="{ obj: form, key: 'ruleDescription' }"
  18. v-model="form.ruleDescription"
  19. >
  20. </el-input>
  21. </el-form-item>
  22. <el-form-item label="规则详情:" prop="ruleDetails">
  23. <!-- <el-input
  24. v-autoTrim="{
  25. obj: form,
  26. key: 'ruleDetails',
  27. }"
  28. v-model="form.ruleDetails"
  29. type="textarea"
  30. placeholder="请输入"
  31. :autosize="{ minRows: 8, maxRows: 8 }"
  32. maxlength="10000"
  33. show-word-limit
  34. ></el-input> -->
  35. <editor
  36. :content="content"
  37. ref="editor"
  38. :isEdit="!!$route.query.rulesId"
  39. ></editor>
  40. </el-form-item>
  41. <div class="btns">
  42. <!-- 公有列表进,另存为+取消 另存为为新增一条数据 新增数据均为私有 1 -->
  43. <!-- 私有列表进,保存+另存为+取消 0 -->
  44. <!-- 新增进,保存+取消 -1 -->
  45. <el-button
  46. type="primary"
  47. v-if="share === '0' || share === '-1'"
  48. @click="save(false)"
  49. >保存</el-button
  50. >
  51. <el-button
  52. type="primary"
  53. v-if="share === '0' || share === '1'"
  54. @click="save(true)"
  55. >另存为</el-button
  56. >
  57. <el-button type="primary" plain @click="cancel">取消</el-button>
  58. </div>
  59. </el-form>
  60. </div>
  61. </template>
  62. <script>
  63. import editor from "./components/editor";
  64. export default {
  65. name: "gradingRuleDetail", // 评分规则
  66. components: { editor },
  67. data() {
  68. return {
  69. share: "-1", //控制显示按钮
  70. form: {
  71. rulesId: "",
  72. ruleName: "",
  73. share: "-1",
  74. ruleDescription: "",
  75. ruleDetails: "",
  76. },
  77. content: "",
  78. rules: {
  79. ruleName: [
  80. { required: true, message: "请输入", trigger: "blur" },
  81. ],
  82. ruleDescription: [
  83. { required: true, message: "请输入", trigger: "blur" },
  84. ],
  85. ruleDetails: [
  86. { required: true, message: "请输入", trigger: "blur" },
  87. ],
  88. },
  89. };
  90. },
  91. computed: {},
  92. methods: {
  93. save(isAdd) {
  94. let ruleDetails = this.$refs.editor.editor.getText().trim();
  95. this.form.ruleDetails = ruleDetails;
  96. // 调用save时,应写成save(),给不给参数均可,不写小括号的话,isAdd会是事件源,则为true
  97. this.$refs.form.validate((valid) => {
  98. if (valid) {
  99. if (ruleDetails && ruleDetails.length > 10000) {
  100. this.$message.error("规则详情长度不得超过10000");
  101. return;
  102. }
  103. if (isAdd || !this.$route.query.rulesId) {
  104. // 另存为或新增页面
  105. this.form.rulesId = "";
  106. this.form.share = "0";
  107. }
  108. if (this.form.rulesId) {
  109. this.$axios({
  110. method: "post",
  111. url: this.$api.sceneLibrary.queryCsbById,
  112. data: {
  113. rulesId: this.form.rulesId,
  114. },
  115. }).then((res) => {
  116. if (res.code == 200) {
  117. if (res.info === 0) {
  118. this.saveFn();
  119. return;
  120. }
  121. this.$confirm(
  122. "该评分规则已经被场景测试包引用,保存后同步更新场景测试包中的评分规则,是否确认保存?",
  123. "提示",
  124. {
  125. confirmButtonText: "确定",
  126. cancelButtonText: "取消",
  127. type: "warning",
  128. }
  129. ).then(() => {
  130. this.saveFn();
  131. });
  132. } else {
  133. this.$message.error(
  134. res.message ||
  135. "获取该评分规则是否被场景测试包引用失败"
  136. );
  137. }
  138. });
  139. return;
  140. }
  141. this.saveFn();
  142. }
  143. });
  144. },
  145. saveFn() {
  146. this.$axios({
  147. method: "post",
  148. url: this.$api.sceneLibrary.saveScoringRules,
  149. data: {
  150. ...this.form,
  151. },
  152. }).then((res) => {
  153. if (res.code == 200) {
  154. this.$message.success("保存成功");
  155. this.cancel();
  156. } else {
  157. this.$message.error(res.message || "保存失败");
  158. }
  159. });
  160. // .catch((error) => {
  161. // this.$message.error(error || "保存失败!");
  162. // });
  163. },
  164. cancel() {
  165. this.$router.replace({ path: "/gradingRulesList" });
  166. },
  167. },
  168. mounted() {
  169. if (this.$route.query.rulesId) {
  170. let rulesId = "";
  171. this.form.rulesId = rulesId = this.$route.query.rulesId;
  172. this.form.share = this.share = this.$route.query.share;
  173. if (rulesId) {
  174. this.$axios({
  175. method: "post",
  176. url: this.$api.sceneLibrary.queryScoringRules,
  177. data: {
  178. rulesId,
  179. },
  180. }).then((res) => {
  181. if (res.code == 200 && res.info) {
  182. this.form = res.info;
  183. this.content = res.info.ruleDetails;
  184. } else {
  185. this.$message.error(res.message || "获取信息失败");
  186. }
  187. });
  188. }
  189. }
  190. },
  191. };
  192. </script>
  193. <style lang='less' scoped>
  194. .el-form {
  195. width: 60%;
  196. padding-top: 60px;
  197. margin: 0 auto;
  198. .el-input {
  199. width: 100%;
  200. }
  201. }
  202. .btns {
  203. padding-top: 30px;
  204. text-align: center;
  205. }
  206. </style>