CardCommon_shangfei.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <template>
  2. <div>
  3. <TitleCommon_shangfei
  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_shangfei>
  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. v-if="props.type === '标签'"
  48. />
  49. </template>
  50. </el-table-column>
  51. </el-table>
  52. <div>
  53. <el-pagination
  54. v-model:currentPage="currentPage"
  55. v-model:currentPageSize="currentPageSize"
  56. :page-sizes="[10, 20, 50, 100, 200]"
  57. layout="->,total,sizes,prev,pager,next,jumper"
  58. :total="total"
  59. @size-change="handleSizeChangeFun"
  60. @current-change="handlePageChangeFun"
  61. />
  62. </div>
  63. </div>
  64. <el-drawer
  65. v-model="cardeditDrawer"
  66. direction="rtl"
  67. :title="type === '模板' ? '编辑模板' : '编辑标签'"
  68. :before-close="handleClose"
  69. >
  70. <DrawerCommonVue_shangfei
  71. :detail="currentdrawerFormData"
  72. :type="props.type"
  73. v-if="currentdrawerFormData"
  74. @submit-drawer="submitDrawer"
  75. />
  76. </el-drawer>
  77. </div>
  78. </template>
  79. <script setup lang="ts">
  80. import { onMounted, ref } from 'vue';
  81. import { ElDrawer, ElMessageBox } from 'element-plus';
  82. import DrawerCommonVue_shangfei, { FormModelCommon } from './DrawerCommon_shangfei.vue';
  83. import TitleCommon_shangfei, { DataCommon } from './TitleCommon_shangfei.vue';
  84. import { Records, SceneModule } from '@/api/template/template';
  85. import del from '@/assets/icons/del.png';
  86. import edit from '@/assets/icons/edit.png';
  87. import { LabelType } from './constant';
  88. // const currentFormType = ref('场景');
  89. export type CreateType = '添加模板' | '编辑模板' | '添加标签' | '编辑标签';
  90. export interface TableModel {
  91. id: number;
  92. name: string;
  93. code: string;
  94. status: number;
  95. remark: string;
  96. createAt: string;
  97. }
  98. export interface ModelCommon {
  99. drawerFormData: FormModelCommon | null;
  100. }
  101. export interface Page {
  102. page: number;
  103. size: number;
  104. }
  105. // const currentType = ref<CreateType>('编辑模板');
  106. const currentdrawerFormData = ref<FormModelCommon>({} as FormModelCommon);
  107. const cardeditDrawer = ref(false);
  108. const cardaddDrawer = ref(false);
  109. const currentPage = ref(1);
  110. const currentPageSize = ref(10);
  111. const total = ref(100);
  112. const tableData = ref<Records[]>([]);
  113. const props = defineProps<{
  114. type: string;
  115. tab: LabelType;
  116. addData: (d: SceneModule) => Promise<unknown>;
  117. searchDataByName: (d: DataCommon) => Promise<unknown>;
  118. deleteTableData: (d: TableModel) => Promise<unknown>;
  119. submitDrawer: (d: SceneModule) => Promise<unknown>;
  120. getData: (d: Page) => Promise<unknown>;
  121. }>();
  122. // 删除数据-finish
  123. function deleteTableData(row: TableModel) {
  124. // emit('deleteTableData', row);
  125. props.deleteTableData(row).then((res) => {
  126. console.log('deleteTableData', res);
  127. getData({ page: currentPage.value, size: currentPageSize.value });
  128. });
  129. }
  130. // 编辑数据弹框-finish
  131. function showEditDrawer(row: TableModel) {
  132. cardeditDrawer.value = true;
  133. console.log('row', row);
  134. currentdrawerFormData.value = row;
  135. }
  136. // 弹框关闭事件-finish
  137. const handleClose = (done: () => void) => {
  138. done();
  139. closeDrawer();
  140. };
  141. // 编辑提交数据
  142. function submitDrawer(data: SceneModule) {
  143. console.log('编辑提交数据:', data);
  144. props.submitDrawer(data).then((res) => {
  145. console.log('submitDrawer', res);
  146. closeDrawer();
  147. getData({ page: currentPage.value, size: currentPageSize.value });
  148. });
  149. }
  150. // 查询数据列表-finish
  151. function getData(data: Page) {
  152. props.getData(data).then((res) => {
  153. console.log('getData', res);
  154. tableData.value = res.records;
  155. total.value = res.totalRow;
  156. });
  157. }
  158. // 根据名称找到数据-finish
  159. function searchDataByName(data: DataCommon) {
  160. props.searchDataByName(data).then((res) => {
  161. console.log('searchDataByName', res);
  162. tableData.value = res.records;
  163. });
  164. }
  165. // 单机添加按钮,控制弹框显示-finish
  166. function clickAddData() {
  167. cardaddDrawer.value = true;
  168. }
  169. // 添加数据-finish
  170. function addData(data: SceneModule) {
  171. props.addData(data).then((res) => {
  172. console.log('addData', res);
  173. closeDrawer();
  174. getData({ page: currentPage.value, size: currentPageSize.value });
  175. });
  176. }
  177. function closeDrawer() {
  178. cardaddDrawer.value = false;
  179. cardeditDrawer.value = false;
  180. getData({ page: currentPage.value, size: currentPageSize.value });
  181. }
  182. // 清空输入框数据-finish
  183. function clearData() {
  184. // getSceneLabelList(currentPage.value, currentPageSize.value);
  185. getData({ page: currentPage.value, size: currentPageSize.value });
  186. }
  187. // 页数-finish
  188. function handleSizeChangeFun(val: number) {
  189. currentPageSize.value = val;
  190. getData({ page: currentPage.value, size: currentPageSize.value });
  191. }
  192. // 翻页-finish
  193. function handlePageChangeFun(val: number) {
  194. currentPage.value = val;
  195. console.log('currentPage:' + currentPage.value);
  196. getData({ page: currentPage.value, size: currentPageSize.value });
  197. }
  198. onMounted(() => {
  199. // getData(props.currentPage, props.currentPageSize);
  200. getData({ page: currentPage.value, size: currentPageSize.value });
  201. });
  202. </script>
  203. <style scoped>
  204. .actionIcon {
  205. display: inline-block;
  206. cursor: pointer;
  207. }
  208. </style>