index.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <template>
  2. <div>
  3. <!--引用表格-->
  4. <BasicTable @register="registerTable" :rowSelection="rowSelection">
  5. <!--插槽:table标题-->
  6. <template #tableTitle>
  7. <a-button type="primary" v-auth="'purchaseManage:sbsmzq_supplier_manage:add'" @click="handleAdd" preIcon="ant-design:plus-outlined">
  8. 新增
  9. </a-button>
  10. <a-button type="primary" v-auth="'purchaseManage:sbsmzq_supplier_manage:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
  11. 导出
  12. </a-button>
  13. <j-upload-button
  14. type="primary"
  15. v-auth="'purchaseManage:sbsmzq_supplier_manage:importExcel'"
  16. preIcon="ant-design:import-outlined"
  17. @click="onImportXls"
  18. >
  19. 导入
  20. </j-upload-button>
  21. <a-dropdown v-if="selectedRowKeys.length > 0">
  22. <template #overlay>
  23. <a-menu>
  24. <a-menu-item key="1" @click="batchHandleDelete">
  25. <Icon icon="ant-design:delete-outlined" />
  26. 删除
  27. </a-menu-item>
  28. </a-menu>
  29. </template>
  30. <a-button v-auth="'purchaseManage:sbsmzq_supplier_manage:deleteBatch'">
  31. 批量操作
  32. <Icon icon="mdi:chevron-down" />
  33. </a-button>
  34. </a-dropdown>
  35. <!-- 高级查询 -->
  36. <super-query :config="superQueryConfig" @search="handleSuperQuery" />
  37. </template>
  38. <!--操作栏-->
  39. <template #action="{ record }">
  40. <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
  41. </template>
  42. <!--字段回显插槽-->
  43. <!-- <template v-slot:bodyCell="{ column, record, index, text }"> </template> -->
  44. <template #supplierNumber="{ record }">
  45. <a-button type="link" @click="handleDetail(record)">{{ record.supplierNumber }}</a-button>
  46. </template>
  47. <template #disable="{ record }">
  48. <YOrN :yes="Number(record.disable) === 0" />
  49. </template>
  50. <template #grade="{ record }">
  51. <a-rate :value="Number(record.grade)" :allowHalf="true" :disabled="true" />
  52. </template>
  53. </BasicTable>
  54. <!-- 表单区域 -->
  55. <SupplierManageModal @register="registerModal" @success="handleSuccess" />
  56. <!-- 详情 -->
  57. <DetailDrawer @register="registerDetailDrawer" @success="handleSuccess" />
  58. </div>
  59. </template>
  60. <script lang="ts" name="purchaseManage-supplierManage" setup>
  61. import { reactive } from 'vue';
  62. import { BasicTable, TableAction } from '/@/components/Table';
  63. import { useListPage } from '/@/hooks/system/useListPage';
  64. import { useModal } from '/@/components/Modal';
  65. import SupplierManageModal from './components/SupplierManageModal.vue';
  66. import { columns, searchFormSchema, superQuerySchema } from './SupplierManage.data';
  67. import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './SupplierManage.api';
  68. import DetailDrawer from './components/DetailDrawer.vue';
  69. import { useDrawer } from '/@/components/Drawer';
  70. import YOrN from '/@/views/equipmentLifecycle/components/YOrN.vue';
  71. const queryParam = reactive<any>({});
  72. //注册model
  73. const [registerModal, { openModal }] = useModal();
  74. // 注册详情抽屉
  75. const [registerDetailDrawer, detailDrawer] = useDrawer();
  76. //注册table数据
  77. const { tableContext, onExportXls, onImportXls } = useListPage({
  78. tableProps: {
  79. title: '供应商管理',
  80. api: list,
  81. columns,
  82. canResize: false,
  83. formConfig: {
  84. //labelWidth: 120,
  85. schemas: searchFormSchema,
  86. autoSubmitOnEnter: true,
  87. showAdvancedButton: true,
  88. fieldMapToNumber: [],
  89. fieldMapToTime: [],
  90. },
  91. actionColumn: {
  92. width: 120,
  93. fixed: 'right',
  94. },
  95. beforeFetch: (params) => {
  96. return Object.assign(params, queryParam);
  97. },
  98. },
  99. exportConfig: {
  100. name: '供应商管理',
  101. url: getExportUrl,
  102. params: queryParam,
  103. },
  104. importConfig: {
  105. url: getImportUrl,
  106. success: handleSuccess,
  107. },
  108. });
  109. const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
  110. // 高级查询配置
  111. const superQueryConfig = reactive(superQuerySchema);
  112. /**
  113. * 高级查询事件
  114. */
  115. function handleSuperQuery(params) {
  116. Object.keys(params).map((k) => {
  117. queryParam[k] = params[k];
  118. });
  119. reload();
  120. }
  121. /**
  122. * 新增事件
  123. */
  124. function handleAdd() {
  125. openModal(true, {
  126. isUpdate: false,
  127. showFooter: true,
  128. });
  129. }
  130. /**
  131. * 编辑事件
  132. */
  133. function handleEdit(record: Recordable) {
  134. openModal(true, {
  135. record,
  136. isUpdate: true,
  137. showFooter: true,
  138. });
  139. }
  140. /**
  141. * 详情
  142. */
  143. function handleDetail(record: Recordable) {
  144. detailDrawer.openDrawer(true, record);
  145. }
  146. /**
  147. * 删除事件
  148. */
  149. async function handleDelete(record) {
  150. await deleteOne({ id: record.id }, handleSuccess);
  151. }
  152. /**
  153. * 批量删除事件
  154. */
  155. async function batchHandleDelete() {
  156. await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
  157. }
  158. /**
  159. * 成功回调
  160. */
  161. function handleSuccess() {
  162. (selectedRowKeys.value = []) && reload();
  163. }
  164. /**
  165. * 操作栏
  166. */
  167. function getTableAction(record) {
  168. return [
  169. {
  170. label: '编辑',
  171. onClick: handleEdit.bind(null, record),
  172. auth: 'purchaseManage:sbsmzq_supplier_manage:edit',
  173. },
  174. ];
  175. }
  176. /**
  177. * 下拉操作栏
  178. */
  179. function getDropDownAction(record) {
  180. return [
  181. {
  182. label: '详情',
  183. onClick: handleDetail.bind(null, record),
  184. },
  185. {
  186. label: '删除',
  187. popConfirm: {
  188. title: '是否确认删除',
  189. confirm: handleDelete.bind(null, record),
  190. placement: 'topLeft',
  191. },
  192. auth: 'purchaseManage:sbsmzq_supplier_manage:delete',
  193. },
  194. ];
  195. }
  196. </script>
  197. <style lang="less" scoped>
  198. :deep(.ant-picker),
  199. :deep(.ant-input-number) {
  200. width: 100%;
  201. }
  202. </style>