accessoryDialog.vue 9.7 KB

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