costDialog.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. :visible.sync="editRepairNotesDialog"
  6. :title="title"
  7. :close-on-click-modal="false"
  8. width="85%"
  9. :maxable="true"
  10. append-to-body
  11. @close="handleClose"
  12. >
  13. <div class="switch" v-if="type == 'view'">
  14. <div class="switch_left">
  15. <ul>
  16. <li
  17. v-for="item in tabOptions"
  18. :key="item.key"
  19. :class="{ active: activeComp == item.key }"
  20. @click="handleTag(item.key)"
  21. >
  22. {{ item.name }}
  23. </li>
  24. </ul>
  25. </div>
  26. </div>
  27. <el-form
  28. v-show="activeComp === 'main'"
  29. ref="recyleFormRef"
  30. :model="form"
  31. label-width="100px"
  32. >
  33. <headerTitle title="基本信息" style="margin-top: 15px"></headerTitle>
  34. <el-row>
  35. <el-col :span="8">
  36. <el-form-item label="编码:" prop="code">
  37. <el-input v-model="form.code" disabled />
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="6">
  41. <el-form-item
  42. label="工单名称:"
  43. prop="workOrderName"
  44. :rules="{
  45. required: true,
  46. message: '请选择工单',
  47. trigger: 'change'
  48. }"
  49. >
  50. <!-- :disabled="workOrderDis" -->
  51. <el-input
  52. v-model="form.workOrderName"
  53. :disabled="workOrderDis"
  54. @click.native="handHead"
  55. placeholder="请选择"
  56. />
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="8">
  60. <el-form-item label="原因">
  61. <el-input
  62. v-model="form.remarks"
  63. type="textarea"
  64. :rows="2"
  65. :disabled="type == 'view'"
  66. />
  67. </el-form-item>
  68. </el-col>
  69. </el-row>
  70. <spareParts
  71. obtain="仓库"
  72. ref="sparePartsRef"
  73. :type="title == '详情' ? 'view' : 'edit'"
  74. ></spareParts>
  75. </el-form>
  76. <bpmDetail
  77. v-if="activeComp === 'bpm' && processInstanceId"
  78. :id="processInstanceId"
  79. ></bpmDetail>
  80. <template v-slot:footer>
  81. <el-button @click="handleClose" :loading="loading">取消</el-button>
  82. <el-button
  83. type="primary"
  84. v-if="type != 'view'"
  85. @click="save"
  86. :loading="loading"
  87. >确认</el-button
  88. >
  89. </template>
  90. <workOrderList ref="workOrderListRef" @changeSelect="changeSelect" />
  91. </ele-modal>
  92. </template>
  93. <script>
  94. import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  95. import workOrderList from '@/views/salesServiceManagement/accessory/components/workOrderList.vue';
  96. import spareParts from '@/views/salesServiceManagement/components/sparePartsList.vue';
  97. import {
  98. costSave,
  99. costUpdate,
  100. salesrealcostinfo,
  101. getSalesWorkOrderById
  102. } from '@/api/salesServiceManagement/index';
  103. export default {
  104. props: {},
  105. components: {
  106. workOrderList,
  107. spareParts,
  108. bpmDetail
  109. },
  110. computed: {
  111. workOrderDis() {
  112. console.log(this.source, 'this.source 33');
  113. if (this.source != 0) {
  114. return true;
  115. }
  116. return this.type == 'view';
  117. }
  118. },
  119. data() {
  120. return {
  121. loading: false,
  122. title: '新增',
  123. editRepairNotesDialog: false,
  124. type: 'add',
  125. form: {
  126. remarks: '',
  127. workOrderName: ''
  128. },
  129. source: 0,
  130. activeComp: 'main',
  131. processInstanceId:'0',
  132. tabOptions: [
  133. { key: 'main', name: '发货单详情' },
  134. { key: 'bpm', name: '流程详情' }
  135. ]
  136. };
  137. },
  138. methods: {
  139. init(row, type) {
  140. this.editRepairNotesDialog = true;
  141. this.type = type;
  142. this.title = type == 'add' ? '新增' : type == 'edit' ? '编辑' : '详情';
  143. if (row?.id) {
  144. this.getDetail(row);
  145. }
  146. },
  147. async getDetail(data) {
  148. const res = await salesrealcostinfo(data.id);
  149. this.processInstanceId = res.processInstanceId;
  150. console.log(res, 'res 3333');
  151. this.$refs.sparePartsRef.setTableValue(res?.detailLst || []);
  152. this.$set(this.form, 'workOrderName', res.workOrderName);
  153. this.form.workOrderCode = res.workOrderCode;
  154. this.form.workOrderId = res.workOrderId;
  155. this.$set(this.form, 'remarks', res.remarks);
  156. this.form.id = data.id;
  157. this.source = res.source || 0;
  158. this.$set(this.form, 'code', res.code);
  159. },
  160. handleClose() {
  161. this.editRepairNotesDialog = false;
  162. this.form = {
  163. remarks: '',
  164. workOrderName: ''
  165. };
  166. this.$refs.recyleFormRef.resetFields();
  167. this.$refs.sparePartsRef.setTableValue([]);
  168. this.source = 0;
  169. this.$refs.workOrderListRef.current = {};
  170. this.$refs.workOrderListRef.radio = null;
  171. },
  172. async save() {
  173. let detailLst = this.$refs.sparePartsRef.getTableValue() || [];
  174. let totalPrice = this.$refs.sparePartsRef.totalPrice || 0;
  175. if (detailLst.length == 0) {
  176. this.$message.warning('请至少添加一条费用清单');
  177. return;
  178. }
  179. this.$refs.recyleFormRef.validate(async (valid) => {
  180. if (valid) {
  181. let data = {
  182. ...this.form,
  183. detailLst,
  184. totalPrice
  185. };
  186. try {
  187. this.loading = true;
  188. const requestName = this.type == 'add' ? costSave : costUpdate;
  189. const res = await requestName(data);
  190. this.loading = false;
  191. if (res) {
  192. this.$message.success('操作成功');
  193. this.handleClose();
  194. this.$emit('refresh');
  195. }
  196. } catch (err) {
  197. this.loading = false;
  198. }
  199. }
  200. });
  201. },
  202. // 选择工单
  203. handHead() {
  204. if (this.type != 'view') {
  205. let data = {
  206. name: this.form.workOrderName,
  207. code: this.form.workOrderCode,
  208. id: this.form.workOrderId
  209. };
  210. this.$refs.workOrderListRef.open(data);
  211. }
  212. },
  213. handleTag(val) {
  214. this.activeComp = val;
  215. },
  216. async changeSelect(row) {
  217. if (row.id == this.form.workOrderId) {
  218. return;
  219. }
  220. this.$set(this.form, 'workOrderName', row.name);
  221. this.$set(this.form, 'workOrderCode', row.code);
  222. this.form.workOrderId = row.id; // 工单id
  223. this.$refs.sparePartsRef.form.tableList = [];
  224. const res = await getSalesWorkOrderById(row.id);
  225. this.$refs.sparePartsRef.setTableValue(res.costListVOS || []);
  226. }
  227. }
  228. };
  229. </script>
  230. <style lang="scss" scoped>
  231. .device_name {
  232. .el-select-dropdown__wrap {
  233. .el-select-dropdown__item {
  234. padding: 0 !important;
  235. }
  236. }
  237. .option_ {
  238. width: 100%;
  239. padding: 0 20px;
  240. }
  241. }
  242. </style>