manageMaterial.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <el-form label-width="120px" ref="manageForm" :model="form" :rules="rules">
  5. <div class="body-top">
  6. <div class="top-left">
  7. <div class="ele-page-header ele-cell">
  8. <div class="ele-page-title">管理物料</div>
  9. </div>
  10. <el-row :gutter="24">
  11. <el-col :span="24">
  12. <el-form-item label="物料组" label-width="70px" prop="categoryLevelGroupName">
  13. <el-input @click.native="chooseMaterial" v-model="form.categoryLevelGroupName" readonly/>
  14. </el-form-item>
  15. </el-col>
  16. </el-row>
  17. </div>
  18. <div>
  19. <el-button @click="cancel">返回</el-button>
  20. <el-button type="primary" @click="submit">保存</el-button>
  21. </div>
  22. </div>
  23. <div class="divider">
  24. <div class="title">
  25. <div class="ele-bg-primary"></div>
  26. <span>基本信息</span>
  27. </div>
  28. <div class="ele-bg-primary ele-width"></div>
  29. </div>
  30. <el-row :gutter="24">
  31. <el-col :span="8">
  32. <el-form-item label="编码" prop="code">
  33. <el-input v-model="form.code"/>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="8">
  37. <el-form-item label="名称" prop="name">
  38. <el-input v-model="form.name"/>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="8">
  42. <el-form-item label="分类" prop="categoryLevelName">
  43. <el-input v-model="form.categoryLevelName" @click.native="openCategory" readonly/>
  44. </el-form-item>
  45. </el-col>
  46. <el-col :span="8">
  47. <el-form-item label="牌号" prop="brandNum">
  48. <el-input v-model="form.brandNum"/>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="8">
  52. <el-form-item label="规格" prop="specification">
  53. <el-input v-model="form.specification"/>
  54. </el-form-item>
  55. </el-col>
  56. <el-col :span="8">
  57. <el-form-item label="型号" prop="modelType">
  58. <el-input v-model="form.modelType"/>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="8">
  62. <el-form-item label="计量单位" prop="measuringUnit">
  63. <DictSelection dictName="计量单位" clearable v-model="form.measuringUnit">
  64. </DictSelection>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="8">
  68. <el-form-item label="包装单位" prop="packingUnit">
  69. <DictSelection dictName="包装单位" clearable v-model="form.packingUnit">
  70. </DictSelection>
  71. </el-form-item>
  72. </el-col>
  73. <el-col :span="8">
  74. <el-form-item label="体积">
  75. <div class="form-line">
  76. <el-input v-model="form.volume"/>
  77. <DictSelection class="line-select" dictName="体积单位" clearable v-model="form.volumeUnit">
  78. </DictSelection>
  79. </div>
  80. </el-form-item>
  81. </el-col>
  82. <el-col :span="8">
  83. <el-form-item label="毛重">
  84. <div class="form-line">
  85. <el-input v-model="form.roughWeight"/>
  86. <DictSelection class="line-select" dictName="重量单位" clearable v-model="form.roughWeightUnit">
  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.netWeight"/>
  95. <DictSelection class="line-select" dictName="重量单位" clearable v-model="form.netWeightUnit">
  96. </DictSelection>
  97. </div>
  98. </el-form-item>
  99. </el-col>
  100. <el-col :span="8">
  101. <el-form-item label="是否产品" prop="isProduct">
  102. <el-switch @change="changeProduct" v-model="form.isProduct" :active-value="true" :inactive-value="false"> </el-switch>
  103. </el-form-item>
  104. </el-col>
  105. <el-col :span="8">
  106. <el-form-item label="所属部门">
  107. <deptSelect v-model="form.deptLeaderId" @changeGroup="searchDeptNodeClick"/>
  108. </el-form-item>
  109. </el-col>
  110. <el-col :span="8">
  111. <el-form-item label="负责人">
  112. <personSelect
  113. ref="directorRef"
  114. v-model="form.deptId"
  115. @selfChange="handleDirectorChange"
  116. :init="false"
  117. />
  118. </el-form-item>
  119. </el-col>
  120. <el-col :span="8">
  121. <el-form-item label="产品分类" prop="productCategoryLevelName" :rules='
  122. form.isProduct? [{ required: true, trigger: "change", message: "请选择产品分类" }]:[]
  123. '
  124. >
  125. <el-input readonly :disabled="!form.isProduct" v-model="form.productCategoryLevelName" @click.native="openProductCategory"/>
  126. </el-form-item>
  127. </el-col>
  128. </el-row>
  129. </el-form>
  130. </el-card>
  131. <!-- 物料组弹窗 -->
  132. <GroupDialog ref="groupRefs" @changeMaterial='determineChoose'/>
  133. <!-- 分类选择弹窗 -->
  134. <CategoryDialog ref="categoryRefs" @chooseCategory='confirmCategory'/>
  135. <!-- 仓储配置 -->
  136. <WarehouseInfo ref="warehouseRefs" :form="form"/>
  137. <!-- 采购 -->
  138. <ProcureInfo ref="procureRefs" :form="form"/>
  139. <!-- 生产信息 -->
  140. <ProductionInfo ref="productionRefs" :form="form"/>
  141. <!-- 计划 -->
  142. <PlanInfo ref="planRefs" :form="form"/>
  143. <!-- 销售信息 -->
  144. <SalesInfo ref="salesRefs" :form="form"/>
  145. <!-- 质量配置 -->
  146. <QualityInfo ref="qualityRefs" :form="form"/>
  147. <!-- 舟皿信息 -->
  148. <BoatInfo ref="qualityRefs" :form="form"/>
  149. <!-- 周转车信息 -->
  150. <TurnoverInfo ref="turnoverRefs" :form="form"/>
  151. <!-- 模具信息 -->
  152. <MoldInfo ref="moldRefs" :form="form"/>
  153. <!-- 备注信息 -->
  154. <RemarkInfo ref="remarkRefs" :form="remarkform" :imgList="imgList"/>
  155. </div>
  156. </template>
  157. <script>
  158. import GroupDialog from './components/GroupDialog.vue';
  159. import CategoryDialog from './components/CategoryDialog.vue';
  160. import WarehouseInfo from './components/WarehouseInfo.vue';
  161. import ProcureInfo from './components/ProcureInfo.vue';
  162. import ProductionInfo from './components/ProductionInfo.vue';
  163. import PlanInfo from './components/PlanInfo.vue';
  164. import SalesInfo from './components/SalesInfo.vue';
  165. import QualityInfo from './components/QualityInfo.vue';
  166. import BoatInfo from './components/BoatInfo.vue';
  167. import TurnoverInfo from './components/TurnoverInfo.vue';
  168. import MoldInfo from './components/MoldInfo.vue';
  169. import RemarkInfo from './components/RemarkInfo.vue';
  170. import deptSelect from '@/components/CommomSelect/dept-select.vue';
  171. import personSelect from '@/components/CommomSelect/person-select.vue';
  172. export default {
  173. name: 'ManageMaterial',
  174. components: {
  175. GroupDialog , deptSelect , personSelect , WarehouseInfo , ProcureInfo ,ProductionInfo ,
  176. PlanInfo , SalesInfo , QualityInfo , BoatInfo , TurnoverInfo , MoldInfo , RemarkInfo , CategoryDialog
  177. },
  178. data() {
  179. return {
  180. form:{
  181. categoryLevelGroupName:'',
  182. categoryLevelName:''
  183. },
  184. remarkform:{},
  185. imgList:[],
  186. chooseItem:null,
  187. };
  188. },
  189. computed:{
  190. rules(){
  191. const rules ={
  192. categoryLevelGroupName:[{ required: true, message: '请选择所属物料组', trigger: 'change' }],
  193. code:[{ required: true, message: '请输入编码', trigger: 'blur' }],
  194. name:[{ required: true, message: '请输入名称', trigger: 'blur' }],
  195. categoryLevelName:[{ required: true, message: '请选择所属分类', trigger: 'change' }],
  196. measuringUnit:[{ required: true, message: '请选择计量单位', trigger: 'change' }],
  197. isProduct:[{ required: true, message: '请选择是否产品', trigger: 'change' }],
  198. }
  199. return rules
  200. }
  201. },
  202. methods: {
  203. // 选择所属部门
  204. searchDeptNodeClick (id, info) {
  205. // 根据部门获取人员
  206. const params = { executeGroupId: id };
  207. this.$nextTick(() => {
  208. this.$refs.directorRef.getList(params);
  209. });
  210. },
  211. //选择负责人
  212. handleDirectorChange (id, info) {
  213. },
  214. chooseMaterial(){
  215. this.$refs.groupRefs.open(this.chooseItem)
  216. },
  217. // 选择分类
  218. openCategory(){
  219. if(!this.chooseItem) return this.$message.warning('请先选择物料组!')
  220. this.$refs.categoryRefs.open(this.chooseItem.categoryLevelRootId,'选择分类')
  221. },
  222. // 选择产品分类
  223. openProductCategory(){
  224. if(!this.form.isProduct) return
  225. this.$refs.categoryRefs.open(9,'选择产品分类')
  226. },
  227. determineChoose(row){
  228. this.chooseItem = row
  229. this.$set(this.form,'categoryLevelGroupName',row.name)
  230. this.$set(this.form,'categoryLevelGroupId',row.id)
  231. },
  232. cancel(){
  233. this.$router.go(-1)
  234. },
  235. // 确定分类
  236. confirmCategory(node,title){
  237. if(title=='选择产品分类'){
  238. this.$set(this.form,'productCategoryLevelName',node.name)
  239. this.$set(this.form,'productCategoryLevelId',node.id)
  240. }else{
  241. this.$set(this.form,'categoryLevelName',node.name)
  242. this.$set(this.form,'categoryLevelId',node.id)
  243. }
  244. },
  245. changeProduct(){
  246. if(!this.form.isProduct){
  247. this.$refs.manageForm.clearValidate(["productCategoryLevelName"]);
  248. }
  249. },
  250. // 保存
  251. submit(){
  252. this.$refs.manageForm.validate((valid) => {
  253. if (!valid) {
  254. return false;
  255. }
  256. console.log('保存了',this.remarkform)
  257. });
  258. }
  259. }
  260. };
  261. </script>
  262. <style lang="scss" scoped>
  263. .ele-page-header{
  264. border: none;
  265. }
  266. .body-top{
  267. display: flex;
  268. align-items:center;
  269. justify-content:space-between;
  270. background: #fff;
  271. .top-left{
  272. display: flex;
  273. align-items:center;
  274. justify-content: flex-start;
  275. margin-left: -25px;
  276. .el-form-item{
  277. margin-bottom: 0;
  278. }
  279. }
  280. }
  281. .divider {
  282. margin: 20px 0;
  283. .title {
  284. display: flex;
  285. align-items: center;
  286. margin-bottom: 10px;
  287. div {
  288. width: 8px;
  289. height: 20px;
  290. margin-right: 10px;
  291. }
  292. span {
  293. font-size: 20px;
  294. }
  295. }
  296. .ele-width{
  297. width: 100%;
  298. height: 2px;
  299. }
  300. }
  301. .form-line{
  302. display: flex;
  303. align-items: center;
  304. justify-content: space-between;
  305. .line-select{
  306. margin-left:15px;
  307. }
  308. }
  309. </style>