hwb0 3 лет назад
Родитель
Сommit
4156387124

Разница между файлами не показана из-за своего большого размера
+ 1 - 17064
package-lock.json


+ 6 - 6
src/api/common.js

@@ -4,15 +4,15 @@ import request from '@/utils/request'
  * 附件
  * @param {*} data
  */
-export const privateFileSaveUrl = '/api/v1/ygp/image/remote/upload/1'
+export const privateFileSaveUrl = '/api/v1/mp/image/remote/upload/1'
 
-export const publicFileSaveUrl = '/api/v1/ygp/image/remote/upload/0'
+export const publicFileSaveUrl = '/api/v1/mp/image/remote/upload/0'
 
 // 云端非公开可访问的BaseUrl
-export const privateFileGetUrl = '/api/v1/ygp/file/remote/download?name='
+export const privateFileGetUrl = '/api/v1/mp/file/remote/download?name='
 
 // 云端公开可访问的BaseUrl
-export const publicFileGetUrl = process.env.NODE_ENV === "production" ? 'https://ygp-public-1307117429.cos.ap-shanghai.myqcloud.com/':'https://ygp-public-test-1307117429.cos.ap-shanghai.myqcloud.com/'
+export const publicFileGetUrl = process.env.NODE_ENV === "production" ? 'https://mp-public-1307117429.cos.ap-shanghai.myqcloud.com/':'https://mp-public-test-1307117429.cos.ap-shanghai.myqcloud.com/'
 
 /**
  * Put 方式上传图片
@@ -61,7 +61,7 @@ export function uploadFileRequest(data, bizType, config = {}) {
     formData.append(key, data[key])
   })
   return request({
-    url: '/api/v1/ygp/file/remote/upload/' + bizType,
+    url: '/api/v1/mp/file/remote/upload/' + bizType,
     method: 'put',
     data: formData ,
     ...config,
@@ -90,7 +90,7 @@ export function importFileSaveAPI(data, config = {}) {
     formData.append(key, data[key])
   })
   return request({
-    url: '/api/v1/ygp/meter/importData',
+    url: '/api/v1/mp/meter/importData',
     method: 'post',
     data: formData ,
     ...config,

+ 2 - 1
src/main.js

@@ -16,7 +16,7 @@ import './assets/icons' // icon
 import './permission' // permission control
 import { getDicts } from "@/api/system/dict/data";
 import { getConfigKey } from "@/api/system/config";
-import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/util";
+import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree, numberFormat } from "@/utils/util";
 import Pagination from "@/components/Pagination";
 // 自定义表格工具组件
 import RightToolbar from "@/components/RightToolbar"
@@ -43,6 +43,7 @@ Vue.prototype.selectDictLabel = selectDictLabel
 Vue.prototype.selectDictLabels = selectDictLabels
 Vue.prototype.download = download
 Vue.prototype.handleTree = handleTree
+Vue.prototype.$numberFormat = numberFormat
 
 // 处理时间的过滤器
 Vue.use(require('vue-moment'))

+ 15 - 1
src/router/index.js

@@ -149,7 +149,21 @@ export const constantRoutes = [
         meta: { title: '修改生成配置', activeMenu: '/tool/gen'}
       }
     ]
-  }
+  },
+  {
+    path: '/ticket',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'create',
+        component: (resolve) => require(['@/views/business/ticket/create'], resolve),
+        name: 'TicketCreate',
+        meta: { title: '添加盲票组' ,activeMenu: '/business/ticket'}
+      },
+    ]
+  },
+
 ]
 
 export default new Router({

+ 1 - 1
src/utils/util.js

@@ -175,7 +175,7 @@ export function accMul(arg1, arg2) {
 	return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
 }
 
-export function numberFormat(number, decimals, dec_point, thousands_sep) {
+export function numberFormat(number, decimals = 2, dec_point = '.', thousands_sep = ',') {
   /*
     * 参数说明:
     * number:要格式化的数字

+ 5 - 5
src/views/business/channel/components/Create.vue

@@ -215,7 +215,7 @@ export default {
           name:'无(新建一级渠道)'
           }
           this.channelList.push(noneObj)
-        console.log("getChannelList == "+ JSON.stringify(response.data))
+        // console.log("getChannelList == "+ JSON.stringify(response.data))
          this.channelList = this.channelList.concat(response.data || []);
          this.channelCopyList = this.channelList;
       });
@@ -227,7 +227,7 @@ export default {
       this.form.cityId = ""
       this.form.areaId = ""
       listAreaByPid(0).then(response => {
-        console.log("getProvinceList"+JSON.stringify(response))
+        // console.log("getProvinceList"+JSON.stringify(response))
          this.provinceList = response || [];
       });
     },
@@ -254,7 +254,7 @@ export default {
       var provinceId = this.form.provinceId
       this.form.province = this.getProvinceName()
       listAreaByPid(provinceId).then(response => {
-        console.log("getCityList"+JSON.stringify(response))
+        // console.log("getCityList"+JSON.stringify(response))
          this.cityList = response || [];
       });
 
@@ -275,7 +275,7 @@ export default {
       var cityId = this.form.cityId
       this.form.city = this.getCityName();
       listAreaByPid(cityId).then(response => {
-        console.log("getAreaList"+JSON.stringify(response))
+        // console.log("getAreaList"+JSON.stringify(response))
          this.areaList = response || [];
       });
     },
@@ -366,7 +366,7 @@ export default {
      * 保存
      */
     submitForm(params) {
-       console.log("submitForm =============")
+      //  console.log("submitForm =============")
       if (this.editId) {
         params.channelId = this.editId;
       }

+ 4 - 4
src/views/business/channel/index.vue

@@ -310,7 +310,7 @@ export default {
       this.queryParams.cityId = ""
       this.queryParams.areaId = ""
       listAreaByPid(0).then(response => {
-        console.log("getProvinceList"+JSON.stringify(response))
+        // console.log("getProvinceList"+JSON.stringify(response))
          this.provinceList = response || [];
       });
     },
@@ -322,7 +322,7 @@ export default {
       this.queryParams.areaId = ""
       var provinceId = this.queryParams.provinceId
       listAreaByPid(provinceId).then(response => {
-        console.log("getCityList"+JSON.stringify(response))
+        // console.log("getCityList"+JSON.stringify(response))
          this.cityList = response || [];
       });
     },
@@ -330,7 +330,7 @@ export default {
     getAreaList(){
       var cityId = this.queryParams.cityId
       listAreaByPid(cityId).then(response => {
-        console.log("getAreaList"+JSON.stringify(response))
+        // console.log("getAreaList"+JSON.stringify(response))
          this.areaList = response || [];
       });
     },
@@ -428,5 +428,5 @@ export default {
 };
 </script>
 <style lang="sass" scoped>
-
+  
 </style>

+ 3 - 3
src/views/business/salesite/index.vue

@@ -287,7 +287,7 @@ export default {
       this.queryParams.cityId = ""
       this.queryParams.areaId = ""
       listAreaByPid(0).then(response => {
-        console.log("getProvinceList"+JSON.stringify(response))
+        // console.log("getProvinceList"+JSON.stringify(response))
          this.provinceList = response || [];
       });
     },
@@ -299,7 +299,7 @@ export default {
       this.queryParams.areaId = ""
       var provinceId = this.queryParams.provinceId
       listAreaByPid(provinceId).then(response => {
-        console.log("getCityList"+JSON.stringify(response))
+        // console.log("getCityList"+JSON.stringify(response))
          this.cityList = response || [];
       });
     },
@@ -307,7 +307,7 @@ export default {
     getAreaList(){
       var cityId = this.queryParams.cityId
       listAreaByPid(cityId).then(response => {
-        console.log("getAreaList"+JSON.stringify(response))
+        // console.log("getAreaList"+JSON.stringify(response))
          this.areaList = response || [];
       });
     },

+ 562 - 0
src/views/business/ticket/create.vue

@@ -0,0 +1,562 @@
+<template>
+  <div class="app-container">
+    <div class="base-info">
+      <div class="base-info-title">基础信息</div>
+      <!-- 基础信息 -->
+      <div class="base-info-form">
+        <el-form :model="form" :rules="rules" ref="form" label-width="100px">
+          <el-form-item label="盲票类型" prop="type">
+            <el-radio-group v-model="form.type" size="small">
+              <el-radio label="online">线上盲票</el-radio>
+              <el-radio label="offline">线下盲票</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="盲票组名称" prop="title">
+            <el-input
+              v-model="form.title"
+              style="width: 587px"
+              size="small"
+              placeholder="请输入盲票组名称"
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="图片" prop="picUrl">
+            <image-upload
+              :limit="1"
+              :value="form.picUrl"
+              :file-size="50"
+              :is-public="true"
+              @input="pictureSelect"
+            />
+          </el-form-item>
+          <div class="tip">
+            上传1张图片,支持jpg、png格式上传,建议使用尺寸800x800像素以上、大小不超过1M的正方形图片;
+          </div>
+          <el-form-item label="面值" prop="facePrice">
+            <el-input
+              v-model="form.facePrice"
+              style="width: 240px"
+              size="small"
+              placeholder="请输入面值"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="售价" prop="salePrice">
+            <el-input
+              v-model="form.salePrice"
+              style="width: 240px"
+              size="small"
+              placeholder="请输入售价"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="数量" prop="quantity">
+            <el-input
+              v-model="form.quantity"
+              style="width: 240px"
+              size="small"
+              placeholder="请输入数量"
+            >
+              <template slot="append">张</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="每包张数"
+            prop="pkgUnit"
+            v-if="form.type == 'offline'"
+          >
+            <el-input
+              v-model="form.pkgUnit"
+              style="width: 240px"
+              size="small"
+              placeholder="请输入每包张数"
+            >
+              <template slot="append">张</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item
+            label="采购单价"
+            prop="pkgSalePrice"
+            v-if="form.type == 'offline'"
+          >
+            <el-input
+              v-model="form.pkgSalePrice"
+              style="width: 240px"
+              size="small"
+              placeholder="请输入采购单价"
+            >
+              <template slot="append">元/包</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="分佣基数" prop="saleCommRate">
+            <el-input
+              v-model="form.saleCommRate"
+              style="width: 240px"
+              size="small"
+              placeholder="请输入分佣基数"
+            >
+              <template slot="append">%</template>
+            </el-input>
+          </el-form-item>
+          <div class="tip">
+            例如:盲票面值10元,分佣基数90%,经销商佣金比例20%,那么每卖一张票,经销商佣金为10元*90%*20%=1.8元
+          </div>
+        </el-form>
+      </div>
+      <div class="base-info-title">奖级设置</div>
+      <!-- 奖级设置 -->
+      <div class="prize" v-for="(item, index) in awardsList" :key="index">
+        <div class="prize-top">
+          <div>奖级名称:{{ item.name }}</div>
+          <div>奖级:{{ item.sort }}</div>
+          <div>奖级数量:{{ item.quantity }}</div>
+        </div>
+        <div class="prize-table">
+          <el-table :data="item.prizeList" class="el-table">
+            <el-table-column label="奖品图片" prop="storeName">
+              <template slot-scope="scope">
+                <el-image
+                  style="width: 70px; height: 70px"
+                  :src="scope.row.picUrl"
+                  :preview-src-list="[scope.row.picUrl]"
+                >
+                </el-image>
+              </template>
+            </el-table-column>
+            <el-table-column label="奖品名称" prop="title" />
+            <el-table-column label="奖品类型" prop="storeName">
+              <template slot-scope="scope"> </template>
+            </el-table-column>
+            <el-table-column label="奖品数量" prop="storeName">
+              <template slot-scope="scope">
+                <el-input-number
+                  v-model="num"
+                  controls-position="right"
+                  @change="handleChange"
+                  :min="1"
+                  size="small"
+                ></el-input-number>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="center">
+              <template slot-scope="scope">
+                <el-button
+                  size="mini"
+                  type="text"
+                  @click="handleDel(scope.$index, item)"
+                  >删除</el-button
+                >
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div class="prize-btn">
+          <el-dropdown @command="handleCommand($event, index)">
+            <el-button type="primary" size="small">
+              添加奖品<i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item command="goods">商品</el-dropdown-item>
+              <el-dropdown-item command="coupon">代金券</el-dropdown-item>
+              <el-dropdown-item command="coin">盲豆</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </div>
+      </div>
+      <!-- 保存 -->
+      <div class="save-btn">
+        <el-button size="small"> 取 消 </el-button>
+        <div class="ge"></div>
+        <el-button type="primary" size="small" @click="submitForm">
+          保 存
+        </el-button>
+      </div>
+    </div>
+
+    <!-- 添加商品 -->
+    <el-dialog
+      title="添加实物奖品"
+      width="1000px"
+      :visible.sync="goodsTableVisible"
+      :before-close="close"
+    >
+      <div class="dialog-search">
+        <div>商品名称:</div>
+        <el-input
+          v-model="name"
+          placeholder="请输入盲票组名称"
+          clearable
+          size="small"
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+        <div class="ge"></div>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >查询</el-button
+        >
+      </div>
+      <el-table
+        v-loading="loading"
+        :data="goodsList"
+        @selection-change="handleSelectionGoods"
+        class="el-table"
+      >
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+          fixed="left"
+        />
+        <el-table-column label="商品ID" prop="goodsId" />
+        <el-table-column label="商品图片">
+          <template slot-scope="scope">
+            <el-image
+              style="width: 100px; height: 100px"
+              :src="scope.row.picUrl"
+              :preview-src-list="[scope.row.picUrl]"
+            >
+            </el-image>
+          </template>
+        </el-table-column>
+        <el-table-column label="商品名称" prop="title" min-width="85" />
+
+        <el-table-column label="商品价格" min-width="85">
+          <template slot-scope="scope">
+            ¥{{ $numberFormat(scope.row.exchangePrice) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="商品库存" prop="quantity" width="80" />
+      </el-table>
+      <pagination
+        v-show="goodsTotal > 0"
+        :total="goodsTotal"
+        :page.sync="pageParams.pageNum"
+        :limit.sync="pageParams.pageSize"
+        @pagination="getGoodsList"
+      />
+      <div class="dialog-btn">
+        <el-button size="small" @click="close"> 取 消 </el-button>
+        <div class="ge"></div>
+        <el-button type="primary" size="small" @click="confirmGoods">
+          确 认
+        </el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { getGoodsList } from "@/api/business/goods";
+import { publicFileGetUrl } from "@/api/common";
+export default {
+  name: "TicketCreate",
+  data() {
+    return {
+      loading: false,
+      picture: [],
+      form: {
+        type: "online", //盲票类型
+        title: "", // 盲票名称
+        picUrl: [], // 图片
+        facePrice: "", // 面值
+        salePrice: "", // 售价
+        quantity: "", // 数量
+        pkgUnit: "", // 张数
+        pkgSalePrice: "", // 单价
+        saleCommRate: "", // 基数
+      },
+      rules: {
+        type: [
+          { required: true, message: "请选择盲票类型", trigger: "change" },
+        ],
+        title: [
+          { required: true, message: "请输入盲票组名称", trigger: "blur" },
+        ],
+        picUrl: [
+          {
+            type: "array",
+            required: true,
+            message: "请上传盲票图片",
+            trigger: "change",
+          },
+        ],
+        facePrice: [
+          { required: true, message: "请输入面值", trigger: "blur" },
+          {
+            pattern:
+              /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
+            message: "请输入合法的金额数字,最多两位小数",
+            trigger: ["blur", "change"],
+          },
+        ],
+        salePrice: [
+          { required: true, message: "请输入售价", trigger: "blur" },
+          {
+            pattern:
+              /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
+            message: "请输入合法的金额数字,最多两位小数",
+            trigger: ["blur", "change"],
+          },
+        ],
+        quantity: [
+          { required: true, message: "请输入数量", trigger: "blur" },
+          {
+            pattern: /^([1-9]\d*)$/,
+            message: "请输入合法的数字",
+            trigger: ["blur", "change"],
+          },
+        ],
+        pkgUnit: [
+          { required: true, message: "请输入每包张数", trigger: "blur" },
+          {
+            pattern: /^([1-9]\d*)$/,
+            message: "请输入合法的数字",
+            trigger: ["blur", "change"],
+          },
+        ],
+        pkgSalePrice: [
+          { required: true, message: "请输入采购单价", trigger: "blur" },
+          {
+            pattern:
+              /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
+            message: "请输入合法的金额数字,最多两位小数",
+            trigger: ["blur", "change"],
+          },
+        ],
+        saleCommRate: [
+          { required: true, message: "请输入分佣基数", trigger: "blur" },
+          {
+            pattern:
+              /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
+            message: "请输入合法的数字,最多两位小数",
+            trigger: ["blur", "change"],
+          },
+        ],
+      },
+      input: 0,
+      num: 1,
+      list: [],
+      // 奖级列表
+      awardsList: [
+        {
+          name: "至尊级",
+          sort: 1,
+          quantity: 0,
+          prizeList: [],
+        },
+        {
+          name: "尊享款",
+          sort: 2,
+          quantity: 0,
+          prizeList: [],
+        },
+        {
+          name: "稀有款",
+          sort: 3,
+          quantity: 0,
+          prizeList: [],
+        },
+        {
+          name: "隐藏款",
+          sort: 4,
+          quantity: 0,
+          prizeList: [],
+        },
+        {
+          name: "普通款",
+          sort: 5,
+          quantity: 0,
+          prizeList: [],
+        },
+      ],
+
+      prizeIndex: null, // 奖级下标
+
+      goodsTableVisible: false, // 添加商品弹框
+      goodsList: [], // 商品列表
+      goodsTotal: 10, // 商品总数
+      selectGoodsList: [],
+
+      name: "",
+
+      pageParams: {
+        pageNum: 1,
+        pageSize: 5,
+      },
+    };
+  },
+  created() {
+    this.getGoodsList();
+  },
+  methods: {
+    getGoodsList() {
+      this.loading = true;
+      getGoodsList(
+        "pageNum=" +
+          this.pageParams.pageNum +
+          "&pageSize=" +
+          this.pageParams.pageSize +
+          "&",
+        {}
+      ).then((res) => {
+        console.log(res);
+        this.goodsList = res.rows.map((item) => {
+          return {
+            ...item,
+            picUrl: publicFileGetUrl + item.picUrl,
+          };
+        });
+        this.goodsTotal = res.total;
+        this.loading = false;
+        console.log("this.goodsList", this.goodsList);
+      });
+    },
+    confirm() {},
+    submitForm() {
+      this.awardsList.forEach(item => {
+        item.prizeList = item.prizeList.map(ele=>{
+          return {
+            ...ele,
+            refId: ele.goodsId,
+            prizeType: ele.prizeType,
+          }
+        })
+      });
+
+      console.log('this.awardsList', this.awardsList)
+      // this.$refs["form"].validate((valid) => {
+      //   if (valid) {
+      //     console.log(this.form);
+      //   } else {
+      //     console.log("error submit!!");
+      //     return false;
+      //   }
+      // });
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+
+    pictureSelect(data) {
+      this.form.picUrl = data;
+    },
+
+    handleChange() {},
+
+    // 奖级商品删除
+    handleDel(e, item) {
+      console.log(e);
+      console.log("item", item);
+      let list = item.prizeList
+      list.splice(0, 1)
+      console.log('list', list)
+      this.$set(item, 'prizeList', list)
+    },
+
+    // 关闭弹框
+    close() {
+      this.goodsTableVisible = false;
+    },
+
+    // 添加奖品种类
+    handleCommand(e, index) {
+      console.log("e", e);
+      console.log("index", index);
+      this.prizeIndex = index;
+      // this.$set(item, "prizeList", this.goodsList);
+      this.goodsTableVisible = true;
+    },
+
+    handleQuery() {},
+
+    // 选中商品
+    handleSelectionGoods(e) {
+      console.log("选中商品", e);
+      this.selectGoodsList = e;
+      this.selectGoodsList.forEach(item=>{
+        item.prizeType = 'goods'
+      })
+    },
+
+    // 确认选中商品
+    confirmGoods() {
+      this.awardsList[this.prizeIndex].prizeList = this.awardsList[
+        this.prizeIndex
+      ].prizeList.concat(this.selectGoodsList);
+      this.getGoodsList();
+      this.close();
+    },
+  },
+  components: {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style lang="scss" scoped>
+.base-info-title {
+  padding: 10px;
+  border-bottom: 1px solid #eaeaea;
+  margin-bottom: 20px;
+}
+.tip {
+  padding-left: 100px;
+  height: 32px;
+  margin-bottom: 20px;
+  color: #828282;
+  font-size: 14px;
+}
+.save-btn {
+  display: flex;
+  align-content: center;
+  justify-content: center;
+  margin-bottom: 100px;
+  .ge {
+    width: 100px;
+  }
+}
+.prize {
+  width: 1000px;
+  margin-bottom: 50px;
+  background: #f9f9f9;
+  border: 1px solid #bbbbbb;
+  font-size: 14px;
+  &-top {
+    padding: 10px 20px;
+    margin-bottom: 10px;
+    display: flex;
+    align-content: center;
+    justify-content: space-around;
+    border-bottom: 1px solid #bbbbbb;
+    div {
+      line-height: 36px;
+    }
+  }
+  &-btn {
+    border-top: 1px solid #bbbbbb;
+    padding: 10px;
+  }
+}
+
+.dialog-search {
+  display: flex;
+  line-height: 32px;
+  margin-bottom: 20px;
+  .ge {
+    width: 40px;
+  }
+}
+
+.dialog-btn {
+  display: flex;
+  align-content: center;
+  justify-content: flex-end;
+  padding: 40px 0 0;
+  .ge {
+    width: 40px;
+  }
+}
+</style>

+ 0 - 0
src/views/business/ticket/detail.vue


+ 216 - 0
src/views/business/ticket/index.vue

@@ -0,0 +1,216 @@
+<template>
+  <div class="app-container">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      :inline="true"
+      v-show="showSearch"
+      label-width="90px"
+    >
+      <el-form-item label="盲票组名称">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入盲票组名称"
+          clearable
+          size="small"
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="盲票组类型">
+        <el-select
+          v-model="queryParams.ticketType"
+          placeholder="请选择盲票组类型"
+          clearable
+          size="small"
+          @change="handleQuery"
+        >
+          <el-option
+            v-for="item in ticketTypeArr"
+            :key="item.areaId"
+            :label="item.areaName"
+            :value="item.areaId"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="盲票组状态">
+        <el-select
+          v-model="queryParams.ticketState"
+          placeholder="请选择盲票组状态"
+          clearable
+          size="small"
+          @change="handleQuery"
+        >
+          <el-option
+            v-for="item in ticketStateArr"
+            :key="item.areaId"
+            :label="item.areaName"
+            :value="item.areaId"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          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="['business:ticket:add']"
+          >添加盲票组</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-loading="loading"
+      :data="list"
+      @selection-change="handleSelectionChange"
+      class="el-table"
+    >
+      <el-table-column
+        type="selection"
+        width="55"
+        align="center"
+        fixed="left"
+      />
+      <el-table-column
+        label="盲票组ID"
+        prop="id"
+        min-width="80"
+      ></el-table-column>
+      <el-table-column label="盲票图片" prop="storeName" min-width="100">
+        <template slot-scope="scope">
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="scope.row.url"
+            :preview-src-list="[scope.row.url]"
+          >
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column label="盲票组名称" prop="name" min-width="85" />
+
+      <el-table-column label="盲票组面值" prop="billType" min-width="85">
+        <template slot-scope="scope">
+          {{ $numberFormat(scope.row.money) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="盲票总数" prop="num" width="80">
+      </el-table-column>
+      <el-table-column label="已售张数" prop="sNum" min-width="80">
+      </el-table-column>
+      <el-table-column label="盲票类型" prop="realAmt" min-width="80">
+        <template slot-scope="scope">
+          {{ scope.row.type == 1 ? "线下" : "线上" }}
+        </template>
+      </el-table-column>
+      <el-table-column label="采购单价" prop="status" min-width="80">
+        <template slot-scope="scope">
+          {{ $numberFormat(scope.row.amt) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="已采购数量" prop="aNum" min-width="80">
+      </el-table-column>
+      <el-table-column label="状态" prop="status" min-width="80">
+        <template slot-scope="scope">
+          {{ scope.row.state == 1 ? "已上架" : "已下架" }}
+        </template>
+      </el-table-column>
+
+      <el-table-column
+        label="操作"
+        align="center"
+        show-overflow-tooltip
+        class-name="small-padding  fixed-width"
+        min-width="150"
+        fixed="right"
+      >
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="pageParams.pageNum"
+      :limit.sync="pageParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+export default {
+  name: "Ticket",
+  data() {
+    return {
+      loading: false,
+      showSearch: true,
+      queryParams: {
+        name: "",
+        ticketType: "",
+        ticketState: "",
+      },
+      pageParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+      ticketTypeArr: [],
+      ticketStateArr: [],
+      // 总条数
+      total: 10,
+      list: [
+        {
+          id: "01",
+          url: "https://cdn.uviewui.com/uview/album/1.jpg",
+          name: "盲票1",
+          money: 1000,
+          num: 200,
+          sNum: 100,
+          type: 1,
+          amt: 5000,
+          aNum: 20,
+          state: 1,
+        },
+      ],
+    };
+  },
+  methods: {
+    // 盲票组列表
+    getList() {},
+    // 搜索
+    handleQuery() {},
+    // 重置
+    resetQuery() {},
+    // 添加盲票组
+    handleAdd() {
+      this.$router.push({ name: "TicketCreate" });
+    },
+    // 表格多选
+    handleSelectionChange() {},
+  },
+  components: {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style lang="scss" scoped>
+
+</style>

Некоторые файлы не были показаны из-за большого количества измененных файлов