Explorar o código

add:活动管理

ct hai 1 semana
pai
achega
b071718184

+ 53 - 0
src/api/his/storeActivity.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询活动列表
+export function listStoreActivity(query) {
+  return request({
+    url: '/his/storeActivity/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询活动详细
+export function getStoreActivity(activityId) {
+  return request({
+    url: '/his/storeActivity/' + activityId,
+    method: 'get'
+  })
+}
+
+// 新增活动
+export function addStoreActivity(data) {
+  return request({
+    url: '/his/storeActivity',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改活动
+export function updateStoreActivity(data) {
+  return request({
+    url: '/his/storeActivity',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除活动
+export function delStoreActivity(activityId) {
+  return request({
+    url: '/his/storeActivity/' + activityId,
+    method: 'delete'
+  })
+}
+
+// 导出活动
+export function exportStoreActivity(query) {
+  return request({
+    url: '/his/storeActivity/export',
+    method: 'get',
+    params: query
+  })
+}

+ 431 - 0
src/views/his/storeActivity/index.vue

@@ -0,0 +1,431 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="活动标题" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入活动标题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['store:storeActivity:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['store:storeActivity:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['store:storeActivity:remove']"
+        >删除</el-button>
+      </el-col>
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-tabs type="card" v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="正常" name="1"></el-tab-pane>
+      <el-tab-pane label="关闭" name="0"></el-tab-pane>
+    </el-tabs>
+
+    <el-table  height="500" border v-loading="loading" :data="storeActivityList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="ID" align="center" prop="activityId" />
+      <el-table-column label="活动标题" align="center" prop="title" />
+      <!-- <el-table-column label="描述" show-overflow-tooltip align="center" prop="descs" /> -->
+
+      <el-table-column label="弹框广告图" align="center" width="120">
+        <template slot-scope="scope">
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover"
+          >
+            <img slot="reference" :src="scope.row.logoUrl" width="100">
+            <img :src="scope.row.logoUrl" style="max-width: 150px;">
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column label="分享数" align="center" prop="shareNumber" />
+      <el-table-column label="状态" align="center" prop="status" >
+          <template slot-scope="scope">
+              <el-tag prop="status" v-for="(item, index) in statusOptions"    v-if="scope.row.status==item.dictValue">{{item.dictLabel}}</el-tag>
+          </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"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['store:storeActivity:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['store:storeActivity:remove']"
+          >删除</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"
+    />
+
+    <!-- 添加或修改活动对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入标题" />
+        </el-form-item>
+        <!-- <el-form-item label="描述" prop="descs">
+          <el-input v-model="form.descs" type="textarea" placeholder="请输入内容" />
+        </el-form-item> -->
+        <el-form-item label="弹框广告图" prop="logoUrl">
+          <Material v-model="imageArr" type="image" :num="1" :width="150" :height="150" />
+        </el-form-item>
+        <el-form-item label="BANNER图" prop="images">
+          <Material v-model="photoArr" type="image" :num="10" :width="150" :height="150" />
+        </el-form-item>
+        <el-form-item label="活动疗法" prop="packageIds"  >
+              <el-row  >
+                <el-col >
+                      <el-button plain  type="primary" icon="el-icon-plus" @click="handleAddPackage">添加疗法</el-button>
+                </el-col>
+              </el-row>
+              <el-table border width="100%" style="margin-top:5px;"  :data="packages">
+                <el-table-column label="疗法ID" align="center" prop="packageId" />
+                <el-table-column label="疗法图片" align="center" width="100">
+                  <template slot-scope="scope">
+                    <el-popover
+                      placement="right"
+                      title=""
+                      trigger="hover"
+                    >
+                      <img slot="reference" :src="scope.row.imgUrl" width="50">
+                      <img :src="scope.row.imgUrl" style="max-width: 50px;">
+                    </el-popover>
+                  </template>
+                </el-table-column>
+                <el-table-column label="疗法名称" show-overflow-tooltip align="center" prop="packageName" />
+                <el-table-column label="售价" align="center"  prop="price"  >
+                   <template slot-scope="scope">
+                    <div v-if="scope.row.totalPrice!=null">
+                         {{scope.row.totalPrice.toFixed(2)}}
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column label="操作" align="center" width="100px" >
+                  <template slot-scope="scope">
+                    <el-button
+                      size="mini"
+                      type="text"
+                      icon="el-icon-delete"
+                      @click="handlePackageDelete(scope.row)"
+                    >删除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+        </el-form-item>
+        <el-form-item label="活动内容">
+          <editor ref="myeditor"   @on-text-change="updateText" />
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">正常</el-radio>
+            <el-radio label="0">关闭</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog :title="package.title" v-if="package.open"  :visible.sync="package.open" width="1000px" append-to-body>
+        <package-select  ref="package"  @selectPackage="selectPackage" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listStoreActivity, getStoreActivity, delStoreActivity, addStoreActivity, updateStoreActivity, exportStoreActivity } from "@/api/his/storeActivity";
+import Material from '@/components/Material'
+import singleImg from '@/components/Material/single'
+import Editor from '@/components/Editor/wang';
+
+import packageSelect from "./packageSelect";
+
+export default {
+  name: "StoreActivity",
+  components: {
+    packageSelect,
+    Editor,
+    Material,
+    singleImg,
+  },
+  watch: {
+    imageArr: function(val) {
+      this.form.logoUrl = val.join(',')
+    },
+    photoArr: function(val) {
+      this.form.images = val.join(',')
+    },
+  },
+  data() {
+    return {
+      photoArr:[],
+      packages:[],
+      package:{
+        open:false,
+        title:"疗法选择"
+      },
+      statusOptions:[],
+      imageArr:[],
+      activeName:"1",
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 活动表格数据
+      storeActivityList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        descs: null,
+        logoUrl: null,
+        images: null,
+        packageIds: null,
+        content: null,
+        status: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getDicts("common_status").then((response) => {
+      this.statusOptions = response.data;
+    });
+
+    this.getList();
+  },
+  methods: {
+    selectPackage(row){
+      for(var i=0;i<this.packages.length;i++){
+        this.$message.warning('该疗法已存在,无需重复添加!');
+        if(this.packages[i].packageId==row.packageId){
+          return;
+        }
+      }
+      this.packages.push(row);
+      this.$message.success('疗法'+row.packageName+'添加成功!');
+    },
+    handleAddPackage(){
+      this.package.open=true;
+    },
+    handlePackageDelete(row){
+       this.packages.splice(this.packages.findIndex(item => item.packageId === row.packageId), 1)
+    },
+    updateText(text){
+      this.form.content=text
+    },
+    handleClick(tab, event) {
+      this.queryParams.status=tab.name;
+      this.getList();
+    },
+    /** 查询活动列表 */
+    getList() {
+      this.loading = true;
+      listStoreActivity(this.queryParams).then(response => {
+        this.storeActivityList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        activityId: null,
+        title: null,
+        descs: null,
+        logoUrl: null,
+        images: null,
+        packageIds: null,
+        content: null,
+        createTime: null,
+        status: "1"
+      };
+      this.imageArr=[];
+      this.photoArr=[];
+      this.packages=[];
+      this.packages=[];
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.activityId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加活动";
+      setTimeout(() => {
+        this.$refs.myeditor.setText("");
+      }, 200);
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const activityId = row.activityId || this.ids
+      getStoreActivity(activityId).then(response => {
+        this.form = response.activity;
+        this.form.status=this.form.status.toString();
+        if(this.form.logoUrl!=null){
+          this.imageArr=this.form.logoUrl.split(',');
+        }
+        if(this.form.images!=null){
+          this.photoArr=this.form.images.split(',');
+        }
+        this.packages=response.packages;
+        this.open = true;
+        this.title = "修改活动";
+        setTimeout(() => {
+          if(this.form.content==null){
+            this.$refs.myeditor.setText("");
+          }
+          else{
+            this.$refs.myeditor.setText(this.form.content);
+          }
+        }, 200);
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          var packageIds=[];
+          if (this.packages && this.packages.length>0) {
+            this.packages.forEach(element => {
+              packageIds.push(element.packageId);
+            });
+            this.form.packageIds=packageIds.toString();
+          }
+          if (this.form.activityId != null) {
+            updateStoreActivity(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          } else {
+            addStoreActivity(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const activityIds = row.activityId || this.ids;
+      this.$confirm('是否确认删除活动编号为"' + activityIds + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delStoreActivity(activityIds);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有活动数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return exportStoreActivity(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+        }).catch(function() {});
+    }
+  }
+};
+</script>

+ 119 - 0
src/views/his/storeActivity/packageSelect.vue

@@ -0,0 +1,119 @@
+<template>
+  <div class="product-select" >
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+      <el-form-item label="商品名称" prop="productName">
+        <el-input
+          style="width:200px"
+          v-model="queryParams.packageName"
+          placeholder="请输入商品名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table height="600" v-loading="loading" border :data="list" >
+      <el-table-column label="ID" align="center" prop="packageId" />
+      <el-table-column label="套餐包名称" align="center" prop="packageName" />
+      <el-table-column label="疗法图片" align="center" prop="imgUrl">
+        <template slot-scope="scope">
+            <img :src="scope.row.imgUrl" style="height: 80px;">
+        </template>
+      </el-table-column>
+      <el-table-column label="别名" align="center" prop="secondName" />
+      <el-table-column label="类型" align="center" prop="packageType">
+        <template slot-scope="scope">
+          <dict-tag :options="packageTypeOptions" :value="scope.row.packageType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="子类型" align="center" prop="packageSubType">
+        <template slot-scope="scope">
+          <dict-tag :options="packageSubTypeOptions" :value="scope.row.packageSubType"/>
+        </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="handleSelect(scope.row)"
+          >选择
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      style="padding-bottom:10px;"
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+// import { listPackage } from "@/api/his/package";
+import { listPackage } from '../../../api/his/package'
+
+export default {
+  name: "selectPackage",
+  data() {
+    return {
+      loading: true,
+      list:[],
+      packageTypeOptions:[],
+      packageSubTypeOptions:[],
+      total: 0,
+      queryParams: {
+        packageName:"",
+        secondName:"",
+        status:1,
+        isShow:1,
+        pageNum: 1,
+        pageSize: 10,
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getDicts("sys_package_type").then(response => {
+      this.packageTypeOptions = response.data;
+    });
+    this.getDicts("sys_package_sub_type").then(response => {
+      this.packageSubTypeOptions = response.data;
+    });
+  },
+  methods: {
+    handleSelect(row){
+      this.$emit('selectPackage',row);
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    getDetails(){
+      this.getList();
+    },
+    getList(){
+      this.loading = true;
+      listPackage(this.queryParams).then(response => {
+        this.list = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    }
+  }
+};
+</script>
+<style scoped>
+
+.product-select{
+  padding-bottom: 15px;
+}
+</style>