details.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never" class="tabs_box">
  4. <el-tabs v-model="activeName" type="card">
  5. <el-tab-pane label="基本信息" name="1">
  6. <el-form ref="form1" :model="form" label-width="94px">
  7. <!-- <el-col
  8. :span="item.span"
  9. v-for="(item, index) in infoList"
  10. :key="index"
  11. >
  12. <el-form-item :label="`${item.label}:`">
  13. <el-input :value="form[item.prop]" disabled />
  14. </el-form-item>
  15. </el-col> -->
  16. <el-row>
  17. <el-col :span="6">
  18. <el-form-item label="编码">
  19. <el-input :value="form.code" disabled />
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="6">
  23. <el-form-item label="产品名称">
  24. <el-input :value="form.productName" disabled />
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="6">
  28. <el-form-item label="产品编码">
  29. <el-input :value="form.productCode" disabled />
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="6">
  33. <el-form-item label="批次号">
  34. <el-input :value="form.batchNo" disabled />
  35. </el-form-item>
  36. </el-col>
  37. </el-row>
  38. <el-row>
  39. <el-col :span="6">
  40. <el-form-item label="型号">
  41. <el-input :value="form.modelType" disabled />
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="6">
  45. <el-form-item label="牌号">
  46. <el-input :value="form.brandNo" disabled />
  47. </el-form-item>
  48. </el-col>
  49. <el-col :span="6">
  50. <el-form-item label="计量类型">
  51. <el-input :value="form.inspectionStandardsName" disabled />
  52. </el-form-item>
  53. </el-col>
  54. <el-col :span="6">
  55. <el-form-item label="质检部门">
  56. <el-input :value="form.groupName" disabled />
  57. </el-form-item>
  58. </el-col>
  59. </el-row>
  60. <el-row>
  61. <el-col :span="6">
  62. <el-form-item label="质检人">
  63. <el-input :value="form.qualityName" disabled />
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="6">
  67. <el-form-item label="质检时间">
  68. <el-input :value="form.qualityTime" disabled />
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="6">
  72. <el-form-item label="工时(h)">
  73. <el-input :value="form.hours" disabled />
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="6">
  77. <el-form-item label="合格率">
  78. <el-input :value="form.noQualificationRate" disabled />
  79. </el-form-item>
  80. </el-col>
  81. </el-row>
  82. <el-row>
  83. <el-col :span="6">
  84. <el-form-item label="不合格率">
  85. <el-input :value="form.noQualificationRate" disabled />
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="6">
  89. <el-form-item label="检验方式">
  90. <el-input :value="form.qualityModeName" disabled />
  91. </el-form-item>
  92. </el-col>
  93. <el-col :span="6">
  94. <el-form-item label="质检结果">
  95. <el-input :value="form.qualityResultsName" disabled />
  96. </el-form-item>
  97. </el-col>
  98. <el-col :span="6">
  99. <el-form-item label="总重量">
  100. <el-input :value="form.totalWeight" disabled />
  101. </el-form-item>
  102. </el-col>
  103. </el-row>
  104. <el-row>
  105. <el-col :span="6">
  106. <el-form-item label="总数量">
  107. <el-input :value="form.sampleQuantity" disabled />
  108. </el-form-item>
  109. </el-col>
  110. <el-col :span="6">
  111. <el-form-item label="样品数">
  112. <el-input :value="form.sampleQuantity" disabled />
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="6">
  116. <el-form-item label="合格数">
  117. <el-input :value="form.qualifiedNumber" disabled />
  118. </el-form-item>
  119. </el-col>
  120. <el-col :span="6">
  121. <el-form-item label="不合格数">
  122. <el-input :value="form.noQualifiedNumber" disabled />
  123. </el-form-item>
  124. </el-col>
  125. </el-row>
  126. <el-row>
  127. <el-col :span="6">
  128. <el-form-item label="规格">
  129. <el-input :value="form.specification" disabled />
  130. </el-form-item>
  131. </el-col>
  132. <el-col :span="6" v-for="el in disposeTypeList">
  133. <el-form-item :label="disposalName(el.disposeType)">
  134. <el-input :value="el.measureQuantity" disabled />
  135. </el-form-item>
  136. </el-col>
  137. <el-col :span="12">
  138. <el-form-item label="备注">
  139. <el-input :value="form.remark" disabled />
  140. </el-form-item>
  141. </el-col>
  142. </el-row>
  143. </el-form>
  144. </el-tab-pane>
  145. <el-tab-pane label="样品信息" name="2">
  146. <el-form label-width="110px">
  147. <el-row>
  148. <el-col :span="6" v-if="showArrange == '1'">
  149. <el-form-item label="样品合格数:">
  150. <el-input
  151. disabled
  152. v-model="form.sampleQualifiedNumber"
  153. ></el-input>
  154. </el-form-item>
  155. </el-col>
  156. <el-col :span="6" v-if="showArrange == '1'">
  157. <el-form-item label="样品不合格数:">
  158. <el-input
  159. disabled
  160. v-model="form.sampleNoQualifiedNumber"
  161. ></el-input>
  162. </el-form-item>
  163. </el-col>
  164. <el-col :span="6">
  165. <el-form-item label="样品合格率:">
  166. <el-input v-model="form.sampleQualificationRate" disabled />
  167. </el-form-item>
  168. </el-col>
  169. <el-col :span="6">
  170. <el-form-item label="样品不合格率:">
  171. <el-input v-model="form.sampleNoQualificationRate" disabled />
  172. </el-form-item>
  173. </el-col>
  174. </el-row>
  175. <el-row>
  176. <el-col :span="6">
  177. <el-form-item label="样品类型:">
  178. <el-input
  179. disabled
  180. :value="sampletypeVal(form.conditionType)"
  181. />
  182. </el-form-item>
  183. </el-col>
  184. <el-col :span="6">
  185. <el-form-item label="样品数量:">
  186. <el-input disabled v-model="form.sampleQuantity" />
  187. </el-form-item>
  188. </el-col>
  189. <el-col :span="6">
  190. <el-form-item label="样品重量:">
  191. <el-input disabled v-model="form.sampleWeight" />
  192. </el-form-item>
  193. </el-col>
  194. </el-row>
  195. </el-form>
  196. </el-tab-pane>
  197. <el-tab-pane label="质检内容" name="3">
  198. <el-tabs v-model="inspectionName">
  199. <el-tab-pane label="来源清单" name="1">
  200. <ele-pro-table
  201. :columns="tableColumns1"
  202. :datasource="sourceData1"
  203. :initLoad="false"
  204. :needPage="false"
  205. :toolkit="[]"
  206. height="calc(100vh - 330px)"
  207. >
  208. </ele-pro-table>
  209. </el-tab-pane>
  210. <el-tab-pane label="样品清单" name="2">
  211. <ele-pro-table
  212. :columns="tableColumns2"
  213. :datasource="sourceData2"
  214. :initLoad="false"
  215. :needPage="false"
  216. :toolkit="[]"
  217. height="calc(100vh - 330px)"
  218. >
  219. </ele-pro-table
  220. ></el-tab-pane>
  221. <el-tab-pane label="质检方案" name="3">
  222. <ele-pro-table
  223. :columns="tableColumns3"
  224. :datasource="sourceData3"
  225. :initLoad="false"
  226. :needPage="false"
  227. :toolkit="[]"
  228. height="calc(100vh - 330px)"
  229. >
  230. </ele-pro-table
  231. ></el-tab-pane>
  232. </el-tabs>
  233. </el-tab-pane>
  234. <el-tab-pane
  235. label="样品处置"
  236. name="4"
  237. v-show="form.status == 1 && activeName == '4'"
  238. >
  239. <ele-pro-table
  240. :columns="tableColumns4"
  241. :datasource="sourceData4"
  242. :initLoad="false"
  243. :needPage="false"
  244. :toolkit="[]"
  245. height="calc(100vh - 260px)"
  246. >
  247. </ele-pro-table>
  248. </el-tab-pane>
  249. <el-tab-pane label="不良品处置" name="5">
  250. <ele-pro-table
  251. :columns="tableColumns5"
  252. :datasource="sourceData5"
  253. :initLoad="false"
  254. :needPage="false"
  255. :toolkit="[]"
  256. height="calc(100vh - 260px)"
  257. >
  258. </ele-pro-table>
  259. </el-tab-pane>
  260. </el-tabs>
  261. <el-button class="go_back" @click="goBack">返回</el-button>
  262. </el-card>
  263. </div>
  264. </template>
  265. <script>
  266. import { getDetailById } from '@/api/inspectionWork/index';
  267. import { planDetails } from '@/api/inspectionPlan/index';
  268. import { getByCode } from '@/api/system/dictionary-data';
  269. import detailMixins from './mixins/detailMixins';
  270. import { parameterGetByCode } from '@/api/main/index';
  271. import { getUserPage } from '@/api/system/organization';
  272. export default {
  273. mixins: [detailMixins],
  274. data() {
  275. return {
  276. activeName: '1',
  277. inspectionName: '1',
  278. sourceData1: [],
  279. sourceData2: [],
  280. sourceData3: [],
  281. sourceData4: [],
  282. sourceData5: [],
  283. disposeTypeList: [],
  284. form: {},
  285. showArrange: '0',
  286. executorList: []
  287. };
  288. },
  289. computed: {
  290. sampletypeVal() {
  291. return (row) => {
  292. if (row == 1) return '整样';
  293. if (row == 2) return '小样';
  294. return '';
  295. };
  296. },
  297. disposalName() {
  298. return (type) => {
  299. return this.disposeTypeMap[type] || '';
  300. };
  301. }
  302. },
  303. created() {
  304. this.getData();
  305. // 是否展示合格不合格
  306. this.getCode();
  307. },
  308. methods: {
  309. getCode() {
  310. parameterGetByCode({
  311. code: 'qms_show_arrange'
  312. }).then((res) => {
  313. if (res) {
  314. this.showArrange = res.value || '1';
  315. // this.time_calc_code = res.value || '0';
  316. }
  317. });
  318. },
  319. async getUserList(params) {
  320. try {
  321. let data = { pageNum: 1, size: -1 };
  322. // 如果传了参数就是获取巡点检人员数据
  323. if (params) {
  324. data = Object.assign(data, params);
  325. }
  326. const res = await getUserPage(data);
  327. console.log(res, 'resres');
  328. this.executorList = res.list;
  329. } catch (error) {}
  330. },
  331. async getData() {
  332. let id = this.$route.query.id;
  333. let name = this.$route.query.name;
  334. try {
  335. const api = name == '计划' ? planDetails : getDetailById;
  336. const result = await api(id);
  337. console.log(result, 'result');
  338. await this.getUserList({ groupId: result.data.groupId });
  339. const res = result.data;
  340. const qualityName = [];
  341. if (res.qualityId && this.executorList.length != 0) {
  342. res.qualityId.split(',').forEach((item) => {
  343. this.executorList.forEach((el) => {
  344. if (el.id == item) {
  345. qualityName.push(el.name);
  346. }
  347. });
  348. });
  349. }
  350. if (qualityName.length != 0) {
  351. res.qualityName = qualityName.join(',');
  352. }
  353. let obj = {};
  354. this.infoList.map((item) => {
  355. obj[item.prop] = res[item.prop];
  356. });
  357. this.form = obj;
  358. this.form.status = res.status;
  359. this.fieldAssign(res, obj);
  360. this.sampleInfo(res);
  361. } catch (err) {
  362. console.log(err, 'err');
  363. }
  364. },
  365. sampleInfo(res) {
  366. this.$set(
  367. this.form,
  368. 'sampleQualifiedNumber',
  369. res.sampleQualifiedNumber
  370. );
  371. this.$set(
  372. this.form,
  373. 'sampleNoQualifiedNumber',
  374. res.sampleNoQualifiedNumber
  375. );
  376. this.$set(
  377. this.form,
  378. 'sampleQualificationRate',
  379. res.sampleQualificationRate
  380. );
  381. this.$set(
  382. this.form,
  383. 'sampleNoQualificationRate',
  384. res.sampleNoQualificationRate
  385. );
  386. this.$set(this.form, 'conditionType', res.conditionType);
  387. this.$set(this.form, 'sampleQuantity', res.sampleQuantity);
  388. this.$set(this.form, 'sampleWeight', res.sampleWeight);
  389. this.$set(this.form, 'qualifiedNumber', res.qualifiedNumber);
  390. this.$set(this.form, 'noQualifiedNumber', res.noQualifiedNumber);
  391. this.$set(this.form, 'remark', res.remark);
  392. this.sourceData3 = res.templateList || [];
  393. this.sourceData1 = res.qualityInventoryList || [];
  394. let name = this.$route.query.name;
  395. // const result = name == '计划' ? res.qualityWorkOrderDetailVO : res;
  396. let result = {};
  397. if (name == '计划') {
  398. this.sourceData4 = res.sampleList || [];
  399. this.sourceData2 = res.sampleList || [];
  400. result = res.qualityWorkOrderDetailVO
  401. ? res.qualityWorkOrderDetailVO
  402. : {};
  403. } else {
  404. result = res;
  405. this.sourceData4 = res.qualitySampleList || [];
  406. this.sourceData2 = res.qualitySampleList || [];
  407. }
  408. this.sourceData5 = result.unqualifiedDetail || [];
  409. this.disposeTypeList = result.disposeTypeList || [];
  410. },
  411. async fieldAssign(res, obj) {
  412. if (res.qualityMode == 1) {
  413. obj.qualityModeName = '全检';
  414. } else if (res.qualityMode == 2) {
  415. obj.qualityModeName = '抽检';
  416. } else {
  417. obj.qualityModeName = '';
  418. }
  419. if (res.qualityResults == 1) {
  420. obj.qualityResultsName = '合格';
  421. } else if (res.qualityResults == 2) {
  422. obj.qualityResultsName = '不合格';
  423. } else {
  424. obj.qualityResultsName = '';
  425. }
  426. let val = res.inspectionStandards;
  427. obj.inspectionStandardsName = await this.getDictListIqoCode(val);
  428. },
  429. async getDictListIqoCode(value) {
  430. let { data: res } = await getByCode('measurement_type');
  431. if (value > 0) {
  432. return res[value - 1][value];
  433. }
  434. return '';
  435. },
  436. goBack() {
  437. let path = this.$route.query.path || '';
  438. console.log(path, 'path');
  439. if (path) {
  440. this.$router.push({ path: path });
  441. } else {
  442. this.$router.go(-1);
  443. }
  444. }
  445. }
  446. };
  447. </script>
  448. <style lang="scss" scoped>
  449. .ele-body {
  450. width: 100%;
  451. height: calc(100% - 32px);
  452. box-sizing: border-box;
  453. .el-card {
  454. width: 100%;
  455. height: 100%;
  456. }
  457. }
  458. ::v-deep .el-tabs__content {
  459. margin-top: 16px;
  460. }
  461. .tabs_box {
  462. position: relative;
  463. .go_back {
  464. position: absolute;
  465. right: 25px;
  466. top: 19px;
  467. z-index: 99;
  468. }
  469. }
  470. </style>