StockOutPrepareLineProjectShippingAddress.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. <template>
  2. <a-layout>
  3. <a-layout-header class="header">
  4. <Navbar title="项目事件发货地址维护" :is-go-back="true" />
  5. </a-layout-header>
  6. <a-layout-content class="content">
  7. <!-- 表单区域 -->
  8. <a-form :model="form" layout="vertical" class="form-container">
  9. <a-form-item label="项目事件">
  10. <a-select
  11. v-model:value="selectedProjectItemId"
  12. :options="projectItemList"
  13. show-search
  14. allow-clear
  15. field-names="{ label: 'name', value: 'id' }"
  16. @change="handleProjectChange"
  17. />
  18. </a-form-item>
  19. <!-- 发货信息表单 -->
  20. <a-form-item label="发货单位">
  21. <a-input v-model:value="fromClient" placeholder="请输入发货单位" />
  22. </a-form-item>
  23. <a-form-item label="发货地址">
  24. <a-input v-model:value="fromAddress" placeholder="请输入发货地址" />
  25. </a-form-item>
  26. <a-form-item label="发货联系人">
  27. <a-input v-model:value="fromContractUser" placeholder="请输入联系人" />
  28. </a-form-item>
  29. <a-form-item label="联系电话">
  30. <a-input v-model:value="fromContractPhone" placeholder="请输入联系电话" />
  31. </a-form-item>
  32. <a-form-item>
  33. <a-checkbox v-model:checked="defaultAddress" @change="isDefaultAddress">
  34. 设为默认地址
  35. </a-checkbox>
  36. </a-form-item>
  37. <a-form-item>
  38. <a-button type="primary" @click="addBtn">保存</a-button>
  39. </a-form-item>
  40. </a-form>
  41. <!-- 表格区域 -->
  42. <a-table
  43. :columns="columns"
  44. :data-source="projectItemAddressDtos"
  45. :scroll="{ x: 1200 }"
  46. :pagination="false"
  47. row-key="id"
  48. bordered
  49. >
  50. <template #bodyCell="{ column, record }">
  51. <template v-if="column.dataIndex === 'operation'">
  52. <a-space>
  53. <a-button type="link" @click="findAddress(record)">编辑</a-button>
  54. <a-popconfirm
  55. title="确认删除该地址?"
  56. @confirm="deleteAddress(record.id)"
  57. >
  58. <a-button type="link" danger>删除</a-button>
  59. </a-popconfirm>
  60. </a-space>
  61. </template>
  62. <template v-if="column.dataIndex === 'defaultAddress'">
  63. <a-tag v-if="record.defaultAddress" color="green">默认地址</a-tag>
  64. <a-button v-else type="link" @click="updateDefaultAddress(record.id)">
  65. 设为默认
  66. </a-button>
  67. </template>
  68. </template>
  69. </a-table>
  70. <!-- 分页 -->
  71. <div class="pagination-wrapper">
  72. <a-pagination
  73. v-model:current="pagination.current_page"
  74. :total="pagination.total"
  75. :page-size="pagination.per_page"
  76. show-less-items
  77. @change="queryFRAddress"
  78. />
  79. </div>
  80. <!-- 编辑模态框 -->
  81. <a-modal
  82. v-model:visible="modalVisible"
  83. title="修改发货地址"
  84. width="600px"
  85. :destroy-on-close="true"
  86. >
  87. <a-form layout="vertical">
  88. <a-form-item label="项目事件">
  89. <a-select
  90. v-model:value="projectItemAddressDto.projectItemId"
  91. :options="projectItemList"
  92. field-names="{ label: 'name', value: 'id' }"
  93. show-search
  94. option-filter-prop="label"
  95. />
  96. </a-form-item>
  97. <a-form-item label="发货单位">
  98. <a-input v-model:value="projectItemAddressDto.fromClient" placeholder="发货单位" />
  99. </a-form-item>
  100. <a-form-item label="发货地址">
  101. <a-input v-model:value="projectItemAddressDto.fromAddress" placeholder="发货地址" />
  102. </a-form-item>
  103. <a-form-item label="发货联系人">
  104. <a-input v-model:value="projectItemAddressDto.fromContractUser" placeholder="发货联系人" />
  105. </a-form-item>
  106. <a-form-item label="联系电话">
  107. <a-input v-model:value="projectItemAddressDto.fromContractPhone" placeholder="联系电话" />
  108. </a-form-item>
  109. <a-form-item>
  110. <a-checkbox
  111. v-model:checked="projectItemAddressDto.defaultAddress"
  112. @change="isDefault"
  113. >
  114. 默认地址
  115. </a-checkbox>
  116. </a-form-item>
  117. </a-form>
  118. <template #footer>
  119. <a-space>
  120. <a-button @click="modalVisible = false">取消</a-button>
  121. <a-button type="primary" @click="updataByIdAndFRAddress">保存</a-button>
  122. </a-space>
  123. </template>
  124. </a-modal>
  125. </a-layout-content>
  126. </a-layout>
  127. </template>
  128. <script>
  129. import ProjectItemResource from '../api/common/ProjectItemResource.js';
  130. import Common from '../common/Common.js';
  131. import ProjectItemAddressResource from '../api/wms/ProjectItemAddressResource.js';
  132. export default {
  133. components: {
  134. },
  135. data: function() {
  136. this.Common = Common;
  137. return {
  138. columns: [
  139. { title: '项目事件', dataIndex: 'projectItemName', width: 200 },
  140. { title: '发货单位', dataIndex: 'fromClient', width: 200 },
  141. { title: '发货地址', dataIndex: 'fromAddress', width: 200 },
  142. { title: '发货联系人', dataIndex: 'fromContractUser', width: 200 },
  143. { title: '联系电话', dataIndex: 'fromContractPhone', width: 200 },
  144. { title: '操作', dataIndex: 'operation', fixed: 'right', width: 150 },
  145. { title: '默认地址', dataIndex: 'defaultAddress', width: 200 },
  146. ],
  147. modalVisible: false,
  148. projectItemId: undefined,
  149. fromClient: undefined,
  150. fromAddress: undefined,
  151. fromContractUser: undefined,
  152. fromContractPhone: undefined,
  153. defaultAddress: false,
  154. projectItemAddressDtos: [],
  155. name: '',
  156. projectItemList: [],
  157. projectItemAddressDto: {},
  158. projectItemDtoId: null,
  159. selectedProjectItemId: null,
  160. pagination: {
  161. total: 0, //总页数
  162. per_page: 20, // 每页大小
  163. current_page: 1, // 当前页数
  164. last_page: 10, // 最后一页编号
  165. },
  166. };
  167. },
  168. created: function() {},
  169. mounted: function() {
  170. var _self = this;
  171. var projectItemId = _self.$route.query.projectItemId;
  172. _self.projectItemId = projectItemId;
  173. _self.queryByCondition(projectItemId);
  174. _self.queryFRAddress(projectItemId);
  175. },
  176. methods: {
  177. handleProjectChange(value) {
  178. this.selectedProjectItemId = value;
  179. this.queryFRAddress(value);
  180. },
  181. /**
  182. * 保存地址
  183. */
  184. addBtn: function() {
  185. var _self = this;
  186. if (_self.fromClient == undefined || _self.fromClient.length == 0) {
  187. Notify.error('提示', '发货单位不能为空');
  188. return;
  189. } else if (
  190. _self.fromAddress == undefined ||
  191. _self.fromAddress.length == 0
  192. ) {
  193. Notify.error('提示', '发货地址不能为空');
  194. return;
  195. } else if (
  196. _self.fromContractUser == undefined ||
  197. _self.fromContractUser.length == 0
  198. ) {
  199. Notify.error('提示', '发货联系人不能为空');
  200. return;
  201. } else if (
  202. _self.fromContractPhone == undefined ||
  203. _self.fromContractPhone.length == 0
  204. ) {
  205. Notify.error('提示', '发货联系电话不能为空');
  206. return;
  207. }
  208. ProjectItemAddressResource.addShipingAddress(
  209. _self.projectItemId,
  210. _self.fromClient,
  211. _self.fromAddress,
  212. _self.fromContractUser,
  213. _self.fromContractPhone,
  214. _self.defaultAddress,
  215. ).then(
  216. successData => {
  217. if(successData.errorCode == 0) {
  218. _self.queryFRAddress(_self.projectItemId);
  219. _self.wipeData();
  220. Notify.success('提示', '地址保存成功');
  221. } else {
  222. Notify.error('提示', successData.errorMessage, false);
  223. return;
  224. }
  225. },
  226. errorData => {},
  227. );
  228. },
  229. /**
  230. * 默认地址状态
  231. */
  232. isDefaultAddress: function() {
  233. var _self = this;
  234. _self.defaultAddress = !_self.defaultAddress;
  235. //console.log(_self.defaultAddress);
  236. },
  237. /**
  238. * 查询收货信息
  239. */
  240. queryFRAddress: function(id) {
  241. var _self = this;
  242. if (id == null) {
  243. id = _self.projectItemId;
  244. }
  245. var projectItemAddressDto1 = {
  246. start: (_self.pagination.current_page - 1) * _self.pagination.per_page,
  247. length: _self.pagination.per_page,
  248. projectItemId: id,
  249. };
  250. ProjectItemAddressResource.listByClientIdAndFR(
  251. projectItemAddressDto1,
  252. ).then(
  253. successData => {
  254. if(successData.errorCode == 0) {
  255. _self.projectItemAddressDtos = successData.datas;
  256. _self.pagination.total = successData.total;
  257. _self.pagination.last_page = Math.ceil(
  258. successData.total / successData.length,
  259. );
  260. } else {
  261. Notify.error('提示', successData.errorMessage, false);
  262. return;
  263. }
  264. },
  265. errorData => {},
  266. );
  267. },
  268. /**
  269. * 修改默认地址
  270. */
  271. updateDefaultAddress: function(id) {
  272. var _self = this;
  273. ProjectItemAddressResource.updateByFRAddress(_self.projectItemId,id).then(
  274. successData => {
  275. if(successData.errorCode == 0) {
  276. _self.queryFRAddress(_self.projectItemId);
  277. Notify.success('提示', '默认地址保存成功');
  278. } else {
  279. Notify.error('提示', successData.errorMessage, false);
  280. return;
  281. }
  282. },
  283. errorData => {},
  284. );
  285. },
  286. wipeData: function() {
  287. var _self = this;
  288. _self.fromClient = undefined;
  289. _self.fromAddress = undefined;
  290. _self.fromContractUser = undefined;
  291. _self.fromContractPhone = undefined;
  292. _self.defaultAddress = false;
  293. },
  294. /**
  295. * 将需要修改的数据加入模态框数据对象
  296. */
  297. findAddress: function(item) {
  298. var _self = this;
  299. _self.projectItemAddressDto = item;
  300. _self.projectItemDtoId = _self.projectItemAddressDto.projectItemId;
  301. _self.modalVisible = true;
  302. },
  303. /**
  304. * 修改项目事件发货信息
  305. */
  306. updataByIdAndFRAddress: function() {
  307. var _self = this;
  308. ProjectItemAddressResource.updataByIdAndFRAddress(
  309. _self.projectItemAddressDto,
  310. ).then(
  311. successData => {
  312. if(successData.errorCode == 0) {
  313. Notify.success('提示', '项目事件收货地址修改成功');
  314. _self.queryFRAddress(_self.projectItemId);
  315. } else {
  316. Notify.error('提示', successData.errorMessage, false);
  317. return;
  318. }
  319. },
  320. errorData => {},
  321. );
  322. },
  323. /**
  324. * 删除项目事件发货地址
  325. */
  326. deleteAddress: function(id) {
  327. var _self = this;
  328. ProjectItemAddressResource.deleteByIdAndFRAddress(id).then(
  329. successData => {
  330. if(successData.errorCode == 0) {
  331. Notify.success('提示', '项目事件收货地址删除成功');
  332. _self.queryFRAddress(_self.projectItemId);
  333. } else {
  334. Notify.error('提示', successData.errorMessage, false);
  335. return;
  336. }
  337. },
  338. errorData => {},
  339. );
  340. },
  341. /**
  342. * 模态框中默认地址状态
  343. */
  344. isDefault: function() {
  345. var _self = this;
  346. _self.projectItemAddressDto.defaultAddress = !_self.projectItemAddressDto
  347. .defaultAddress;
  348. },
  349. /**
  350. * 模态框中查询项目事件
  351. */
  352. queryByCondition: function(projectItemId) {
  353. var _self = this;
  354. ProjectItemResource.queryByCondition(_self.name).then(
  355. successData => {
  356. if(successData.errorCode == 0) {
  357. _self.projectItemList = successData.datas;
  358. for (var i = 0; i < _self.projectItemList.length; i++) {
  359. _self.projectItemList[i].label = _self.projectItemList[i].name;
  360. _self.projectItemList[i].value = _self.projectItemList[i].id;
  361. if (projectItemId == _self.projectItemList[i].id) {
  362. _self.selectedProjectItemId = _self.projectItemList[i].id;
  363. }
  364. }
  365. } else {
  366. Notify.error('提示', successData.errorMessage, false);
  367. }
  368. },
  369. errorData => {},
  370. );
  371. },
  372. /**
  373. * 修改页Size
  374. */
  375. gridSizeSelect: function(newPageSize) {
  376. this.pagination.per_page = newPageSize;
  377. this.pagination.current_page = 1;
  378. this.queryToAddress(this.projectItemId);
  379. },
  380. },
  381. };
  382. </script>
  383. <style scoped>
  384. .header {
  385. background: #fff;
  386. padding: 0;
  387. height: 64px;
  388. }
  389. .content {
  390. padding: 24px;
  391. background: #fff;
  392. }
  393. .form-container {
  394. margin-bottom: 24px;
  395. padding: 24px;
  396. background: #fafafa;
  397. border-radius: 4px;
  398. }
  399. .pagination-wrapper {
  400. margin-top: 24px;
  401. text-align: right;
  402. }
  403. /* 表格样式优化 */
  404. :deep(.ant-table-thead > tr > th) {
  405. background: #fafafa;
  406. text-align: center;
  407. }
  408. :deep(.ant-table-tbody > tr > td) {
  409. text-align: center;
  410. }
  411. </style>