Browse Source

系统管理:电子票广告管理功能需求开发

shipeng 6 days ago
parent
commit
ec22e06e50

+ 50 - 0
src/api/system/ticketAdver.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+
+// 表单模板列表
+export const pageList = (query) => {
+  return request({
+    url: '/system/advList/pageList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 新增
+export const saveAndAdd = (data) => {
+  return request({
+    url: '/system/advList/insertOrUpdate',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改/更新  保存 
+export const saveAndEdit = (data) => {
+  return request({
+    url: '/system/advList/insertOrUpdate',
+    method: 'post',
+    data: data
+  })
+}
+
+// 获取详情
+export const getDetails = (data) => {
+  return request({
+    url: '/system/advList/selectById',
+    method: 'get',
+    params: data
+  })
+}
+
+// 删除模板
+export const deleteById = (id) => {
+  return request({
+    url: '/system/advList/deleteById',
+    method: 'delete',
+    params: {id:id}
+  })
+}
+
+
+/**    基础表单接口  结束    */

+ 1 - 0
src/views/finance/Statements/StatementsIndex.vue

@@ -177,6 +177,7 @@
             @sort-change="handleSortChang"
             :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
             class="cust-table"
+            height="300px"
           >
             <el-table-column label="订单号" align="center" :show-overflow-tooltip="true" width="200">
               <template slot-scope="scope">

+ 221 - 0
src/views/system/ticketAdver/dialog/dataBox.vue

@@ -0,0 +1,221 @@
+<!--
+ * @Description: 新增/编辑弹框
+ * @Author: 空白格
+ * @Date: 2023-07-04 13:55:00
+ * @LastEditors: 空白格
+ * @LastEditTime: 2023-07-06 09:08:39
+ * @FilePath: \cattle_webui\src\views\system\noticeMgr\Dialog\AddOrEditDialog.vue
+ * @Copyright: Copyright (c) 2016~2023 by 空白格, All Rights Reserved.
+-->
+<template>
+  <el-dialog :title="title" :visible.sync="open" width="700px" :close-on-click-modal="false" @close="cancel">
+    <div class="dialog">
+      <el-form v-loading="loading" :model="form" ref="form" :rules="rules" label-width="120px">
+        <el-form-item label="标题名称" prop="name">
+          <el-input v-if="model != 3" v-model="form.name" placeholder="标题名称" clearable style="width: 100%;" />
+          <span v-else>{{ form.name }}</span>
+        </el-form-item>
+        <!-- <el-form-item label="类型" prop="type">
+          <el-radio v-model="form.type" label="1">图文</el-radio>
+        </el-form-item> -->
+        <el-form-item label="banner图" prop="sliderImg">
+          <el-upload :disabled="model==3" ref="upload" class="avatar-uploader" :action="uploadObj.url" :headers="uploadObj.headers"
+            :show-file-list="false" accept=".jpg,.png" :on-success="handleAvatarSuccess"
+            :before-upload="beforeAvatarUpload">
+            <div class="avatar" v-if="form.sliderImg">
+              <el-image style="width: 100px; height: 100px" :src="form.sliderImg" fit="cover" />
+            </div>
+            <div class="upload-btn" v-else>
+              <i class="el-icon-plus"></i>
+              <div class="upload-btn-text">上传图片</div>
+            </div>
+            <div class="el-upload__tip" slot="tip">只能上传.jpg或.png格式</div>
+          </el-upload>
+        </el-form-item>
+        <!-- <el-form-item :label="form.type == 1 ? '内容详情:' : '链接地址:'" prop="detail">
+          <editor v-if="form.type == 1" v-model="form.detail" :fileSize="20" :min-height="200" />
+          <el-input v-else v-model="form.detail" placeholder="请输入链接地址" clearable style="width: 100%;" />
+        </el-form-item> -->
+      </el-form>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="cancel">关闭</el-button>
+      <el-button v-if="model!=3" type="primary" @click="submitForm" :loading="loading" element-loading-text="提交中...">
+        保存
+      </el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import {
+  saveAndAdd,
+  saveAndEdit,
+  getDetails
+} from "@/api/system/ticketAdver";
+import Editor from "@/components/Editor";
+import { getToken } from "@/utils/auth";
+export default {
+  name: "DataBox",
+  components: {
+    Editor,
+  },
+  data() {
+    return {
+      title: "编辑",
+      model: "1", // 1 新增  2 编辑  3 详情
+      open: false,
+      loading: false,
+      form: {
+        name: null,
+        postion: 2,
+        type: 1,
+        sliderImg: null,
+        onlineStatus: 1
+        // detail: null,
+      },
+      rules: {
+        name: [{ required: true, message: "请输入标题", trigger: ["change","blur"] }],
+        // type: [{ required: true, message: "请选择类型", trigger: ["change","blur"] }],
+        sliderImg: [{ required: true, message: "请上传banner图", trigger: ["change","blur"] }],
+        // detail: [
+        //   { required: true, message: "请输入内容", trigger: ["change","blur"] },
+        // ],
+      },
+      uploadObj: {
+        url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
+        Headers: { Authorization: "Bearer " + getToken() },
+      },
+    };
+  },
+  methods: {
+    /**
+     * 打开弹框
+     * @date 2022-09-20
+     * @param {any} obj
+     * @returns {any}
+     */
+    openDialog(title, obj,type) {
+      this.title = title;
+      this.model = type
+      this.open = true;
+      if (obj) {
+        this.$nextTick(() => {
+          this.$set(this.form, 'id', obj.id);
+          this.$set(this.form, 'name', obj.name);
+          this.$set(this.form, 'postion', obj.postion);
+          this.$set(this.form, 'sliderImg', obj.sliderImg);
+          this.$set(this.form, 'onlineStatus', obj.onlineStatus);
+          // this.$set(this.form, 'detail', obj.detail);
+          this.$set(this.form, 'type', (obj.type == 2 ? '1' : obj.type.toString()));
+        });
+      }
+      this.$nextTick(() => {
+        this.$refs["form"].clearValidate();
+      });
+    },
+    /** 
+     * 获取详情
+     */
+    async getDetailsFun(param) {
+      try {
+        this.loading = true;
+        const { data, code } = await getDetails({ id: param.id });
+        if (code == 200) {
+          this.$set(this, 'form', data)
+        } else {
+          this.cancel()
+        }
+      } catch (error) {
+        console.error("error===", error)
+      } finally {
+        this.loading = false;
+      }
+    },
+    /**
+     * 保存
+     * @date 2022-09-20
+     * @returns {any}
+     */
+    submitForm() {
+      this.$refs["form"].validate(async (valid) => {
+        if (valid) {
+          try {
+            this.loading = true;
+            if (this.form.id) {
+              const { code } = await saveAndEdit({ ...this.form });
+              if (code === 200) {
+                this.$message.success("操作成功!");
+                this.$emit("getList");
+                this.cancel();
+              }
+            } else {
+              const { code } = await saveAndAdd({ ...this.form });
+              if (code === 200) {
+                this.$message.success("操作成功!");
+                this.$emit("getList");
+                this.cancel();
+              }
+            }
+
+          } catch (error) {
+          } finally {
+            this.loading = false;
+          }
+        }
+      });
+    },
+    /**
+     * 重置
+     * @date 2022-09-20
+     * @returns {any}
+     */
+    reset() {
+      this.$refs["form"].resetFields();
+      this.form.id = undefined;
+    },
+    /**
+     * 关闭弹框
+     * @date 2022-09-20
+     * @returns {any}
+     */
+    cancel() {
+      this.reset();
+      this.open = false;
+    },
+    /**
+     * 上传成功
+     * @date 2023-11-22
+     * @param {any} res
+     * @returns {any}
+     */
+     handleAvatarSuccess(res) {
+      if (res.code === 200) {
+        // this.form.mainImg = res?.data?.url;
+        this.$set(this.form, 'sliderImg', res?.data?.url)
+      }
+    },
+    /**
+     * 上传文件之前之前
+     * @date 2023-11-22
+     * @param {any} file
+     * @returns {any}
+     */
+    beforeAvatarUpload(file) {
+      const isJPG = file.type === "image/jpeg" || "image/png";
+      if (!isJPG) {
+        this.$message.error("上传头像图片只能是jpg或png格式!");
+      }
+      return isJPG;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.dialog {
+  padding: 0 30px;
+  max-height: 65vh;
+  overflow-y: auto;
+}
+</style>

+ 192 - 0
src/views/system/ticketAdver/index.vue

@@ -0,0 +1,192 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="10" class="mb8"  style="margin-left: 0; margin-top: 10px">
+      <el-button
+        type="primary"
+        plain
+        icon="el-icon-plus"
+        size="mini"
+        @click="handleAdd"
+        v-hasPermi="['system:ticketAdver:add']"
+      >新增</el-button>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table ref="tables" v-loading="loading" :data="dataList" border>
+      <el-table-column label="序号" align="center" type="index" width="50"></el-table-column>
+      <el-table-column label="标题名称" align="center" prop="name" />
+      <el-table-column label="banner图片" align="center" prop="type">
+        <template slot-scope="scope">
+          <el-image
+            style="width: 100px; height: 50px"
+            :src="scope.row.sliderImg" 
+            :preview-src-list="[scope.row.sliderImg]"
+            @click="vbs(scope.row.staffIcon)"
+          />
+        </template>
+      </el-table-column>
+      <!-- <el-table-column label="类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <span>{{ scope.row.type == 1 ? '图文' : scope.row.type == 2 ? '视频' : '链接' }}</span>
+        </template>
+      </el-table-column> -->
+      <!-- <el-table-column label="状态" align="center">
+        <template slot-scope="scope">
+          <el-tag type="success" v-if="scope.row.onlineStatus == '1'">己上线</el-tag>
+          <el-tag type="danger" v-else-if="scope.row.onlineStatus == '0'">未上线</el-tag>
+          <el-tag type="info" v-else>未发布</el-tag>
+        </template>
+      </el-table-column> -->
+      <el-table-column label="创建时间" align="center" prop="createTime" width="160">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <!-- <el-button
+            size="mini"
+            type="text"
+            @click="ionlineApi(scope.row)"
+            v-hasPermi="['system:ticketAdver:release']"
+          >{{scope.row.onlineStatus == '1' ? '取消发布' : '发布'}}</el-button> -->
+          <el-button
+            size="mini"
+            type="text"
+            @click="openDetails(scope.row)"
+            v-hasPermi="['system:ticketAdver:details']"
+          >详情</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:ticketAdver:edit']"
+          >编辑</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleDelete(scope.row,scope.index)"
+            v-hasPermi="['system:ticketAdver:delete']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 详情 -->
+    <!-- 新增/编辑弹框 -->
+    <data-box
+      ref="addAndEdit"
+      @getList="getList"
+    />
+  </div>
+</template>
+
+<script>
+import { pageList,deleteById } from "@/api/system/ticketAdver";
+import dataBox from "./dialog/dataBox";
+export default {
+  name: "ticketAdver",
+  components: { dataBox },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户表格数据
+      dataList: null,
+      // 弹出层标题
+      title: "",
+
+      // 是否显示弹出层
+      open: false,
+      // 日期范围
+      dateRange: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        postion: 2,
+      },
+
+      srcList: []
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询列表 */
+    getList() {
+      this.loading = true;
+      pageList(this.queryParams)
+      .then(response => {
+          this.dataList = response.data.rows;
+          this.total = response.data.total;
+          this.loading = false;
+        }
+      );
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.$set(this.queryParams, 'id', '');
+      this.$set(this.queryParams, 'businessType', '');
+      this.$set(this.queryParams, 'incomeExpenses', '');
+      this.queryParams.pageNum = 1;
+      this.handleQuery();
+    },
+    /** 详情按钮操作 */
+    openDetails(row, type) {
+      this.$refs["addAndEdit"].openDialog("详情", row,3);
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.$refs["addAndEdit"].openDialog("新增数据", null,1);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.$refs["addAndEdit"].openDialog("修改数据", row,2);
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const dataIds = row.id || this.ids;
+      this.$modal.confirm('是否确认删除标题名称为"' + row.name + '"的数据项?').then(function() {
+        return deleteById(row.id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 查看按钮操作 */
+    vbs(val) {
+      this.srcList = []
+      this.srcList.push(val)
+    }
+  }
+};
+</script>