wsm-in-order-model.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <template>
  2. <el-dialog
  3. :title="'新建入库单'"
  4. :center="true"
  5. align="left"
  6. top="15vh"
  7. width="700px"
  8. @close="showModelThis = false"
  9. :close-on-click-modal="false"
  10. :visible.sync="showModelThis"
  11. v-loading="loading"
  12. element-loading-text="拼命加载中"
  13. element-loading-spinner="el-icon-loading"
  14. element-loading-background="rgba(0, 0, 0, 0.8)"
  15. >
  16. <el-card style="margin-top: -20px">
  17. <el-row :gutter="10">
  18. <el-col :span="24">
  19. <el-form
  20. v-loading="loading"
  21. :model="ruleForm"
  22. :rules="rulesThis"
  23. status-icon
  24. :size="'mini'"
  25. ref="ruleForm"
  26. label-width="85px"
  27. class="demo-ruleForm"
  28. >
  29. <el-row>
  30. <el-col :span="12">
  31. <el-form-item
  32. label="可入库总数"
  33. prop="wsend_num"
  34. required
  35. label-width="95px"
  36. >
  37. <el-input
  38. disabled
  39. :size="'mini'"
  40. placeholder="可入库总数"
  41. v-model="ruleForm.wsend_num"
  42. maxlength="100"
  43. />
  44. </el-form-item>
  45. </el-col>
  46. <el-col :span="12">
  47. <el-form-item label="入库数量" prop="send_num">
  48. <digital-input
  49. :values="ruleForm.send_num"
  50. :placeholder="'入库数量'"
  51. :min="0"
  52. :name="'ruleForm.send_num'"
  53. :disabled="false"
  54. :max="ruleForm.wsend_num"
  55. :position="'right'"
  56. :precision="0"
  57. :size="'mini'"
  58. :controls="false"
  59. :append="''"
  60. @reschange="number_change($event, 'send_num')"
  61. />
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="12">
  65. <el-form-item label="发货方式" prop="sendtype">
  66. <el-select
  67. v-model="ruleForm.sendtype"
  68. style="width: 100%"
  69. :size="'mini'"
  70. :disabled="
  71. (sitem && sitem.order_type === '3')
  72. "
  73. placeholder="发货方式"
  74. @change="sendtypeChange"
  75. >
  76. <el-option
  77. v-for="item in options"
  78. :key="item.value"
  79. :label="item.label"
  80. :value="item.value"
  81. >
  82. </el-option>
  83. </el-select>
  84. </el-form-item>
  85. </el-col>
  86. <el-col :span="12">
  87. <el-form-item label="物流费用" prop="post_fee">
  88. <digital-input
  89. :values="ruleForm.post_fee"
  90. :placeholder="'物流费用'"
  91. :min="0"
  92. :disabled="false"
  93. :max="100000000000"
  94. :position="'right'"
  95. :precision="2"
  96. :size="'mini'"
  97. :controls="false"
  98. :append="'元'"
  99. @reschange="number_change($event, 'post_fee')"
  100. />
  101. </el-form-item>
  102. </el-col>
  103. <el-col :span="24" v-if="ruleForm.sendtype === '1'">
  104. <el-form-item label="物流公司" prop="post_company">
  105. <search-express
  106. :value="ruleForm.post_company"
  107. :placeholder="'物流公司'"
  108. :names="''"
  109. :size="'mini'"
  110. :is-detail="false"
  111. @searchChange="handleCompany"
  112. />
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="24" v-if="ruleForm.sendtype === '1'">
  116. <el-form-item label="物流单号" prop="post_code">
  117. <el-input
  118. placeholder="物流单号"
  119. :size="'mini'"
  120. v-model="ruleForm.post_code"
  121. maxlength="100"
  122. />
  123. </el-form-item>
  124. </el-col>
  125. <el-col :span="12">
  126. <el-form-item label="发货时间" prop="post_time">
  127. <el-date-picker
  128. v-model="ruleForm.post_time"
  129. type="datetime"
  130. style="width: 100%"
  131. :size="'mini'"
  132. value-format="yyyy-MM-dd HH:mm:ss"
  133. placeholder="发货时间"
  134. :picker-options="pickerOptions"
  135. @change="selectTime"
  136. >
  137. </el-date-picker>
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="12" style="text-align: right">
  141. <el-button type="primary" :size="'mini'" @click="submitForm"
  142. >保 存
  143. </el-button>
  144. </el-col>
  145. </el-row>
  146. </el-form>
  147. </el-col>
  148. </el-row>
  149. </el-card>
  150. </el-dialog>
  151. </template>
  152. <script>
  153. import resToken from "@/mixins/resToken";
  154. import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder";
  155. import { isAlphanumeric } from "@/utils/validate";
  156. export default {
  157. name: "wsmInOrderAdd",
  158. props: ["showModel", "id", "sitem"],
  159. mixins: [resToken],
  160. data() {
  161. const validate_num = (rule, value, callback) => {
  162. const { required } = rule;
  163. if (required && value === "") {
  164. callback(new Error("不能为空!"));
  165. } else {
  166. callback();
  167. }
  168. };
  169. const validate_num_0 = (rule, value, callback) => {
  170. const { required } = rule;
  171. if (required && value === "") {
  172. callback(new Error("不能为空!"));
  173. } else if (
  174. required &&
  175. (value === "0" ||
  176. value === "0." ||
  177. value === "0.0" ||
  178. value === "0.00" ||
  179. value === "0.000")
  180. ) {
  181. callback(new Error("不能为零!"));
  182. } else {
  183. callback();
  184. }
  185. };
  186. const validateCode = (rule, value, callback) => {
  187. if (value === "") {
  188. callback(new Error("不能为空!"));
  189. } else {
  190. if (!isAlphanumeric(value)) {
  191. callback(new Error("仅支持字母和数字!"));
  192. } else {
  193. callback();
  194. }
  195. }
  196. };
  197. return {
  198. showModelThis: this.showModel,
  199. loading: true,
  200. ruleForm: {
  201. wsm_mobile: "",
  202. wsm_contactor: "",
  203. wsm_addr: "",
  204. cgdNo: "",
  205. wsm_code: "",
  206. post_company: [],
  207. post_code: "",
  208. post_fee: "",
  209. post_time: "",
  210. send_num: "",
  211. sendtype: "1",
  212. status: "1",
  213. },
  214. rulesThis: this.rules,
  215. options: [
  216. {
  217. value: "1",
  218. label: "公司自提",
  219. },
  220. {
  221. value: "2",
  222. label: "供应商包邮",
  223. },
  224. ],
  225. pickerOptions: {
  226. disabledDate: (time) => {
  227. return time.getTime() > new Date().valueOf();
  228. },
  229. },
  230. rules: {
  231. send_num: [
  232. {
  233. required: true,
  234. validator: validate_num_0,
  235. trigger: "blur",
  236. },
  237. ],
  238. post_company: [
  239. {
  240. type: "array",
  241. required: true,
  242. trigger: "change",
  243. message: "请输入物流公司",
  244. },
  245. ],
  246. sendtype: [
  247. {
  248. required: true,
  249. trigger: "change",
  250. message: "选择发货方式",
  251. },
  252. ],
  253. post_code: [
  254. {
  255. required: true,
  256. validator: validateCode,
  257. trigger: "blur",
  258. },
  259. ],
  260. post_fee: [
  261. {
  262. required: true,
  263. validator: validate_num,
  264. trigger: "blur",
  265. },
  266. ],
  267. post_time: [
  268. {
  269. required: true,
  270. message: "请选择发货时间",
  271. trigger: "change",
  272. },
  273. ],
  274. },
  275. };
  276. },
  277. watch: {
  278. showModel: function (val) {
  279. this.showModelThis = val;
  280. if (val) {
  281. this.initForm();
  282. }
  283. },
  284. showModelThis(val) {
  285. if (!val) {
  286. this.$emit("cancel");
  287. }
  288. },
  289. },
  290. methods: {
  291. async initForm() {
  292. this.loading = true;
  293. console.log(this.sitem);
  294. this.rulesThis = this.rules;
  295. await this.resetForm();
  296. this.loading = false;
  297. },
  298. //初始化表单
  299. async resetForm() {
  300. await this.$nextTick(() => {
  301. if (this.$refs.ruleForm) {
  302. this.$refs.ruleForm.resetFields();
  303. this.$refs.ruleForm.clearValidate();
  304. const { cgdNo, wsend_num, goodinfo } = this.sitem;
  305. const { send_way } = goodinfo;
  306. this.ruleForm = {
  307. wsm_mobile: "",
  308. wsm_contactor: "",
  309. wsm_addr: "",
  310. cgdNo: cgdNo || "",
  311. wsm_code: "",
  312. post_company: [],
  313. post_code: "",
  314. post_fee: "",
  315. post_time: "",
  316. wsend_num: wsend_num || "0",
  317. sendtype: send_way === "0" ? "1" : "2" || "1",
  318. send_num: wsend_num || "0",
  319. status: "1",
  320. };
  321. }
  322. });
  323. },
  324. number_change(e, key) {
  325. this.ruleForm[key] = e + "" || "0";
  326. this.$refs.ruleForm.validateField(key);
  327. },
  328. sendtypeChange() {
  329. const { sendtype } = this.ruleForm;
  330. this.rulesThis.post_code[0].required = sendtype === "1";
  331. this.rulesThis.post_company[0].required = sendtype === "1";
  332. },
  333. // 保存更改
  334. async submitForm() {
  335. console.log(this.rules);
  336. await this.$refs.ruleForm.validate(async (valid) => {
  337. if (valid) {
  338. this.loading = true;
  339. let model = JSON.parse(JSON.stringify(this.ruleForm));
  340. model.post_company = model.post_company.toString();
  341. let time1 = new Date(model.post_time).valueOf();
  342. let time2 = new Date().valueOf();
  343. if (time1 >= time2) {
  344. this.$message.warning(`发货时间不能选择未来时间!`);
  345. this.loading = false;
  346. return;
  347. }
  348. const { code, message } = await asyncRequest.orderinadd(model);
  349. this.loading = false;
  350. if (code === 0) {
  351. this.$notify.success({
  352. title: "添加成功",
  353. message: "",
  354. });
  355. this.$emit("refresh"); //抛出事件给详情页。
  356. } else if (code >= 100 && code <= 104) {
  357. await this.logout();
  358. } else if (code === "1009") {
  359. this.$message.warning(`${message},请刷新采购单详情重试!`);
  360. } else {
  361. this.$message.warning(message);
  362. }
  363. } else {
  364. console.log("error submit!!");
  365. return false;
  366. }
  367. });
  368. },
  369. handleCompany(e) {
  370. console.log(e);
  371. this.ruleForm.post_company = e && e.code ? [e.label] : [];
  372. this.$refs.ruleForm.validateField("post_company");
  373. },
  374. },
  375. };
  376. </script>
  377. <style lang="scss" scoped>
  378. .purchaseOrder {
  379. }
  380. </style>