QualityContentTabs.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <template>
  2. <el-row>
  3. <header-title title="质检内容">
  4. <el-button type="primary" :loading="loading" v-if="type != 'detail'"
  5. @click="$emit('batch-quality')">批量质检</el-button>
  6. </header-title>
  7. <el-tabs v-model="activeName" @tab-click="handleClick">
  8. <!-- -->
  9. <el-tab-pane label="来源清单" name="1">
  10. <el-table v-if="packingList.length > 0" ref="showPackingListTable" :data="paginatedPackingList"
  11. tooltip-effect="dark" :max-height="300" border row-key="id"
  12. @selection-change="$emit('selection-change', $event)">
  13. <el-table-column type="selection" width="55" align="center" :reserve-selection="true"
  14. :selectable="checkSelectable"></el-table-column>
  15. <el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
  16. <template v-for="column in tableColumns">
  17. <el-table-column :label="column.label" :prop="column.prop" :show-overflow-tooltip="true"
  18. :width="column.width" :align="column.align"></el-table-column>
  19. </template>
  20. </el-table>
  21. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  22. :current-page="pagination.currentPage" :page-sizes="[10, 20, 50, 100]" :page-size="pagination.pageSize"
  23. layout="total, sizes, prev, pager, next" :total="packingList.length" style="margin-top: 16px" />
  24. </el-tab-pane>
  25. <!-- -->
  26. <el-tab-pane label="样品清单" name="2">
  27. <el-table v-if="sampleList.length > 0" ref="showSampleListTable" :data="paginatedSampleList"
  28. tooltip-effect="dark" :max-height="300" border row-key="id">
  29. <el-table-column label="序号" type="index" width="50" align="center" fixed="left"></el-table-column>
  30. <template v-for="column in tableColumns">
  31. <el-table-column :key="column.prop" :label="column.label" :prop="column.prop" :fixed="column.fixed"
  32. :show-overflow-tooltip="true" :width="column.width" :align="column.align">
  33. <template slot-scope="scope">
  34. <template v-if="column.prop === 'categoryCode'">
  35. <el-link type="primary" :underline="false" @click="handleDetail(scope.$index, scope.row, 'detail')">
  36. {{ scope.row.categoryCode }}
  37. </el-link>
  38. </template>
  39. <template v-else-if="column.prop === 'weight'">
  40. <el-input type="number" v-model="scope.row.weight" :min="0"
  41. @input="inputWeight(scope.row, scope.$index)"></el-input>
  42. </template>
  43. <template v-else>
  44. {{ scope.row[column.prop] }}
  45. </template>
  46. </template>
  47. </el-table-column>
  48. </template>
  49. <el-table-column label="处置状态" prop="disposalStatus" align="center" width="80" fixed="right"
  50. :show-overflow-tooltip="true">
  51. <template slot-scope="scope">
  52. <span v-if="scope.row.disposalStatus == 1 && form.qualityType == 2">返工</span>
  53. <span v-if="scope.row.disposalStatus == 2 && form.qualityType == 2">返修</span>
  54. <span v-if="scope.row.disposalStatus == 3">报废</span>
  55. <span v-if="scope.row.disposalStatus == 4 && form.qualityType == 2">降级使用</span>
  56. <span v-if="scope.row.disposalStatus == 5 && form.qualityType == 2">让步接收</span>
  57. <span v-if="scope.row.disposalStatus == 6">留样</span>
  58. <span v-if="scope.row.disposalStatus == 7">消耗</span>
  59. <span v-if="scope.row.disposalStatus == 8">回用</span>
  60. </template>
  61. </el-table-column>
  62. <el-table-column label="处置时间" prop="disposeTime" align="center" width="100" fixed="right"
  63. :show-overflow-tooltip="true">
  64. </el-table-column>
  65. <el-table-column label="质检状态" prop="qualityStatus" align="center" width="120" fixed="right"
  66. :show-overflow-tooltip="true">
  67. <template slot-scope="scope">
  68. <span v-if="scope.row.qualityStatus == 0">未检</span>
  69. <span v-if="scope.row.qualityStatus == 1">已检</span>
  70. <span v-if="scope.row.qualityStatus == 2">待检</span>
  71. </template>
  72. </el-table-column>
  73. <el-table-column label="质检结果" prop="qualityResults" align="center" width="120" fixed="right"
  74. :show-overflow-tooltip="true">
  75. <template slot-scope="scope">
  76. <el-select v-model="scope.row.qualityResults" placeholder="请选择" style="width: 100%;"
  77. :disabled="type == 'detail'" size="mini">
  78. <el-option v-for="item in qualityResultsList" :key="item.value" :label="item.label" :value="item.value">
  79. </el-option>
  80. </el-select>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="操作" align="center" width="120" fixed="right" v-if="type != 'detail'">
  84. <template slot-scope="scope">
  85. <el-link :type="scope.row.isValid ? 'primary' : 'danger'" :underline="false"
  86. @click="handleDetail(scope.$index, scope.row, 'report')">
  87. 质检
  88. </el-link>
  89. <el-link type='primary' :underline="false" @click="handleDispose(scope.$index, scope.row, 'dispose')">处置
  90. </el-link>
  91. </template>
  92. </el-table-column>
  93. </el-table>
  94. <el-pagination @size-change="handleSampleSizeChange" @current-change="handleSampleCurrentChange"
  95. :current-page="samplePagination.currentPage" :page-sizes="[10, 20, 50, 100]"
  96. :page-size="samplePagination.pageSize" layout="total, sizes, prev, pager, next, jumper"
  97. :total="sampleList.length" />
  98. </el-tab-pane>
  99. <!-- -->
  100. <el-tab-pane label="质检方案" name="3">
  101. <el-table :data="paginatedSchemeList" tooltip-effect="dark" :max-height="300" border row-key="id">
  102. <el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
  103. <el-table-column label="质检方案编码" prop="qualitySchemeTemplateCode" align="center">
  104. </el-table-column>
  105. <el-table-column label="质检方案名称" prop="qualitySchemeTemplateName" align="center"></el-table-column>
  106. <el-table-column label="质检类型" prop="categoryLevelClassName" align="center"></el-table-column>
  107. <el-table-column label="质检项编码" prop="inspectionCode" align="center"></el-table-column>
  108. <el-table-column label="质检项名称" prop="inspectionName" align="center"></el-table-column>
  109. <el-table-column label="工艺参数" prop="defaultValue" align="center">
  110. </el-table-column>
  111. </el-table>
  112. <el-pagination @size-change="handleSchemeSizeChange" @current-change="handleSchemeCurrentChange"
  113. :current-page="schemePagination.currentPage" :page-sizes="[10, 20, 50, 100]"
  114. :page-size="schemePagination.pageSize" layout="total, sizes, prev, pager, next, jumper"
  115. :total="schemeList.length" />
  116. </el-tab-pane>
  117. </el-tabs>
  118. </el-row>
  119. </template>
  120. <script>
  121. export default {
  122. props: {
  123. type: String,
  124. packingList: Array,
  125. sampleList: Array,
  126. schemeList: Array,
  127. loading: Boolean,
  128. form: Object
  129. },
  130. data() {
  131. return {
  132. activeName: '2',
  133. pagination: { currentPage: 1, pageSize: 10 },
  134. samplePagination: { currentPage: 1, pageSize: 10 },
  135. schemePagination: { currentPage: 1, pageSize: 10 },
  136. qualityResultsList: [{
  137. value: 1,
  138. label: '合格'
  139. },
  140. {
  141. value: 2,
  142. label: '不合格'
  143. }],
  144. tableColumns: [
  145. {
  146. label: '编码',
  147. prop: 'categoryCode',
  148. width: '160',
  149. align: 'center',
  150. fixed: 'left'
  151. },
  152. {
  153. label: '名称',
  154. prop: 'categoryName',
  155. width: '150',
  156. align: 'center'
  157. },
  158. { label: '批次号', prop: 'batchNo', align: 'center' },
  159. { label: '发货条码', prop: 'barcodes', align: 'center' },
  160. { label: '包装编码', prop: 'packageNo', align: 'center' },
  161. // { label: '包装数量', prop: 'packingQuantity', align: 'center' },
  162. { label: '包装单位', prop: 'packingUnit', align: 'center' },
  163. { label: '计量数量', prop: 'measureQuantity', align: 'center' },
  164. { label: '计量单位', prop: 'measureUnit', align: 'center' },
  165. { label: '物料代号', prop: 'materielDesignation', align: 'center' },
  166. { label: '客户代号', prop: 'clientCode', align: 'center' },
  167. { label: '刻码', prop: 'engrave', align: 'center' },
  168. { label: '重量', prop: 'weight', align: 'center', width: "100" },
  169. { label: '重量单位', prop: 'weightUnit', align: 'center', width: "100" },
  170. { label: '仓库', prop: 'warehouseName', align: 'center' },
  171. { label: '货区', prop: 'areaName', align: 'center' },
  172. { label: '货架', prop: 'goodsShelfName', align: 'center' },
  173. { label: '货位', prop: 'goodsAllocationName', align: 'center' },
  174. { label: '生产日期', prop: 'productionDate', align: 'center' },
  175. { label: '采购日期', prop: 'purchaseDate', align: 'center' },
  176. ],
  177. }
  178. },
  179. computed: {
  180. paginatedPackingList() {
  181. const start =
  182. (this.pagination.currentPage - 1) * this.pagination.pageSize;
  183. const end = start + this.pagination.pageSize;
  184. return this.packingList.slice(start, end);
  185. },
  186. // 分页后的样品列表
  187. paginatedSampleList() {
  188. const { currentPage, pageSize } = this.samplePagination;
  189. const start = (currentPage - 1) * pageSize;
  190. const end = start + pageSize;
  191. return this.sampleList?.slice(start, end);
  192. },
  193. // 分页后的质检方案列表
  194. paginatedSchemeList() {
  195. const { currentPage, pageSize } = this.schemePagination;
  196. const start = (currentPage - 1) * pageSize;
  197. const end = start + pageSize;
  198. return this.schemeList?.slice(start, end);
  199. }
  200. },
  201. methods: {
  202. handleClick(tab) {
  203. this.activeName = tab.name
  204. },
  205. checkSelectable(row, index) {
  206. // 只有当质检方式为抽检(qualityMode=2)时 类型不是生产检验 才可选
  207. return this.form.qualityType != 2 && this.form.qualityMode === 2;
  208. },
  209. handleDetail(index, row, type) {
  210. this.$emit('handleDetail', index, row, type)
  211. },
  212. inputWeight(row, index) {
  213. this.$emit('inputWeight', row, index)
  214. },
  215. handleDispose(index, row, type) {
  216. this.$emit('handleDispose', index, row, type)
  217. },
  218. // 分页方法
  219. handleSizeChange(val) {
  220. this.pagination.pageSize = val;
  221. this.pagination.currentPage = 1;
  222. },
  223. handleCurrentChange(val) {
  224. this.pagination.currentPage = val;
  225. },
  226. handleSampleSizeChange(val) {
  227. this.samplePagination.pageSize = val;
  228. this.samplePagination.currentPage = 1;
  229. },
  230. handleSampleCurrentChange(val) {
  231. this.samplePagination.currentPage = val;
  232. },
  233. handleSchemeSizeChange(val) {
  234. this.schemePagination.pageSize = val;
  235. this.schemePagination.currentPage = 1;
  236. },
  237. handleSchemeCurrentChange(val) {
  238. this.schemePagination.currentPage = val;
  239. },
  240. }
  241. }
  242. </script>