want-deliver.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <template>
  2. <el-form
  3. v-loading="loading"
  4. :model="ruleForm"
  5. :rules="rules"
  6. :size="'mini'"
  7. status-icon
  8. ref="ruleForm"
  9. label-width="90px"
  10. class="demo-ruleForm"
  11. >
  12. <el-row>
  13. <el-col :span="8">
  14. <el-form-item label="发货总数" prop="send_num" required>
  15. <el-input
  16. disabled
  17. placeholder="发货总数"
  18. v-model="ruleForm.send_num"
  19. maxlength="100"
  20. />
  21. </el-form-item>
  22. <el-form-item label="物流公司" prop="post_name">
  23. <search-express
  24. :value="ruleForm.post_name"
  25. :placeholder="'物流公司'"
  26. :names="''"
  27. :size="'mini'"
  28. :is-detail="false"
  29. @searchChange="handleCompany"
  30. />
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="8">
  34. <el-form-item label="物流费用" prop="post_fee">
  35. <digital-input
  36. :values="ruleForm.post_fee"
  37. :placeholder="'物流费用'"
  38. :min="0"
  39. :disabled="type === 'view' || type === 'post_fee'"
  40. :max="100000000000"
  41. :position="'right'"
  42. :precision="2"
  43. :size="'mini'"
  44. :controls="false"
  45. :append="'元'"
  46. @reschange="number_change($event, 'post_fee')"
  47. />
  48. </el-form-item>
  49. <el-form-item label="物流单号" prop="post_code">
  50. <el-input
  51. placeholder="物流单号"
  52. v-model="ruleForm.post_code"
  53. maxlength="100"
  54. />
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="16">
  58. <el-form-item label="备注" prop="remark">
  59. <el-input
  60. type="textarea"
  61. placeholder="备注"
  62. v-model="ruleForm.remark"
  63. maxlength="100"
  64. />
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="8" style="text-align: right">
  68. <el-button type="primary" :size="'mini'" @click="submitForm"
  69. >保 存
  70. </el-button>
  71. </el-col>
  72. </el-row>
  73. </el-form>
  74. </template>
  75. <script>
  76. import asyncRequest from "@/apis/service/sellOut/sellOutOrder";
  77. import resToken from "@/mixins/resToken";
  78. import { isnumber, isnumber2, isAlphanumeric } from "@/utils/validate";
  79. export default {
  80. name: "wsmInOrderAdd",
  81. props: ["id", "sitem", "newTime"],
  82. mixins: [resToken],
  83. data() {
  84. const validate_num = (rule, value, callback) => {
  85. const { required } = rule;
  86. if (required && value === "") {
  87. callback(new Error("不能为空!"));
  88. } else {
  89. callback();
  90. }
  91. };
  92. const validateCode = (rule, value, callback) => {
  93. if (value === "") {
  94. callback(new Error("不能为空!"));
  95. } else {
  96. if (!isAlphanumeric(value)) {
  97. callback(new Error("仅支持字母和数字!"));
  98. } else {
  99. callback();
  100. }
  101. }
  102. };
  103. return {
  104. loading: true,
  105. ruleForm: {
  106. outCode: "",
  107. send_num: "",
  108. post_name: [],
  109. post_code: "",
  110. post_fee: "",
  111. remark:"",
  112. // sendtime: "",
  113. },
  114. rules: {
  115. post_name: {
  116. type: "array",
  117. required: true,
  118. trigger: "change",
  119. message: "请输入物流公司",
  120. },
  121. post_code: {
  122. required: true,
  123. validator: validateCode,
  124. trigger: "blur",
  125. },
  126. post_fee: {
  127. required: true,
  128. validator: validate_num,
  129. trigger: "blur",
  130. },
  131. remark:{
  132. required: true,
  133. validator: validate_num,
  134. trigger: "blur",
  135. }
  136. },
  137. };
  138. },
  139. watch: {
  140. newTime: function (val) {
  141. if (val) {
  142. this.initForm();
  143. }
  144. },
  145. },
  146. mounted() {
  147. this.initForm();
  148. },
  149. methods: {
  150. async initForm() {
  151. this.loading = true;
  152. await this.resetForm();
  153. this.loading = false;
  154. },
  155. //初始化表单
  156. async resetForm() {
  157. await this.$nextTick(() => {
  158. if (this.$refs.ruleForm) {
  159. this.$refs.ruleForm.resetFields();
  160. this.$refs.ruleForm.clearValidate();
  161. const { outCode, send_num, post_code, post_name, post_fee ,remark} =
  162. this.sitem;
  163. this.ruleForm = {
  164. outCode: outCode || "",
  165. send_num: send_num || "",
  166. post_name: post_name ? [post_name] : [],
  167. post_code: post_code || "",
  168. post_fee: post_fee || "",
  169. remark:remark || "",
  170. // sendtime: "",
  171. };
  172. }
  173. });
  174. },
  175. // 保存更改
  176. async submitForm() {
  177. await this.$refs.ruleForm.validate(async (valid) => {
  178. if (valid) {
  179. this.loading = true;
  180. let model = JSON.parse(JSON.stringify(this.ruleForm));
  181. model.post_name = model.post_name.toString();
  182. delete model["send_num"];
  183. delete model["page"];
  184. const res = await asyncRequest.saleoutsend(model);
  185. this.loading = false;
  186. if (res && res.code === 0) {
  187. this.$notify.success({
  188. title: "添加成功",
  189. message: "",
  190. });
  191. this.$emit("refresh"); //抛出事件给详情页。
  192. } else if (res && res.code >= 100 && res.code <= 104) {
  193. await this.logout();
  194. } else {
  195. this.$message.warning(res.message);
  196. }
  197. } else {
  198. console.log("error submit!!");
  199. return false;
  200. }
  201. });
  202. },
  203. handleCompany(e) {
  204. const { code, id, label } = e;
  205. this.ruleForm.post_name = label ? [label] : [];
  206. this.$refs.ruleForm.validateField("post_name");
  207. },
  208. number_change(e, key) {
  209. this.ruleForm[key] = e + "" || "0";
  210. this.$refs.ruleForm.validateField(key);
  211. },
  212. },
  213. };
  214. </script>
  215. <style lang="scss" scoped>
  216. .account {
  217. }
  218. </style>