MaterialModal.vue 4.5 KB

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