recycleDialog.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  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. <el-form ref="recyleFormRef" :model="form" label-width="100px">
  14. <headerTitle title="基本信息" style="margin-top: 15px"></headerTitle>
  15. <el-row>
  16. <el-col :span="6">
  17. <el-form-item label="编码:" prop="code">
  18. <el-input v-model="form.code" disabled />
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="6">
  22. <el-form-item
  23. label="回收部门:"
  24. prop="recycleDeptId"
  25. :rules="{
  26. required: true,
  27. message: '请输入回收部门',
  28. trigger: 'change'
  29. }"
  30. >
  31. <el-select style="width: 100%;" v-model="form.recycleDeptId" disabled placeholder="请选择">
  32. <el-option
  33. v-for="item in loginChangeGroupVOList"
  34. :key="item.groupId"
  35. :label="item.groupName"
  36. :value="item.groupId"
  37. ></el-option>
  38. </el-select>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="6">
  42. <el-form-item
  43. label="回收人:"
  44. prop="recycleName"
  45. >
  46. <!-- <el-select style="width: 100%;" v-model="form.recycleId" disabled placeholder="请选择">
  47. <el-option
  48. v-for="item in loginChangeRoleVOList"
  49. :key="item.roleId"
  50. :label="item.roleName"
  51. :value="item.roleId"
  52. ></el-option>
  53. </el-select> -->
  54. <el-input v-model="form.recycleName" disabled />
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="6">
  58. <el-form-item
  59. label="工单名称:"
  60. prop="orderWorkName"
  61. :rules="{
  62. required: true,
  63. message: '请选择工单',
  64. trigger: 'change'
  65. }"
  66. >
  67. <el-input
  68. v-model="form.orderWorkName"
  69. :disabled="type == 'view'"
  70. @click.native="handHead"
  71. placeholder="请选择"
  72. />
  73. </el-form-item>
  74. </el-col>
  75. </el-row>
  76. <el-row>
  77. <el-col :span="6">
  78. <el-form-item label="工单编码:">
  79. <el-input v-model="form.orderWorkCode" disabled />
  80. </el-form-item>
  81. </el-col>
  82. <el-col :span="6">
  83. <el-form-item label="客户名称:" prop="code">
  84. <el-input v-model="form.contactName" disabled />
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="6">
  88. <el-form-item label="客户编码:" prop="code">
  89. <el-input v-model="form.contactCode" disabled />
  90. </el-form-item>
  91. </el-col>
  92. <el-col :span="6">
  93. <el-form-item
  94. label="设备名称"
  95. prop="demandDetailId"
  96. :rules="{
  97. required: true,
  98. message: '请选择设备名称',
  99. trigger: 'change'
  100. }"
  101. >
  102. <el-select
  103. popper-class="device_name"
  104. style="width: 100%;"
  105. :disabled="type == 'view'"
  106. v-model="form.demandDetailId"
  107. placeholder="请选择"
  108. >
  109. <el-option
  110. v-for="item in deviceList"
  111. :key="item.demandDetailId"
  112. :label="item.categoryName"
  113. :value="item.demandDetailId"
  114. >
  115. <div class="option_" @click="deviceSelect(item)">{{ item.categoryName }}</div>
  116. </el-option>
  117. </el-select>
  118. </el-form-item>
  119. </el-col>
  120. </el-row>
  121. <el-row>
  122. <el-col :span="6">
  123. <el-form-item label="设备编码:">
  124. <el-input v-model="form.categoryCode" disabled />
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="6">
  128. <el-form-item label="回收时间:">
  129. <el-date-picker
  130. style="width: 100%"
  131. v-model="form.usageTime"
  132. type="date"
  133. placeholder="选择"
  134. value-format="yyyy-MM-dd HH:mm:ss"
  135. :disabled="type == 'view'"
  136. ></el-date-picker>
  137. </el-form-item>
  138. </el-col>
  139. <el-col :span="12">
  140. <el-form-item label="原因">
  141. <el-input v-model="form.reason" type="textarea" :rows="2" :disabled="type == 'view'" />
  142. </el-form-item>
  143. </el-col>
  144. </el-row>
  145. <!-- <headerTitle title="配件申请清单" style="margin-top: 15px"></headerTitle> -->
  146. <!-- <spareParts
  147. ref="spareCycleRef"
  148. :type="type"
  149. :source="type =='add' ? '配件回收':''"
  150. :state="type=='add'?'可操作':''"
  151. v-if="editRepairNotesDialog"
  152. :detailList="detailList"
  153. ></spareParts>-->
  154. <spareInfo
  155. ref="spareCycleRef"
  156. :types="type"
  157. title="配件回收清单"
  158. :detailList="detailList"
  159. v-if="editRepairNotesDialog"
  160. />
  161. </el-form>
  162. <template v-slot:footer>
  163. <el-button @click="handleClose">取消</el-button>
  164. <el-button type="primary" v-if="type == 'add'" @click="save" :loading="loading">确认</el-button>
  165. </template>
  166. <workOrderList ref="workOrderListRef" @changeSelect="changeSelect" />
  167. </ele-modal>
  168. </template>
  169. <script>
  170. import spareInfo from '@/views/salesServiceManagement/accessory/components/spareInfo.vue';
  171. import workOrderList from '@/views/salesServiceManagement/accessory/components/workOrderList.vue';
  172. import { getCurrentUser } from '@/utils/token-util';
  173. import {
  174. recycleSave,
  175. getSalesWorkOrderById,
  176. recycleDetails
  177. } from '@/api/salesServiceManagement/index';
  178. export default {
  179. props: {},
  180. components: { workOrderList, spareInfo },
  181. computed: {
  182. // 部门下拉
  183. loginChangeGroupVOList() {
  184. return this.$store.state.user?.info?.loginChangeGroupVOList;
  185. }
  186. },
  187. data() {
  188. return {
  189. loading: false,
  190. title: '新增',
  191. editRepairNotesDialog: false,
  192. type: 'add',
  193. form: {
  194. recycleName:'',
  195. },
  196. loginChangeRoleVOList: [],
  197. deviceList: [],
  198. detailList: []
  199. };
  200. },
  201. watch: {},
  202. methods: {
  203. init(row, type) {
  204. this.editRepairNotesDialog = true;
  205. this.type = type;
  206. this.title = type == 'add' ? '新增' : '详情';
  207. let currentUser = getCurrentUser()
  208. this.form.recycleDeptId = currentUser.currentGroupId; // 部门id
  209. this.roleVOListData();
  210. if (row?.id) {
  211. this.getDetail(row);
  212. } else {
  213. this.form.recycleId = currentUser.currentRoleId; // 回收人Id
  214. // 下拉数据 name 赋值
  215. this.echoData();
  216. }
  217. },
  218. async getDetail(row) {
  219. const res = await recycleDetails(row.id);
  220. this.detailList = res.detailList;
  221. this.form.code = res.code;
  222. this.$set(this.form, 'code', res.code);
  223. this.$set(this.form, 'demandDetailId', res.demandDetailId);
  224. this.$set(this.form, 'categoryCode', res.categoryCode);
  225. this.$set(this.form, 'usageTime', res.usageTime);
  226. this.$set(this.form, 'reason', res.reason);
  227. this.$set(this.form, 'contactName', res.contactName);
  228. this.$set(this.form, 'contactCode', res.contactCode);
  229. this.changeSelect(
  230. {
  231. id: res.repairId,
  232. name: res.orderWorkName,
  233. code: res.orderWorkCode
  234. },
  235. 1
  236. );
  237. // this.form.recycleId = currentUser.currentRoleId; // 回收人Id
  238. // this.echoData();
  239. this.$set(this.form, 'recycleId', res.recycleId);
  240. this.$set(this.form, 'recycleName', res.recycleName);
  241. console.log(res, 'res 55');
  242. console.log(this.loginChangeRoleVOList, 'loginChangeRoleVOList --');
  243. },
  244. handleClose() {
  245. this.editRepairNotesDialog = false;
  246. this.form = {
  247. recycleName:''
  248. };
  249. this.$refs.recyleFormRef.resetFields();
  250. this.deviceList = [];
  251. this.detailList = [];
  252. },
  253. async save() {
  254. // let validCycle = await this.$refs.spareCycleRef.getValidate();
  255. let list = this.$refs.spareCycleRef.getSpareData() || [];
  256. if (list.length == 0) {
  257. this.$message.warning('请至少添加一条配件申请清单');
  258. return;
  259. }
  260. this.$refs.recyleFormRef.validate(async (valid) => {
  261. if (valid) {
  262. let detailList = this.listData(list);
  263. let data = {
  264. ...this.form,
  265. detailList
  266. };
  267. const res = await recycleSave(data);
  268. if (res) {
  269. this.$message.success('操作成功');
  270. this.handleClose();
  271. this.$emit('refresh');
  272. }
  273. }
  274. });
  275. },
  276. listData(list) {
  277. let arr = [];
  278. if (list.length == 0) return list;
  279. list.map((item) => {
  280. this.addData(item, arr);
  281. });
  282. return arr;
  283. },
  284. addData(item, arr) {
  285. let totalCount = item.totalCount ? item.totalCount - 0 : '';
  286. if (!totalCount) {
  287. arr.push(item);
  288. return;
  289. }
  290. for (let i = 0; i < totalCount; i++) {
  291. item.totalCount = 1;
  292. arr.push(item);
  293. }
  294. },
  295. // 选择工单
  296. handHead() {
  297. if (this.type != 'view') {
  298. this.$refs.workOrderListRef.open();
  299. }
  300. },
  301. // 确认选择工单
  302. async changeSelect(row, type) {
  303. console.log(row, 'row ==========');
  304. this.$set(this.form, 'orderWorkName', row.name);
  305. this.$set(this.form, 'orderWorkCode', row.code);
  306. this.form.repairId = row.id; // 工单id
  307. const res = await getSalesWorkOrderById(row.id);
  308. this.$set(this.form, 'contactName', res.afterSalesDemandVO.contactName);
  309. this.$set(this.form, 'contactCode', res.afterSalesDemandVO.contactCode);
  310. let list = res.afterSalesDemandVO.productDetail.map((el) => {
  311. return {
  312. categoryName: el.categoryName,
  313. categoryCode: el.categoryCode,
  314. demandDetailId: el.id
  315. };
  316. });
  317. this.deviceList = list;
  318. // type 判断是不是修改/详情进来 是的话不需要初始赋值
  319. if (!type) {
  320. this.$set(this.form, 'categoryName', list[0].categoryName);
  321. this.$set(this.form, 'categoryCode', list[0].categoryCode);
  322. this.$set(this.form, 'demandDetailId', list[0].demandDetailId);
  323. }
  324. },
  325. // 设备名称选择
  326. deviceSelect(item) {
  327. this.form.categoryName = item.categoryName;
  328. this.form.categoryCode = item.categoryCode;
  329. this.form.demandDetailId = item.demandDetailId;
  330. },
  331. // 领用部门/领用人 name 赋值
  332. echoData() {
  333. const depObj = this.loginChangeGroupVOList.find(
  334. (item) => item.groupId === this.form.recycleDeptId
  335. );
  336. const roleObj = this.loginChangeRoleVOList.find(
  337. (item) => item.roleId === this.form.recycleId
  338. );
  339. this.form.recycleDeptName = depObj.groupName; // 回收部门名称
  340. this.form.recycleName = roleObj.roleName; // 回收人名称
  341. },
  342. // 角色下拉
  343. roleVOListData() {
  344. let arr = this.loginChangeGroupVOList.find((item) => {
  345. return item.groupId == this.form.recycleDeptId;
  346. })?.loginChangeRoleVOList;
  347. this.loginChangeRoleVOList = arr;
  348. }
  349. }
  350. };
  351. </script>
  352. <style lang="scss" scoped>
  353. .device_name {
  354. .el-select-dropdown__wrap {
  355. .el-select-dropdown__item {
  356. padding: 0 !important;
  357. }
  358. }
  359. .option_ {
  360. width: 100%;
  361. padding: 0 20px;
  362. }
  363. }
  364. </style>