sampleDisposeDialog.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. <template>
  2. <ele-modal
  3. :title="title"
  4. :visible.sync="visible"
  5. :before-close="handleClose"
  6. :close-on-click-modal="false"
  7. :close-on-press-escape="false"
  8. append-to-body
  9. width="80%"
  10. :maxable="true"
  11. >
  12. <el-form ref="form1" :model="formData" :rules="rules" label-width="120px">
  13. <el-form-item label="处置方式:" prop="disposeType">
  14. <el-select
  15. v-model="formData.disposeType"
  16. placeholder="请选择"
  17. style="width: 100%"
  18. >
  19. <el-option
  20. v-for="item in disposeList"
  21. :key="item.value"
  22. :label="item.label"
  23. :value="item.value"
  24. >
  25. </el-option>
  26. </el-select>
  27. </el-form-item>
  28. <template v-if="formData.disposeType == 6">
  29. <el-row>
  30. <el-col :span="24">
  31. <el-form-item label="留样日期:" prop="sampleDate" align="center">
  32. <el-date-picker
  33. class="w100"
  34. v-model="formData.sampleDate"
  35. type="date"
  36. value-format="yyyy-MM-dd"
  37. placeholder="请输入"
  38. ></el-date-picker>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="6"> </el-col>
  42. </el-row>
  43. <el-row style="margin-top: 12px">
  44. <el-col :span="24">
  45. <el-form-item
  46. label="留样条件:"
  47. prop="sampleCondition"
  48. align="center"
  49. >
  50. <el-input
  51. v-model="formData.sampleCondition"
  52. placeholder="请输入"
  53. style="width: 100%"
  54. ></el-input>
  55. </el-form-item>
  56. </el-col>
  57. </el-row>
  58. <el-row style="margin-top: 12px">
  59. <el-col :span="24">
  60. <el-form-item
  61. label="生产商/受托生产:"
  62. prop="producerManufacturer"
  63. align="center"
  64. >
  65. <el-input
  66. v-model="formData.producerManufacturer"
  67. placeholder="请输入"
  68. style="width: 100%"
  69. ></el-input>
  70. </el-form-item>
  71. </el-col>
  72. </el-row>
  73. <el-row style="margin-top: 12px">
  74. <el-col :span="24">
  75. <el-form-item label="留样地点:" prop="samplePlace" align="center">
  76. <el-input
  77. type="textarea"
  78. v-model="formData.samplePlace"
  79. placeholder="请输入"
  80. style="width: 100%"
  81. ></el-input>
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-row style="margin-top: 12px">
  86. <el-col :span="24">
  87. <el-form-item label="留样备注:" prop="sampleRemark" align="center">
  88. <el-input
  89. type="textarea"
  90. v-model="formData.sampleRemark"
  91. placeholder="请输入"
  92. style="width: 100%"
  93. ></el-input>
  94. </el-form-item>
  95. </el-col>
  96. </el-row>
  97. <el-row style="margin-top: 12px">
  98. <el-col :span="24"> </el-col>
  99. </el-row>
  100. </template>
  101. <template v-if="this.formData.disposeType !== 8">
  102. <el-form-item label="入库仓库:" prop="depotId" align="center">
  103. <el-select style="width: 100%" v-model="formData.depotId">
  104. <el-option
  105. v-for="item in warehouseList"
  106. :key="item.id"
  107. :value="item.id"
  108. :label="item.name"
  109. @click.native="chooseWarehouse(item)"
  110. ></el-option>
  111. </el-select>
  112. </el-form-item>
  113. </template>
  114. <!-- <el-row>
  115. <el-col :span="6">
  116. <el-form-item label="处置方式" prop="disposalStatus" align="center">
  117. <el-select
  118. v-model="formData.disposalStatus"
  119. placeholder="请选择"
  120. style="width: 100%"
  121. v-if="qualityType == 1"
  122. clearable
  123. >
  124. <el-option
  125. v-for="item in disposalStatusListType"
  126. :key="item.value"
  127. :label="item.label"
  128. :value="item.value"
  129. >
  130. </el-option>
  131. </el-select>
  132. <el-select
  133. v-model="formData.disposalStatus"
  134. placeholder="请选择"
  135. style="width: 100%"
  136. v-else
  137. clearable
  138. >
  139. <el-option
  140. v-for="item in disposalStatusList"
  141. :key="item.value"
  142. :label="item.label"
  143. :value="item.value"
  144. >
  145. </el-option>
  146. </el-select>
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="6" v-if="formData.disposalStatus == 3">
  150. <el-form-item
  151. label="处置仓库"
  152. prop="disposeWarehouseId"
  153. align="center"
  154. >
  155. <el-select
  156. v-model="formData.disposeWarehouseId"
  157. placeholder="请选择"
  158. style="width: 100%"
  159. clearable
  160. @change="handleWarehouseChange"
  161. filterable
  162. >
  163. <el-option
  164. v-for="item in warehouseList"
  165. :key="item.disposeWarehouseId"
  166. :label="item.disposeWarehouseName"
  167. :value="item.disposeWarehouseId"
  168. >
  169. </el-option>
  170. </el-select>
  171. </el-form-item>
  172. </el-col>
  173. <el-col :span="6">
  174. <el-form-item label="留样日期" prop="sampleDate" align="center">
  175. <el-date-picker
  176. class="w100"
  177. v-model="formData.sampleDate"
  178. type="date"
  179. value-format="yyyy-MM-dd"
  180. placeholder="请输入"
  181. ></el-date-picker>
  182. </el-form-item>
  183. </el-col>
  184. <el-col :span="6">
  185. <el-form-item label="处置时间:" prop="disposeTime">
  186. <el-date-picker
  187. class="w100"
  188. v-model="formData.disposeTime"
  189. type="date"
  190. value-format="yyyy-MM-dd"
  191. placeholder="请输入"
  192. ></el-date-picker>
  193. </el-form-item>
  194. </el-col>
  195. </el-row>
  196. <el-row style="margin-top: 12px">
  197. <el-col :span="24">
  198. <el-form-item label="留样条件" prop="sampleCondition" align="center">
  199. <el-input
  200. v-model="formData.sampleCondition"
  201. placeholder="请输入"
  202. style="width: 100%"
  203. ></el-input>
  204. </el-form-item>
  205. </el-col>
  206. </el-row>
  207. <el-row style="margin-top: 12px">
  208. <el-col :span="24">
  209. <el-form-item
  210. label="生产商/受托生产"
  211. prop="producerManufacturer"
  212. align="center"
  213. >
  214. <el-input
  215. v-model="formData.producerManufacturer"
  216. placeholder="请输入"
  217. style="width: 100%"
  218. ></el-input>
  219. </el-form-item>
  220. </el-col>
  221. </el-row>
  222. <el-row style="margin-top: 12px">
  223. <el-col :span="24">
  224. <el-form-item label="留样地点" prop="samplePlace" align="center">
  225. <el-input
  226. type="textarea"
  227. v-model="formData.samplePlace"
  228. placeholder="请输入"
  229. style="width: 100%"
  230. ></el-input>
  231. </el-form-item>
  232. </el-col>
  233. </el-row>
  234. <el-row style="margin-top: 12px">
  235. <el-col :span="24">
  236. <el-form-item label="留样备注" prop="sampleRemark" align="center">
  237. <el-input
  238. type="textarea"
  239. v-model="formData.sampleRemark"
  240. placeholder="请输入"
  241. style="width: 100%"
  242. ></el-input>
  243. </el-form-item>
  244. </el-col>
  245. </el-row> -->
  246. </el-form>
  247. <template v-slot:footer>
  248. <el-button @click="handleClose">取消</el-button>
  249. <el-button type="primary" @click="handleConfirm"> 确认 </el-button>
  250. </template>
  251. </ele-modal>
  252. </template>
  253. <script>
  254. // import { warehouseList } from '@/api/inspectionWork';
  255. import { getWarehouseList } from '@/api/samplemanagement';
  256. export default {
  257. components: {},
  258. data() {
  259. return {
  260. allList: [
  261. { value: 1, label: '返工' },
  262. { value: 2, label: '返修' },
  263. { value: 3, label: '报废' },
  264. { value: 4, label: '降级使用' },
  265. { value: 5, label: '让步接收' },
  266. { value: 6, label: '留样' },
  267. { value: 7, label: '消耗' },
  268. { value: 8, label: '回用/归批' },
  269. { value: 9, label: '转试销' },
  270. { value: 10, label: '退货' }
  271. ],
  272. title: '',
  273. visible: false,
  274. rowIndex: 0,
  275. type: '',
  276. formData: {
  277. disposeType: '',
  278. sampleDate: '',
  279. sampleCondition: '',
  280. producerManufacturer: '',
  281. samplePlace: '',
  282. sampleRemark: '',
  283. depotId: '',
  284. depotName: ''
  285. },
  286. qualityType: '',
  287. warehouseList: [],
  288. // 表单验证规则
  289. rules: {
  290. disposeType: [
  291. {
  292. required: true,
  293. message: '请选择处置方式',
  294. trigger: 'blur'
  295. }
  296. ],
  297. depotId: [
  298. { required: true, message: '请选择仓库', trigger: 'change' }
  299. ]
  300. },
  301. disposalStatusList: [
  302. {
  303. value: 1,
  304. label: '返工'
  305. },
  306. {
  307. value: 2,
  308. label: '返修'
  309. },
  310. {
  311. value: 3,
  312. label: '报废'
  313. },
  314. {
  315. value: 4,
  316. label: '降级使用'
  317. },
  318. {
  319. value: 5,
  320. label: '让步接收'
  321. },
  322. {
  323. value: 6,
  324. label: '留样'
  325. },
  326. {
  327. value: 7,
  328. label: '消耗'
  329. },
  330. {
  331. value: 8,
  332. label: '回用'
  333. },
  334. {
  335. value: 9,
  336. label: '转试销'
  337. }
  338. ],
  339. disposalStatusListType: [
  340. {
  341. value: 5,
  342. label: '让步接收'
  343. },
  344. {
  345. value: 9,
  346. label: '退货'
  347. }
  348. ]
  349. };
  350. },
  351. computed: {
  352. disposeList() {
  353. if (this.$route.query.qualityType == 1) {
  354. return this.allList.filter((item) => [5, 10].includes(item.value));
  355. }
  356. if (
  357. this.$route.query.qualityType == 2 ||
  358. this.$route.query.qualityType == 3
  359. ) {
  360. return this.allList.filter(
  361. (item) => item.value !== 8 && item.value !== 10
  362. );
  363. } else {
  364. return this.allList;
  365. }
  366. }
  367. },
  368. async created() {
  369. // this.getWarehouseList();
  370. this.warehouseList = await getWarehouseList();
  371. },
  372. methods: {
  373. handleWarehouseChange(val) {
  374. this.warehouseList.findIndex((item) => {
  375. if (item.disposeWarehouseId == val) {
  376. this.formData.disposeWarehouseName = item.disposeWarehouseName;
  377. }
  378. });
  379. },
  380. // async getWarehouseList() {
  381. // let res = await warehouseList({});
  382. // this.warehouseList = res.map((item) => {
  383. // item.disposeWarehouseName = item.name;
  384. // item.disposeWarehouseId = item.id;
  385. // return {
  386. // ...item
  387. // };
  388. // });
  389. // },
  390. async openDispose(index, row, type, qualityType) {
  391. if (index != null) {
  392. this.formData = JSON.parse(JSON.stringify(row));
  393. } else {
  394. this.formData = {};
  395. }
  396. console.log(this.formData);
  397. this.visible = true;
  398. this.rowIndex = index;
  399. this.type = type;
  400. this.qualityType = qualityType;
  401. },
  402. handleClose() {
  403. this.visible = false;
  404. },
  405. handleConfirm() {
  406. this.$refs.form1.validate((valid) => {
  407. if (valid) {
  408. this.$emit('handleDisposeConfirm', this.formData, this.rowIndex);
  409. this.visible = false;
  410. }
  411. });
  412. },
  413. chooseWarehouse(item) {
  414. console.log(item);
  415. this.formData.depotId = item.id;
  416. this.formData.depotName = item.name;
  417. }
  418. },
  419. watch: {
  420. 'formData.disposeType': {
  421. handler(newVal, oldVal) {
  422. this.formData.sampleCondition = '';
  423. this.formData.sampleDate = '';
  424. this.formData.samplePlace = '';
  425. this.formData.sampleRemark = '';
  426. this.formData.producerManufacturer = '';
  427. this.formData.depotId = '';
  428. this.formData.depotName = '';
  429. },
  430. // immediate: true
  431. }
  432. }
  433. };
  434. </script>