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