CardCommon.vue 6.8 KB

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