ScoreResultsTable.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <style lang="less" scoped>
  2. .ScoreResults {
  3. width: 100%;
  4. // padding: 30px 30px 0 30px;
  5. box-sizing: border-box;
  6. border-top: 10px solid rgba(203, 207, 212, 0.3);
  7. h4 {
  8. font-size: 14px;
  9. border-bottom: 1px solid rgba(203, 207, 212, 0.3);
  10. padding: 10px 35px;
  11. }
  12. .table_box {
  13. padding: 0 35px;
  14. margin-top: -10px;
  15. }
  16. /deep/.el-table th,
  17. .el-table tr {
  18. height: 50px;
  19. background: #e3eaf4;
  20. }
  21. /deep/.el-table th {
  22. padding: 0;
  23. }
  24. .btn_box {
  25. width: 100%;
  26. height: 100%;
  27. padding: 20px 0;
  28. display: flex;
  29. align-items: center;
  30. justify-content: space-around;
  31. .btn_div {
  32. flex: 1;
  33. display: flex;
  34. align-items: center;
  35. justify-content: center;
  36. }
  37. img {
  38. width: 16px;
  39. height: 16px;
  40. cursor: pointer;
  41. }
  42. }
  43. .range_box {
  44. display: flex;
  45. position: relative;
  46. .range_child {
  47. flex: 1;
  48. &:nth-child(1) {
  49. margin-right: 20px;
  50. }
  51. /deep/.el-form-item__content {
  52. position: static;
  53. }
  54. /deep/ .is-error .el-form-item__error {
  55. left: 70px;
  56. }
  57. }
  58. }
  59. /deep/.el-input--mini .el-input__inner {
  60. width: 100%;
  61. }
  62. /deep/.el-form-item--mini.el-form-item,
  63. .el-form-item--small.el-form-item {
  64. padding: 18px 0;
  65. }
  66. .custom_table_header {
  67. vertical-align: middle;
  68. &::before {
  69. content: "*";
  70. color: red;
  71. font-size: 12px;
  72. margin-right: 4px;
  73. }
  74. }
  75. }
  76. /deep/ .el-textarea__inner {
  77. overflow-y: hidden;
  78. }
  79. .showScroll {
  80. /deep/ .el-textarea__inner {
  81. overflow-y: auto;
  82. }
  83. }
  84. /deep/ .el-input--mini {
  85. font-size: 14px;
  86. }
  87. /deep/ .el-form-item.is-success .el-input__inner,
  88. .el-form-item.is-success .el-textarea__inner {
  89. border-color: #c9c9c9 !important;
  90. }
  91. /deep/ .el-form-item.is-success .el-textarea__inner {
  92. border-color: #c9c9c9 !important;
  93. }
  94. /deep/ .el-form-item.is-success .el-textarea__inner {
  95. border-color: #c9c9c9 !important;
  96. }
  97. </style>
  98. <template>
  99. <div class="ScoreResults">
  100. <h4>得分结果:</h4>
  101. <div class="table_box">
  102. <el-table
  103. :data="list"
  104. header-row-class-name="header_row_class_name"
  105. border
  106. style="width: 100%; margin: 20px 0"
  107. >
  108. <el-table-column prop="orderNo" width="70px" label="">
  109. <template slot-scope="scope">
  110. <div class="btn_box">
  111. <div class="btn_div">
  112. <img
  113. @click="$emit('CHANEG_SCORE_RESULT', 1, scope.$index)"
  114. src="@/images/add-new-rule-sub.png"
  115. alt=""
  116. />
  117. </div>
  118. <div class="btn_div" v-if="list.length > 1">
  119. <img
  120. @click="$emit('CHANEG_SCORE_RESULT', 0, scope.$index)"
  121. src="@/images/add-new-rule-del.png"
  122. alt=""
  123. />
  124. </div>
  125. </div>
  126. </template>
  127. </el-table-column>
  128. <el-table-column prop="content">
  129. <template slot="header">
  130. <div class="custom_table_header">得分范围</div>
  131. </template>
  132. <template slot-scope="scope">
  133. <!-- <div>{{ scope.row.content.max }},{{ scope.row.content.min }}</div> -->
  134. <div class="range_box">
  135. <div class="range_child">
  136. <el-form-item
  137. label="大于等于:"
  138. label-width="80px"
  139. :prop="`scoreresultsdatas[${scope.$index}].content.min`"
  140. :rules="[
  141. {
  142. validator: (rule, value, callback) => {
  143. validateMinMax(scope, rule, value, callback);
  144. },
  145. trigger: ['blur']
  146. }
  147. ]"
  148. >
  149. <el-input
  150. type="text"
  151. maxlength="7"
  152. :id="`scoreresultsdatas[${scope.$index}].content.min`"
  153. @input="
  154. handleInput($event, scope.$index);
  155. scope.row.content.min = numInputChange(
  156. scope.row.content.min
  157. );
  158. "
  159. v-model="scope.row.content.min"
  160. clearable
  161. placeholder="请输入"
  162. ></el-input>
  163. </el-form-item>
  164. </div>
  165. <div class="range_child">
  166. <el-form-item
  167. label="小于等于:"
  168. label-width="80px"
  169. :prop="`scoreresultsdatas[${scope.$index}].content.max`"
  170. :rules="[
  171. {
  172. validator: (rule, value, callback) => {
  173. validateMinMax(scope, rule, value, callback);
  174. },
  175. trigger: ['blur']
  176. }
  177. ]"
  178. >
  179. <el-input
  180. type="text"
  181. maxlength="7"
  182. :id="`scoreresultsdatas[${scope.$index}].content.max`"
  183. @input="
  184. handleInput($event, scope.$index);
  185. scope.row.content.max = numInputChange(
  186. scope.row.content.max
  187. );
  188. "
  189. v-model="scope.row.content.max"
  190. clearable
  191. placeholder="请输入"
  192. ></el-input>
  193. </el-form-item>
  194. </div>
  195. </div>
  196. </template>
  197. </el-table-column>
  198. <el-table-column prop="result">
  199. <template slot="header">
  200. <div class="custom_table_header">结果</div>
  201. </template>
  202. <template slot-scope="scope">
  203. <el-form-item
  204. :prop="`scoreresultsdatas[${scope.$index}].result`"
  205. :rules="rules.soureResult"
  206. >
  207. <el-input
  208. :id="`scoreresultsdatas[${scope.$index}].result`"
  209. type="textarea"
  210. rows="1"
  211. :autosize="true"
  212. resize="none"
  213. v-model="scope.row.result"
  214. clearable
  215. maxlength="10"
  216. placeholder="请输入"
  217. ></el-input>
  218. </el-form-item>
  219. </template>
  220. </el-table-column>
  221. <el-table-column prop="pushInfo" label="建议">
  222. <template slot-scope="scope">
  223. <el-form-item
  224. :prop="`scoreresultsdatas[${scope.$index}].pushInfo`"
  225. :rules="rules.sourePushInfo"
  226. class="showScroll"
  227. >
  228. <el-input
  229. :id="`scoreresultsdatas[${scope.$index}].pushInfo`"
  230. type="textarea"
  231. rows="2"
  232. resize="none"
  233. v-model="scope.row.pushInfo"
  234. clearable
  235. maxlength="500"
  236. placeholder="请输入"
  237. ></el-input>
  238. </el-form-item>
  239. </template>
  240. </el-table-column>
  241. </el-table>
  242. </div>
  243. </div>
  244. </template>
  245. <script>
  246. import rules from "./rules";
  247. import { numInputChange } from "./util";
  248. export default {
  249. data() {
  250. return {
  251. rules: rules
  252. };
  253. },
  254. methods: {
  255. numInputChange,
  256. handleInput(val, i) {
  257. // `scoreresultsdatas[${scope.$index}].content.min`
  258. this.$emit("clearValidate", [
  259. `scoreresultsdatas[${i}].content.max`,
  260. `scoreresultsdatas[${i}].content.min`
  261. ]);
  262. },
  263. resizeTable() {
  264. setTimeout(() => {
  265. this.list.forEach((item, index) => {
  266. this.$refs[`scoreresultsdatas[${index}].pushInfo`] &&
  267. this.$refs[`scoreresultsdatas[${index}].pushInfo`].resizeTextarea();
  268. this.$refs[`scoreresultsdatas[${index}].result`] &&
  269. this.$refs[`scoreresultsdatas[${index}].result`].resizeTextarea();
  270. });
  271. }, 500);
  272. },
  273. validateMinMax(scope, rule, value, callback) {
  274. const { min, max } = scope.row.content;
  275. if (min || max) {
  276. callback();
  277. } else {
  278. callback(new Error("大于和小于至少完整填写一个"));
  279. }
  280. }
  281. },
  282. props: {
  283. list: {
  284. default: []
  285. }
  286. }
  287. };
  288. </script>