index.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <template>
  2. <div class="p-2">
  3. <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
  4. <div v-show="showSearch" class="mb-[10px]">
  5. <el-card shadow="hover">
  6. <el-form ref="queryFormRef" :model="queryParams" :inline="true">
  7. <el-form-item label="推荐编号" prop="recommendNo">
  8. <el-input v-model="queryParams.recommendNo" placeholder="请输入推荐编号" clearable @keyup.enter="handleQuery" />
  9. </el-form-item>
  10. <el-form-item label="推荐名称" prop="recommendName">
  11. <el-input v-model="queryParams.recommendName" placeholder="请输入推荐名称" clearable @keyup.enter="handleQuery" />
  12. </el-form-item>
  13. <el-form-item>
  14. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  15. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  16. </el-form-item>
  17. </el-form>
  18. </el-card>
  19. </div>
  20. </transition>
  21. <el-card shadow="never">
  22. <div style="display: flex; justify-content: flex-end; margin-bottom: 16px;">
  23. <el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button>
  24. </div>
  25. <el-table v-loading="loading" border :data="recommendList">
  26. <el-table-column label="推荐位ID" align="center" min-width="120" prop="id" />
  27. <el-table-column label="推荐编号" align="center" min-width="150" prop="recommendNo" />
  28. <el-table-column label="推荐名称" align="center" min-width="150" prop="recommendName" />
  29. <el-table-column label="推荐位描述" align="center" min-width="200" prop="recommendDescribe" />
  30. <el-table-column label="操作" align="center" width="150">
  31. <template #default="scope">
  32. <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">编辑</el-button>
  33. <el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
  34. </template>
  35. </el-table-column>
  36. </el-table>
  37. <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
  38. </el-card>
  39. <!-- 添加或修改产品推荐位配置对话框 -->
  40. <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
  41. <el-form ref="recommendFormRef" :model="form" :rules="rules" label-width="100px">
  42. <el-form-item label="推荐编号" prop="recommendNo">
  43. <el-input v-model="form.recommendNo" placeholder="请输入推荐编号" />
  44. </el-form-item>
  45. <el-form-item label="推荐名称" prop="recommendName">
  46. <el-input v-model="form.recommendName" placeholder="请输入推荐名称" />
  47. </el-form-item>
  48. <el-form-item label="推荐位描述" prop="recommendDescribe">
  49. <el-input v-model="form.recommendDescribe" type="textarea" :rows="3" placeholder="请输入推荐位描述" />
  50. </el-form-item>
  51. <el-form-item label="备注" prop="remark">
  52. <el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请输入备注" />
  53. </el-form-item>
  54. </el-form>
  55. <template #footer>
  56. <div class="dialog-footer">
  57. <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
  58. <el-button @click="cancel">取 消</el-button>
  59. </div>
  60. </template>
  61. </el-dialog>
  62. </div>
  63. </template>
  64. <script setup name="Recommend" lang="ts">
  65. import { listRecommend, getRecommend, delRecommend, addRecommend, updateRecommend } from '@/api/pmsProduct/recommend';
  66. import { RecommendVO, RecommendQuery, RecommendForm } from '@/api/pmsProduct/recommend/types';
  67. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  68. const recommendList = ref<RecommendVO[]>([]);
  69. const buttonLoading = ref(false);
  70. const loading = ref(true);
  71. const showSearch = ref(true);
  72. const total = ref(0);
  73. const queryFormRef = ref<ElFormInstance>();
  74. const recommendFormRef = ref<ElFormInstance>();
  75. const dialog = reactive<DialogOption>({
  76. visible: false,
  77. title: ''
  78. });
  79. const initFormData: RecommendForm = {
  80. id: undefined,
  81. recommendNo: undefined,
  82. recommendName: undefined,
  83. recommendDescribe: undefined,
  84. isShow: undefined,
  85. recommendCoverphoto: undefined,
  86. remark: undefined,
  87. }
  88. const data = reactive<PageData<RecommendForm, RecommendQuery>>({
  89. form: {...initFormData},
  90. queryParams: {
  91. pageNum: 1,
  92. pageSize: 10,
  93. recommendNo: undefined,
  94. recommendName: undefined,
  95. recommendDescribe: undefined,
  96. isShow: undefined,
  97. recommendCoverphoto: undefined,
  98. platformCode: undefined,
  99. params: {
  100. }
  101. },
  102. rules: {
  103. remark: [
  104. { required: true, message: "备注不能为空", trigger: "blur" }
  105. ],
  106. }
  107. });
  108. const { queryParams, form, rules } = toRefs(data);
  109. /** 查询产品推荐位配置列表 */
  110. const getList = async () => {
  111. loading.value = true;
  112. const res = await listRecommend(queryParams.value);
  113. recommendList.value = res.rows;
  114. total.value = res.total;
  115. loading.value = false;
  116. }
  117. /** 取消按钮 */
  118. const cancel = () => {
  119. reset();
  120. dialog.visible = false;
  121. }
  122. /** 表单重置 */
  123. const reset = () => {
  124. form.value = {...initFormData};
  125. recommendFormRef.value?.resetFields();
  126. }
  127. /** 搜索按钮操作 */
  128. const handleQuery = () => {
  129. queryParams.value.pageNum = 1;
  130. getList();
  131. }
  132. /** 重置按钮操作 */
  133. const resetQuery = () => {
  134. queryFormRef.value?.resetFields();
  135. handleQuery();
  136. }
  137. /** 新增按钮操作 */
  138. const handleAdd = () => {
  139. reset();
  140. dialog.visible = true;
  141. dialog.title = "添加产品推荐位配置";
  142. }
  143. /** 修改按钮操作 */
  144. const handleUpdate = async (row: RecommendVO) => {
  145. reset();
  146. const res = await getRecommend(row.id);
  147. Object.assign(form.value, res.data);
  148. dialog.visible = true;
  149. dialog.title = "修改产品推荐位配置";
  150. }
  151. /** 提交按钮 */
  152. const submitForm = () => {
  153. recommendFormRef.value?.validate(async (valid: boolean) => {
  154. if (valid) {
  155. buttonLoading.value = true;
  156. if (form.value.id) {
  157. await updateRecommend(form.value).finally(() => buttonLoading.value = false);
  158. } else {
  159. await addRecommend(form.value).finally(() => buttonLoading.value = false);
  160. }
  161. proxy?.$modal.msgSuccess("操作成功");
  162. dialog.visible = false;
  163. await getList();
  164. }
  165. });
  166. }
  167. /** 删除按钮操作 */
  168. const handleDelete = async (row: RecommendVO) => {
  169. await proxy?.$modal.confirm('是否确认删除产品推荐位配置编号为"' + row.id + '"的数据项?').finally(() => loading.value = false);
  170. await delRecommend(row.id);
  171. proxy?.$modal.msgSuccess("删除成功");
  172. await getList();
  173. }
  174. onMounted(() => {
  175. getList();
  176. });
  177. </script>