ScoreResultsTable.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  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. border
  105. style="width: 100%; margin: 20px 0"
  106. >
  107. <el-table-column prop="orderNo" width="70px" label="">
  108. <template slot-scope="scope">
  109. <div class="btn_box">
  110. <div class="btn_div">
  111. <img
  112. @click="$emit('CHANEG_SCORE_RESULT', 1, scope.$index)"
  113. src="@/images/add-new-rule-sub.png"
  114. alt=""
  115. />
  116. </div>
  117. <div class="btn_div" v-if="list.length > 1">
  118. <img
  119. @click="$emit('CHANEG_SCORE_RESULT', 0, scope.$index)"
  120. src="@/images/add-new-rule-del.png"
  121. alt=""
  122. />
  123. </div>
  124. </div>
  125. </template>
  126. </el-table-column>
  127. <el-table-column prop="content" label="得分范围">
  128. <template slot="header" slot-scope="scope">
  129. <div class="custom_table_header">得分范围</div>
  130. </template>
  131. <template slot-scope="scope">
  132. <!-- <div>{{ scope.row.content.max }},{{ scope.row.content.min }}</div> -->
  133. <div class="range_box">
  134. <div class="range_child">
  135. <el-form-item
  136. label="大于等于:"
  137. label-width="80px"
  138. :prop="`scoreresultsdatas[${scope.$index}].content.min`"
  139. :rules="[
  140. {
  141. validator: (rule, value, callback) => {
  142. validateMinMax(scope, rule, value, callback);
  143. },
  144. trigger: ['blur']
  145. }
  146. ]"
  147. >
  148. <el-input
  149. type="text"
  150. maxlength="7"
  151. :id="`scoreresultsdatas[${scope.$index}].content.min`"
  152. @input="
  153. handleInput($event, scope.$index);
  154. scope.row.content.min = numInputChange(
  155. scope.row.content.min
  156. );
  157. "
  158. v-model="scope.row.content.min"
  159. clearable
  160. placeholder="请输入"
  161. ></el-input>
  162. </el-form-item>
  163. </div>
  164. <div class="range_child">
  165. <el-form-item
  166. label="小于等于:"
  167. label-width="80px"
  168. :prop="`scoreresultsdatas[${scope.$index}].content.max`"
  169. :rules="[
  170. {
  171. validator: (rule, value, callback) => {
  172. validateMinMax(scope, rule, value, callback);
  173. },
  174. trigger: ['blur']
  175. }
  176. ]"
  177. >
  178. <el-input
  179. type="text"
  180. maxlength="7"
  181. :id="`scoreresultsdatas[${scope.$index}].content.max`"
  182. @input="
  183. handleInput($event, scope.$index);
  184. scope.row.content.max = numInputChange(
  185. scope.row.content.max
  186. );
  187. "
  188. v-model="scope.row.content.max"
  189. clearable
  190. placeholder="请输入"
  191. ></el-input>
  192. </el-form-item>
  193. </div>
  194. </div>
  195. </template>
  196. </el-table-column>
  197. <el-table-column prop="result" label="结果">
  198. <template slot="header" slot-scope="scope">
  199. <div class="custom_table_header">结果</div>
  200. </template>
  201. <template slot-scope="scope">
  202. <el-form-item
  203. :prop="`scoreresultsdatas[${scope.$index}].result`"
  204. :rules="rules.soureResult"
  205. >
  206. <el-input
  207. :id="`scoreresultsdatas[${scope.$index}].result`"
  208. type="textarea"
  209. rows="1"
  210. :autosize="true"
  211. resize="none"
  212. v-model="scope.row.result"
  213. clearable
  214. maxlength="10"
  215. placeholder="请输入"
  216. ></el-input>
  217. </el-form-item>
  218. </template>
  219. </el-table-column>
  220. <el-table-column prop="pushInfo" label="建议">
  221. <template slot-scope="scope">
  222. <el-form-item
  223. :prop="`scoreresultsdatas[${scope.$index}].pushInfo`"
  224. class="showScroll"
  225. >
  226. <el-input
  227. :id="`scoreresultsdatas[${scope.$index}].pushInfo`"
  228. type="textarea"
  229. rows="2"
  230. resize="none"
  231. v-model="scope.row.pushInfo"
  232. clearable
  233. maxlength="500"
  234. placeholder="请输入"
  235. ></el-input>
  236. </el-form-item>
  237. </template>
  238. </el-table-column>
  239. </el-table>
  240. </div>
  241. </div>
  242. </template>
  243. <script>
  244. import rules from "./rules";
  245. import { numInputChange } from "./util";
  246. export default {
  247. data() {
  248. return {
  249. rules: rules
  250. };
  251. },
  252. methods: {
  253. numInputChange,
  254. handleInput(val, i) {
  255. // `scoreresultsdatas[${scope.$index}].content.min`
  256. this.$emit("clearValidate", [
  257. `scoreresultsdatas[${i}].content.max`,
  258. `scoreresultsdatas[${i}].content.min`
  259. ]);
  260. },
  261. resizeTable() {
  262. setTimeout(() => {
  263. this.list.forEach((item, index) => {
  264. this.$refs[`scoreresultsdatas[${index}].pushInfo`] &&
  265. this.$refs[`scoreresultsdatas[${index}].pushInfo`].resizeTextarea();
  266. this.$refs[`scoreresultsdatas[${index}].result`] &&
  267. this.$refs[`scoreresultsdatas[${index}].result`].resizeTextarea();
  268. });
  269. }, 500);
  270. },
  271. validateMinMax(scope, rule, value, callback) {
  272. const { min, max } = scope.row.content;
  273. if (min || max) {
  274. callback();
  275. } else {
  276. callback(new Error("大于和小于至少完整填写一个"));
  277. }
  278. }
  279. },
  280. props: {
  281. list: {
  282. default: []
  283. }
  284. }
  285. };
  286. </script>