addEdit.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. <template>
  2. <el-dialog
  3. :title="title"
  4. :center="true"
  5. align="left"
  6. top="5vh"
  7. width="1040px"
  8. @close="closeModel"
  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>
  17. <el-row :gutter="10">
  18. <el-col :span="24">
  19. <el-form
  20. ref="ruleForm"
  21. :model="ruleForm"
  22. status-icon
  23. :rules="rulesThis"
  24. label-width="100px"
  25. class="demo-ruleForm"
  26. v-if="addId === 'add'"
  27. >
  28. <div style="padding: 12px 0">
  29. <el-divider content-position="center">仓库信息</el-divider>
  30. </div>
  31. <el-row>
  32. <el-col :span="12"
  33. ><el-form-item
  34. label="所属公司"
  35. prop="supplierNo"
  36. style="width: 100%"
  37. >
  38. <search-supplier
  39. :value="supplierNo"
  40. :placeholder="'请输入公司名称'"
  41. @searchChange="getCompanyName"
  42. />
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="12">
  46. <el-form-item label="仓库名称" prop="name">
  47. <el-input
  48. placeholder="请输入仓库名称"
  49. filterable
  50. clearable
  51. v-model="ruleForm.name"
  52. >
  53. </el-input>
  54. </el-form-item>
  55. </el-col>
  56. </el-row>
  57. <el-row>
  58. <el-col :span="12">
  59. <el-form-item label="省/市/区" prop="addr_code">
  60. <select-area
  61. :value="ruleForm.addr_code"
  62. @selectChange="areaSelect"
  63. />
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="12">
  67. <el-form-item label="详细地址" prop="addr">
  68. <el-input
  69. placeholder="请输入内容"
  70. v-model="ruleForm.addr"
  71. clearable
  72. >
  73. </el-input>
  74. </el-form-item>
  75. </el-col>
  76. </el-row>
  77. <el-row>
  78. <el-col :span="12">
  79. <el-form-item
  80. label="负责人"
  81. prop="accountDutyer"
  82. style="width: 100%"
  83. >
  84. <search-account
  85. :size="searchSize"
  86. :code="accountNo"
  87. :placeholder="'请输入负责人'"
  88. :is-detail="true"
  89. :disabled="false"
  90. :names="accountNames"
  91. @change="accountChange"
  92. /> </el-form-item
  93. ></el-col>
  94. <el-col :span="12">
  95. <el-form-item label="负责人电话" prop="dutyer_mobile">
  96. <el-input
  97. type="number"
  98. placeholder="请输入联系人电话"
  99. v-model="ruleForm.dutyer_mobile"
  100. clearable
  101. >
  102. </el-input> </el-form-item
  103. ></el-col>
  104. </el-row>
  105. <div style="padding: 0 0 12px 0">
  106. <el-divider content-position="center">收发货信息</el-divider>
  107. </div>
  108. <el-row>
  109. <el-col :span="12">
  110. <el-form-item label="联系人" prop="linker">
  111. <el-input
  112. placeholder="请填写联系人"
  113. v-model="ruleForm.linker"
  114. clearable
  115. @change="linker"
  116. >
  117. </el-input> </el-form-item
  118. ></el-col>
  119. <el-col :span="12">
  120. <el-form-item label="电话" prop="linker_mobile">
  121. <el-input
  122. type="number"
  123. placeholder="请输入联系人电话"
  124. v-model="ruleForm.linker_mobile"
  125. clearable
  126. @change="linkerMobile"
  127. >
  128. </el-input> </el-form-item
  129. ></el-col>
  130. </el-row>
  131. <el-row>
  132. <el-col :span="12">
  133. <el-form-item label="省/市/区" prop="addrs_code">
  134. <select-area
  135. :value="ruleForm.addrs_code"
  136. @selectChange="selectArea"
  137. /> </el-form-item
  138. ></el-col>
  139. <el-col :span="12">
  140. <el-form-item label="详细地址" prop="linker_detail">
  141. <el-input
  142. placeholder="请输入详细地址"
  143. v-model="ruleForm.linker_detail"
  144. clearable
  145. @change="linkerDetail"
  146. >
  147. </el-input> </el-form-item
  148. ></el-col>
  149. </el-row>
  150. </el-form>
  151. </el-col>
  152. <el-col :span="24" style="text-align: right">
  153. <el-button type="primary" @click="submitForm" v-if="!isDetail"
  154. >保 存
  155. </el-button>
  156. <el-button @click="showModelThis = false">{{
  157. isDetail ? "关 闭" : "取 消"
  158. }}</el-button>
  159. </el-col>
  160. </el-row>
  161. </el-card>
  162. </el-dialog>
  163. </template>
  164. <script>
  165. import asyncRequest from "@/apis/service/purchaseIn/storeSet";
  166. import resToken from "@/mixins/resToken";
  167. import {
  168. isnumber,
  169. isMobile,
  170. validEmail,
  171. isAlphanumeric,
  172. isChinese,
  173. isEmoticon,
  174. validAlphabets,
  175. } from "@/utils/validate";
  176. export default {
  177. name: "storeSet",
  178. props: ["showModel", "id", "isDetail", "sitem"],
  179. mixins: [resToken],
  180. data() {
  181. const validatemobile = (rule, value, callback) => {
  182. if (value === "") {
  183. callback(new Error("负责人联系方式不能为空!"));
  184. } else {
  185. if (!isMobile(value)) {
  186. callback(new Error("负责人联系方式格式不正确!"));
  187. } else {
  188. callback();
  189. }
  190. }
  191. };
  192. const validatewsmmobile = (rule, value, callback) => {
  193. if (value === "") {
  194. callback(new Error("收发货联系方式不能为空!"));
  195. } else {
  196. if (!isMobile(value)) {
  197. callback(new Error("收发货联系方式格式不正确!"));
  198. } else {
  199. callback();
  200. }
  201. }
  202. };
  203. return {
  204. loading: false,
  205. title: "添加账号",
  206. showModelThis: this.showModel,
  207. ruleForm: {
  208. name: "", // 仓库名称
  209. supplierNo: [], //供应商编码
  210. wsmtype: "", //仓库类型 目前随便填
  211. addr_code: [], //仓库省市区
  212. addr: "", //仓库详细地址
  213. contactor: [], //仓库联系人
  214. mobile: "", //仓库联系方式
  215. position: "", //联系人职位 目前随便填
  216. wsm_type: "", //目前随便填
  217. wsm_name: "", //收发货联系人
  218. wsm_mobile: "", //收发货联系方式
  219. wsm_addr: "", //收发货地址详细
  220. addrs_code: [], //收发货省市区
  221. },
  222. rulesThis: this.rules,
  223. rules: {
  224. name: [
  225. { required: true, message: "请输入仓库名称", trigger: "blur" },
  226. {
  227. min: 1,
  228. max: 20,
  229. message: "长度在 1 到 20 个字符",
  230. trigger: "blur",
  231. },
  232. ],
  233. supplierNo: [
  234. {
  235. type: "array",
  236. required: true,
  237. message: "请选择供应商公司",
  238. trigger: "change",
  239. },
  240. ],
  241. addr_code: [
  242. {
  243. type: "array",
  244. required: true,
  245. message: "请选择仓库所在省/市/区",
  246. trigger: "change",
  247. },
  248. ],
  249. addr: [
  250. { required: true, message: "请输入仓库详细地址", trigger: "blur" },
  251. {
  252. min: 1,
  253. max: 100,
  254. message: "长度在 1 到 100 个字符",
  255. trigger: "blur",
  256. },
  257. ],
  258. contactor: [
  259. {
  260. required: true,
  261. type: "array",
  262. message: "请选择仓库负责人",
  263. trigger: "change",
  264. },
  265. ],
  266. mobile: [
  267. {
  268. required: true,
  269. validator: validatemobile,
  270. trigger: "blur",
  271. },
  272. ],
  273. wsm_name: [
  274. { required: true, message: "请输入收发货联系人", trigger: "blur" },
  275. {
  276. min: 1,
  277. max: 20,
  278. message: "长度在 1 到 20 个字符",
  279. trigger: "blur",
  280. },
  281. ],
  282. wsm_mobile: [
  283. {
  284. required: true,
  285. validator: validatewsmmobile,
  286. trigger: "blur",
  287. },
  288. ],
  289. addrs_code: [
  290. {
  291. type: "array",
  292. required: true,
  293. message: "请选择收发货所在省/市/区",
  294. trigger: "change",
  295. },
  296. ],
  297. wsm_addr: [
  298. { required: true, message: "请输入收发货详细地址", trigger: "blur" },
  299. {
  300. min: 1,
  301. max: 100,
  302. message: "长度在 1 到 100 个字符",
  303. trigger: "blur",
  304. },
  305. ],
  306. },
  307. };
  308. },
  309. watch: {
  310. showModel: function (val) {
  311. this.showModelThis = val;
  312. if (val) {
  313. this.initForm();
  314. }
  315. },
  316. showModelThis(val) {
  317. if (!val) {
  318. this.$emit("cancel");
  319. }
  320. },
  321. },
  322. methods: {
  323. closeModel() {
  324. console.log("closeModel!!");
  325. },
  326. //供应商公司选择
  327. searchChange(e) {
  328. if (e && e.id) {
  329. this.ruleForm.supplierNo = [e.code]; //供应商编码
  330. } else {
  331. this.ruleForm.supplierNo = [];
  332. }
  333. this.$refs.ruleForm.validateField("supplierNo");
  334. },
  335. async initForm() {
  336. this.loading = true;
  337. if (this.id === "add") {
  338. this.title = "新建仓库";
  339. this.rulesThis = this.rules;
  340. await this.resetForm();
  341. } else {
  342. if (this.isDetail) {
  343. this.title = "账号详情";
  344. this.rulesThis = {};
  345. } else {
  346. this.title = "修改账号";
  347. this.rulesThis = this.rules;
  348. }
  349. await this.resetForm(this.sitem);
  350. await this.initData();
  351. }
  352. this.loading = false;
  353. },
  354. async initData() {
  355. const res = await asyncRequest.detail({ id: this.id });
  356. if (res && res.code === 0 && res.data) {
  357. this.ruleForm = res.data;
  358. this.ruleForm.role_id = this.ruleForm.role;
  359. } else if (res && res.code >= 100 && res.code <= 104) {
  360. await this.logout();
  361. } else {
  362. this.$message.warning(res.message);
  363. }
  364. },
  365. async resetForm() {
  366. // 重置
  367. await this.$nextTick(() => {
  368. if (this.$refs.ruleForm) {
  369. this.$refs.ruleForm.resetFields();
  370. this.$refs.ruleForm.clearValidate();
  371. this.ruleForm = {
  372. name: "", // 仓库名称
  373. supplierNo: [], //供应商编码
  374. wsmtype: "", //仓库类型 目前随便填
  375. addr_code: [], //仓库省市区
  376. addr: "", //仓库详细地址
  377. contactor: [], //仓库联系人
  378. mobile: "", //仓库联系方式
  379. position: "", //联系人职位 目前随便填
  380. wsm_type: "", //目前随便填
  381. wsm_name: "", //收发货联系人
  382. wsm_mobile: "", //收发货联系方式
  383. wsm_addr: "", //收发货地址详细
  384. addrs_code: [], //收发货省市区
  385. };
  386. }
  387. });
  388. },
  389. async submitForm() {
  390. await this.$refs.ruleForm.validate(async (valid) => {
  391. if (valid) {
  392. this.loading = true;
  393. const { username, name, mobile, email, role_id, status } = JSON.parse(
  394. JSON.stringify(this.ruleForm)
  395. );
  396. const model = {
  397. id: this.id,
  398. username: username || "", // 账号
  399. nickname: name || "", // 真实姓名
  400. mobile: mobile || "",
  401. email: email || "",
  402. role: role_id || "",
  403. status: status || "",
  404. };
  405. let res = {};
  406. if (this.id === "add") {
  407. delete model["id"];
  408. res = await asyncRequest.add(model);
  409. } else {
  410. res = await asyncRequest.update(model);
  411. }
  412. this.loading = false;
  413. if (res && res.code === 0) {
  414. const title = this.id === "add" ? "添加成功" : "修改成功";
  415. this.$notify.success({
  416. title,
  417. message: "",
  418. });
  419. this.showModelThis = false;
  420. // 刷新
  421. this.$emit("refresh");
  422. } else if (res && res.code >= 100 && res.code <= 104) {
  423. await this.logout();
  424. } else {
  425. this.$message.warning(res.message);
  426. }
  427. } else {
  428. console.log("error submit!!");
  429. return false;
  430. }
  431. });
  432. },
  433. },
  434. };
  435. </script>
  436. <style lang="scss" scoped>
  437. .storeSet {
  438. }
  439. </style>