returnPop.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <template>
  2. <el-dialog
  3. 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. >
  11. <div>
  12. <el-form :model="returnForm" ref="returnForm">
  13. <el-row :gutter="24">
  14. <el-col :span="6">
  15. <el-form-item label="退料单编号" prop="code" label-width="90px">
  16. <el-input v-model="returnForm.code" disabled=""></el-input>
  17. </el-form-item>
  18. </el-col>
  19. <el-col :span="6">
  20. <el-form-item label="退料单名称" prop="name" label-width="90px">
  21. <el-input v-model="returnForm.name"></el-input>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="8">
  25. <el-form-item label="退料场景" prop="scene" label-width="90px">
  26. <el-select v-model="returnForm.scene" placeholder="请选择">
  27. <el-option
  28. v-for="item in sceneList"
  29. :key="item.value"
  30. :label="item.label"
  31. :value="item.value"
  32. >
  33. </el-option>
  34. </el-select>
  35. </el-form-item>
  36. </el-col>
  37. </el-row>
  38. <el-row :gutter="24">
  39. <el-col :span="20">
  40. <el-form-item label="退料描述" prop="remark" label-width="90px">
  41. <el-input v-model="returnForm.remark"></el-input>
  42. </el-form-item>
  43. </el-col>
  44. <el-col :span="4">
  45. <el-button type="primary" @click="selectOrder"
  46. >选择领料单</el-button
  47. >
  48. </el-col>
  49. </el-row>
  50. </el-form>
  51. <div v-for="(item, idx) in returnList" :key="idx">
  52. <div class="tableZ_box">
  53. <div class="row">
  54. <div class="col">
  55. <div class="name">领料单编号</div>
  56. <div class="content">{{ item.code }}</div>
  57. </div>
  58. <div class="col">
  59. <div class="name">领料单创建时间</div>
  60. <div class="content">{{ item.createTime }}</div>
  61. </div>
  62. </div>
  63. </div>
  64. <div>
  65. <el-table
  66. :ref="`form${idx}`"
  67. class="table_content"
  68. :max-height="300"
  69. :data="item.pickOutInList"
  70. tooltip-effect="dark"
  71. style="width: 100%"
  72. stripe
  73. border
  74. >
  75. <el-table-column label="序号" type="index" width="60">
  76. <template slot-scope="{ row, $index }">
  77. {{ $index }}
  78. </template>
  79. </el-table-column>
  80. <el-table-column label="类型" prop="rootCategoryLevelId" width="80">
  81. <template slot-scope="{ row, $index }">
  82. <el-tag>{{ typeName[Number(row.rootCategoryLevelId)] }}</el-tag>
  83. </template>
  84. </el-table-column>
  85. <el-table-column label="编码" prop="code"> </el-table-column>
  86. <el-table-column label="名称" prop="name"> </el-table-column>
  87. <el-table-column label="型号" prop="modelType"> </el-table-column>
  88. <el-table-column label="规格" prop="specification">
  89. </el-table-column>
  90. <el-table-column
  91. label="刻码"
  92. prop="engrave"
  93. v-if="clientEnvironmentId == 3"
  94. >
  95. <template slot-scope="{ row, $index }">
  96. {{ row.extInfo.engrave }}
  97. </template>
  98. </el-table-column>
  99. <el-table-column
  100. label="物料代号"
  101. prop="materielCode"
  102. v-if="clientEnvironmentId == 3"
  103. >
  104. <template slot-scope="{ row, $index }">
  105. {{ row.extInfo.materielCode }}
  106. </template>
  107. </el-table-column>
  108. <el-table-column label="关联工单编码" prop="workOrderCode">
  109. </el-table-column>
  110. <el-table-column label="工序" prop="taskName"> </el-table-column>
  111. <el-table-column label="退还数量" prop="quantity">
  112. <template slot-scope="{ row, $index }">
  113. {{ row.quantity }} {{ row.unit }}
  114. </template>
  115. </el-table-column>
  116. <el-table-column label="操作" fixed="right" width="100px">
  117. <template slot-scope="{ $index, row }">
  118. <el-link type="danger" @click="removeItem(idx, $index)"
  119. >删除</el-link
  120. >
  121. </template>
  122. </el-table-column>
  123. </el-table>
  124. </div>
  125. </div>
  126. </div>
  127. <template slot="footer">
  128. <el-button size="mini" @click="handleClose">取 消</el-button>
  129. <el-button size="mini" type="primary" @click="save()">确 定</el-button>
  130. </template>
  131. <pickList
  132. v-if="pickListShow"
  133. @closeDialog="closeDialog"
  134. @emitSave="emitSave"
  135. ></pickList>
  136. </el-dialog>
  137. </template>
  138. <script>
  139. import { getCode } from '@/api/produce/workOrder';
  140. import { refundable, save } from '@/api/materialReturn/index.js';
  141. import pickList from './pickList.vue';
  142. import { typeName } from '@/views/produce/components/common.js';
  143. export default {
  144. components: { pickList },
  145. props: {
  146. sceneList: {
  147. type: Array,
  148. default() {
  149. return [];
  150. }
  151. }
  152. },
  153. data() {
  154. return {
  155. visible: true,
  156. returnForm: {
  157. code: '',
  158. name: '',
  159. scene: '',
  160. remark: '',
  161. type: 1
  162. },
  163. typeName,
  164. pickListShow: false,
  165. returnList: []
  166. };
  167. },
  168. computed: {
  169. clientEnvironmentId() {
  170. return this.$store.state.user.info.clientEnvironmentId;
  171. }
  172. },
  173. created() {
  174. this.getOrderCode();
  175. },
  176. methods: {
  177. async getOrderCode() {
  178. this.returnForm.code = await getCode('return_materials_code');
  179. },
  180. selectOrder() {
  181. this.pickListShow = true;
  182. },
  183. closeDialog() {
  184. this.pickListShow = false;
  185. },
  186. handleClose() {
  187. this.$emit('close');
  188. },
  189. emitSave(pickIds) {
  190. refundable(pickIds).then((res) => {
  191. this.returnList = res;
  192. this.$forceUpdate();
  193. this.pickListShow = false;
  194. });
  195. },
  196. removeItem(idx, index) {
  197. if (this.returnList[idx].pickOutInList.length != 1) {
  198. this.returnList[idx].pickOutInList.splice(index, 1);
  199. } else {
  200. this.$message.warning('领料单中必须保留一条数据');
  201. }
  202. },
  203. save() {
  204. if (!this.returnForm.name) {
  205. return this.$message.warning('请输入退料单名称');
  206. }
  207. if (this.returnList.length == 0) {
  208. return this.$message.warning('请选择领料单');
  209. }
  210. let parma = {
  211. ...this.returnForm,
  212. pickOrderList: this.returnList
  213. };
  214. save(parma).then((res) => {
  215. this.$emit('close', true);
  216. });
  217. }
  218. }
  219. };
  220. </script>
  221. <style lang="scss" scoped>
  222. .tableZ_box {
  223. border: 1px solid #e3e5e5;
  224. margin: 6px 0;
  225. &:last-child {
  226. border-bottom: none;
  227. }
  228. .row {
  229. width: 100%;
  230. display: flex;
  231. }
  232. .col {
  233. width: calc(100% / 3);
  234. display: flex;
  235. align-items: center;
  236. min-width: 200px;
  237. min-height: 32px;
  238. border-bottom: 1px solid #e3e5e5;
  239. border-right: 1px solid #e3e5e5;
  240. &:last-child {
  241. border-right: none;
  242. }
  243. .name {
  244. display: flex;
  245. align-items: center;
  246. padding: 4px;
  247. width: 120px;
  248. height: 100%;
  249. background-color: #d0e4d5;
  250. color: #000;
  251. }
  252. .content {
  253. padding: 4px 6px;
  254. color: #000;
  255. }
  256. }
  257. .pd6 {
  258. padding: 0 6px;
  259. }
  260. }
  261. </style>