CardCommon.vue 5.9 KB

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