BaseForm.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <template>
  2. <a-modal
  3. :title="modalTitle"
  4. :width="800"
  5. :visible="visible"
  6. :confirmLoading="confirmLoading"
  7. @cancel="handleCancel"
  8. >
  9. <a-form :form="form">
  10. <a-form-item v-show="false" >
  11. <a-input v-decorator="['id']" type="hidden"/>
  12. </a-form-item>
  13. <a-form-item
  14. label="位号"
  15. :labelCol="BaseTool.Constant.labelCol"
  16. :wrapperCol="BaseTool.Constant.wrapperCol"
  17. >
  18. <a-input
  19. v-decorator="['no', {rules: [{required: true, message: '位号不能为空'}]}]" />
  20. </a-form-item>
  21. <a-form-item
  22. label="名称"
  23. :labelCol="BaseTool.Constant.labelCol"
  24. :wrapperCol="BaseTool.Constant.wrapperCol"
  25. >
  26. <a-input
  27. v-decorator="['name', {rules: [{required: true, message: '名称不能为空'}]}]" />
  28. </a-form-item>
  29. <a-form-item
  30. label="类型"
  31. :labelCol="BaseTool.Constant.labelCol"
  32. :wrapperCol="BaseTool.Constant.wrapperCol"
  33. >
  34. <a-select v-decorator="['type', {rules: [{required: true, message: '类型不能为空'}]}]" placeholder="请选择">
  35. <a-select-option
  36. v-for="(label,value) in positionTypeMap"
  37. :key="value"
  38. :label="label"
  39. :value="parseInt(value)">{{ label }}
  40. </a-select-option>
  41. </a-select>
  42. </a-form-item>
  43. <a-form-item
  44. label="上层位置"
  45. :labelCol="BaseTool.Constant.labelCol"
  46. :wrapperCol="BaseTool.Constant.wrapperCol"
  47. >
  48. <a-tree-select
  49. style="width: 100%"
  50. :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
  51. :treeData="treeData"
  52. :treeNodeFilterProp="'title'"
  53. :showSearch="true"
  54. v-decorator="['parentId', {rules: [{required: false, message: '上层位置不能为空'}]}]"
  55. placeholder="请选择"
  56. >
  57. </a-tree-select>
  58. </a-form-item>
  59. <!-- <a-form-item
  60. label="父子关联编码"
  61. :labelCol="BaseTool.Constant.labelCol"
  62. :wrapperCol="BaseTool.Constant.wrapperCol"
  63. >
  64. <a-input
  65. v-decorator="['code', {rules: [{required: true, message: '父子关联编码不能为空'}]}]" />
  66. </a-form-item>-->
  67. <a-form-item
  68. label="区域维修负责人"
  69. :labelCol="BaseTool.Constant.labelCol"
  70. :wrapperCol="BaseTool.Constant.wrapperCol"
  71. >
  72. <a-select v-decorator="['userId', {rules: [{required: true, message: '仓库负责人不能为空'}]}]" placeholder="请选择">
  73. <a-select-option
  74. v-for="({userId, realName}) in userList"
  75. :key="userId"
  76. :label="realName"
  77. :value="userId">{{ realName }}
  78. </a-select-option>
  79. </a-select>
  80. </a-form-item>
  81. <a-form-item
  82. label="排序"
  83. :labelCol="BaseTool.Constant.labelCol"
  84. :wrapperCol="BaseTool.Constant.wrapperCol"
  85. >
  86. <a-input-number
  87. style="width: 100%"
  88. :min="1"
  89. v-decorator="['sort', {initialValue:1,rules: [{required: true, message: '排序不能为空'}]}]" />
  90. </a-form-item>
  91. <row-item>
  92. <a-form-item
  93. label="图片"
  94. :labelCol="BaseTool.Constant.labelCol"
  95. :wrapperCol="BaseTool.Constant.wrapperCol"
  96. >
  97. <upload-spare-file
  98. ref="imageUpload"
  99. @catchImage="catchImage"
  100. ></upload-spare-file>
  101. </a-form-item>
  102. </row-item>
  103. <a-form-item
  104. label="是否删除"
  105. :labelCol="BaseTool.Constant.labelCol"
  106. :wrapperCol="BaseTool.Constant.wrapperCol"
  107. >
  108. <a-select v-decorator="['delFlag', {initialValue:DictCache.VALUE.DELFLAG.NORMAL, rules: [{required: true, message: '是否删除不能为空'}]}]" placeholder="请选择">
  109. <a-select-option
  110. v-for="(label,value) in delFlagMap"
  111. :key="value"
  112. :label="label"
  113. :value="parseInt(value)">{{ label }}
  114. </a-select-option>
  115. </a-select>
  116. </a-form-item>
  117. <a-form-item
  118. label="备注"
  119. :labelCol="BaseTool.Constant.labelCol"
  120. :wrapperCol="BaseTool.Constant.wrapperCol"
  121. >
  122. <a-input
  123. v-decorator="['remark', {rules: [{required: false, message: '备注不能为空'}]}]" />
  124. </a-form-item>
  125. </a-form>
  126. <template slot="footer">
  127. <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
  128. </template>
  129. </a-modal>
  130. </template>
  131. <script>
  132. import pick from 'lodash.pick'
  133. import { addSbPosition, updateSbPosition, getSbPositionTree } from '@/api/sb/position'
  134. import { queryRepairUser } from '@/api/upms/user-dept'
  135. export default {
  136. name: 'BaseSbPosition',
  137. data () {
  138. return {
  139. confirmLoading: false,
  140. modalTitle: null,
  141. form: this.$form.createForm(this),
  142. visible: false,
  143. img: '',
  144. positionTypeMap: {},
  145. delFlagMap: {},
  146. userList: {},
  147. treeData: []
  148. }
  149. },
  150. props: {
  151. },
  152. created () {
  153. this.delFlagMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.DELFLAG)
  154. this.positionTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SBPOSITION_TYPE)
  155. const params = { roleType: 3, deptId: null, queryType: 1 }
  156. queryRepairUser(params).then(res => {
  157. this.userList = res.data
  158. })
  159. },
  160. methods: {
  161. base (record) {
  162. this.setTree(record)
  163. this.visible = true
  164. // 如果是空标识添加
  165. if (this.BaseTool.Object.isBlank(record)) {
  166. this.modalTitle = '添加'
  167. return
  168. }
  169. this.modalTitle = '编辑'
  170. if (this.BaseTool.Object.isBlank(record.id)) {
  171. this.modalTitle = '复制'
  172. }
  173. const { form: { setFieldsValue } } = this
  174. this.$nextTick(() => {
  175. setFieldsValue(Object.assign(pick(record, [
  176. 'id',
  177. 'no',
  178. 'name',
  179. 'type',
  180. 'code',
  181. 'sort',
  182. 'delFlag',
  183. 'parentId',
  184. 'userId',
  185. 'remark'
  186. ])))
  187. })
  188. this.img = record.img
  189. const fileList = []
  190. if (record.img) {
  191. fileList.push({
  192. uid: '-1',
  193. name: record.name,
  194. status: 'done',
  195. url: this.BaseTool.Constant.FILE_URL + record.img,
  196. originUrl: record.img
  197. })
  198. }
  199. this.$refs.imageUpload.base(1, fileList)
  200. },
  201. catchImage (fileList) {
  202. if (fileList.length !== 0) {
  203. this.img = fileList[0].url
  204. }
  205. },
  206. save () {
  207. const { form: { validateFieldsAndScroll } } = this
  208. this.confirmLoading = true
  209. validateFieldsAndScroll((errors, values) => {
  210. if (errors) {
  211. this.confirmLoading = false
  212. return
  213. }
  214. values.img = this.img
  215. if (this.BaseTool.String.isBlank(values.id)) {
  216. addSbPosition(values)
  217. .then(() => {
  218. this.handleCancel(values)
  219. }).catch(() => {
  220. this.confirmLoading = false
  221. })
  222. } else {
  223. updateSbPosition(values)
  224. .then(() => {
  225. this.handleCancel(values)
  226. }).catch(() => {
  227. this.confirmLoading = false
  228. })
  229. }
  230. })
  231. },
  232. handleCancel (values) {
  233. this.visible = false
  234. this.confirmLoading = false
  235. this.form.resetFields()
  236. if (this.BaseTool.Object.isNotBlank(values)) {
  237. this.$emit('ok', values)
  238. }
  239. },
  240. /**
  241. * 设置位置树
  242. */
  243. setTree (record = {}) {
  244. getSbPositionTree({ id: record.id }).then(res => {
  245. console.log(res.data)
  246. this.treeData = res.data
  247. })
  248. }
  249. }
  250. }
  251. </script>