DataRequirementsTab.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <template>
  2. <div>
  3. <el-button
  4. type="primary"
  5. :disabled="isViewMode"
  6. @click="$emit('handleAddMaterial')"
  7. >
  8. 补充材料
  9. </el-button>
  10. <el-table
  11. style="margin-top: 20px"
  12. border
  13. :data="dataRequirements"
  14. size="mini"
  15. :show-header="true"
  16. :row-class-name="getRowClassName"
  17. >
  18. <el-table-column prop="seq" label="序号" width="80" align="center">
  19. <template slot-scope="scope">
  20. <span v-if="!scope.row.isCategoryHeader">
  21. {{ scope.row.seq || scope.row.index }}
  22. </span>
  23. </template>
  24. </el-table-column>
  25. <el-table-column prop="informationName" label="报送资料" min-width="280">
  26. <template slot-scope="scope">
  27. <div v-if="scope.row.isCategoryHeader" class="category-header-cell">
  28. {{ scope.row.categoryName }}
  29. </div>
  30. <span v-else>{{ scope.row.informationName || '-' }}</span>
  31. </template>
  32. </el-table-column>
  33. <el-table-column
  34. prop="formatRequired"
  35. label="资料类型"
  36. width="130"
  37. align="center"
  38. >
  39. <template slot-scope="scope">
  40. <span v-if="!scope.row.isCategoryHeader">
  41. <span
  42. v-if="
  43. scope.row.formatRequired !== null &&
  44. scope.row.formatRequired !== undefined
  45. "
  46. >
  47. {{
  48. getDictName('formatAsk', String(scope.row.formatRequired)) ||
  49. scope.row.formatRequired
  50. }}
  51. </span>
  52. <span v-else>-</span>
  53. </span>
  54. </template>
  55. </el-table-column>
  56. <el-table-column
  57. prop="isRequired"
  58. label="是否必填"
  59. width="110"
  60. align="center"
  61. >
  62. <template slot-scope="scope">
  63. <span v-if="!scope.row.isCategoryHeader">
  64. {{ scope.row.isRequired === '1' ? '是' : '否' }}
  65. </span>
  66. </template>
  67. </el-table-column>
  68. <el-table-column
  69. prop="isUpload"
  70. label="是否上传"
  71. width="110"
  72. align="center"
  73. >
  74. <template slot-scope="scope">
  75. <span v-if="!scope.row.isCategoryHeader">
  76. <span
  77. v-if="scope.row.isUpload === 1 || scope.row.isUpload === '1'"
  78. style="color: #67c23a"
  79. >
  80. 已上传
  81. </span>
  82. <span v-else class="text-danger">未上传</span>
  83. </span>
  84. </template>
  85. </el-table-column>
  86. <el-table-column
  87. prop="isRequired"
  88. label="审核状态"
  89. width="110"
  90. align="center"
  91. >
  92. <template slot-scope="scope">
  93. <span v-if="!scope.row.isCategoryHeader">
  94. <span
  95. v-if="
  96. scope.row.auditedStatus !== null &&
  97. scope.row.auditedStatus !== undefined
  98. "
  99. >
  100. {{
  101. getDictName('clshzt', String(scope.row.auditedStatus)) ||
  102. scope.row.auditedStatus
  103. }}
  104. </span>
  105. <span v-else>-</span>
  106. </span>
  107. </template>
  108. </el-table-column>
  109. <el-table-column prop="operation" label="操作" width="220" align="center">
  110. <template slot-scope="scope">
  111. <template v-if="!scope.row.isCategoryHeader">
  112. <template v-if="scope.row.formatRequired !== '3'">
  113. <el-button
  114. v-if="scope.row.isUpload === 1 || scope.row.isUpload === '1'"
  115. type="text"
  116. size="small"
  117. @click="$emit('handleFileView', scope.row)"
  118. >
  119. 查看
  120. </el-button>
  121. <el-button
  122. v-if="scope.row.isUpload === 1 || scope.row.isUpload === '1'"
  123. type="text"
  124. size="small"
  125. @click="$emit('handleFileDownload', scope.row)"
  126. >
  127. 下载
  128. </el-button>
  129. <el-button
  130. v-if="scope.row.auditedStatus !== '1' && currentNode === 'clcs'"
  131. type="text"
  132. size="small"
  133. :disabled="isViewMode"
  134. @click="$emit('handleFileUpload', scope.row)"
  135. >
  136. 上传
  137. </el-button>
  138. </template>
  139. <template v-if="scope.row.formatRequired == '3'">
  140. <el-button
  141. v-if="scope.row.isUpload === 1 || scope.row.isUpload === '1'"
  142. type="text"
  143. size="small"
  144. @click="$emit('handleTemplateDownload', scope.row)"
  145. >
  146. 模版下载
  147. </el-button>
  148. <el-button
  149. v-if="scope.row.auditedStatus !== '1' && currentNode === 'clcs'"
  150. type="text"
  151. size="small"
  152. :disabled="isViewMode"
  153. @click="$emit('handleDataUpload', scope.row)"
  154. >
  155. 数据上传
  156. </el-button>
  157. </template>
  158. </template>
  159. </template>
  160. </el-table-column>
  161. </el-table>
  162. </div>
  163. </template>
  164. <script>
  165. export default {
  166. name: 'DataRequirementsTab',
  167. props: {
  168. dataRequirements: {
  169. type: Array,
  170. default: () => [],
  171. },
  172. isViewMode: {
  173. type: Boolean,
  174. default: false,
  175. },
  176. dictData: {
  177. type: Object,
  178. default: () => ({}),
  179. },
  180. currentNode: {
  181. type: String,
  182. default: '',
  183. },
  184. },
  185. computed: {},
  186. mounted() {
  187. // 直接使用this.currentNode访问props值,无需在data中重复定义
  188. },
  189. methods: {
  190. getRowClassName(data) {
  191. if (data.row.isCategoryHeader) {
  192. return 'category-header-row'
  193. }
  194. return ''
  195. },
  196. getDictName(dictType, dictKey) {
  197. const list = (this.dictData && this.dictData[dictType]) || []
  198. if (!Array.isArray(list) || dictKey === undefined || dictKey === null) {
  199. return ''
  200. }
  201. const item = list.find(
  202. (it) =>
  203. String(it.key) === String(dictKey) ||
  204. String(it.value) === String(dictKey)
  205. )
  206. return item ? item.name : ''
  207. },
  208. },
  209. }
  210. </script>
  211. <style scoped>
  212. .text-danger {
  213. color: #d9001b;
  214. }
  215. /* 类别头行样式 */
  216. .category-header-row {
  217. background-color: #f5f7fa !important;
  218. }
  219. .category-header-row td {
  220. background-color: #f5f7fa !important;
  221. padding: 12px 16px !important;
  222. }
  223. .category-header-cell {
  224. font-weight: 700;
  225. color: #303133;
  226. padding-left: 16px;
  227. }
  228. </style>