SaleInterfaceSyncList.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <div>
  3. <!--引用表格-->
  4. <BasicTable @register="registerTable" :rowSelection="rowSelection">
  5. <!--插槽:table标题-->
  6. <template #tableTitle>
  7. <a-button type="primary" v-auth="'saleCode:sale_interface_sync:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
  8. <a-button type="primary" v-auth="'saleCode:sale_interface_sync:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
  9. 导出</a-button
  10. >
  11. <j-upload-button type="primary" v-auth="'saleCode:sale_interface_sync:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls"
  12. >导入</j-upload-button
  13. >
  14. <a-dropdown v-if="selectedRowKeys.length > 0">
  15. <template #overlay>
  16. <a-menu>
  17. <a-menu-item key="1" @click="batchHandleDelete">
  18. <Icon icon="ant-design:delete-outlined" />
  19. 删除
  20. </a-menu-item>
  21. </a-menu>
  22. </template>
  23. <a-button v-auth="'saleCode:sale_interface_sync:deleteBatch'"
  24. >批量操作
  25. <Icon icon="mdi:chevron-down" />
  26. </a-button>
  27. </a-dropdown>
  28. <!-- 高级查询 -->
  29. <super-query :config="superQueryConfig" @search="handleSuperQuery" />
  30. <!-- 获取接口数据 -->
  31. <a-button type="primary" v-auth="'saleCode:sale_interface_sync:deleteBatch'" @click="showSyncModal">获取接口数据</a-button>
  32. <!-- 同步订单 -->
  33. <a-button type="primary" v-auth="'saleCode:sale_interface_sync:deleteBatch'" @click="handleSyncOrder">同步订单</a-button>
  34. </template>
  35. <!--操作栏-->
  36. <template #action="{ record }">
  37. <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
  38. </template>
  39. <!--字段回显插槽-->
  40. <template #bodyCell="{ column, record, index, text }"> </template>
  41. </BasicTable>
  42. <!-- 表单区域 -->
  43. <SaleInterfaceSyncModal @register="registerModal" @success="handleSuccess" />
  44. <!-- 获取接口弹窗 -->
  45. <a-modal v-model:open="syncVisiable" title="获取接口数据" centered @ok="handleSyncOk">
  46. <div style="padding: 20px">
  47. <a-form ref="syncFormRef" :model="syncForm" :rules="syncRules" :label-col="labelCol" :wrapper-col="wrapperCol">
  48. <a-form-item label="开始时间" required name="requestedDeliveryDate">
  49. <a-date-picker
  50. v-model:value="syncForm.requestedDeliveryDate"
  51. type="date"
  52. placeholder=""
  53. style="width: 100%"
  54. valueFormat="YYYY-MM-DD HH:mm:ss"
  55. format="YYYY-MM-DD HH:mm:ss"
  56. show-time
  57. />
  58. </a-form-item>
  59. <a-form-item label="结束时间" required name="adviseBeforeDate">
  60. <a-date-picker
  61. v-model:value="syncForm.adviseBeforeDate"
  62. type="date"
  63. placeholder=""
  64. style="width: 100%"
  65. valueFormat="YYYY-MM-DD HH:mm:ss"
  66. format="YYYY-MM-DD HH:mm:ss"
  67. show-time
  68. />
  69. </a-form-item>
  70. </a-form>
  71. </div>
  72. </a-modal>
  73. </div>
  74. </template>
  75. <script lang="ts" name="saleCode-saleInterfaceSync" setup>
  76. import { ref, reactive, computed, unref } from 'vue';
  77. import { BasicTable, useTable, TableAction } from '/@/components/Table';
  78. import { useListPage } from '/@/hooks/system/useListPage';
  79. import { useModal } from '/@/components/Modal';
  80. import SaleInterfaceSyncModal from './components/SaleInterfaceSyncModal.vue';
  81. import { columns, searchFormSchema, superQuerySchema } from './SaleInterfaceSync.data';
  82. import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, getData, getSyncOrder } from './SaleInterfaceSync.api';
  83. import { downloadFile } from '/@/utils/common/renderUtils';
  84. import { message } from 'ant-design-vue';
  85. import { useUserStore } from '/@/store/modules/user';
  86. import { useMessage } from '/@/hooks/web/useMessage';
  87. const { createConfirm } = useMessage();
  88. const queryParam = reactive<any>({});
  89. const checkedKeys = ref<Array<string | number>>([]);
  90. const userStore = useUserStore();
  91. //注册model
  92. const [registerModal, { openModal }] = useModal();
  93. //注册table数据
  94. const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
  95. tableProps: {
  96. title: '询价单-接口同步表',
  97. api: list,
  98. columns,
  99. canResize: false,
  100. formConfig: {
  101. //labelWidth: 120,
  102. schemas: searchFormSchema,
  103. autoSubmitOnEnter: true,
  104. showAdvancedButton: true,
  105. fieldMapToNumber: [],
  106. fieldMapToTime: [['submittedDate', ['submittedDate_begin', 'submittedDate_end'], 'YYYY-MM-DD HH:mm:ss']],
  107. },
  108. actionColumn: {
  109. width: 120,
  110. fixed: 'right',
  111. },
  112. beforeFetch: (params) => {
  113. return Object.assign(params, queryParam);
  114. },
  115. },
  116. exportConfig: {
  117. name: '询价单-接口同步表',
  118. url: getExportUrl,
  119. params: queryParam,
  120. },
  121. importConfig: {
  122. url: getImportUrl,
  123. success: handleSuccess,
  124. },
  125. });
  126. const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
  127. // 高级查询配置
  128. const superQueryConfig = reactive(superQuerySchema);
  129. /**
  130. * 高级查询事件
  131. */
  132. function handleSuperQuery(params) {
  133. Object.keys(params).map((k) => {
  134. queryParam[k] = params[k];
  135. });
  136. reload();
  137. }
  138. /**
  139. * 新增事件
  140. */
  141. function handleAdd() {
  142. openModal(true, {
  143. isUpdate: false,
  144. showFooter: true,
  145. });
  146. }
  147. /**
  148. * 编辑事件
  149. */
  150. function handleEdit(record: Recordable) {
  151. openModal(true, {
  152. record,
  153. isUpdate: true,
  154. showFooter: true,
  155. });
  156. }
  157. /**
  158. * 详情
  159. */
  160. function handleDetail(record: Recordable) {
  161. openModal(true, {
  162. record,
  163. isUpdate: true,
  164. showFooter: false,
  165. });
  166. }
  167. /**
  168. * 删除事件
  169. */
  170. async function handleDelete(record) {
  171. await deleteOne({ id: record.id }, handleSuccess);
  172. }
  173. /**
  174. * 批量删除事件
  175. */
  176. async function batchHandleDelete() {
  177. await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
  178. }
  179. /**
  180. * 成功回调
  181. */
  182. function handleSuccess() {
  183. (selectedRowKeys.value = []) && reload();
  184. }
  185. /**
  186. * 操作栏
  187. */
  188. function getTableAction(record) {
  189. return [
  190. {
  191. label: '编辑',
  192. onClick: handleEdit.bind(null, record),
  193. auth: 'saleCode:sale_interface_sync:edit',
  194. },
  195. ];
  196. }
  197. /**
  198. * 下拉操作栏
  199. */
  200. function getDropDownAction(record) {
  201. return [
  202. {
  203. label: '详情',
  204. onClick: handleDetail.bind(null, record),
  205. },
  206. {
  207. label: '删除',
  208. popConfirm: {
  209. title: '是否确认删除',
  210. confirm: handleDelete.bind(null, record),
  211. placement: 'topLeft',
  212. },
  213. auth: 'saleCode:sale_interface_sync:delete',
  214. },
  215. ];
  216. }
  217. const syncVisiable = ref(false);
  218. const syncForm = ref({});
  219. const syncRules = {
  220. requestedDeliveryDate: [{ required: true, message: '请选择开始时间', trigger: 'blur' }],
  221. adviseBeforeDate: [{ required: true, message: '请选择结束时间', trigger: 'blur' }],
  222. };
  223. const syncFormRef = ref();
  224. const labelCol = { span: 5 };
  225. const wrapperCol = { span: 13 };
  226. const showSyncModal = () => {
  227. syncForm.value = {};
  228. syncVisiable.value = true;
  229. };
  230. const handleSyncOk = () => {
  231. syncFormRef.value.validate().then(() => {
  232. getData(syncForm.value).then((res) => {
  233. syncVisiable.value = false;
  234. handleSuccess();
  235. });
  236. });
  237. };
  238. const handleSyncOrder = () => {
  239. if (selectedRowKeys.value.length == 0) {
  240. message.warning('请选择要同步的数据!');
  241. return false;
  242. }
  243. createConfirm({
  244. iconType: 'warning',
  245. title: '提示',
  246. content: '确定要同步订单吗?',
  247. onOk: () => {
  248. getSyncOrder({ ids: selectedRowKeys.value.join(',') }).then((res) => {
  249. handleSuccess();
  250. });
  251. },
  252. });
  253. };
  254. </script>
  255. <style lang="less" scoped>
  256. :deep(.ant-picker),
  257. :deep(.ant-input-number) {
  258. width: 100%;
  259. }
  260. </style>