detail.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <el-form
  5. label-width="120px"
  6. ref="manageForm"
  7. :model="form"
  8. :rules="rules"
  9. >
  10. <headerTitle title="基本信息">
  11. <el-button @click="cancel">返回</el-button>
  12. <el-button type="primary" @click="submit" :loading="loading"
  13. >保存</el-button
  14. ></headerTitle
  15. >
  16. <!-- <div class="divider">
  17. <div class="title">
  18. <div class="ele-bg-primary"></div>
  19. <span>基本信息</span>
  20. </div>
  21. <div class="ele-bg-primary ele-width"></div>
  22. </div> -->
  23. <el-row :gutter="24">
  24. <el-col :span="8">
  25. <el-form-item label="编码" prop="code">
  26. <el-input v-model="form.code" />
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="8">
  30. <el-form-item label="名称" prop="name">
  31. <el-input v-model="form.name" />
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="8">
  35. <el-form-item label="分类" prop="categoryLevelName">
  36. <el-input
  37. v-model="form.categoryLevelName"
  38. @click.native="openCategory"
  39. />
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="8">
  43. <el-form-item label="牌号" prop="brandNum">
  44. <el-input v-model="form.brandNum" />
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="8">
  48. <el-form-item label="规格" prop="specification">
  49. <el-input v-model="form.specification" />
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="8">
  53. <el-form-item label="型号" prop="modelType">
  54. <el-input v-model="form.modelType" />
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="8">
  58. <el-form-item label="计量单位" prop="measuringUnit">
  59. <DictSelection
  60. dictName="计量单位"
  61. clearable
  62. v-model="form.measuringUnit"
  63. >
  64. </DictSelection>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="8">
  68. <el-form-item label="包装单位" prop="packingUnit">
  69. <DictSelection
  70. dictName="包装单位"
  71. clearable
  72. v-model="form.packingUnit"
  73. >
  74. </DictSelection>
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="8">
  78. <el-form-item label="体积">
  79. <div class="form-line">
  80. <el-input v-model="form.volume" />
  81. <DictSelection
  82. class="line-select"
  83. dictName="体积单位"
  84. clearable
  85. v-model="form.volumeUnit"
  86. >
  87. </DictSelection>
  88. </div>
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="8">
  92. <el-form-item label="毛重">
  93. <div class="form-line">
  94. <el-input v-model="form.roughWeight" />
  95. <DictSelection
  96. class="line-select"
  97. dictName="重量单位"
  98. clearable
  99. v-model="form.weightUnit"
  100. >
  101. </DictSelection>
  102. </div>
  103. </el-form-item>
  104. </el-col>
  105. <el-col :span="8">
  106. <el-form-item label="净重">
  107. <div class="form-line">
  108. <el-input v-model="form.netWeight" />
  109. <DictSelection
  110. class="line-select"
  111. dictName="重量单位"
  112. clearable
  113. v-model="form.weightUnit"
  114. >
  115. </DictSelection>
  116. </div>
  117. </el-form-item>
  118. </el-col>
  119. <el-col :span="8">
  120. <el-form-item label="所属部门">
  121. <deptSelect
  122. v-model="form.deptLeaderId"
  123. @changeGroup="searchDeptNodeClick"
  124. />
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="8">
  128. <el-form-item label="负责人">
  129. <personSelect
  130. ref="directorRef"
  131. v-model="form.deptId"
  132. @selfChange="handleDirectorChange"
  133. :init="false"
  134. />
  135. </el-form-item>
  136. </el-col>
  137. </el-row>
  138. </el-form>
  139. </el-card>
  140. <!-- 分类选择弹窗 -->
  141. <CategoryDialog ref="categoryRefs" @chooseCategory="confirmCategory" />
  142. <!-- 仓储配置 -->
  143. <WarehouseInfo ref="warehouseRefs" :form="categoryWms" />
  144. <!-- 生产信息 -->
  145. <ProductionInfo ref="productionRefs" :form="categoryMes" />
  146. <!-- 计划 -->
  147. <PlanInfo ref="planRefs" :form="categoryAps" />
  148. <!-- 质量配置 -->
  149. <QualityInfo ref="qualityRefs" :form="categoryQms" />
  150. <!-- 舟皿信息 -->
  151. <BoatInfo ref="qualityRefs" :form="categoryPallet" />
  152. <!-- 周转车信息 -->
  153. <TurnoverInfo ref="turnoverRefs" :form="categoryVehicle" />
  154. <!-- 模具信息 -->
  155. <MoldInfo ref="moldRefs" :form="categoryMold" />
  156. <!-- 备注信息 -->
  157. <RemarkInfo ref="remarkRefs" :form="remarkform" />
  158. <!-- 关联信息 -->
  159. <linkMsg
  160. ref="linkMsgRef"
  161. :id="$route.query.id"
  162. :categoryLevelId="form.categoryLevelId"
  163. :categoryLevelGroupId = "form.categoryLevelGroupId"
  164. />
  165. </div>
  166. </template>
  167. <script>
  168. import GroupDialog from '../manage/components/GroupDialog.vue';
  169. import CategoryDialog from '../manage/components/CategoryDialog.vue';
  170. import WarehouseInfo from '../manage/components/WarehouseInfo.vue';
  171. import ProcureInfo from '../manage/components/ProcureInfo.vue';
  172. import ProductionInfo from '../manage/components/ProductionInfo.vue';
  173. import PlanInfo from '../manage/components/PlanInfo.vue';
  174. import SalesInfo from '../manage/components/SalesInfo.vue';
  175. import QualityInfo from '../manage/components/QualityInfo.vue';
  176. import BoatInfo from '../manage/components/BoatInfo.vue';
  177. import TurnoverInfo from '../manage/components/TurnoverInfo.vue';
  178. import MoldInfo from '../manage/components/MoldInfo.vue';
  179. import RemarkInfo from '../manage/components/RemarkInfo.vue';
  180. import deptSelect from '@/components/CommomSelect/dept-select.vue';
  181. import personSelect from '@/components/CommomSelect/person-select.vue';
  182. import linkMsg from './components/link-msg.vue';
  183. import { getDetails } from '@/api/classifyManage/itemInformation';
  184. import { addMaterial } from '@/api/material/manage.js';
  185. import { deepClone } from '@/utils/index';
  186. import { finishPageTab, reloadPageTab } from '@/utils/page-tab-util';
  187. export default {
  188. name: 'ManageMaterial',
  189. components: {
  190. linkMsg,
  191. GroupDialog,
  192. deptSelect,
  193. personSelect,
  194. WarehouseInfo,
  195. ProcureInfo,
  196. ProductionInfo,
  197. PlanInfo,
  198. SalesInfo,
  199. QualityInfo,
  200. BoatInfo,
  201. TurnoverInfo,
  202. MoldInfo,
  203. RemarkInfo,
  204. CategoryDialog
  205. },
  206. data () {
  207. return {
  208. loading: false,
  209. form: {
  210. categoryLevelGroupName: '',
  211. categoryLevelName: ''
  212. },
  213. remarkform: {
  214. remarkAttach: []
  215. },
  216. categoryAps: {},
  217. categoryMes: {},
  218. categoryMold: {},
  219. categoryPallet: {},
  220. categoryQms: {},
  221. categoryVehicle: {},
  222. categoryWms: {},
  223. // 表单验证规则
  224. rules: {
  225. categoryLevelGroupName: [
  226. { required: true, message: '请选择所属物料组', trigger: 'change' }
  227. ],
  228. code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
  229. name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
  230. categoryLevelName: [
  231. { required: true, message: '请选择所属分类', trigger: 'change' }
  232. ],
  233. measuringUnit: [
  234. { required: true, message: '请选择计量单位', trigger: 'change' }
  235. ]
  236. },
  237. PathInfo: {},
  238. id: null
  239. };
  240. },
  241. created () {
  242. this._getDetails();
  243. },
  244. methods: {
  245. async _getDetails () {
  246. const data = await getDetails(this.$route.query.id);
  247. const info = deepClone(data);
  248. this.form = {
  249. ...info.category
  250. };
  251. this.judgeSet(info);
  252. this.searchDeptNodeClick(this.form.deptLeaderId);
  253. },
  254. // 判断字段类型并赋值
  255. judgeSet (info) {
  256. if (typeof info.categoryAps == 'string') {
  257. this.categoryAps = {};
  258. } else {
  259. this.categoryAps = info.categoryAps;
  260. }
  261. if (typeof info.categoryMes == 'string') {
  262. this.categoryMes = {};
  263. } else {
  264. this.categoryMes = info.categoryMes;
  265. }
  266. if (typeof info.categoryMold == 'string') {
  267. this.categoryMold = {};
  268. } else {
  269. this.categoryMold = info.categoryMold;
  270. }
  271. if (typeof info.categoryPallet == 'string') {
  272. this.categoryPallet = {};
  273. } else {
  274. this.categoryPallet = info.categoryPallet;
  275. }
  276. if (typeof info.categoryQms == 'string') {
  277. this.categoryQms = {};
  278. } else {
  279. this.categoryQms = info.categoryQms;
  280. }
  281. if (typeof info.categoryVehicle == 'string') {
  282. this.categoryVehicle = {};
  283. } else {
  284. this.categoryVehicle = info.categoryVehicle;
  285. }
  286. if (typeof info.categoryWms == 'string') {
  287. this.categoryWms = {};
  288. } else {
  289. this.categoryWms = info.categoryWms;
  290. }
  291. },
  292. // 选择所属部门
  293. searchDeptNodeClick (id, info) {
  294. // 根据部门获取人员
  295. const params = { executeGroupId: id };
  296. this.$nextTick(() => {
  297. this.$refs.directorRef.getList(params);
  298. });
  299. },
  300. //选择负责人
  301. handleDirectorChange (id, info) {},
  302. // 确定分类
  303. confirmCategory (node, title, PathInfo) {
  304. if (title == '选择产品分类') {
  305. this.$set(this.form, 'productCategoryLevelName', node.name);
  306. this.$set(this.form, 'productCategoryLevelId', node.id);
  307. } else {
  308. this.$set(this.form, 'categoryLevelName', node.name);
  309. this.$set(this.form, 'categoryLevelId', node.id);
  310. this.$set(this.form, 'categoryLevelPath', node.name);
  311. this.$set(this.form, 'categoryLevelPathId', node.id);
  312. this.PathInfo = PathInfo;
  313. }
  314. },
  315. openCategory () {
  316. this.$refs.categoryRefs.open(this.form.categoryLevelId);
  317. },
  318. cancel () {
  319. finishPageTab();
  320. this.$router.go(-1);
  321. },
  322. // 保存
  323. submit () {
  324. this.$refs.manageForm.validate((valid) => {
  325. if (!valid) {
  326. return false;
  327. }
  328. this.loading = true;
  329. // const imgList = this.remarkform.imgList;
  330. // const arr = [];
  331. // if (imgList.length) {
  332. // imgList.map((item) => {
  333. // arr.push(item.storePath);
  334. // });
  335. // this.form.remarkAttach = arr.join(',');
  336. // }
  337. // this.form.remark = this.remarkform.remark
  338. // ? this.remarkform.remark
  339. // : '';
  340. const data = {
  341. categoryWms: this.categoryWms,
  342. categoryAps: this.categoryAps,
  343. categoryMes: this.categoryMes,
  344. categoryMold: this.categoryMold,
  345. categoryPallet: this.categoryPallet,
  346. categoryQms: this.categoryQms,
  347. categoryVehicle: this.categoryVehicle,
  348. category: {
  349. ...this.form,
  350. ...this.remarkform,
  351. ...this.PathInfo
  352. }
  353. };
  354. addMaterial(data)
  355. .then((msg) => {
  356. this.loading = false;
  357. this.$message.success(msg);
  358. finishPageTab();
  359. reloadPageTab({ fullPath: '/material/product' });
  360. this.$router.go(-1);
  361. })
  362. .catch((e) => {
  363. this.loading = false;
  364. });
  365. });
  366. }
  367. }
  368. };
  369. </script>
  370. <style lang="scss" scoped>
  371. .ele-page-header {
  372. border: none;
  373. }
  374. .body-top {
  375. display: flex;
  376. align-items: center;
  377. justify-content: space-between;
  378. background: #fff;
  379. .top-left {
  380. display: flex;
  381. align-items: center;
  382. justify-content: flex-start;
  383. margin-left: -25px;
  384. .el-form-item {
  385. margin-bottom: 0;
  386. }
  387. }
  388. }
  389. .divider {
  390. margin: 20px 0;
  391. .title {
  392. display: flex;
  393. align-items: center;
  394. margin-bottom: 10px;
  395. div {
  396. width: 8px;
  397. height: 20px;
  398. margin-right: 10px;
  399. }
  400. span {
  401. font-size: 20px;
  402. }
  403. }
  404. .ele-width {
  405. width: 100%;
  406. height: 2px;
  407. }
  408. }
  409. .form-line {
  410. display: flex;
  411. align-items: center;
  412. justify-content: space-between;
  413. .line-select {
  414. margin-left: 15px;
  415. }
  416. }
  417. </style>