accessoryDialog.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. :visible.sync="addRepairNotesDialog"
  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. ref="accessoryFormRef"
  29. :model="form"
  30. label-width="100px"
  31. v-show="activeComp === 'main'"
  32. >
  33. <headerTitle title="基本信息" style="margin-top: 15px"></headerTitle>
  34. <el-row>
  35. <el-col :span="6">
  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="name"
  44. :rules="{
  45. required: true,
  46. message: '请选择工单',
  47. trigger: 'change'
  48. }"
  49. >
  50. <el-input
  51. v-model="form.name"
  52. :disabled="type == 'view'"
  53. @click.native="handHead"
  54. placeholder="请选择"
  55. />
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="6">
  59. <el-form-item
  60. label="领用部门"
  61. prop="receivingDeptId"
  62. :rules="{
  63. required: true,
  64. message: '请输入领用部门',
  65. trigger: 'change'
  66. }"
  67. >
  68. <el-select
  69. style="width: 100%"
  70. v-model="form.receivingDeptId"
  71. disabled
  72. placeholder="请选择"
  73. >
  74. <el-option
  75. v-for="item in loginChangeGroupVOList"
  76. :key="item.groupId"
  77. :label="item.groupName"
  78. :value="item.groupId"
  79. ></el-option>
  80. </el-select>
  81. </el-form-item>
  82. </el-col>
  83. <el-col :span="6">
  84. <el-form-item
  85. label="领用人"
  86. prop="recipientName"
  87. :rules="{
  88. required: true,
  89. message: '请输入领用人',
  90. trigger: 'change'
  91. }"
  92. >
  93. <el-input v-model="form.recipientName" disabled />
  94. <!-- <el-select style="width: 100%;" v-model="form.recipientName" disabled placeholder="请选择">
  95. <el-option
  96. v-for="item in loginChangeRoleVOList"
  97. :key="item.roleId"
  98. :label="item.roleName"
  99. :value="item.roleId"
  100. ></el-option>
  101. </el-select> -->
  102. </el-form-item>
  103. </el-col>
  104. </el-row>
  105. <el-row>
  106. <el-col :span="6">
  107. <el-form-item label="使用时间:" prop="usageTime">
  108. <el-date-picker
  109. style="width: 100%"
  110. v-model="form.usageTime"
  111. type="date"
  112. placeholder="选择"
  113. value-format="yyyy-MM-dd HH:mm:ss"
  114. :disabled="type == 'view'"
  115. ></el-date-picker>
  116. </el-form-item>
  117. </el-col>
  118. <el-col :span="6">
  119. <el-form-item
  120. label="使用部门"
  121. prop="useDeptId"
  122. :rules="{
  123. required: true,
  124. message: '请选择部门',
  125. trigger: 'change'
  126. }"
  127. >
  128. <deptSelect
  129. v-model="form.useDeptId"
  130. :disabled="type == 'view'"
  131. @changeGroup="searchDeptNodeClick"
  132. />
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="6">
  136. <el-form-item
  137. label="使用人"
  138. prop="userId"
  139. :rules="{
  140. required: true,
  141. message: '请选择使用人',
  142. trigger: 'change'
  143. }"
  144. >
  145. <el-select
  146. :disabled="type == 'view'"
  147. v-model="form.userId"
  148. size="small"
  149. style="width: 100%"
  150. filterable
  151. @change="changeUser"
  152. >
  153. <el-option
  154. v-for="item in executorList"
  155. :key="item.id"
  156. :value="item.id"
  157. :label="item.name"
  158. ></el-option>
  159. </el-select>
  160. </el-form-item>
  161. </el-col>
  162. <el-col :span="6">
  163. <el-form-item label="用途:">
  164. <el-input
  165. :disabled="type == 'view'"
  166. v-model="form.purpose"
  167. type="textarea"
  168. :rows="2"
  169. />
  170. </el-form-item>
  171. </el-col>
  172. </el-row>
  173. <!-- 配件信息 -->
  174. <spareInfo
  175. ref="spareInfoRef"
  176. :types="type"
  177. :detailList="detailList"
  178. v-if="addRepairNotesDialog"
  179. />
  180. </el-form>
  181. <bpmDetail
  182. v-if="activeComp === 'bpm' && form.processInstanceId"
  183. :id="form.processInstanceId"
  184. ></bpmDetail>
  185. <out-bound-details
  186. v-if="activeComp === 'store' && form.approvalStatus == 2"
  187. ref="innerBoundDetailsRef"
  188. ></out-bound-details>
  189. <workOrderList ref="workOrderListRef" @changeSelect="changeSelect" />
  190. <div slot="footer" class="footer">
  191. <el-button v-if="type != 'view'" type="primary" @click="save"
  192. >保存</el-button
  193. >
  194. <el-button @click="handleClose">取消</el-button>
  195. </div>
  196. </ele-modal>
  197. </template>
  198. <script>
  199. import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  200. import outBoundDetails from '@/BIZComponents/outdetails.vue';
  201. import deptSelect from '@/components/CommomSelect/dept-select.vue';
  202. import workOrderList from './workOrderList.vue';
  203. import spareInfo from './spareInfo.vue';
  204. import { getUserPage } from '@/api/system/organization';
  205. import {
  206. accessorySave,
  207. accessoryUpdate
  208. } from '@/api/salesServiceManagement/index';
  209. import { getCurrentUser } from '@/utils/token-util';
  210. export default {
  211. data() {
  212. return {
  213. title: '新增',
  214. addRepairNotesDialog: false,
  215. type: 'add',
  216. form: {},
  217. loginChangeRoleVOList: [],
  218. executorList: [], // 执行人列表
  219. detailList: [],
  220. activeComp: 'main',
  221. tabOptions: [
  222. { key: 'main', name: '发货单详情' },
  223. { key: 'bpm', name: '流程详情' },
  224. { key: 'store', name: '出库单详情' }
  225. ]
  226. };
  227. },
  228. components: {
  229. workOrderList,
  230. spareInfo,
  231. deptSelect,
  232. bpmDetail,
  233. outBoundDetails
  234. },
  235. computed: {
  236. // 部门下拉
  237. loginChangeGroupVOList() {
  238. return this.$store.state.user?.info?.loginChangeGroupVOList;
  239. }
  240. },
  241. methods: {
  242. init(row, type) {
  243. // let currentUser = JSON.parse(sessionStorage['currentUser']);
  244. let currentUser = getCurrentUser();
  245. this.form.receivingDeptId = currentUser.currentGroupId; // 部门id
  246. this.roleVOListData();
  247. this.addRepairNotesDialog = true;
  248. this.type = type;
  249. this.title = type == 'add' ? '新增' : type == 'view' ? '详情' : '修改';
  250. if (row?.id) {
  251. this.getDetail(row);
  252. } else {
  253. this.form.recipientId = currentUser.currentRoleId; // 领用人Id
  254. // 下拉数据 name 赋值
  255. this.echoData();
  256. }
  257. },
  258. async getDetail(data) {
  259. const row = JSON.parse(JSON.stringify(data));
  260. const params = { groupId: row.useDeptId };
  261. this.getUserList(params);
  262. this.form.approvalStatus = row.approvalStatus;
  263. this.$set(this.form, 'code', row.code);
  264. this.$set(this.form, 'name', row.name);
  265. this.$set(this.form, 'receivingDeptId', row.receivingDeptId);
  266. this.$set(this.form, 'recipientId', row.recipientId);
  267. this.$set(this.form, 'usageTime', row.usageTime);
  268. this.$set(this.form, 'useDeptId', row.useDeptId);
  269. this.$set(this.form, 'userId', row.userId);
  270. this.$set(this.form, 'purpose', row.purpose);
  271. this.form.id = row.id;
  272. this.$set(this.form, 'recipientName', row.recipientName);
  273. this.form.receivingDeptName = row.receivingDeptName;
  274. this.form.useDeptName = row.useDeptName;
  275. this.form.userName = row.userName;
  276. this.form.repairId = row.repairId;
  277. this.detailList = row.details;
  278. this.form.docNo = row.docNo;
  279. this.form.orderCode = row.orderCode;
  280. this.form.processInstanceId = row.processInstanceId;
  281. console.log(this.form,'this.form ++++++')
  282. },
  283. handleTag(val) {
  284. this.activeComp = val;
  285. if (val == 'store') {
  286. this.$nextTick(() => {
  287. console.log(this.form.orderCode,'this.form.orderCode ===')
  288. this.$refs.innerBoundDetailsRef._getInfo(this.form.code);
  289. });
  290. }
  291. },
  292. // 领用部门/领用人 name 赋值
  293. echoData() {
  294. const depObj = this.loginChangeGroupVOList.find(
  295. (item) => item.groupId === this.form.receivingDeptId
  296. );
  297. const roleObj = this.loginChangeRoleVOList.find(
  298. (item) => item.roleId === this.form.recipientId
  299. );
  300. this.form.receivingDeptName = depObj.groupName;
  301. this.$set(this.form, 'recipientName', roleObj.roleName);
  302. },
  303. // 选择工单
  304. handHead() {
  305. if (this.type != 'view') {
  306. this.$refs.workOrderListRef.open();
  307. }
  308. },
  309. // 确认选择工单
  310. changeSelect(row) {
  311. this.$set(this.form, 'name', row.name);
  312. this.form.repairId = row.id;
  313. },
  314. // 角色下拉
  315. roleVOListData() {
  316. let arr = this.loginChangeGroupVOList.find((item) => {
  317. return item.groupId == this.form.receivingDeptId;
  318. })?.loginChangeRoleVOList;
  319. this.loginChangeRoleVOList = arr;
  320. },
  321. //选择部门(搜索)
  322. searchDeptNodeClick(info, data) {
  323. if (info) {
  324. // 根据部门获取人员
  325. this.form.useDeptName = data.name;
  326. const params = { groupId: info };
  327. this.getUserList(params);
  328. this.$set(this.form, 'userName', '');
  329. this.$set(this.form, 'userId', '');
  330. } else {
  331. this.form.useDeptId = null;
  332. }
  333. },
  334. // 获取审核人列表、巡点检人员
  335. async getUserList(params) {
  336. try {
  337. let data = { pageNum: 1, size: -1 };
  338. // 如果传了参数就是获取巡点检人员数据
  339. if (params) {
  340. data = Object.assign(data, params);
  341. }
  342. const res = await getUserPage(data);
  343. if (params) {
  344. this.executorList = res.list;
  345. }
  346. } catch (error) {}
  347. },
  348. // 选择使用人
  349. changeUser(val) {
  350. this.executorList.map((item) => {
  351. if (item.id == val) {
  352. this.form.userName = item.name;
  353. }
  354. });
  355. },
  356. save() {
  357. let details = this.$refs.spareInfoRef.getSpareData() || [];
  358. if (details.length == 0) {
  359. this.$message.warning('请最少添加一条配件信息');
  360. return;
  361. }
  362. let obj = JSON.parse(JSON.stringify(this.form));
  363. delete obj.code;
  364. this.$refs.accessoryFormRef.validate(async (valid) => {
  365. if (valid) {
  366. let data = {
  367. ...obj,
  368. details
  369. };
  370. const requestname =
  371. this.title == '新增' ? accessorySave : accessoryUpdate;
  372. const res = await requestname(data);
  373. if (res) {
  374. this.$message.success('操作成功');
  375. this.handleClose();
  376. this.$emit('refresh');
  377. }
  378. }
  379. });
  380. },
  381. handleClose() {
  382. this.form = {};
  383. this.detailList = [];
  384. this.$refs.accessoryFormRef.resetFields();
  385. this.addRepairNotesDialog = false;
  386. }
  387. }
  388. };
  389. </script>
  390. <style></style>