details.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  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="qualityName" disabled />
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="6">
  67. <el-form-item label="质检时间">
  68. <el-input :value="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.qualificationRate" 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.total" 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" :key="el.id">
  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-col :span="12">
  143. <el-form-item label="附件信息">
  144. <el-link @click="openFileModal" type="primary"
  145. >查看附件信息<i class="el-icon-view el-icon--right"></i>
  146. </el-link>
  147. <fileMain ref="fileMainRef" />
  148. </el-form-item>
  149. </el-col>
  150. </el-row>
  151. </el-form>
  152. </el-tab-pane>
  153. <el-tab-pane label="样品信息" name="2">
  154. <el-form label-width="110px">
  155. <el-row>
  156. <el-col :span="6" v-if="showArrange == '1'">
  157. <el-form-item label="样品合格数:">
  158. <el-input
  159. disabled
  160. v-model="form.sampleQualifiedNumber"
  161. ></el-input>
  162. </el-form-item>
  163. </el-col>
  164. <el-col :span="6" v-if="showArrange == '1'">
  165. <el-form-item label="样品不合格数:">
  166. <el-input
  167. disabled
  168. v-model="form.sampleNoQualifiedNumber"
  169. ></el-input>
  170. </el-form-item>
  171. </el-col>
  172. <el-col :span="6">
  173. <el-form-item label="样品合格率:">
  174. <el-input v-model="form.sampleQualificationRate" disabled />
  175. </el-form-item>
  176. </el-col>
  177. <el-col :span="6">
  178. <el-form-item label="样品不合格率:">
  179. <el-input v-model="form.sampleNoQualificationRate" disabled />
  180. </el-form-item>
  181. </el-col>
  182. </el-row>
  183. <el-row>
  184. <el-col :span="6">
  185. <el-form-item label="样品类型:">
  186. <el-input
  187. disabled
  188. :value="sampletypeVal(form.conditionType)"
  189. />
  190. </el-form-item>
  191. </el-col>
  192. <el-col :span="6">
  193. <el-form-item label="样品数量:">
  194. <el-input disabled v-model="form.sampleQuantity" />
  195. </el-form-item>
  196. </el-col>
  197. <el-col :span="6">
  198. <el-form-item label="样品重量:">
  199. <el-input disabled v-model="form.sampleWeight" />
  200. </el-form-item>
  201. </el-col>
  202. </el-row>
  203. </el-form>
  204. </el-tab-pane>
  205. <el-tab-pane label="质检内容" name="3">
  206. <el-tabs v-model="inspectionName">
  207. <el-tab-pane label="来源清单" name="1">
  208. <ele-pro-table
  209. :columns="tableColumns1"
  210. :datasource="sourceData1"
  211. :initLoad="false"
  212. :needPage="false"
  213. :toolkit="[]"
  214. height="calc(100vh - 330px)"
  215. >
  216. </ele-pro-table>
  217. </el-tab-pane>
  218. <el-tab-pane label="样品清单" name="2">
  219. <ele-pro-table
  220. :columns="tableColumns2"
  221. :datasource="sourceData2"
  222. :initLoad="false"
  223. :needPage="false"
  224. :toolkit="[]"
  225. height="calc(100vh - 330px)"
  226. >
  227. </ele-pro-table
  228. ></el-tab-pane>
  229. <el-tab-pane label="质检方案" name="3">
  230. <ele-pro-table
  231. :columns="tableColumns3"
  232. :datasource="sourceData3"
  233. :initLoad="false"
  234. :needPage="false"
  235. :toolkit="[]"
  236. height="calc(100vh - 330px)"
  237. >
  238. </ele-pro-table
  239. ></el-tab-pane>
  240. </el-tabs>
  241. </el-tab-pane>
  242. <el-tab-pane
  243. label="样品处置"
  244. name="4"
  245. v-show="form.status == 1 && activeName == '4'"
  246. >
  247. <ele-pro-table
  248. :columns="tableColumns4"
  249. :datasource="sourceData4"
  250. :initLoad="false"
  251. :needPage="false"
  252. :toolkit="[]"
  253. height="calc(100vh - 260px)"
  254. >
  255. </ele-pro-table>
  256. </el-tab-pane>
  257. <el-tab-pane label="不良品处置" name="5">
  258. <ele-pro-table
  259. :columns="tableColumns5"
  260. :datasource="sourceData5"
  261. :initLoad="false"
  262. :needPage="false"
  263. :toolkit="[]"
  264. height="calc(100vh - 260px)"
  265. >
  266. </ele-pro-table>
  267. </el-tab-pane>
  268. </el-tabs>
  269. <el-button class="go_back" @click="goBack">返回</el-button>
  270. </el-card>
  271. </div>
  272. </template>
  273. <script>
  274. import { getDetailById } from '@/api/inspectionWork/index';
  275. import { planDetails } from '@/api/inspectionPlan/index';
  276. import { getByCode } from '@/api/system/dictionary-data';
  277. import detailMixins from './mixins/detailMixins';
  278. import { parameterGetByCode } from '@/api/main/index';
  279. import { getUserPage } from '@/api/system/organization';
  280. import fileMain from '@/components/addDoc/main.vue';
  281. export default {
  282. mixins: [detailMixins],
  283. components: { fileMain },
  284. data() {
  285. return {
  286. activeName: '1',
  287. inspectionName: '1',
  288. sourceData1: [],
  289. sourceData2: [],
  290. sourceData3: [],
  291. sourceData4: [],
  292. sourceData5: [],
  293. disposeTypeList: [],
  294. form: {},
  295. showArrange: '0',
  296. executorList: [],
  297. // 文件
  298. accessory: []
  299. };
  300. },
  301. computed: {
  302. sampletypeVal() {
  303. return (row) => {
  304. if (row == 1) return '整样';
  305. if (row == 2) return '小样';
  306. return '';
  307. };
  308. },
  309. disposalName() {
  310. return (type) => {
  311. return this.disposeTypeMap[type] || '';
  312. };
  313. },
  314. qualityName() {
  315. const list = this.form.qualityWorkOrderDetailVO
  316. return list.qualityName || '';
  317. },
  318. qualityTime() {
  319. const list = this.form.qualityWorkOrderDetailVO
  320. return list.qualityTime || '';
  321. }
  322. },
  323. created() {
  324. this.getData();
  325. // 是否展示合格不合格
  326. this.getCode();
  327. },
  328. methods: {
  329. getCode() {
  330. parameterGetByCode({
  331. code: 'qms_show_arrange'
  332. }).then((res) => {
  333. if (res) {
  334. this.showArrange = res.value || '1';
  335. // this.time_calc_code = res.value || '0';
  336. }
  337. });
  338. },
  339. async getUserList(params) {
  340. if (!params.groupId) return;
  341. try {
  342. let data = { pageNum: 1, size: -1 };
  343. // 如果传了参数就是获取巡点检人员数据
  344. if (params) {
  345. data = Object.assign(data, params);
  346. }
  347. const res = await getUserPage(data);
  348. console.log(res, 'resres');
  349. this.executorList = res.list;
  350. } catch (error) {}
  351. },
  352. async getData() {
  353. let id = this.$route.query.id;
  354. let name = this.$route.query.name;
  355. try {
  356. const api = name == '计划' ? planDetails : getDetailById;
  357. const result = await api(id);
  358. console.log(result, 'result');
  359. await this.getUserList({ groupId: result.data.groupId });
  360. const res = result.data;
  361. console.log('res~~~~', res.qualityWorkOrderDetailVO);
  362. const qualityName = [];
  363. if (res.qualityId && this.executorList.length != 0) {
  364. res.qualityId.split(',').forEach((item) => {
  365. this.executorList.forEach((el) => {
  366. if (el.id == item) {
  367. qualityName.push(el.name);
  368. }
  369. });
  370. });
  371. }
  372. if (qualityName.length != 0) {
  373. res.qualityName = qualityName.join(',');
  374. }
  375. let obj = {};
  376. this.infoList.map((item) => {
  377. obj[item.prop] = res[item.prop];
  378. });
  379. this.form = obj;
  380. this.form.status = res.status;
  381. this.form.qualityWorkOrderDetailVO = res.qualityWorkOrderDetailVO;
  382. this.accessory = res.accessory;
  383. console.log(result, 'result');
  384. if (name == '计划') {
  385. this.form.total = result.data.productNumber || 0;
  386. }
  387. this.fieldAssign(res, obj);
  388. this.sampleInfo(res);
  389. console.log('this.form~~~~', this.form);
  390. } catch (err) {
  391. console.log(err, 'err');
  392. }
  393. },
  394. sampleInfo(res) {
  395. this.$set(
  396. this.form,
  397. 'sampleQualifiedNumber',
  398. res.sampleQualifiedNumber
  399. );
  400. this.$set(
  401. this.form,
  402. 'sampleNoQualifiedNumber',
  403. res.sampleNoQualifiedNumber
  404. );
  405. this.$set(
  406. this.form,
  407. 'sampleQualificationRate',
  408. res.sampleQualificationRate
  409. );
  410. this.$set(
  411. this.form,
  412. 'sampleNoQualificationRate',
  413. res.sampleNoQualificationRate
  414. );
  415. this.$set(this.form, 'conditionType', res.conditionType);
  416. this.$set(this.form, 'sampleQuantity', res.sampleQuantity);
  417. this.$set(this.form, 'sampleWeight', res.sampleWeight);
  418. this.$set(this.form, 'qualifiedNumber', res.qualifiedNumber);
  419. this.$set(this.form, 'noQualifiedNumber', res.sampleNoQualifiedNumber);
  420. this.$set(this.form, 'remark', res.remark);
  421. this.sourceData3 = res.templateList || [];
  422. this.sourceData1 = res.qualityInventoryList || [];
  423. let name = this.$route.query.name;
  424. // const result = name == '计划' ? res.qualityWorkOrderDetailVO : res;
  425. let result = {};
  426. if (name == '计划') {
  427. this.sourceData4 = res.sampleList || [];
  428. this.sourceData2 = res.sampleList || [];
  429. result = res.qualityWorkOrderDetailVO
  430. ? res.qualityWorkOrderDetailVO
  431. : {};
  432. } else {
  433. result = res;
  434. this.sourceData4 = res.qualitySampleList || [];
  435. this.sourceData2 = res.qualitySampleList || [];
  436. }
  437. this.sourceData5 = result.unqualifiedDetail || [];
  438. this.disposeTypeList = result.disposeTypeList || [];
  439. },
  440. async fieldAssign(res, obj) {
  441. if (res.qualityMode == 1) {
  442. obj.qualityModeName = '全检';
  443. } else if (res.qualityMode == 2) {
  444. obj.qualityModeName = '抽检';
  445. } else {
  446. obj.qualityModeName = '';
  447. }
  448. if (res.qualityResults == 1) {
  449. obj.qualityResultsName = '合格';
  450. } else if (res.qualityResults == 2) {
  451. obj.qualityResultsName = '不合格';
  452. } else {
  453. obj.qualityResultsName = '';
  454. }
  455. let val = res.inspectionStandards;
  456. obj.inspectionStandardsName = await this.getDictListIqoCode(val);
  457. },
  458. async getDictListIqoCode(value) {
  459. let { data: res } = await getByCode('measurement_type');
  460. if (value > 0) {
  461. return res[value - 1][value];
  462. }
  463. return '';
  464. },
  465. goBack() {
  466. let path = this.$route.query.path || '';
  467. console.log(path, 'path');
  468. if (path) {
  469. this.$router.push({ path: path });
  470. } else {
  471. this.$router.go(-1);
  472. }
  473. },
  474. openFileModal() {
  475. this.$refs.fileMainRef.open(this.accessory, 'view');
  476. }
  477. }
  478. };
  479. </script>
  480. <style lang="scss" scoped>
  481. .ele-body {
  482. width: 100%;
  483. height: calc(100% - 32px);
  484. box-sizing: border-box;
  485. .el-card {
  486. width: 100%;
  487. height: 100%;
  488. }
  489. }
  490. ::v-deep .el-tabs__content {
  491. margin-top: 16px;
  492. }
  493. .tabs_box {
  494. position: relative;
  495. .go_back {
  496. position: absolute;
  497. right: 25px;
  498. top: 19px;
  499. z-index: 99;
  500. }
  501. }
  502. </style>