hooksDemo.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <div>{{ form }}</div>
  3. <div>{{ search }}</div>
  4. <el-button @click="test">测试公共弹窗</el-button>
  5. <el-button
  6. v-debounce:click="
  7. () => {
  8. testDebunce('这是传递的参数');
  9. }
  10. "
  11. >测试防抖截流</el-button
  12. >
  13. <div class="mainContentBox">
  14. <avue-crud
  15. ref="crudRef"
  16. v-model:search="search"
  17. v-model="form"
  18. :data="data"
  19. :option="option"
  20. v-model:page="page"
  21. @row-save="createRow"
  22. @row-update="updateRow"
  23. @row-del="deleteRow"
  24. @search-change="searchChange"
  25. @search-reset="resetChange"
  26. @size-change="dataList"
  27. @current-change="dataList"
  28. @selection-change="selectionChange"
  29. >
  30. <template #fileUrl-form="scope">
  31. <single-upload v-model="form.fileUrl" />
  32. {{ form }}
  33. </template>
  34. <template #menu-left="{ size }">
  35. <el-button
  36. :disabled="toDeleteIds.length < 1"
  37. type="danger"
  38. icon="el-icon-delete"
  39. :size="size"
  40. @click="multipleDelete"
  41. >删除</el-button
  42. >
  43. </template>
  44. <template #menu-right="{}">
  45. <el-dropdown split-button
  46. >导入
  47. <template #dropdown>
  48. <el-dropdown-menu>
  49. <el-dropdown-item
  50. @click="downloadTemplate('/api/v1/plan/order/template')"
  51. >
  52. <i-ep-download />下载模板
  53. </el-dropdown-item>
  54. <el-dropdown-item @click="importExcelData">
  55. <i-ep-top />导入数据
  56. </el-dropdown-item>
  57. </el-dropdown-menu>
  58. </template>
  59. </el-dropdown>
  60. <el-button
  61. class="ml-3"
  62. @click="exportData('/api/v1/plan/order/export')"
  63. >
  64. <template #icon> <i-ep-download /> </template>导出
  65. </el-button>
  66. </template>
  67. </avue-crud>
  68. <CommonTable
  69. ref="ctableRef"
  70. tableTitle="测试title"
  71. tableType="MARTERIAL"
  72. @selected-sure="onSelectedFinish"
  73. />
  74. <ExcelUpload ref="uploadRef" @finished="uploadFinished" />
  75. </div>
  76. </template>
  77. <script setup>
  78. import { ref, getCurrentInstance } from "vue";
  79. import { useCrud } from "@/hooks/userCrud";
  80. import dictDataUtil from "@/common/configs/dictDataUtil";
  81. import ButtonPermKeys from "@/common/configs/buttonPermission";
  82. import { useCommonStoreHook, useDictionaryStoreHook } from "@/store";
  83. import SingleUpload from "@/components/Upload/SingleUpload.vue";
  84. // 数据字典相关
  85. const { dicts } = useDictionaryStoreHook();
  86. // 公共弹窗相关
  87. const ctableRef = ref(null);
  88. const test = () => {
  89. if (ctableRef.value) {
  90. ctableRef.value.startSelect();
  91. }
  92. };
  93. const onSelectedFinish = (selectedValue) => {
  94. console.log("onSelectedFinish", selectedValue);
  95. };
  96. const testDebunce = (args) => {
  97. console.log("执行了事件", args);
  98. };
  99. // 传入一个url,后面不带/
  100. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  101. useCrud({
  102. src: "/api/v1/plan/order",
  103. });
  104. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  105. Methords; //增删改查
  106. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  107. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  108. // checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
  109. // const permission = reactive({
  110. // delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
  111. // addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
  112. // editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
  113. // menu: true,
  114. // });
  115. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  116. onMounted(() => {
  117. // console.log("crudRef", crudRef)
  118. dataList();
  119. });
  120. /**
  121. * 上传excel相关
  122. */
  123. const uploadRef = ref(null);
  124. const uploadFinished = () => {
  125. // 上传完成后的刷新操作
  126. page.currentPage = 1;
  127. dataList();
  128. };
  129. const importExcelData = () => {
  130. if (uploadRef.value) {
  131. uploadRef.value.show("/api/v1/plan/order/import");
  132. }
  133. };
  134. // 设置表格列或者其他自定义的option
  135. option.value = Object.assign(option.value, {
  136. selection: true,
  137. column: [
  138. {
  139. label: "产品",
  140. prop: "materialCode",
  141. search: true,
  142. },
  143. {
  144. label: "年龄",
  145. prop: "materialModel",
  146. search: true,
  147. },
  148. {
  149. label: "性别",
  150. prop: "orderCode",
  151. search: true,
  152. },
  153. {
  154. label: "网络字典",
  155. prop: "province",
  156. type: "select",
  157. dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.routing_type,
  158. props: {
  159. label: "dictLabel",
  160. value: "dictValue",
  161. },
  162. },
  163. {
  164. label: "全局字典",
  165. prop: "province",
  166. type: "select",
  167. dicData: dicts.station_operate_type,
  168. props: {
  169. label: "dictLabel",
  170. value: "dictValue",
  171. },
  172. },
  173. {
  174. label: "身高",
  175. prop: "projectCode",
  176. search: true,
  177. },
  178. {
  179. label: "是否xxxx",
  180. prop: "xxxxx",
  181. search: false,
  182. filterable: true,
  183. type: "radio", //类型为单选框
  184. dicData: [
  185. {
  186. label: "否",
  187. value: 0,
  188. },
  189. {
  190. label: "是",
  191. value: 1,
  192. },
  193. ],
  194. value: 0,
  195. },
  196. {
  197. label: "附件上传",
  198. prop: "fileUrl",
  199. span: 24,
  200. slot: true,
  201. },
  202. ],
  203. });
  204. </script>