StockOutPrepareLineProjectShippingAddress.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. <template>
  2. <div>
  3. <Navbar
  4. title="项目事件发货地址维护"
  5. is-go-back="true"
  6. />
  7. <div class="flex-container">
  8. <!-- 保存发货地址 -->
  9. <div class="flex-header">
  10. <form class="form-horizontal">
  11. <div class="form-group">
  12. <label for="projectItems" class="col-sm-2 control-label">项目事件</label>
  13. <div class="col-sm-10">
  14. <v-select
  15. id="projectItems"
  16. v-model="projectItems"
  17. :options="projectItemList"
  18. :label="'name'"
  19. @input="projectItemIdAssignment(projectItems.id)"
  20. />
  21. </div>
  22. </div>
  23. <div class="form-group">
  24. <label for="toClient" class="col-sm-2 control-label">发货单位</label>
  25. <div class="col-sm-10">
  26. <input
  27. id="fromClient"
  28. v-model="fromClient"
  29. autocomplete="off"
  30. type="text"
  31. class="form-control"
  32. placeholder="发货单位"
  33. />
  34. </div>
  35. </div>
  36. <div class="form-group">
  37. <label for="toAddress" class="col-sm-2 control-label">发货地址</label>
  38. <div class="col-sm-10">
  39. <input
  40. id="fromAddress"
  41. v-model="fromAddress"
  42. autocomplete="off"
  43. type="text"
  44. class="form-control"
  45. placeholder="发货地址"
  46. />
  47. </div>
  48. </div>
  49. <div class="form-group">
  50. <label for="toContractUser" class="col-sm-2 control-label">发货联系人</label>
  51. <div class="col-sm-10">
  52. <input
  53. id="fromContractUser"
  54. v-model="fromContractUser"
  55. autocomplete="off"
  56. type="text"
  57. class="form-control"
  58. placeholder="发货联系人"
  59. />
  60. </div>
  61. </div>
  62. <div class="form-group">
  63. <label for="toContractPhone" class="col-sm-2 control-label">发货联系电话</label>
  64. <div class="col-sm-10">
  65. <input
  66. id="fromContractPhone"
  67. v-model="fromContractPhone"
  68. autocomplete="off"
  69. type="text"
  70. class="form-control"
  71. placeholder="发货联系电话"
  72. />
  73. </div>
  74. </div>
  75. <div class="form-group">
  76. <div class="col-sm-offset-2 col-sm-10">
  77. <div class="checkbox">
  78. <label>
  79. <input v-model="defaultAddress" autocomplete="off" type="checkbox" @click="isDefaultAddress()" /> 默认地址
  80. </label>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="form-group">
  85. <div class="col-sm-offset-2 col-sm-10">
  86. <button type="button" class="btn btn-default" @click="addBtn()">保存</button>
  87. </div>
  88. </div>
  89. </form>
  90. </div>
  91. <!-- 查询收货地址 -->
  92. <div class="flex-content table-responsive" style="margin-top: 130px;">
  93. <table class="text-nowrap table-bordered table-striped table">
  94. <thead>
  95. <tr>
  96. <th style="width:200px;">项目事件</th>
  97. <th style="width:200px;">发货单位</th>
  98. <th style="width:200px;">发货地址</th>
  99. <th style="width:200px;">发货联系人</th>
  100. <th style="width:200px;">发货联系电话</th>
  101. <th style="width:200px;">操作</th>
  102. <th style="width:200px;">&nbsp;</th>
  103. </tr>
  104. </thead>
  105. <tbody>
  106. <tr v-for="item in ProjectItemAddressDtos" :key="item.id">
  107. <td>{{ item.projectItemName }}</td>
  108. <td>{{ item.fromClient }}</td>
  109. <td>{{ item.fromAddress }}</td>
  110. <td>{{ item.fromContractUser }}</td>
  111. <td>{{ item.fromContractPhone }}</td>
  112. <td>
  113. <button
  114. type="button"
  115. data-toggle="modal"
  116. data-target="#myModal"
  117. class="btn-link"
  118. @click="findAddress(item)"
  119. >
  120. 修改
  121. </button>
  122. <button type="button" class="btn-link" @click="deleteAddress(item.id)">删除</button>
  123. </td>
  124. <td>
  125. <a v-if="item.defaultAddress">默认地址</a>
  126. <a v-else style="cursor:pointer;" @click="updateDefaultAddress(item.id)">设为默认地址</a>
  127. </td>
  128. </tr>
  129. </tbody>
  130. </table>
  131. <!-- 模态框(Modal) -->
  132. <div
  133. id="myModal"
  134. class="modal fade"
  135. tabindex="-1"
  136. role="dialog"
  137. aria-labelledby="myModalLabel"
  138. aria-hidden="true"
  139. >
  140. <div class="modal-dialog">
  141. <div class="modal-content">
  142. <div class="modal-header">
  143. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  144. <h4 id="myModalLabel" class="modal-title">修改项目事件发货地址</h4>
  145. </div>
  146. <div class="modal-body">
  147. <form class="form-horizontal">
  148. <div class="form-group">
  149. <label for="projectItemList" class="col-sm-2 control-label">项目事件</label>
  150. <div class="col-sm-10">
  151. <v-select
  152. id="projectItemList"
  153. v-model="projectItemDto"
  154. :options="projectItemList"
  155. :label="'name'"
  156. />
  157. </div>
  158. </div>
  159. <div class="form-group">
  160. <label for="toClient" class="col-sm-2 control-label">发货单位</label>
  161. <div class="col-sm-10">
  162. <input
  163. id="fromClient"
  164. v-model="ProjectItemAddressDto.fromClient"
  165. autocomplete="off"
  166. type="text"
  167. class="form-control"
  168. placeholder="发货单位"
  169. />
  170. </div>
  171. </div>
  172. <div class="form-group">
  173. <label for="toAddress" class="col-sm-2 control-label">发货地址</label>
  174. <div class="col-sm-10">
  175. <input
  176. id="fromAddress"
  177. v-model="ProjectItemAddressDto.fromAddress"
  178. autocomplete="off"
  179. type="text"
  180. class="form-control"
  181. placeholder="发货地址"
  182. />
  183. </div>
  184. </div>
  185. <div class="form-group">
  186. <label for="toContractUser" class="col-sm-2 control-label">发货联系人</label>
  187. <div class="col-sm-10">
  188. <input
  189. id="fromContractUser"
  190. v-model="ProjectItemAddressDto.fromContractPhone"
  191. autocomplete="off"
  192. type="text"
  193. class="form-control"
  194. placeholder="发货联系人"
  195. />
  196. </div>
  197. </div>
  198. <div class="form-group">
  199. <label for="toContractPhone" class="col-sm-2 control-label">发货联系电话</label>
  200. <div class="col-sm-10">
  201. <input
  202. id="fromContractPhone"
  203. v-model="ProjectItemAddressDto.fromContractUser"
  204. autocomplete="off"
  205. type="text"
  206. class="form-control"
  207. placeholder="发货联系电话"
  208. />
  209. </div>
  210. </div>
  211. <div class="form-group">
  212. <div class="col-sm-offset-2 col-sm-10">
  213. <div class="checkbox">
  214. <label>
  215. <input
  216. v-model="ProjectItemAddressDto.defaultAddress"
  217. autocomplete="off"
  218. type="checkbox"
  219. @click="isDefault()"
  220. /> 默认地址
  221. </label>
  222. </div>
  223. </div>
  224. </div>
  225. </form>
  226. </div>
  227. <div class="modal-footer">
  228. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
  229. <button type="button" class="btn btn-primary" data-dismiss="modal" @click="updataByIdAndFRAddress()">保存</button>
  230. </div>
  231. </div>
  232. <!-- /.modal-content -->
  233. </div>
  234. <!-- /.modal -->
  235. </div>
  236. <!-- 模态框 -->
  237. </div>
  238. <div class="flex-footer">
  239. <div class="pull-left">
  240. <span>第{{ (pagination.current_page-1)*pagination.per_page+1 }}-{{ pagination.current_page*pagination.per_page }}条,共计{{ pagination.total }}条,每页显示</span>
  241. </div>
  242. <div class="pull-right">
  243. <VueBootstrapPagination
  244. :pagination="pagination"
  245. :callback="queryToAddress"
  246. />
  247. </div>
  248. </div>
  249. </div>
  250. </div>
  251. </template>
  252. <script>
  253. import ProjectItemResource from '../api/common/ProjectItemResource.js';
  254. import Common from '../common/Common.js';
  255. import ProjectItemAddressResource from '../api/wms/ProjectItemAddressResource.js';
  256. import vSelect from 'vue-select';
  257. import 'vue-select/dist/vue-select.css';
  258. export default {
  259. components: {
  260. 'v-select': vSelect,
  261. },
  262. data: function() {
  263. this.Common = Common;
  264. return {
  265. projectItemId: undefined,
  266. fromClient: undefined,
  267. fromAddress: undefined,
  268. fromContractUser: undefined,
  269. fromContractPhone: undefined,
  270. defaultAddress: false,
  271. ProjectItemAddressDtos: [],
  272. name: '',
  273. projectItemList: [],
  274. ProjectItemAddressDto: {},
  275. projectItemDto: [],
  276. projectItems: {},
  277. pagination: {
  278. total: 0, //总页数
  279. per_page: 20, // 每页大小
  280. current_page: 1, // 当前页数
  281. last_page: 10, // 最后一页编号
  282. },
  283. };
  284. },
  285. created: function() {},
  286. mounted: function() {
  287. var _self = this;
  288. var projectItemId = _self.$route.query.projectItemId;
  289. _self.projectItemId = projectItemId;
  290. _self.queryByCondition(projectItemId);
  291. _self.queryFRAddress(projectItemId);
  292. },
  293. methods: {
  294. /**
  295. * 下拉框给projectItemId赋值
  296. */
  297. projectItemIdAssignment: function(id) {
  298. var _self = this;
  299. _self.projectItemId = id;
  300. _self.queryFRAddress(id);
  301. },
  302. /**
  303. * 保存地址
  304. */
  305. addBtn: function() {
  306. var _self = this;
  307. if (_self.fromClient == undefined || _self.fromClient.length == 0) {
  308. Notify.error('提示', '发货单位不能为空');
  309. return;
  310. } else if (
  311. _self.fromAddress == undefined ||
  312. _self.fromAddress.length == 0
  313. ) {
  314. Notify.error('提示', '发货地址不能为空');
  315. return;
  316. } else if (
  317. _self.fromContractUser == undefined ||
  318. _self.fromContractUser.length == 0
  319. ) {
  320. Notify.error('提示', '发货联系人不能为空');
  321. return;
  322. } else if (
  323. _self.fromContractPhone == undefined ||
  324. _self.fromContractPhone.length == 0
  325. ) {
  326. Notify.error('提示', '发货联系电话不能为空');
  327. return;
  328. }
  329. ProjectItemAddressResource.addShipingAddress(
  330. _self.projectItemId,
  331. _self.fromClient,
  332. _self.fromAddress,
  333. _self.fromContractUser,
  334. _self.fromContractPhone,
  335. _self.defaultAddress,
  336. ).then(
  337. successData => {
  338. if(successData.errorCode == 0) {
  339. _self.queryFRAddress(_self.projectItemId);
  340. _self.wipeData();
  341. Notify.success('提示', '地址保存成功');
  342. } else {
  343. Notify.error('提示', successData.errorMessage, false);
  344. return;
  345. }
  346. },
  347. errorData => {},
  348. );
  349. },
  350. /**
  351. * 默认地址状态
  352. */
  353. isDefaultAddress: function() {
  354. var _self = this;
  355. _self.defaultAddress = !_self.defaultAddress;
  356. //console.log(_self.defaultAddress);
  357. },
  358. /**
  359. * 查询收货信息
  360. */
  361. queryFRAddress: function(id) {
  362. var _self = this;
  363. if (id == null) {
  364. id = _self.projectItemId;
  365. }
  366. var projectItemAddressDto1 = {
  367. start: (_self.pagination.current_page - 1) * _self.pagination.per_page,
  368. length: _self.pagination.per_page,
  369. projectItemId: id,
  370. };
  371. ProjectItemAddressResource.listByClientIdAndFR(
  372. projectItemAddressDto1,
  373. ).then(
  374. successData => {
  375. if(successData.errorCode == 0) {
  376. _self.ProjectItemAddressDtos = successData.datas;
  377. _self.pagination.total = successData.total;
  378. _self.pagination.last_page = Math.ceil(
  379. successData.total / successData.length,
  380. );
  381. } else {
  382. Notify.error('提示', successData.errorMessage, false);
  383. return;
  384. }
  385. },
  386. errorData => {},
  387. );
  388. },
  389. /**
  390. * 修改默认地址
  391. */
  392. updateDefaultAddress: function(id) {
  393. var _self = this;
  394. ProjectItemAddressResource.updateByFRAddress(_self.projectItemId,id).then(
  395. successData => {
  396. if(successData.errorCode == 0) {
  397. _self.queryFRAddress(_self.projectItemId);
  398. Notify.success('提示', '默认地址保存成功');
  399. } else {
  400. Notify.error('提示', successData.errorMessage, false);
  401. return;
  402. }
  403. },
  404. errorData => {},
  405. );
  406. },
  407. wipeData: function() {
  408. var _self = this;
  409. _self.fromClient = undefined;
  410. _self.fromAddress = undefined;
  411. _self.fromContractUser = undefined;
  412. _self.fromContractPhone = undefined;
  413. _self.defaultAddress = false;
  414. },
  415. /**
  416. * 将需要修改的数据加入模态框数据对象
  417. */
  418. findAddress: function(item) {
  419. var _self = this;
  420. _self.ProjectItemAddressDto = item;
  421. _self.projectItemDto = {
  422. id: _self.ProjectItemAddressDto.projectItemId,
  423. name: _self.ProjectItemAddressDto.projectItemName,
  424. };
  425. },
  426. /**
  427. * 修改项目事件发货信息
  428. */
  429. updataByIdAndFRAddress: function() {
  430. var _self = this;
  431. _self.ProjectItemAddressDto.projectItemId = _self.projectItemDto.id;
  432. _self.ProjectItemAddressDto.projectItemName = _self.projectItemDto.name;
  433. ProjectItemAddressResource.updataByIdAndFRAddress(
  434. _self.ProjectItemAddressDto,
  435. ).then(
  436. successData => {
  437. if(successData.errorCode == 0) {
  438. Notify.success('提示', '项目事件收货地址修改成功');
  439. _self.queryFRAddress(_self.projectItemId);
  440. } else {
  441. Notify.error('提示', successData.errorMessage, false);
  442. return;
  443. }
  444. },
  445. errorData => {},
  446. );
  447. },
  448. /**
  449. * 删除项目事件发货地址
  450. */
  451. deleteAddress: function(id) {
  452. var _self = this;
  453. ProjectItemAddressResource.deleteByIdAndFRAddress(id).then(
  454. successData => {
  455. if(successData.errorCode == 0) {
  456. Notify.success('提示', '项目事件收货地址删除成功');
  457. _self.queryFRAddress(_self.projectItemId);
  458. } else {
  459. Notify.error('提示', successData.errorMessage, false);
  460. return;
  461. }
  462. },
  463. errorData => {},
  464. );
  465. },
  466. /**
  467. * 模态框中默认地址状态
  468. */
  469. isDefault: function() {
  470. var _self = this;
  471. _self.ProjectItemAddressDto.defaultAddress = !_self.ProjectItemAddressDto
  472. .defaultAddress;
  473. },
  474. /**
  475. * 模态框中查询项目事件
  476. */
  477. queryByCondition: function(projectItemId) {
  478. var _self = this;
  479. ProjectItemResource.queryByCondition(_self.name).then(
  480. successData => {
  481. if(successData.errorCode == 0) {
  482. _self.projectItemList = successData.datas;
  483. for (var i = 0; i < _self.projectItemList.length; i++) {
  484. if (projectItemId == _self.projectItemList[i].id) {
  485. _self.projectItems = {
  486. id: _self.projectItemList[i].id,
  487. name: _self.projectItemList[i].name,
  488. };
  489. }
  490. }
  491. } else {
  492. Notify.error('提示', successData.errorMessage, false);
  493. }
  494. },
  495. errorData => {},
  496. );
  497. },
  498. /**
  499. * 修改页Size
  500. */
  501. gridSizeSelect: function(newPageSize) {
  502. this.pagination.per_page = newPageSize;
  503. this.pagination.current_page = 1;
  504. this.queryToAddress(this.projectItemId);
  505. },
  506. },
  507. };
  508. </script>
  509. <style scoped>
  510. .form-inline .form-group label {
  511. width: 80px;
  512. text-align: right;
  513. padding-right: 5px;
  514. }
  515. .form-inline .form-group input,
  516. .form-inline .form-group select {
  517. width: 200px;
  518. }
  519. </style>
  520. <style scoped>
  521. .flex-container {
  522. display: flex;
  523. /* 垂直*/
  524. flex-direction: column;
  525. width: 100%;
  526. /*视口被均分为100单位的vh 占据整个窗口,扣掉顶部topNav的距离后,计算得到container的高度*/
  527. height: calc(100vh - 30px);
  528. }
  529. .flex-header {
  530. height: 200px;
  531. /*放大缩小比例为0 */
  532. flex: 0 0 100px;
  533. }
  534. .flex-footer {
  535. margin-top: 0.8em;
  536. height: 35px;
  537. /*放大缩小比例为0 */
  538. flex: 0 0 35px;
  539. }
  540. .flex-content {
  541. flex: 1;
  542. overflow: scroll;
  543. width: 100%;
  544. height: 0;
  545. }
  546. .image {
  547. width: 40px;
  548. height: 40px;
  549. }
  550. .modal-img-box {
  551. width: 100%;
  552. text-align: center;
  553. overflow: auto;
  554. }
  555. .m-img {
  556. width: 100%;
  557. }
  558. .table th,
  559. .table td {
  560. text-align: center;
  561. vertical-align: middle !important;
  562. }
  563. </style>