MaterialModal.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <a-modal
  3. :title="title"
  4. :width="width"
  5. :visible="visible"
  6. :confirmLoading="confirmLoading"
  7. @ok="handleOk"
  8. @cancel="handleCancel"
  9. cancelText="关闭">
  10. <a-spin :spinning="confirmLoading">
  11. <a-form :form="form">
  12. <a-form-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
  13. <a-input v-decorator="[ 'materialName', validatorRules.materialName]" placeholder="请输入物料名称"></a-input>
  14. </a-form-item>
  15. <a-form-item label="品牌" :labelCol="labelCol" :wrapperCol="wrapperCol">
  16. <a-input v-decorator="[ 'brand', validatorRules.brand]" placeholder="请输入品牌"></a-input>
  17. </a-form-item>
  18. <a-form-item label="类别" :labelCol="labelCol" :wrapperCol="wrapperCol">
  19. <j-dict-select-tag
  20. v-decorator="['category',validatorRules.category]"
  21. placeholder="请选择类别"
  22. :triggerChange="true"
  23. dictCode="material_category"
  24. :getPopupContainer="trigger => trigger.parentNode || document.body"
  25. />
  26. </a-form-item>
  27. <a-form-item label="规格型号" :labelCol="labelCol" :wrapperCol="wrapperCol">
  28. <a-input v-decorator="[ 'model', validatorRules.model]" placeholder="请输入规格型号"></a-input>
  29. </a-form-item>
  30. <a-form-item label="计量单位" :labelCol="labelCol" :wrapperCol="wrapperCol">
  31. <a-input v-decorator="[ 'unit', validatorRules.unit]" placeholder="请输入计量单位"></a-input>
  32. </a-form-item>
  33. <a-form-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol">
  34. <a-textarea v-decorator="['remark', validatorRules.remark]" rows="4" placeholder="请输入备注"/>
  35. </a-form-item>
  36. </a-form>
  37. </a-spin>
  38. </a-modal>
  39. </template>
  40. <script>
  41. import { httpAction } from '@/api/manage'
  42. import pick from 'lodash.pick'
  43. import { validateDuplicateValue } from '@/utils/util'
  44. import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
  45. export default {
  46. name: "MaterialModal",
  47. components: {
  48. JDictSelectTag
  49. },
  50. data () {
  51. return {
  52. form: this.$form.createForm(this),
  53. title:"操作",
  54. width:800,
  55. visible: false,
  56. model: {},
  57. labelCol: {
  58. xs: { span: 24 },
  59. sm: { span: 5 },
  60. },
  61. wrapperCol: {
  62. xs: { span: 24 },
  63. sm: { span: 16 },
  64. },
  65. confirmLoading: false,
  66. validatorRules: {
  67. materialName: {rules: [
  68. {required: true, message: '请输入物料名称!'},
  69. ]},
  70. brand: {rules: [
  71. ]},
  72. category: {rules: [
  73. ]},
  74. model: {rules: [
  75. ]},
  76. unit: {rules: [
  77. ]},
  78. quantity: {rules: [
  79. ]},
  80. remark: {rules: [
  81. ]},
  82. },
  83. url: {
  84. add: "/oa/material/add",
  85. edit: "/oa/material/edit",
  86. }
  87. }
  88. },
  89. created () {
  90. },
  91. methods: {
  92. add () {
  93. this.edit({});
  94. },
  95. edit (record) {
  96. this.form.resetFields();
  97. this.model = Object.assign({}, record);
  98. this.visible = true;
  99. this.$nextTick(() => {
  100. this.form.setFieldsValue(pick(this.model,'materialName','brand','category','model','unit','quantity','remark'))
  101. })
  102. },
  103. close () {
  104. this.$emit('close');
  105. this.visible = false;
  106. },
  107. handleOk () {
  108. const that = this;
  109. // 触发表单验证
  110. this.form.validateFields((err, values) => {
  111. if (!err) {
  112. that.confirmLoading = true;
  113. let httpurl = '';
  114. let method = '';
  115. if(!this.model.id){
  116. httpurl+=this.url.add;
  117. method = 'post';
  118. }else{
  119. httpurl+=this.url.edit;
  120. method = 'put';
  121. }
  122. let formData = Object.assign(this.model, values);
  123. console.log("表单提交数据",formData)
  124. httpAction(httpurl,formData,method).then((res)=>{
  125. if(res.success){
  126. that.$message.success(res.message);
  127. that.$emit('ok');
  128. }else{
  129. that.$message.warning(res.message);
  130. }
  131. }).finally(() => {
  132. that.confirmLoading = false;
  133. that.close();
  134. })
  135. }
  136. })
  137. },
  138. handleCancel () {
  139. this.close()
  140. },
  141. popupCallback(row){
  142. this.form.setFieldsValue(pick(row,'materialName','brand','category','model','unit','quantity','remark'))
  143. },
  144. }
  145. }
  146. </script>