WarehouseEdit.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <template>
  2. <el-dialog
  3. :visible.sync="visible"
  4. :title="`${type}仓库`"
  5. :before-close="cancel"
  6. width="500px"
  7. >
  8. <el-form
  9. v-loading="loadingVis"
  10. :model="formData"
  11. :rules="rules"
  12. ref="formRef"
  13. label-width="100px"
  14. >
  15. <el-form-item label="仓库编码" prop="code">
  16. <el-input
  17. v-model="formData.code"
  18. :disabled="type != '新建'"
  19. placeholder="请输入"
  20. size="small"
  21. ></el-input>
  22. </el-form-item>
  23. <el-form-item label="仓库名称" size="small" prop="name">
  24. <el-input
  25. v-model="formData.name"
  26. placeholder="限16个文字"
  27. maxlength="16"
  28. ></el-input>
  29. </el-form-item>
  30. <el-form-item label="仓库类型" prop="inventoryType">
  31. <el-select
  32. filterable
  33. placeholder="请选择"
  34. v-model="formData.inventoryType"
  35. clearable
  36. class="w100"
  37. >
  38. <el-option
  39. v-for="(item, idx) in warehouseDefinition_inventoryList"
  40. :key="item.code"
  41. :value="item.code"
  42. :label="item.label"
  43. ></el-option>
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item label="所属工厂" prop="factoryId">
  47. <el-select
  48. filterable
  49. size="small"
  50. class="w100"
  51. v-model="formData.factoryId"
  52. placeholder="请选择"
  53. >
  54. <el-option
  55. v-for="item in factoryList"
  56. :key="item.id"
  57. :label="item.name"
  58. :value="item.id"
  59. @click.native="
  60. () => (
  61. (formData.factoryName = item.name),
  62. (formData.factoryCodefactoryCode = item.code)
  63. )
  64. "
  65. >
  66. </el-option>
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item label="权属部门" prop="departmentId">
  70. <DeptSelect v-model="formData.departmentId" @input="nodeClick" />
  71. </el-form-item>
  72. <el-form-item label="权属人" prop="ownerId">
  73. <el-select
  74. filterable
  75. class="w100"
  76. size="small"
  77. v-model="formData.ownerId"
  78. placeholder="请选择"
  79. @change="changeOwner"
  80. >
  81. <el-option
  82. v-for="item in userList"
  83. :key="item.id"
  84. :label="item.name"
  85. :value="item.id"
  86. >
  87. </el-option>
  88. </el-select>
  89. </el-form-item>
  90. <el-form-item label="仓库位置" prop="location">
  91. <el-cascader
  92. size="small"
  93. class="w100"
  94. v-model="formData.location"
  95. :options="locationOptions"
  96. @change="changeLocation"
  97. ></el-cascader>
  98. </el-form-item>
  99. <el-form-item label="详情地址" prop="address">
  100. <el-input
  101. v-model="formData.address"
  102. placeholder="请输入"
  103. size="small"
  104. @change="$forceUpdate()"
  105. ></el-input>
  106. </el-form-item>
  107. <el-form-item label="备注" prop="remarks">
  108. <el-input
  109. type="textarea"
  110. v-model="formData.remarks"
  111. placeholder="请输入"
  112. size="small"
  113. ></el-input>
  114. </el-form-item>
  115. <el-form-item label="锁库状态" prop="lockStatus">
  116. <el-switch
  117. v-model="formData.lockStatus"
  118. active-text="锁库"
  119. inactive-text="开库"
  120. :active-value="1"
  121. :inactive-value="0"
  122. ></el-switch>
  123. </el-form-item>
  124. <el-form-item label="状态" prop="status">
  125. <el-switch
  126. v-model="formData.status"
  127. active-text="开"
  128. inactive-text="关"
  129. :active-value="1"
  130. :inactive-value="0"
  131. ></el-switch>
  132. </el-form-item>
  133. </el-form>
  134. <el-divider></el-divider>
  135. <div slot="footer">
  136. <el-button type="primary" plain @click="cancel">取消</el-button>
  137. <el-button type="primary" @click="handleSave" :loading="loading"
  138. >确定</el-button
  139. >
  140. </div>
  141. </el-dialog>
  142. </template>
  143. <script>
  144. import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
  145. // import selectTree from '@/components/selectTree';
  146. import DeptSelect from '@/components/CommomSelect/new-dept-select.vue';
  147. import city from '@/assets/js/city';
  148. // import user from '@/api/main/user';
  149. export default {
  150. components: { DeptSelect },
  151. data() {
  152. return {
  153. warehouseDefinition_inventoryList: [
  154. { code: 1, label: '物料仓' },
  155. { code: 2, label: '产品仓' },
  156. { code: 3, label: '设备仓' },
  157. { code: 4, label: '模具仓' },
  158. { code: 5, label: '舟皿仓' },
  159. { code: 6, label: '备品备件仓' }
  160. ],
  161. visible: false,
  162. loading: false,
  163. formData: {
  164. code: '',
  165. name: '',
  166. inventoryType: '',
  167. remarks: '',
  168. factoryId: '',
  169. status: 1,
  170. lockStatus: 0
  171. },
  172. rules: {
  173. code: [
  174. { required: true, message: '请输入仓库编码', trigger: 'blur' }
  175. ],
  176. name: [{ required: true, message: '请输入仓库名称', trigger: 'blur' }]
  177. // inventoryType: [
  178. // { required: true, message: '请选择仓库类型', trigger: 'blur' }
  179. // ],
  180. // factoryId: [
  181. // { required: true, message: '请选择工厂名称', trigger: 'blur' }
  182. // ],
  183. // status: [
  184. // { required: true, message: '请选择仓库状态', trigger: 'blur' }
  185. // ]
  186. },
  187. type: '新建',
  188. userList: [],
  189. deptList: [], //部门集合
  190. factoryList: [], //工厂集合
  191. locationOptions: city,
  192. loadingVis: false
  193. };
  194. },
  195. watch: {
  196. visible: {
  197. handler(val) {
  198. if (val) {
  199. // this.init();
  200. }
  201. }
  202. }
  203. },
  204. created() {},
  205. methods: {
  206. open(type, row) {
  207. this.type = type;
  208. this.visible = true;
  209. this.init();
  210. if (type === '修改') {
  211. this.loadingVis = true;
  212. this.$nextTick(async () => {
  213. const { warehouseVO } = await warehouseDefinition.warehouseDetail(
  214. row.id
  215. );
  216. if (warehouseVO.departmentId) {
  217. let userData = await warehouseDefinition.getUserPage({
  218. groupId: warehouseVO.departmentId,
  219. size: 9999,
  220. pageNum: 1
  221. });
  222. this.userList = userData.list;
  223. }
  224. this.formData = {
  225. ...warehouseVO,
  226. location: [
  227. warehouseVO.province,
  228. warehouseVO.city,
  229. warehouseVO.area
  230. ]
  231. };
  232. this.loadingVis = false;
  233. });
  234. }
  235. // if (type === '新建') {
  236. // let num = 1
  237. // const res = await warehouseList()
  238. // if (res?.success && res.data?.length) {
  239. // num = +res.data[0].code.substr(1) + 1
  240. // }
  241. // this.formData.code = 'A' + pushZero(num)
  242. // }
  243. },
  244. async init() {
  245. // org.tree().then((tree) => {
  246. // if (tree?.success) {
  247. // this.deptList = tree.data;
  248. // }
  249. // });
  250. // const tree = await warehouseDefinition.tree();
  251. // this.deptList = this.$util.toTreeData({
  252. // data: tree,
  253. // idField: 'id',
  254. // parentIdField: 'parentId'
  255. // });
  256. //获取工厂车间列表
  257. const res = await warehouseDefinition.getFactoryarea({
  258. pageNum: 1,
  259. size: 9999,
  260. type: 1
  261. });
  262. // let data = org.factorys({ status: true });
  263. this.factoryList = res.list;
  264. },
  265. handleSave() {
  266. this.$refs.formRef.validate(async (value) => {
  267. if (value) {
  268. const params = Object.assign(this.formData);
  269. // if (params.location?.length) {
  270. // const [province, city, area] = params.location;
  271. // Object.assign(params, {
  272. // province,
  273. // city,
  274. // area
  275. // });
  276. // }
  277. // delete params.location;
  278. // console.log(params);
  279. this.loading = true;
  280. const res = await warehouseDefinition
  281. .saveOrUpdateWarehouse(params)
  282. .finally(() => (this.loading = false));
  283. if (res.data?.code == '0') {
  284. this.$message.success('保存成功!');
  285. this.$emit('success');
  286. this.cancel();
  287. }
  288. }
  289. });
  290. },
  291. cancel() {
  292. this.$refs.formRef.resetFields();
  293. // this.$refs.tree.clearHandle();
  294. this.visible = false;
  295. },
  296. async nodeClick(id, data) {
  297. // this.formData.departmentCode = data?.code;
  298. this.formData.departmentId = id;
  299. if (data) {
  300. this.formData.departmentName = data.name;
  301. }
  302. this.formData.ownerName = '';
  303. this.formData.ownerId = '';
  304. if (id) {
  305. let userData = await warehouseDefinition.getUserPage({
  306. groupId: id,
  307. size: 9999,
  308. pageNum: 1
  309. });
  310. this.userList = userData.list;
  311. }
  312. },
  313. changeOwner(val) {
  314. this.$forceUpdate();
  315. this.$set(this.formData, 'ownerId', val);
  316. this.$set(
  317. this.formData,
  318. 'ownerName',
  319. this.userList.find((item) => {
  320. return item.id == val;
  321. }).name
  322. );
  323. },
  324. changeLocation(val) {
  325. this.$set(this.formData, 'province', val[0]); //省
  326. this.$set(this.formData, 'city', val[1]); //市
  327. this.$set(this.formData, 'area', val[2]); //区
  328. delete this.formData.location;
  329. }
  330. }
  331. };
  332. </script>
  333. <style lang="scss" scoped>
  334. ::v-deep .el-form {
  335. .el-form-item {
  336. margin-bottom: 20px;
  337. }
  338. }
  339. .el-divider--horizontal {
  340. margin: 0 !important;
  341. }
  342. </style>