CardCommon.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <div>
  3. <TitleCommon
  4. v-model="cardaddDrawer"
  5. :type="props.type"
  6. :pagesize="currentPageSize"
  7. :pagenumber="currentPage"
  8. :drawer="cardaddDrawer"
  9. @find-data-by-name="searchDataByName"
  10. @submit-drawer="addData"
  11. @add-form="clickAddData"
  12. @handle-close="closeDrawer"
  13. @clear-data="clearData"
  14. >
  15. </TitleCommon>
  16. <div style="margin-top: 20px">
  17. <el-table style="width: 100%" :data="tableData" highlight-current-row>
  18. <el-table-column :label="props.type + `名称`" prop="name" />
  19. <el-table-column :label="props.type + `代码`" prop="code" />
  20. <el-table-column prop="status" label="状态">
  21. <template #default="scope">
  22. <el-tag v-if="scope.row.status === 0" type="success">启用</el-tag>
  23. <el-tag v-else type="danger">禁用</el-tag>
  24. </template>
  25. </el-table-column>
  26. <el-table-column label="备注" prop="remark" />
  27. <el-table-column label="创建时间" prop="createdAt" />
  28. <el-table-column label="操作">
  29. <template #default="scoped">
  30. <img
  31. :src="del"
  32. alt=""
  33. @click="deleteTableData(scoped.row)"
  34. style="height: 30px; width: 30px; padding: 5px"
  35. />
  36. <img
  37. :src="edit"
  38. alt=""
  39. @click="showEditDrawer(scoped.row)"
  40. style="height: 30px; width: 30px; padding: 5px"
  41. />
  42. </template>
  43. </el-table-column>
  44. </el-table>
  45. <div>
  46. <el-pagination
  47. v-model:currentPage="currentPage"
  48. v-model:currentPageSize="currentPageSize"
  49. :page-sizes="[10, 20, 50, 100, 200]"
  50. layout="->,total,sizes,prev,pager,next,jumper"
  51. :total="total"
  52. @size-change="handleSizeChangeFun"
  53. @current-change="handlePageChangeFun"
  54. />
  55. </div>
  56. </div>
  57. <el-drawer
  58. v-model="cardeditDrawer"
  59. direction="rtl"
  60. :title="currentType"
  61. :before-close="handleClose"
  62. >
  63. <DrawerCommonVue
  64. :detail="currentdrawerFormData"
  65. v-if="currentdrawerFormData"
  66. @submit-drawer="submitDrawer"
  67. />
  68. </el-drawer>
  69. </div>
  70. </template>
  71. <script setup lang="ts">
  72. import { onMounted, ref } from 'vue';
  73. import { ElDrawer, ElMessageBox } from 'element-plus';
  74. import DrawerCommonVue, { FormModelCommon } from './DrawerCommon.vue';
  75. import TitleCommon, { DataCommon } from './TitleCommon.vue';
  76. import { Records, SceneModule } from '@/api/template/template';
  77. import del from '@/assets/icons/del.png';
  78. import edit from '@/assets/icons/edit.png';
  79. // const currentFormType = ref('场景');
  80. export type CreateType = '添加模板' | '修改模板';
  81. export interface TableModel {
  82. id: number;
  83. name: string;
  84. code: string;
  85. status: number;
  86. remark: string;
  87. createAt: string;
  88. }
  89. export interface ModelCommon {
  90. drawerFormData: FormModelCommon | null;
  91. }
  92. export interface Page {
  93. page: number;
  94. size: number;
  95. }
  96. const currentType = ref<CreateType>('添加模板');
  97. const currentdrawerFormData = ref<FormModelCommon>({} as FormModelCommon);
  98. const cardeditDrawer = ref(false);
  99. const cardaddDrawer = ref(false);
  100. const currentPage = ref(1);
  101. const currentPageSize = ref(10);
  102. const total = ref(100);
  103. const tableData = ref<Records[]>([]);
  104. const props = defineProps<{
  105. type: string;
  106. addData: (d: SceneModule) => Promise<unknown>;
  107. searchDataByName: (d: DataCommon) => Promise<unknown>;
  108. deleteTableData: (d: TableModel) => Promise<unknown>;
  109. submitDrawer: (d: SceneModule) => Promise<unknown>;
  110. getData: (d: Page) => Promise<unknown>;
  111. }>();
  112. // 删除数据-finish
  113. function deleteTableData(row: TableModel) {
  114. // emit('deleteTableData', row);
  115. props.deleteTableData(row).then((res) => {
  116. console.log('deleteTableData', res);
  117. getData({ page: currentPage.value, size: currentPageSize.value });
  118. });
  119. }
  120. // 编辑数据弹框-finish
  121. function showEditDrawer(row: TableModel) {
  122. cardeditDrawer.value = true;
  123. console.log('row', row);
  124. currentdrawerFormData.value = row;
  125. }
  126. // 弹框关闭事件-finish
  127. const handleClose = (done: () => void) => {
  128. ElMessageBox.confirm('是否确认关闭?')
  129. .then(() => {
  130. done();
  131. closeDrawer();
  132. })
  133. .catch(() => {
  134. // catch error
  135. });
  136. };
  137. // 编辑提交数据
  138. function submitDrawer(data: SceneModule) {
  139. console.log('编辑提交数据:', data);
  140. props.submitDrawer(data).then((res) => {
  141. console.log('submitDrawer', res);
  142. closeDrawer();
  143. getData({ page: currentPage.value, size: currentPageSize.value });
  144. });
  145. }
  146. // 查询数据列表-finish
  147. function getData(data: Page) {
  148. props.getData(data).then((res) => {
  149. console.log('getData', res);
  150. tableData.value = res.records;
  151. total.value = res.totalRow;
  152. });
  153. }
  154. // 根据名称找到数据-finish
  155. function searchDataByName(data: DataCommon) {
  156. props.searchDataByName(data).then((res) => {
  157. console.log('searchDataByName', res);
  158. tableData.value = res.records;
  159. });
  160. }
  161. // 单机添加按钮,控制弹框显示-finish
  162. function clickAddData() {
  163. cardaddDrawer.value = true;
  164. }
  165. // 添加数据-finish
  166. function addData(data: SceneModule) {
  167. props.addData(data).then((res) => {
  168. console.log('addData', res);
  169. closeDrawer();
  170. getData({ page: currentPage.value, size: currentPageSize.value });
  171. });
  172. }
  173. function closeDrawer() {
  174. cardaddDrawer.value = false;
  175. cardeditDrawer.value = false;
  176. getData({ page: currentPage.value, size: currentPageSize.value });
  177. }
  178. // 清空输入框数据-finish
  179. function clearData() {
  180. // getSceneLabelList(currentPage.value, currentPageSize.value);
  181. getData({ page: currentPage.value, size: currentPageSize.value });
  182. }
  183. // 页数-finish
  184. function handleSizeChangeFun(val: number) {
  185. currentPageSize.value = val;
  186. getData({ page: currentPage.value, size: currentPageSize.value });
  187. }
  188. // 翻页-finish
  189. function handlePageChangeFun(val: number) {
  190. currentPage.value = val;
  191. console.log('currentPage:' + currentPage.value);
  192. getData({ page: currentPage.value, size: currentPageSize.value });
  193. }
  194. onMounted(() => {
  195. // getData(props.currentPage, props.currentPageSize);
  196. getData({ page: currentPage.value, size: currentPageSize.value });
  197. });
  198. </script>
  199. <style scoped></style>