improvedItemBatchEntry.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <div class="main" :inert="isInert">
  3. <div class="hand-btn">
  4. <el-button type="primary" icon="el-icon-plus" @click="addData"
  5. >添加</el-button
  6. >
  7. <el-button type="danger" icon="el-icon-close" @click="goRemove"
  8. >删除</el-button
  9. >
  10. </div>
  11. <el-table
  12. ref="reviewTable"
  13. :key="tableKey"
  14. :data="statData"
  15. border
  16. stripe
  17. highlight-current-row
  18. style="width: 100%"
  19. class="review-table blue-header"
  20. :max-height="maxHeight"
  21. @selection-change="handleSelectionChange"
  22. >
  23. <el-table-column type="selection" width="55" />
  24. <el-table-column type="index" label="序号" width="55" />
  25. <el-table-column label="负责部门" width="200">
  26. <template v-slot="{ row }">
  27. <el-select
  28. v-model="row.dept"
  29. placeholder="请选择"
  30. @change="selectChange(row)"
  31. >
  32. <el-option
  33. v-for="item in deptArr"
  34. :key="item.value"
  35. :label="item.label"
  36. :value="item.value"
  37. >
  38. </el-option>
  39. </el-select>
  40. </template>
  41. </el-table-column>
  42. <el-table-column label="负责人" width="200">
  43. <template v-slot="{ row }">
  44. <el-select v-model="row.person" placeholder="请选择">
  45. <el-option
  46. v-for="item in perArr[row.dept]"
  47. :key="item.value"
  48. :label="item.label"
  49. :value="item.value"
  50. >
  51. </el-option>
  52. </el-select>
  53. </template>
  54. </el-table-column>
  55. <el-table-column prop="sheBeiMingCheng" label="改进意见">
  56. <template v-slot="{ row }">
  57. <el-input type="textarea" v-model="row.opinion"></el-input>
  58. </template>
  59. </el-table-column>
  60. </el-table>
  61. </div>
  62. </template>
  63. <script>
  64. export default {
  65. props: {
  66. formData: {
  67. type: Object,
  68. default: () => {}
  69. },
  70. params: {
  71. type: Object,
  72. default: () => {}
  73. },
  74. readonly: {
  75. type: Boolean,
  76. default: false
  77. }
  78. },
  79. data() {
  80. return {
  81. deptArr: [],
  82. perArr: {},
  83. isInert: false,
  84. isFirst: true,
  85. statData: [],
  86. maxHeight: '600px',
  87. tableKey: 0,
  88. multipleSelection: []
  89. }
  90. },
  91. watch: {
  92. statData: {
  93. handler(val) {
  94. this.$emit('change-data', 'fuJian', JSON.stringify(val))
  95. },
  96. deep: true
  97. }
  98. },
  99. created() {
  100. this.$store.getters.deptList.forEach((item, i) => {
  101. if (item.depth > 2) {
  102. this.deptArr.push({
  103. value: item.positionId,
  104. label: item.positionName
  105. })
  106. this.perArr[item.positionId] = []
  107. this.$store.getters.userList.forEach((t, e) => {
  108. if (t.positionId.includes(item.positionId)) {
  109. this.perArr[item.positionId].push({
  110. value: t.userId,
  111. label: t.userName
  112. })
  113. }
  114. })
  115. }
  116. })
  117. },
  118. methods: {
  119. addData() {
  120. // this.$common.getNextIdByAlias({
  121. // 'alias': 'gsgzyzbh'
  122. // }).then(response => {
  123. // let mid = { number:response.data, dept:'', person: '', opinion: '' }
  124. // this.statData.push(mid)
  125. // console.log(this.statData)
  126. // }).catch((error) => {
  127. // })
  128. if (this.statData.length > 9) {
  129. this.$message.warning('单次批量只接受10条数据')
  130. } else {
  131. let mid = { dept: '', person: '', opinion: '' }
  132. this.statData.push(mid)
  133. }
  134. },
  135. selectChange(val) {
  136. val.person = ''
  137. },
  138. handleSelectionChange(val) {
  139. this.multipleSelection = val
  140. },
  141. goRemove() {
  142. if (this.multipleSelection.length === 0) {
  143. this.$message({
  144. message: '请选择要删除的数据',
  145. type: 'warning'
  146. })
  147. return
  148. }
  149. this.statData = this.statData.filter(
  150. (item) => !this.multipleSelection.includes(item)
  151. )
  152. }
  153. }
  154. }
  155. </script>
  156. <style lang="scss" scoped>
  157. .main {
  158. .hand-btn {
  159. width: 100%;
  160. text-align: right;
  161. }
  162. ::v-deep .blue-header .el-table__header th {
  163. background-color: #84d5cf !important; /* 背景颜色 */
  164. color: #080808; /* 标题文字颜色 */
  165. }
  166. .dialog {
  167. padding: 10px;
  168. }
  169. .spanto {
  170. color: #1e90ff;
  171. }
  172. .spanto:hover {
  173. cursor: pointer;
  174. }
  175. .spant {
  176. display: inline-block;
  177. color: #dfdddd;
  178. margin: 0 7px;
  179. }
  180. .dialog-footer {
  181. text-align: center;
  182. }
  183. .el-form {
  184. padding: 10px;
  185. }
  186. .setBorder {
  187. border: 1px solid #dcdfe6;
  188. padding: 10px;
  189. border-radius: 8px;
  190. }
  191. }
  192. </style>