Sfoglia il codice sorgente

修正激活码数量为空校验,新增导出功能 -zzx

zouzexu 6 mesi fa
parent
commit
bda0b9bf9a

+ 9 - 0
src/api/common.js

@@ -184,6 +184,15 @@ export function getCityList(params) {
   })
 }
 
+// 平台城市列表
+export function getChildRegionsList(params) {
+  return request({
+    url: '/productcenterserver/region/childRegionsList',
+    method: 'post',
+    params
+  })
+}
+
 // 新增修改城市
 export function putCity(data) {
   return request({

+ 1 - 1
src/permission.js

@@ -2,7 +2,7 @@
  * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
  * @Date: 2022-08-02 18:10:30
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-02-28 15:30:43
+ * @LastEditTime: 2024-11-07 10:05:27
  * @FilePath: \admin-manage\src\permission.js
  * @Description: 
  * 

+ 43 - 2
src/router/index.js

@@ -2,7 +2,7 @@
  * @Author: wenjie 1454560336@qq.com
  * @Date: 2024-03-05 11:36:07
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-10-23 11:20:49
+ * @LastEditTime: 2024-11-07 10:01:35
  * @FilePath: \admin-manage\src\router\index.js
  * @Description:
  *
@@ -87,7 +87,7 @@ export let constantRoutes = [{
         },
       },
       {
-        id: 1,
+        id: 2,
         path: '/updatePassword',
         name: '/updatePassword',
         component: () => import('@/views/updatePassword/index.vue'),
@@ -98,6 +98,47 @@ export let constantRoutes = [{
       },
     ]
   },
+  {
+    id: 0,
+    path: '/authorityManage',
+    component: Layout,
+    meta: {
+      title: '权限管理',
+      icon: 'icon-shouyefill'
+    },
+    children: [
+      {
+        id: 1,
+        path: '/authorityManage/menuList',
+        name: '/authorityManage/menuList',
+        component: () => import('@/views/authorityManage/menuList.vue'),
+        meta: {
+          title: '菜单列表',
+          icon: ''
+        },
+      },
+      {
+        id: 2,
+        path: '/authorityManage/roleList',
+        name: '/authorityManage/roleList',
+        component: () => import('@/views/authorityManage/roleList.vue'),
+        meta: {
+          title: '角色列表',
+          icon: ''
+        },
+      },
+      {
+        id: 2,
+        path: '/authorityManage/userList',
+        name: '/authorityManage/userList',
+        component: () => import('@/views/authorityManage/userList.vue'),
+        meta: {
+          title: '用户列表',
+          icon: ''
+        },
+      },
+    ]
+  },
   // {
   //   id: 36,
   //   path: '/adminManage',

+ 1 - 1
src/utils/config.js

@@ -2,7 +2,7 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2024-01-05 16:08:18
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-10-23 11:20:56
+ * @LastEditTime: 2024-10-29 17:17:03
  * @FilePath: \admin-manage\src\utils\config.js
  * @Description: 124234
  * 

+ 1 - 1
src/utils/request.js

@@ -2,7 +2,7 @@
  * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
  * @Date: 2022-08-02 14:50:38
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-10-25 10:44:02
+ * @LastEditTime: 2024-11-01 11:54:14
  * @FilePath: \admin-manage\src\utils\request.js
  * @Description: 
  * 

+ 207 - 0
src/views/authorityManage/menuList.vue

@@ -0,0 +1,207 @@
+
+<template>
+  <div class="menuList app-container">
+    <div class="search">
+      <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+        >添加</el-button
+      >
+    </div>
+
+    <el-table
+    :data="tableData"
+    style="width: 100%;margin-bottom: 20px;"
+    row-key="id"
+    border
+    default-expand-all
+    :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+    <el-table-column
+      prop="date"
+      label="菜单名称"
+      align="center"
+      >
+    </el-table-column>
+    <el-table-column
+      prop="name"
+      label="排序"
+      align="center"
+      >
+    </el-table-column>
+    <el-table-column
+      prop="address"
+      label="请求地址"
+      align="center"
+      >
+    </el-table-column>
+    <el-table-column
+      prop="address"
+      label="类型"
+      align="center"
+      >
+    </el-table-column>
+      <el-table-column prop="address" align="center" label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" size="small" @click="handleDel(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <el-dialog :title="title" width="550px" :visible.sync="dialogFormVisible">
+        <el-form label-width="130px" :model="setQuery"
+        ref="setQuery"
+        :rules="rules">
+            <el-form-item label="菜单名称:"  prop="paperName">
+                <el-input
+                v-model="setQuery.paperName"
+                class="item-width-300"
+                ></el-input>
+            </el-form-item>
+             <el-form-item label="上级菜单:"  prop="paperName">
+                <el-select v-model="setQuery.type" class="item-width-300" placeholder="请选择">
+                    <el-option
+                    v-for="item in options"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="菜单类型:"  prop="questionsNum">
+               <el-radio-group v-model="setQuery.type">
+                    <el-radio :label="1">目录</el-radio>
+                    <el-radio :label="2">菜单</el-radio>
+                    <el-radio :label="3">按钮</el-radio>
+                </el-radio-group>
+            </el-form-item>
+             <el-form-item label="请求地址:"  prop="questionsNum">
+                <el-input
+                type="number"
+                v-model.number="setQuery.questionsNum"
+                class="item-width-300"
+                ></el-input>
+            </el-form-item>
+             <el-form-item label="显示排序:"  prop="questionsNum">
+                <el-input
+                type="number"
+                v-model.number="setQuery.questionsNum"
+                class="item-width-300"
+                ></el-input>
+            </el-form-item>
+        </el-form>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="btnLoading" @click="save">确 定</el-button>
+    </div>
+    </el-dialog>
+
+  </div>
+</template>
+  
+  <script>
+export default {
+  name: "menuList",
+  data() {
+    return {
+      title:"",
+      dialogFormVisible:false,
+      tableData: [{
+          id: 1,
+          date: '2016-05-02',
+          name: '王小虎',
+          address: '上海市普陀区金沙江路 1518 弄'
+        }, {
+          id: 2,
+          date: '2016-05-04',
+          name: '王小虎',
+          address: '上海市普陀区金沙江路 1517 弄'
+        }, {
+          id: 3,
+          date: '2016-05-01',
+          name: '王小虎',
+          address: '上海市普陀区金沙江路 1519 弄',
+          children: [{
+              id: 31,
+              date: '2016-05-01',
+              name: '王小虎',
+              address: '上海市普陀区金沙江路 1519 弄'
+            }, {
+              id: 32,
+              date: '2016-05-01',
+              name: '王小虎',
+              address: '上海市普陀区金沙江路 1519 弄'
+          }]
+        }, {
+          id: 4,
+          date: '2016-05-03',
+          name: '王小虎',
+          address: '上海市普陀区金沙江路 1516 弄'
+        }],
+      loading: false,
+      options:[
+        {
+          value: '选项1',
+          label: '黄金糕'
+        }, {
+          value: '选项2',
+          label: '双皮奶'
+        }, {
+          value: '选项3',
+          label: '蚵仔煎'
+        }
+      ],
+      setQuery: {
+       type:1
+      },
+      rules:{}
+    };
+  },
+
+  methods: {
+
+    handleEdit(row){
+        this.title = "编辑"
+        this.dialogFormVisible = true
+     
+    },
+    handleAdd(){
+        this.title = "添加"
+        this.dialogFormVisible = true
+    },
+    // 点击删除
+    handleDel(id) {
+       this.$confirm(`此操作将删除该数据, 是否继续?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          del({menuId:id}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: '成功',
+                message: '操作成功',
+                type: 'success'
+              });
+              this.getMenu()
+            }
+          })
+        })
+    },
+
+  },
+  created() {
+  },
+};
+</script>
+  
+<style lang="scss" scoped>
+.menuList {
+  .search{
+    justify-content: space-between;
+  }
+  .icon{
+    width: 80px;
+    height: 80px;
+  }
+}
+</style>
+  

+ 336 - 0
src/views/authorityManage/roleList.vue

@@ -0,0 +1,336 @@
+
+<template>
+  <div class="roleList app-container">
+    <div class="search">
+        <div>
+            <el-input
+            v-model="query.name"
+            size="small"
+            clearable
+            placeholder="请输入名称"
+            class="item-width-200 "
+            ></el-input>
+             <el-input
+            v-model="query.name"
+            size="small"
+            clearable
+            placeholder="请输入登录账号"
+            class="item-width-200 ml10"
+            ></el-input>
+            <el-select
+          v-model="query.activityType"
+          size="small"
+          class="item-width-200 ml10"
+          placeholder="请选择角色"
+          clearable
+        >
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+
+        <el-date-picker
+          v-model="date"
+          size="small"
+          value-format="timestamp"
+          class="item-width-350 ml10"
+          type="datetimerange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+       
+            <el-button
+            class="ml10"
+            type="primary"
+            size="small"
+            icon="el-icon-search"
+            @click="handleSearch"
+        >
+            搜索
+        </el-button>
+        </div>
+        <el-button
+            type="primary"
+            size="small"
+            @click="handleAdd"
+        >
+            添加
+        </el-button>
+    </div>
+
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+      <el-table-column
+        align="center"
+        label="角色名称"
+        prop="activityName"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      
+      <el-table-column
+        align="center"
+        label="备注"
+        prop="status"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="状态"
+        prop="status"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="创建时间"
+        prop="status"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+
+       <el-table-column prop="address" align="center" label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" size="small" @click="handleEdit(scope.row)">权限分配</el-button>
+          <el-button type="text" size="small" @click="handleDel(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-box">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+        :current-page="query.currentPage"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="query.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+
+     <el-dialog :title="title" width="550px" :visible.sync="dialogFormVisible">
+        <el-form label-width="130px" :model="setQuery"
+        ref="setQuery"
+        :rules="rules">
+            <el-form-item label="角色名称:"  prop="paperName">
+                <el-input
+                v-model="setQuery.paperName"
+                class="item-width-300"
+                ></el-input>
+            </el-form-item>
+            <el-form-item label="备注:"  prop="paperName">
+                <el-input
+                v-model="setQuery.paperName"
+                class="item-width-300"
+                ></el-input>
+            </el-form-item>
+             
+            <el-form-item label="权限分配:"  prop="questionsNum">
+              <el-tree
+                style="margin-top: 10px;"
+                :data="data"
+                show-checkbox
+                default-expand-all
+                node-key="id"
+                ref="tree"
+                highlight-current
+                :props="defaultProps">
+              </el-tree>
+            </el-form-item>
+           
+        </el-form>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="btnLoading" @click="save">确 定</el-button>
+    </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+  <script>
+  import {activityList,activityDel,activityStop} from '@/api/activity'
+export default {
+  name: "roleList",
+  data() {
+    return {
+        date:'',
+        data: [{
+          id: 1,
+          label: '一级 1',
+          children: [{
+            id: 4,
+            label: '二级 1-1',
+            children: [{
+              id: 9,
+              label: '三级 1-1-1'
+            }, {
+              id: 10,
+              label: '三级 1-1-2'
+            }]
+          }]
+        }, {
+          id: 2,
+          label: '一级 2',
+          children: [{
+            id: 5,
+            label: '二级 2-1'
+          }, {
+            id: 6,
+            label: '二级 2-2'
+          }]
+        }, {
+          id: 3,
+          label: '一级 3',
+          children: [{
+            id: 7,
+            label: '二级 3-1'
+          }, {
+            id: 8,
+            label: '二级 3-2'
+          }]
+        }],
+        defaultProps: {
+          children: 'children',
+          label: 'label'
+        },
+      options:[
+        {
+          value:1,
+          label:'海报'
+        },
+        {
+          value:2,
+          label:'报名'
+        },
+      ],
+ 
+      tableData: [],
+      loading: false,
+      btnLoading: false,
+      dialogFormVisible: false,
+      query: {
+        "activityType":null,
+        "state":'',
+        "currentPage": 1,
+        "pageSize": 10,
+        shopId: 0,
+      },
+      setQuery: {
+       type:1
+      },
+      rules:{},
+      title: "",
+      total: 0,
+    };
+  },
+  watch: {
+    date(val){
+      if(val){
+        this.query.startTime = val[0]
+        this.query.endTime = val[1]
+      }else{
+        this.query.startTime = ''
+        this.query.endTime = ''
+      }
+    }
+  },
+  methods: {
+    handleEdit(row){
+        this.title = "编辑"
+        this.dialogFormVisible = true
+     
+    },
+    handleAdd(){
+        this.title = "添加"
+        this.dialogFormVisible = true
+    },
+    handleSearch(){
+      this.query.currentPage = 1
+      this.activityList();
+    },
+    handleDel(id){
+         this.$confirm(`此操作将删除该活动, 是否继续?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        }).then(() => {
+          activityDel({id}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: "成功",
+                message: "操作成功",
+                type: "success",
+              });
+              this.handleSearch()
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.currentPage = 1;
+      this.query.pageSize = val;
+      this.activityList()
+    },
+    handleCurrentChange(val) {
+      this.query.currentPage = val;
+      this.activityList()
+    },
+    activityList(){
+    //   this.loading = true
+    //   activityList(this.query).then(res=>{
+    //     this.loading = false
+    //     if(res.state == 'Success'){
+    //       this.tableData = res.content.records
+    //       this.total = res.content.total
+    //     }
+    //   })
+    },
+    save(){
+        console.log(1111);
+        this.$refs.setQuery.validate((v) => {
+        if (v) {
+        //   this.btnLoading = true
+        //   addOrUpdatePaper(this.setQuery).then(res=>{
+        //     this.btnLoading = false
+        //     if(res.state == 'Success'){
+                this.dialogFormVisible = false
+        //       this.$notify({
+        //           title: '成功',
+        //           message: '操作成功',
+        //           type: 'success'
+        //         });
+        //         this.query.currentPage = 1
+        //         this.paperList();
+        //     }
+        //   })
+        }
+      });
+    }
+  },
+  created() {
+    this.activityList()
+  },
+};
+</script>
+
+<style lang="scss" >
+.roleList {
+
+}
+
+</style>

+ 361 - 0
src/views/authorityManage/userList.vue

@@ -0,0 +1,361 @@
+
+<template>
+  <div class="userList app-container">
+    <div class="search">
+        <div>
+            <el-input
+            v-model="query.name"
+            size="small"
+            clearable
+            placeholder="请输入名称"
+            class="item-width-200 "
+            ></el-input>
+             <el-input
+            v-model="query.name"
+            size="small"
+            clearable
+            placeholder="请输入登录账号"
+            class="item-width-200 ml10"
+            ></el-input>
+            <el-select
+          v-model="query.activityType"
+          size="small"
+          class="item-width-200 ml10"
+          placeholder="请选择角色"
+          clearable
+        >
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+
+        <el-date-picker
+          v-model="date"
+          size="small"
+          value-format="timestamp"
+          class="item-width-350 ml10"
+          type="datetimerange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+       
+            <el-button
+            class="ml10"
+            type="primary"
+            size="small"
+            icon="el-icon-search"
+            @click="handleSearch"
+        >
+            搜索
+        </el-button>
+        </div>
+        <el-button
+            type="primary"
+            size="small"
+            @click="handleAdd"
+        >
+            添加
+        </el-button>
+    </div>
+
+    <el-table
+      :data="tableData"
+      tooltip-effect="dark"
+      border
+      v-loading="loading"
+      style="width: 100%"
+    >
+      <el-table-column
+        align="center"
+        label="角色名称"
+        prop="activityName"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+      
+      <el-table-column
+        align="center"
+        label="备注"
+        prop="status"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="状态"
+        prop="status"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+       <el-table-column
+        align="center"
+        label="创建时间"
+        prop="status"
+        show-overflow-tooltip
+      >
+      </el-table-column>
+
+       <el-table-column prop="address" align="center" label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" size="small" @click="handleEdit(scope.row)">权限分配</el-button>
+          <el-button type="text" size="small" @click="handleDel(scope.row.id)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page-box">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        background
+        :current-page="query.currentPage"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="query.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+
+     <el-dialog :title="title" width="550px" :visible.sync="dialogFormVisible">
+        <el-form label-width="130px" :model="setQuery"
+        ref="setQuery"
+        :rules="rules">
+            <el-form-item label="姓名:"  prop="paperName">
+                <el-input
+                v-model="setQuery.paperName"
+                class="item-width-300"
+                ></el-input>
+            </el-form-item>
+            <el-form-item label="登录账号:"  prop="paperName">
+                <el-input
+                v-model="setQuery.paperName"
+                class="item-width-300"
+                ></el-input>
+            </el-form-item>
+             
+            <el-form-item label="角色:"  prop="questionsNum">
+              <el-select
+                v-model="query.activityType"
+                size="small"
+                class="item-width-200 ml10"
+                placeholder="请选择角色"
+                clearable
+                >
+                    <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    >
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="状态:"  prop="paperName">
+               <el-radio-group v-model="setQuery.type">
+                    <el-radio :label="1">启用</el-radio>
+                    <el-radio :label="2">禁用</el-radio>
+                </el-radio-group>
+            </el-form-item>
+
+              <el-form-item label="原始密码" prop="old">
+                <el-input type="text" :maxlength="16" class="item-width-300" v-model="setQuery.old" autocomplete="off"></el-input>
+            </el-form-item>
+            <el-form-item label="新的密码" prop="pwd">
+                <el-input type="text" :maxlength="16" class="item-width-300" v-model="setQuery.pwd" autocomplete="off"></el-input>
+            </el-form-item>
+           
+        </el-form>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" :loading="btnLoading" @click="save">确 定</el-button>
+    </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+  <script>
+  import {activityList,activityDel,activityStop} from '@/api/activity'
+export default {
+  name: "userList",
+  data() {
+    return {
+        date:'',
+        data: [{
+          id: 1,
+          label: '一级 1',
+          children: [{
+            id: 4,
+            label: '二级 1-1',
+            children: [{
+              id: 9,
+              label: '三级 1-1-1'
+            }, {
+              id: 10,
+              label: '三级 1-1-2'
+            }]
+          }]
+        }, {
+          id: 2,
+          label: '一级 2',
+          children: [{
+            id: 5,
+            label: '二级 2-1'
+          }, {
+            id: 6,
+            label: '二级 2-2'
+          }]
+        }, {
+          id: 3,
+          label: '一级 3',
+          children: [{
+            id: 7,
+            label: '二级 3-1'
+          }, {
+            id: 8,
+            label: '二级 3-2'
+          }]
+        }],
+        defaultProps: {
+          children: 'children',
+          label: 'label'
+        },
+      options:[
+        {
+          value:1,
+          label:'海报'
+        },
+        {
+          value:2,
+          label:'报名'
+        },
+      ],
+ 
+      tableData: [],
+      loading: false,
+      btnLoading: false,
+      dialogFormVisible: false,
+      query: {
+        "activityType":null,
+        "state":'',
+        "currentPage": 1,
+        "pageSize": 10,
+        shopId: 0,
+      },
+      setQuery: {
+       type:1
+      },
+      rules:{
+         old:[
+            { required:true,message:'请填写旧密码', trigger: 'blur' }
+        ],
+        pwd: [
+            { required:true,message:'请填写新密码', trigger: 'blur' }
+
+        ],
+      },
+      title: "",
+      total: 0,
+    };
+  },
+  watch: {
+    date(val){
+      if(val){
+        this.query.startTime = val[0]
+        this.query.endTime = val[1]
+      }else{
+        this.query.startTime = ''
+        this.query.endTime = ''
+      }
+    }
+  },
+  methods: {
+    handleEdit(row){
+        this.title = "编辑"
+        this.dialogFormVisible = true
+     
+    },
+    handleAdd(){
+        this.title = "添加"
+        this.dialogFormVisible = true
+    },
+    handleSearch(){
+      this.query.currentPage = 1
+      this.activityList();
+    },
+    handleDel(id){
+         this.$confirm(`此操作将删除该活动, 是否继续?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        }).then(() => {
+          activityDel({id}).then(res=>{
+            if(res.state == 'Success'){
+               this.$notify({
+                title: "成功",
+                message: "操作成功",
+                type: "success",
+              });
+              this.handleSearch()
+            }
+          })
+        })
+    },
+    handleSizeChange(val) {
+      this.query.currentPage = 1;
+      this.query.pageSize = val;
+      this.activityList()
+    },
+    handleCurrentChange(val) {
+      this.query.currentPage = val;
+      this.activityList()
+    },
+    activityList(){
+    //   this.loading = true
+    //   activityList(this.query).then(res=>{
+    //     this.loading = false
+    //     if(res.state == 'Success'){
+    //       this.tableData = res.content.records
+    //       this.total = res.content.total
+    //     }
+    //   })
+    },
+    save(){
+        this.$refs.setQuery.validate((v) => {
+        if (v) {
+        //   this.btnLoading = true
+        //   addOrUpdatePaper(this.setQuery).then(res=>{
+        //     this.btnLoading = false
+        //     if(res.state == 'Success'){
+                this.dialogFormVisible = false
+        //       this.$notify({
+        //           title: '成功',
+        //           message: '操作成功',
+        //           type: 'success'
+        //         });
+        //         this.query.currentPage = 1
+        //         this.paperList();
+        //     }
+        //   })
+        }
+      });
+    }
+  },
+  created() {
+    this.activityList()
+  },
+};
+</script>
+
+<style lang="scss" >
+.userList {
+
+}
+
+</style>

+ 55 - 29
src/views/home/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2021-07-08 12:10:55
- * @LastEditTime: 2024-09-11 16:14:27
+ * @LastEditTime: 2024-11-01 16:31:42
  * @LastEditors: wenjie 1454560336@qq.com
  * @Description: In User Settings Edit
  * @FilePath: \admin-manage\src\views\home\index.vue
@@ -31,6 +31,21 @@
       </el-row>
     </div> -->
 
+     <el-select
+          v-model="platformType"
+          size="small"
+          class="item-width-200 mb10"
+          placeholder="请选择所属平台"
+        >
+          <el-option
+            v-for="item in masterShopOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+
     <div class="bottom">
       <div class="title">订单数据 <span>更新于{{ updateTime }}</span></div>
       <el-row>
@@ -165,6 +180,10 @@ export default {
   components: {},
   data() {
     return {
+      platformType:1,
+      query:{
+        platformType:1,
+      },
       userData: {
         dayRegister: 0,
         dayVip: 0,
@@ -193,42 +212,49 @@ export default {
       updateTime: '',
     };
   },
+  watch: {
+    platformType(val) {
+        this.init()
+      }
+  },
   computed: {
 
   },
   methods: {
 
-
+    init(){
+        this.updateTime = new Date().toLocaleString();
+        const thisDayStartTime = new Date(new Date().toLocaleDateString()).getTime();
+        const thisDayEndTime = new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1;
+        const yesterdayStartTime = thisDayStartTime - 24 * 60 * 60 * 1000;
+        const yesterdayEndTime = thisDayEndTime - 24 * 60 * 60 * 1000;
+
+        orderCount({
+          startTime: thisDayStartTime,
+          endTime: thisDayEndTime
+        }).then(res => {
+          if (res.state == 'Success') {
+            this.today = res.content;
+          }
+        });
+        orderCount({
+          startTime: yesterdayStartTime,
+          endTime: yesterdayEndTime
+        }).then(res => {
+          if (res.state == 'Success') {
+            this.yesterday = res.content;
+          }
+        });
+        userStatistics({code:this.query.platformType}).then(res => {
+          if (res.state == 'Success') {
+            this.userData = res.content;
+          }
+        })
+    }
   },
   created() { },
   mounted() {
-    this.updateTime = new Date().toLocaleString();
-    const thisDayStartTime = new Date(new Date().toLocaleDateString()).getTime();
-    const thisDayEndTime = new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1;
-    const yesterdayStartTime = thisDayStartTime - 24 * 60 * 60 * 1000;
-    const yesterdayEndTime = thisDayEndTime - 24 * 60 * 60 * 1000;
-
-    orderCount({
-      startTime: thisDayStartTime,
-      endTime: thisDayEndTime
-    }).then(res => {
-      if (res.state == 'Success') {
-        this.today = res.content;
-      }
-    });
-    orderCount({
-      startTime: yesterdayStartTime,
-      endTime: yesterdayEndTime
-    }).then(res => {
-      if (res.state == 'Success') {
-        this.yesterday = res.content;
-      }
-    });
-    userStatistics().then(res => {
-      if (res.state == 'Success') {
-        this.userData = res.content;
-      }
-    })
+    this.init();
 
   },
 };

+ 70 - 9
src/views/merchantManage/addUser.vue

@@ -23,10 +23,30 @@
           </el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="绑定主商户" prop="platformType">
+      <el-form-item label="所属平台" prop="platformType">
           <el-checkbox-group v-model="setQuery.platformType">
-            <el-checkbox label="1">慧研学惠生活</el-checkbox>
-            <el-checkbox label="2" >印象贵大</el-checkbox>
+            <div class="flex" v-for="(item,index) in masterShopOptions" :key="index" ><el-checkbox :label="item.value">{{item.label}}</el-checkbox> 
+            <el-form-item v-if="setQuery.platformType.includes(item.value)" :prop="'platformShareLists.' + index + '.shareId'" :rules="{required: true, message: '请选择分账规则', trigger: 'change'}">
+              <el-select
+                v-model="setQuery.platformShareLists[index].shareId"
+                class="item-width-300"
+                size="small"
+
+                placeholder="请选择商品分账规则"
+              >
+                <el-option
+                  v-for="item in ruleOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+            </div>
+   
+            <!-- <el-checkbox label="1">慧研学惠生活</el-checkbox>
+            <el-checkbox label="2" >印象贵大</el-checkbox> -->
           </el-checkbox-group>
         </el-form-item>
       <el-form-item label="商户名称:" prop="accountName">
@@ -96,10 +116,10 @@
           :maxlength="11"
           size="small"
           class="item-width-300"
-           :disabled="this.$route.query.id"
+           :disabled="!!this.$route.query.id"
         ></el-input>
       </el-form-item>
-      <el-form-item label="商品分账规则:" prop="shareId">
+      <!-- <el-form-item label="商品分账规则:" prop="shareId">
         <el-select
           v-model="setQuery.shareId"
           class="item-width-300"
@@ -113,7 +133,7 @@
           >
           </el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="备注:" prop="notes">
         <el-input
           v-model="setQuery.notes"
@@ -165,7 +185,8 @@ export default {
         phoneNum: "",
         province: "",
         shareId:'',
-        platformType:[]
+        platformType:[],
+        platformShareLists:[]
       },
       region:{
         "code": "",
@@ -226,6 +247,9 @@ export default {
         this.countyList = []
       }
     }),
+    // 'setQuery.platformType'(val) {
+    //   console.log(123);
+    // }
   },
   methods: {
     // 获取地区数据
@@ -255,7 +279,22 @@ export default {
       accountDetail({accountId}).then((res) => {
         if (res.state == "Success") {
           this.setQuery = res.content
-          this.setQuery.platformType = this.setQuery.platformType.split(',')
+          this.$set(this.setQuery,'platformShareLists',[])
+          this.masterShopOptions.map(item=>{
+            this.setQuery.platformShareLists.push({
+              shareId:'',
+              platformType:item.value
+            })
+          })
+          let platformShareLists = JSON.parse(this.setQuery.platformShares)
+          platformShareLists.map(item=>{
+            this.setQuery.platformShareLists.map(i=>{
+              if(item.platformType == i.platformType){
+                i.shareId = item.shareId
+              }
+            })
+          })
+          this.setQuery.platformType = this.setQuery.platformType.split(',').map(Number)
 
           setTimeout(() => {
             this.isInit = false
@@ -286,6 +325,14 @@ export default {
             if(this.$route.query.id){
               delete obj.phoneNum
             }
+            let platformShareLists = JSON.parse(JSON.stringify(obj.platformShareLists))
+            obj.platformShareLists = []
+            platformShareLists.map((item,index)=>{
+              if(item.shareId&&obj.platformType.includes(item.platformType)){
+                obj.platformShareLists.push(item)
+              }
+            
+            })
             obj.platformType = obj.platformType.toString()
 
           addOrUpdateAccount(obj).then((res) => {
@@ -310,7 +357,8 @@ export default {
                 notes: "",
                 phoneNum: "",
                 province: "",
-                platformType:[]
+                platformType:[],
+                platformShareLists:[]
               };
               this.$router.push("/merchantManage/index");
             }
@@ -321,6 +369,13 @@ export default {
   },
 
   created() {
+    this.setQuery.platformShareLists=[]
+    this.masterShopOptions.map(item=>{
+      this.setQuery.platformShareLists.push({
+        shareId:'',
+        platformType:item.value
+      })
+    })
     this.getRuleList()
     if(this.$route.query.title == '编辑商户'){
       // this.setQuery = JSON.parse( sessionStorage.getItem('shopUser') )
@@ -335,6 +390,12 @@ export default {
 <style lang="scss" scoped>
 .addUser {
      padding-bottom: 40px;
+     .flex{
+      width: 500px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+     }
   .btn-group {
     display: flex;
     align-items: center;

+ 1 - 1
src/views/merchantManage/index.vue

@@ -15,7 +15,7 @@
           size="small"
           clearable
           class="item-width-200 ml10"
-          placeholder="请选择主商户"
+          placeholder="请选择所属平台"
         >
           <el-option
             v-for="item in masterShopOptions"

+ 3 - 10
src/views/operationManage/bannerManage/addBanner.vue

@@ -6,20 +6,13 @@
       :rules="rules"
       label-width="130px"
     >
-    
-        <el-form-item label="名称:" prop="bannerName">
-        <el-input
-          v-model="setQuery.bannerName"
-          class="item-width-300"
-        ></el-input>
-      </el-form-item>
       <el-form-item label="名称:" prop="bannerName">
         <el-input
           v-model="setQuery.bannerName"
           class="item-width-300"
         ></el-input>
       </el-form-item>
-      <el-form-item label="主商户" prop="platformType">
+      <el-form-item label="所属平台" prop="platformType">
          <el-select
           v-model="setQuery.platformType"
           size="small"
@@ -121,7 +114,7 @@ export default {
     rules() {
       if(this.setQuery.jumpSet == 1){
         return {
-        platformType: [{ required: true, message: "请选择主商户", trigger: "change" }],
+        platformType: [{ required: true, message: "请选择所属平台", trigger: "change" }],
         bannerImg: [{ required: true, message: "请上传banner图", trigger: "change" }],
         bannerName: [{ required: true, message: "请输入banner名称", trigger: "blur" }],
         colour: [{ required: true, message: "请输入banner主题色", trigger: "blur" }],
@@ -130,7 +123,7 @@ export default {
       }
       }else{
          return {
-        platformType: [{ required: true, message: "请选择主商户", trigger: "change" }],
+        platformType: [{ required: true, message: "请选择所属平台", trigger: "change" }],
         bannerImg: [{ required: true, message: "请上传banner图", trigger: "change" }],
         bannerName: [{ required: true, message: "请输入banner名称", trigger: "blur" }],
         colour: [{ required: true, message: "请输入banner主题色", trigger: "blur" }],

+ 1 - 1
src/views/operationManage/bannerManage/index.vue

@@ -30,7 +30,7 @@
           size="small"
           clearable
           class="item-width-200 ml10"
-          placeholder="请选择主商户"
+          placeholder="请选择所属平台"
         >
           <el-option
             v-for="item in masterShopOptions"

+ 89 - 20
src/views/operationManage/comboManage/checkoutCode.vue

@@ -15,6 +15,10 @@
         <el-button class="ml10" type="primary" size="small" icon="el-icon-search" @click="handleSearch">
           搜索
         </el-button>
+        <el-button class="ml10" type="info" size="small" :loading="downloadLoading" icon="el-icon-printer"
+          @click="exportAllExcel">
+          导出
+        </el-button>
       </div>
       <el-button class="ml10" type="info" size="small" plain icon="el-icon-back" @click="comeBack">
         返回
@@ -23,15 +27,15 @@
     <el-descriptions class="margin-top" :column="3" border>
       <el-descriptions-item>
         <template slot="label"> 计费号 </template>
-        {{ groupInfos.billId||'--' }}
+        {{ groupInfos.billId || '--' }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 集团名称 </template>
-        {{ groupInfos.groupName||'--' }}
+        {{ groupInfos.groupName || '--' }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 订购数量 </template>
-        {{ groupInfos.orderNum||'--' }}
+        {{ groupInfos.orderNum || '--' }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 所属平台 </template>
@@ -39,19 +43,19 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 订购产品策划名称 </template>
-        {{ groupInfos.groupPlanName||'--' }}
+        {{ groupInfos.groupPlanName || '--' }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 激活码数量 </template>
-        {{ groupInfos.totalTicket||'--' }}
+        {{ groupInfos.totalTicket || '--' }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 已使用数量 </template>
-        {{ groupInfos.useTicket||'--' }}
+        {{ groupInfos.useTicket || '--' }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 未使用数量 </template>
-        {{ groupInfos.totalTicket-groupInfos.useTicket||'--' }}
+        {{ groupInfos.totalTicket - groupInfos.useTicket || '--' }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 激活失败 </template>
@@ -74,9 +78,10 @@
       </el-table-column>
       <el-table-column prop="activationDay" align="center" label="时间段/天数" show-overflow-tooltip>
         <template slot-scope="scope">
-          <span v-if="scope.row.activationType == 1">{{ timeFormat(scope.row.startTime) }}至{{ timeFormat(scope.row.endTime) }}</span>
+          <span v-if="scope.row.activationType == 1">{{ timeFormat(scope.row.startTime) }}至{{
+            timeFormat(scope.row.endTime) }}</span>
           <span v-else>
-          {{ scope.row.activationDay}}
+            {{ scope.row.activationDay+'天' }}
           </span>
         </template>
       </el-table-column>
@@ -93,17 +98,17 @@
       </el-table-column>
       <el-table-column align="center" label="推送状态" show-overflow-tooltipphone>
         <template slot-scope="scope">
-          <span>{{scope.row.sync===true?'推送成功':'--'}}</span>
+          <span>{{ scope.row.sync === true ? '推送成功' : '--' }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" label="激活手机号" show-overflow-tooltip>
         <template slot-scope="scope">
-          {{ scope.row.phone|| '--' }}
+          {{ scope.row.phone || '--' }}
         </template>
       </el-table-column>
       <el-table-column align="center" label="激活时间" show-overflow-tooltip>
         <template slot-scope="scope">
-          <span v-if="scope.row.phone==null">--</span>
+          <span v-if="scope.row.phone == null">--</span>
           <span v-else>{{ timeFormat(scope.row.useTime) }}</span>
         </template>
       </el-table-column>
@@ -137,14 +142,16 @@
 </template>
 
 <script>
-import { debounce } from "@/utils/index";
-import { checkoutActivationCode, labourActivation,syncNotified } from "@/api/common";
+import { checkoutActivationCode, labourActivation, syncNotified } from "@/api/common";
 import { timeFormat } from "@/utils/index";
+import FileSaver from 'file-saver';
+import XLSX from 'xlsx';
 
 export default {
   name: "orderManage",
   data() {
     return {
+      downloadLoading: false,
       updataLoading: false,
       date: '',
       vipCode: '',
@@ -168,7 +175,7 @@ export default {
         groupOrderNo: '',
         startTime: "",
         endTime: "",
-        state:'',
+        state: '',
         page: 1,
         size: 10,
       },
@@ -192,15 +199,15 @@ export default {
   },
   methods: {
     // 同步和校园数据,待完成
-    synchronization(item){
-      syncNotified({ticketId:item.id}).then((res)=>{
-        if(res.state == "Success"){
+    synchronization(item) {
+      syncNotified({ ticketId: item.id }).then((res) => {
+        if (res.state == "Success") {
           this.getList()
         }
       })
     },
 
-    Cancel(){
+    Cancel() {
       this.vipDialogVisible = false;
       this.updataPhone.num = ''
     },
@@ -208,7 +215,7 @@ export default {
     confirmActivation(formName) {
       this.$refs[formName].validate((valid) => {
         let updata = {
-          phone:this.updataPhone.num,
+          phone: this.updataPhone.num,
           serialNumber: this.vipCode
         }
         if (valid) {
@@ -238,6 +245,68 @@ export default {
     comeBack() {
       this.$router.back()
     },
+
+    // 导出方法
+    exportAllExcel() {
+      this.downloadLoading = true
+      const allData = [];
+      let query = JSON.parse(JSON.stringify(this.query))
+      query.size = this.total
+      query.page = 0
+      checkoutActivationCode(query).then(res => {
+        this.downloadLoading = false
+        if (res.state == "Success") {
+          allData.push(...res.content.content);
+          this.exportExcel(allData);
+        }
+      });
+    },
+
+    // 导出数据处理
+    exportExcel(r) {
+      const data = r.map((item) => {
+        let createTime=''
+        let codeStatus = ''
+        let pushSync=''
+        let pushTime=''
+        if(item.activationType===1){
+          createTime = item.startTime+'至'+item.endTime
+        }else{
+          createTime = item.activationDay+'天'
+        }
+        if(item.phone==null){
+          codeStatus='待使用'
+          pushTime='--'
+        }else{
+          codeStatus='激活成功'
+          pushTime=timeFormat(item.useTime)
+        }
+        if(item.sync==true){
+          pushSync='推送成功'
+        }else{
+          pushSync='--'
+        }
+        return {
+          "激活ID": item.id,
+          "激活码": item.serialNumber,
+          "会员套餐": item.planningName,
+          "有效期类型": item.goodsAmount,
+          "时间段/天数": createTime,
+          "创建时间":timeFormat(item.createTime),
+          "状态": codeStatus,
+          "推送状态": pushSync,
+          "激活手机号": item.phone||'--',
+          "激活时间": pushTime,
+        }
+      })
+      const worksheet = XLSX.utils.json_to_sheet(data);
+      const workbook = { Sheets: { data: worksheet }, SheetNames: ['data'] };
+      const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
+      const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
+      FileSaver.saveAs(blob, '激活码列表.xlsx');
+    },
+
+
     handleSearch() {
       this.query.page = 1;
       this.getList();

+ 119 - 228
src/views/operationManage/comboManage/vipActivation.vue

@@ -2,147 +2,53 @@
   <div class="orderManage app-container">
     <div class="search">
       <div>
-        <el-input
-          v-model="query.billId"
-          size="small"
-          placeholder="请输入计费号"
-          class="item-width-200"
-        ></el-input>
-        <el-input
-          v-model="query.groupName"
-          size="small"
-          placeholder="请输入集团名称"
-          class="item-width-200 ml10"
-        ></el-input>
-        <el-input
-          v-model="query.planningName"
-          size="small"
-          placeholder="请输入产品策划名称"
-          class="item-width-200 ml10"
-        ></el-input>
-        <el-input
-          v-model="query.orderNo"
-          size="small"
-          placeholder="请输入订单号"
-          class="item-width-200 ml10"
-        ></el-input>
-        <el-select
-          v-model="query.groupType"
-          size="small"
-          clearable
-          class="item-width-200 ml10"
-          placeholder="请选择状态"
-        >
-          <el-option
-            v-for="item in statusOptions"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          >
+        <el-input v-model="query.billId" size="small" placeholder="请输入计费号" class="item-width-200"></el-input>
+        <el-input v-model="query.groupName" size="small" placeholder="请输入集团名称" class="item-width-200 ml10"></el-input>
+        <el-input v-model="query.planningName" size="small" placeholder="请输入产品策划名称"
+          class="item-width-200 ml10"></el-input>
+        <el-input v-model="query.orderNo" size="small" placeholder="请输入订单号" class="item-width-200 ml10"></el-input>
+        <el-select v-model="query.groupType" size="small" clearable class="item-width-200 ml10" placeholder="请选择状态">
+          <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
           </el-option>
         </el-select>
-        <el-select
-          v-model="query.actionID"
-          size="small"
-          clearable
-          class="item-width-200 ml10"
-          placeholder="请选择订单状态"
-        >
-          <el-option
-            v-for="item in orderStatusoptions"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          >
+        <el-select v-model="query.actionID" size="small" clearable class="item-width-200 ml10" placeholder="请选择订单状态">
+          <el-option v-for="item in orderStatusoptions" :key="item.value" :label="item.label" :value="item.value">
           </el-option>
         </el-select>
-        <el-button
-          class="ml10"
-          type="primary"
-          size="small"
-          icon="el-icon-search"
-          @click="handleSearch"
-        >
+        <el-button class="ml10" type="primary" size="small" icon="el-icon-search" @click="handleSearch">
           搜索
         </el-button>
       </div>
+      <el-button class="ml10" type="info" size="small" :loading="downloadLoading" icon="el-icon-printer" @click="exportAllExcel">
+          导出
+        </el-button>
     </div>
 
-    <el-table
-      :data="tableData"
-      tooltip-effect="dark"
-      border
-      v-loading="loading"
-      style="width: 100%"
-    >
-      <el-table-column
-        align="center"
-        label="计费号"
-        prop="billId"
-        show-overflow-tooltip
-      >
+    <el-table :data="tableData" tooltip-effect="dark" border v-loading="loading" style="width: 100%">
+      <el-table-column align="center" label="计费号" prop="billId" show-overflow-tooltip>
       </el-table-column>
-      <el-table-column
-        prop="groupName"
-        align="center"
-        label="集团名称"
-        show-overflow-tooltip
-      >
+      <el-table-column prop="groupName" align="center" label="集团名称" show-overflow-tooltip>
       </el-table-column>
-      <el-table-column
-        prop="orderNo"
-        align="center"
-        label="订单号"
-        show-overflow-tooltip
-      >
+      <el-table-column prop="orderNo" align="center" label="订单号" show-overflow-tooltip>
       </el-table-column>
-      <el-table-column
-        prop="groupPlanName"
-        align="center"
-        label="订购产品策划名称"
-        show-overflow-tooltip
-      ></el-table-column>
-      <el-table-column
-        prop="orderPrice"
-        align="center"
-        label="订购产品单价(元)"
-        show-overflow-tooltip
-      >
+      <el-table-column prop="groupPlanName" align="center" label="订购产品策划名称" show-overflow-tooltip></el-table-column>
+      <el-table-column prop="orderPrice" align="center" label="订购产品单价(元)" show-overflow-tooltip>
       </el-table-column>
       <el-table-column align="center" label="订购数量" show-overflow-tooltip>
         <template slot-scope="scope">
           {{ scope.row.orderNum || "--" }}
         </template>
       </el-table-column>
-      <el-table-column
-        prop="orderDate"
-        align="center"
-        label="订购时间"
-        show-overflow-tooltip
-      >
+      <el-table-column prop="orderDate" align="center" label="订购时间" show-overflow-tooltip>
       </el-table-column>
-      <el-table-column
-        prop="invalidDate"
-        align="center"
-        label="失效时间"
-        show-overflow-tooltip
-      >
+      <el-table-column prop="invalidDate" align="center" label="失效时间" show-overflow-tooltip>
       </el-table-column>
-      <el-table-column
-        align="center"
-        label="和校园推送时间"
-        show-overflow-tooltip
-      >
+      <el-table-column align="center" label="和校园推送时间" show-overflow-tooltip>
         <template slot-scope="scope">
           {{ timeFormat(scope.row.createTime) }}
         </template>
       </el-table-column>
-      <el-table-column
-        prop="groupType"
-        align="center"
-        label="状态"
-        show-overflow-tooltip
-      >
+      <el-table-column prop="groupType" align="center" label="状态" show-overflow-tooltip>
         <template slot-scope="scope">
           <span v-if="scope.row.groupType === 1">已生成</span>
           <span v-if="scope.row.groupType === 2">待生成</span>
@@ -162,12 +68,7 @@
       <el-table-column align="center" label="所属小程序" show-overflow-tooltip>
         <template slot-scope="scope">{{ "慧研学惠生活" }}</template>
       </el-table-column>
-      <el-table-column
-        prop="action"
-        align="center"
-        label="订单状态"
-        show-overflow-tooltip
-      >
+      <el-table-column prop="action" align="center" label="订单状态" show-overflow-tooltip>
         <template slot-scope="scope">
           <el-tag v-if="scope.row.action === 1" type="success">订购</el-tag>
           <el-tag type="danger" v-else-if="scope.row.action === 2">退订</el-tag>
@@ -177,42 +78,19 @@
       </el-table-column>
       <el-table-column prop="address" align="center" label="操作">
         <template slot-scope="scope">
-          <el-button
-            type="text"
-            size="small"
-            v-if="scope.row.groupType === 2"
-            @click="gotoGenerating(scope.row)"
-            >生成激活码</el-button
-          >
-          <el-button
-            type="text"
-            size="small"
-            v-else
-            @click="codeDetails(scope.row)"
-            >查看激活码</el-button
-          >
+          <el-button type="text" size="small" v-if="scope.row.groupType === 2"
+            @click="gotoGenerating(scope.row)">生成激活码</el-button>
+          <el-button type="text" size="small" v-else @click="codeDetails(scope.row)">查看激活码</el-button>
         </template>
       </el-table-column>
     </el-table>
     <div class="page-box">
-      <el-pagination
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-        background
-        :current-page="query.page"
-        :page-sizes="[10, 20, 30, 40]"
-        :page-size="query.size"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="total"
-      >
+      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background
+        :current-page="query.page" :page-sizes="[10, 20, 30, 40]" :page-size="query.size"
+        layout="total, sizes, prev, pager, next, jumper" :total="total">
       </el-pagination>
     </div>
-    <el-dialog
-      title="生成激活码"
-      :visible.sync="vipDialogVisible"
-      :before-close="closeVipDialog"
-      width="50%"
-    >
+    <el-dialog title="生成激活码" :visible.sync="vipDialogVisible" :before-close="closeVipDialog" width="50%">
       <el-descriptions class="margin-top" :column="3" border>
         <el-descriptions-item>
           <template slot="label"> 计费号 </template>
@@ -240,124 +118,75 @@
         </el-descriptions-item>
       </el-descriptions>
       <div class="codeInfo">激活码信息</div>
-      <el-form
-        :model="setQuery"
-        ref="setQuery"
-        :rules="rules"
-        label-width="130px"
-        size="small"
-      >
+      <el-form :model="setQuery" ref="setQuery" :rules="rules" label-width="130px" size="small">
         <el-form-item label="激活码有效期:" prop="validDay">
-          <el-input
-            v-model="setQuery.validDay"
-            onkeyup="this.value=this.value.replace(/\D/g,'')"
-            onafterpaste="this.value=this.value.replace(/\D/g,'')"
-            class="item-width-100"
-          ></el-input>
+          <el-input v-model="setQuery.validDay" onkeyup="this.value=this.value.replace(/\D/g,'')"
+            onafterpaste="this.value=this.value.replace(/\D/g,'')" class="item-width-100"></el-input>
         </el-form-item>
         <el-form-item label="会员套餐:" prop="selectType">
-          <el-select
-            v-model="setQuery.selectType"
-            @change="selectChange"
-            placeholder="请选择套餐"
-          >
-            <el-option
-              v-for="(item, index) in optionsList"
-              :key="item.value"
-              :label="item.setMealName"
-              :value="{ value: item.setMealCode, label: item.setMealName }"
-            ></el-option>
+          <el-select v-model="setQuery.selectType" @change="selectChange" placeholder="请选择套餐">
+            <el-option v-for="(item, index) in optionsList" :key="item.value" :label="item.setMealName"
+              :value="{ value: item.setMealCode, label: item.setMealName }"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="会员有效期:" prop="activationType">
           <el-radio-group v-model="setQuery.activationType">
-            <el-radio
-              v-for="item in radioOptions"
-              :key="item.value"
-              :value="item.value"
-              :label="item.label"
-            ></el-radio>
+            <el-radio v-for="item in radioOptions" :key="item.value" :value="item.value" :label="item.label"></el-radio>
           </el-radio-group>
           <div v-if="setQuery.activationType == '时间段'">
             <el-form-item prop="startTime">
-              <el-date-picker
-                v-model="date"
-                type="daterange"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期"
-              >
+              <el-date-picker v-model="date" type="daterange" range-separator="至" start-placeholder="开始日期"
+                end-placeholder="结束日期">
               </el-date-picker>
             </el-form-item>
           </div>
           <div v-if="setQuery.activationType == '天数'">
             <el-form-item prop="activationDay">
-              <el-input
-                v-model="setQuery.activationDay"
-                onkeyup="this.value=this.value.replace(/\D/g,'')"
-                onafterpaste="this.value=this.value.replace(/\D/g,'')"
-                class="item-width-100"
-              ></el-input>
+              <el-input v-model="setQuery.activationDay" onkeyup="this.value=this.value.replace(/\D/g,'')"
+                onafterpaste="this.value=this.value.replace(/\D/g,'')" class="item-width-100"></el-input>
             </el-form-item>
           </div>
         </el-form-item>
-        <div
-          style="
+        <div style="
             color: red;
             font-size: 12px;
             line-height: 16px;
             margin-left: 40px;
-          "
-        >
+          ">
           注:会员有效期为用户使用激活码后会员生效时间。时间段为用户使用激活码后仅在对应时间段内拥有会员权益;天数为用户使用激活码后对应天数内拥有会员权益。时间段激活码无法叠加使用,天数激活码可叠加使用累计天数。
         </div>
         <el-form-item label="激活码数量:">
-          <el-input
-            v-model="setQuery.totalTicket"
-            onkeyup="this.value=this.value.replace(/\D/g,'')"
-            onafterpaste="this.value=this.value.replace(/\D/g,'')"
-            class="item-width-100"
-            @blur="totalTicketChange"
-          ></el-input>
-          <span style="color: red; font-size: 12px; margin-left: 10px"
-            >注:默认为订购数量,激活码数量必须大于订购数量,输入数字须为整数</span
-          >
+          <el-input v-model="setQuery.totalTicket" onkeyup="this.value=this.value.replace(/\D/g,'')"
+            onafterpaste="this.value=this.value.replace(/\D/g,'')" class="item-width-100"
+            @blur="totalTicketChange"></el-input>
+          <span style="color: red; font-size: 12px; margin-left: 10px">注:默认为订购数量,激活码数量必须大于订购数量,输入数字须为整数</span>
         </el-form-item>
         <el-form-item label="激活码开头:" prop="startString">
-          <el-input
-            v-model="setQuery.startString"
-            class="item-width-100"
-            maxlength="6"
-          ></el-input>
-          <span style="color: red; font-size: 12px; margin-left: 10px"
-            >注:只能输入大小写英文和数字,最长单位为6位,创建激活码时放在激活码开头</span
-          >
+          <el-input v-model="setQuery.startString" class="item-width-100" maxlength="6"></el-input>
+          <span style="color: red; font-size: 12px; margin-left: 10px">注:只能输入大小写英文和数字,最长单位为6位,创建激活码时放在激活码开头</span>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="activationCancel('setQuery')">取 消</el-button>
-        <el-button
-          type="primary"
-          :loading="updataLoading"
-          @click="vipsubmitForm('setQuery')"
-          >生成</el-button
-        >
+        <el-button type="primary" :loading="updataLoading" @click="vipsubmitForm('setQuery')">生成</el-button>
       </span>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { debounce } from "@/utils/index";
 import { getGroupList, generateCode, getList } from "@/api/common";
 import { timeFormat } from "@/utils/index";
-
+import FileSaver from 'file-saver';
+import XLSX from 'xlsx';
 export default {
   name: "orderManage",
   data() {
     return {
+      downloadLoading: false,
+      totalTicketNumber: '',
       date: "",
       updataLoading: false,
       codeData: {},
@@ -457,7 +286,7 @@ export default {
           },
         ],
         startString: [
-          { required: true,pattern:/^[a-z0-9A-Z]+$/, message: "请正确输入激活码开头", trigger: "blur" },
+          { required: true, pattern: /^[a-z0-9A-Z]+$/, message: "请正确输入激活码开头", trigger: "blur" },
         ],
       },
       vipDialogVisible: false,
@@ -506,6 +335,7 @@ export default {
       this.codeData = item;
       this.setQuery.groupOrderNo = item.orderNo;
       this.setQuery.totalTicket = Math.floor(item.orderNum);
+      this.totalTicketNumber = Math.floor(item.orderNum);
     },
 
     // 套餐选择
@@ -519,7 +349,7 @@ export default {
     totalTicketChange() {
       if (Math.trunc(this.codeData.orderNum) > this.setQuery.totalTicket) {
         this.$message.error("激活码数量必须大于订购数量");
-        this.setQuery.totalTicket = "";
+        this.setQuery.totalTicket = this.totalTicketNumber;
         return;
       }
     },
@@ -579,6 +409,67 @@ export default {
       });
     },
 
+    // 导出方法
+    exportAllExcel() {
+      this.downloadLoading=true
+      const allData = [];
+      let query = JSON.parse(JSON.stringify(this.query))
+      query.size = this.total
+      query.page=0
+      getGroupList(query).then(res => {
+        this.downloadLoading=false
+        if(res.state == "Success"){
+          allData.push(...res.content.content);
+          this.exportExcel(allData);
+        }
+      });
+    },
+
+    // 导出数据处理
+    exportExcel(r) {
+      const data = r.map((item) => {
+        let status = "";
+        let orderStatus = "";
+        if (item.groupType == 1) {
+          status = "已生成"
+        } else if (item.groupType == 2) {
+          status = "未生成"
+        } else {
+          status = "全部激活"
+        }
+        if (item.action == 1) {
+          orderStatus = '订购'
+        } else if (item.action == 2) {
+          orderStatus = '退订'
+        } else if (item.action == 3) {
+          orderStatus = '激活'
+        } else {
+          orderStatus = '暂停'
+        }
+        return {
+          "计费号": item.billId,
+          "集团名称": item.groupName,
+          "订单号": item.orderNo,
+          "订购产品策划名称": item.groupPlanName,
+          "订购产品单价(元)": item.orderPrice,
+          "订购数量": item.orderNum,
+          "订购时间": item.orderDate,
+          "失效时间": item.invalidDate,
+          "和校园推送时间": timeFormat(item.createTime),
+          "状态": status,
+          "未激活数量": item.totalTicket - item.useTicket,
+          "已激活数量": item.useTicket,
+          "所属小程序": '慧研学惠生活',
+          "订单状态": orderStatus,
+        }
+      })
+      const worksheet = XLSX.utils.json_to_sheet(data);
+      const workbook = { Sheets: { data: worksheet }, SheetNames: ['data'] };
+      const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
+      const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
+      FileSaver.saveAs(blob, '集团列表.xlsx');
+    },
+
     handleSearch() {
       this.query.page = 1;
       this.getList();

+ 2 - 3
src/views/operationManage/equitiesManage/addEquities.vue

@@ -82,11 +82,11 @@
           <el-button class="ml10" @click="handleChoose(2)">{{setQuery.bindContent?'切换':'选择抽奖活动'}}</el-button>
           </el-form-item>
 
-           <el-form-item label="抽奖次数:" prop="givenNum">
+           <el-form-item label="抽奖次数:" prop="claimNum">
               <el-input
                   size="small"
                   type="number"
-                  v-model.number="setQuery.givenNum"
+                  v-model.number="setQuery.claimNum"
                   :maxlength="10"
                   class="item-width-300"
               >
@@ -456,7 +456,6 @@ export default {
         "equityImg": "",
         "equityName": "",
         "equityType": 0,
-        "givenNum": 1,
         "showType": 1,
         "status": 1
       },

+ 52 - 2
src/views/operationManage/goodsManage/goodsDetail.vue

@@ -2,7 +2,7 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2023-11-24 14:39:54
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-07-30 16:52:31
+ * @LastEditTime: 2024-11-08 11:53:02
  * @FilePath: \admin-manage\src\views\operationManage\goodsManage\goodsDetail.vue
  * @Description: 
  * 
@@ -69,7 +69,36 @@
             </el-input>
           </el-form-item>
 
-          <el-form-item label="售价:" prop="realPrice">
+        <template v-if="setQuery.prePlatformType && mode=='audit'">
+          <el-form-item label="商品操作平台商品信息:">
+            <div class="platformType">{{filterMasterName(setQuery.prePlatformType)}}</div>
+          </el-form-item>
+           <el-form-item label="售价:" prop="platformPrice">
+            <el-input
+              type="number"
+              v-model="setQuery.platformPrice"
+              class="item-width-300"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </template>
+
+
+        <el-form-item v-if="mode=='detail'" label="商品上架平台商品信息:">
+          <el-checkbox-group v-model="setQuery.platformType" prop="platformType">
+            <div class="flex" v-for="(item,index) in setQuery.prices" :key="index" ><el-checkbox :label="item.platformType">{{filterMasterName(item.platformType) }}</el-checkbox> 
+            <el-form-item  >
+              <el-input type="number" v-model="setQuery.prices[index].price" class="item-width-300 ml10">
+                <template slot="append">元</template>
+              </el-input>
+            </el-form-item>
+            </div>
+          </el-checkbox-group>
+        </el-form-item>
+
+
+          <el-form-item label="售价:" v-else prop="realPrice">
             <el-input
               type="number"
               v-model="setQuery.realPrice"
@@ -804,6 +833,18 @@ export default Vue.extend({
         this.loading = false;
         if (res.state == "Success") {
           this.setQuery = res.content;
+          this.setQuery.prices = JSON.parse(this.setQuery.prices)
+          if(this.setQuery.prices){
+            this.setQuery.platformType = []
+            this.setQuery.prices.map(item=>{
+              if(item.platformType == this.setQuery.prePlatformType){
+                this.setQuery.platformPrice = item.price
+              }
+              if(item.status == 2){
+                this.setQuery.platformType.push(Number(item.platformType) )
+              }
+            })
+          }
           this.labelId = Number(res.content.goodsLabelId) || this.labelList[0].id
           this.setQuery.goodsCateId = Number(this.setQuery.goodsCateId);
             // 初始化购买设置
@@ -861,6 +902,15 @@ export default Vue.extend({
 @import "@/styles/element-variables";
 .addGoods {
   padding-bottom: 40px;
+  .platformType{
+    font-size: 14px;
+    color: #606266;
+  }
+  .flex{
+    display: flex;
+    align-items: center;
+    margin-bottom: 10px;
+  }
   .item {
     display: flex;
     align-items: center;

+ 55 - 1
src/views/operationManage/goodsManage/index.vue

@@ -18,6 +18,23 @@
           class="item-width-200 ml10"
         ></el-input>
 
+        <el-select
+          v-model="platformType"
+          multiple
+          size="small"
+          clearable
+          class="item-width-200 ml10"
+          placeholder="请选择所属平台"
+        >
+          <el-option
+            v-for="item in masterShopOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+
         <el-button
         class="ml10"
         type="primary"
@@ -81,6 +98,17 @@
         <span>{{scope.row.status|filterState}}</span>
        </template>
       </el-table-column>
+       <el-table-column
+          prop="accountChildType"
+          align="center"
+          label="操作平台"
+          fit
+        >
+       <template slot-scope="scope">
+            <div>{{filterMasterName(scope.row.prePlatformType)}}</div>
+          </template>
+        </el-table-column>
+
       <el-table-column
         prop="shopName"
         align="center"
@@ -89,6 +117,22 @@
       >
       </el-table-column>
 
+     
+
+       <el-table-column
+          prop="accountChildType"
+          align="center"
+          label="所属平台"
+          fit
+        >
+       <template slot-scope="scope">
+
+         <div v-for="item in JSON.parse(scope.row.prices)" :key="item.platformType">
+            <div>{{filterMasterName(item.platformType)}}</div>
+          </div>
+          </template>
+        </el-table-column>
+
       <template v-if="activeName == '审核未通过商品'">
         <el-table-column
           prop="applyTime"
@@ -97,6 +141,7 @@
           show-overflow-tooltip
         >
         </el-table-column>
+        
         <el-table-column
           prop="checkTime"
           align="center"
@@ -153,7 +198,9 @@ export default {
       tableData: [],
       loading: false,
       goodsTypeObj:JSON.parse(sessionStorage.getItem('goodsTypeObj')),
+      platformType:"",
       query: {
+        platformType:null,
         applyState:'',
         status: '3',
         goodsName: "",
@@ -181,6 +228,13 @@ export default {
         this.goodsList()
 
     },
+    platformType(val) {
+        if(val.length){
+          this.query.platformType = val.join(',')
+        }else{
+          this.query.platformType = null
+        }
+      }
     // query: {
     //   handler: debounce(function (val) {
     //     this.goodsList()
@@ -229,7 +283,7 @@ export default {
         path:'/operationManage/goodsManage/goodsDetail',
         query:{
           id:row.goodsId,
-          mode
+          mode,
           // shopId:row.shopId
         }
       })

+ 6 - 2
src/views/operationManage/goodsManage/labelList.vue

@@ -15,7 +15,7 @@
           size="small"
           clearable
           class="item-width-200 ml10"
-          placeholder="请选择主商户"
+          placeholder="请选择所属平台"
         >
           <el-option
             v-for="item in masterShopOptions"
@@ -182,7 +182,7 @@ export default {
         "labelType": ''
       },
       rules: {
-        platformType: [{ required: true, message: "请选择主商户", trigger: "change" }],
+        platformType: [{ required: true, message: "请选择所属平台", trigger: "change" }],
         labelName: [{ required: true, message: "请输入标签名称", trigger: "blur" }],
       },
     };
@@ -208,6 +208,8 @@ export default {
       this.setQuery ={
         "id": row.id,
         "labelName": row.labelName,
+        platformType: Number(row.platformType),
+
         // "labelType": row.labelType
       }
     },
@@ -217,6 +219,8 @@ export default {
      this.setQuery ={
         "id": 0,
         "labelName": "",
+        platformType:"",
+
         // "labelType": 0
       }
     

+ 40 - 5
src/views/operationManage/goodsManage/productLibrary.vue

@@ -10,7 +10,15 @@
           clearable
           class="item-width-200 "
         ></el-input>
-          <el-select v-model="query.regionCode" size="small" filterable clearable class="item-width-200 ml10" placeholder="请选择区域">
+         <el-select v-model="query.parkId" size="small" filterable clearable class="item-width-200 ml10" placeholder="请选择平台">
+              <el-option
+                v-for="item in platformTypeOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          <el-select v-model="query.regionCode" size="small" no-data-text="无数据,先选择平台" filterable clearable class="item-width-200 ml10" placeholder="请选择区域">
               <el-option
                 v-for="item in cityOptions"
                 :key="item.value"
@@ -241,7 +249,7 @@
   
   <script>
 import { debounce } from "@/utils/index";
-import { getCityList } from "@/api/common";
+import { getCityList,getChildRegionsList } from "@/api/common";
 import { goodsStoreList,setHidden,listAllTypes,upsertProduct} from "@/api/goods";
 import guid from "@/utils/guid";
 import Upload from "@/components/Upload";
@@ -253,6 +261,7 @@ export default {
   },
   data() {
     return {
+      platformTypeOptions:[],
       title:'',
       tableData: [],
       loading: false,
@@ -263,6 +272,7 @@ export default {
       btnLoading2: false,
       dialogFormVisible2: false,
       query: {
+        parkId:'',
         regionCode:'',
         productType:'',
         title:'',
@@ -366,6 +376,14 @@ export default {
 
     }
   },
+  watch: {
+    'query.parkId'(val) {
+      this.cityOptions = []
+      if(val){
+        this.getChildRegionsList(val)
+      }
+    }
+  },
   methods: {
     // 图片统一上传
     uploadEnd(val) {
@@ -501,10 +519,26 @@ export default {
     },
     getCityList() {
       this.loading = true
-      getCityList({name:'',
-        page: 0,
-        size: 999,}).then((res) => {
+      getCityList({
+      type:'Park',
+        }).then((res) => {
         this.loading = false
+        if (res.state == "Success") {
+          this.platformTypeOptions = res.content.content.map(item => {
+            return {
+              value: item.code,
+              label: item.name
+              }
+            })
+        }
+      });
+    },
+    getChildRegionsList(parentId){
+      getChildRegionsList({
+      parentId,
+      page:0,
+      size:999
+      }).then((res) => {
         if (res.state == "Success") {
           this.cityOptions = res.content.content.map(item => {
             return {
@@ -564,6 +598,7 @@ export default {
     this.getList();
     this.listAllTypes()
     this.getCityList()
+    
   },
 };
 </script>

+ 1 - 1
src/views/operationManage/orderManage/index.vue

@@ -305,7 +305,7 @@ export default {
         else if(goodsModelList[0].jobFlowMap == 'Kfc'){
           return {
             goodsName:goodsModelList[0].goodsInfo.goodsName,
-            price:goodsModelList[0].goodsInfo.products[0].sellPrice
+            price:goodsModelList[0].goodsInfo.products[0].selPrice
           }
         }else{
           return {

+ 2 - 2
src/views/operationManage/orderManage/orderDetail.vue

@@ -2,7 +2,7 @@
  * @Author: wj 1454560336@qq.com
  * @Date: 2023-11-01 14:21:43
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-10-23 14:53:16
+ * @LastEditTime: 2024-10-28 14:27:46
  * @FilePath: \admin-manage\src\views\operationManage\orderManage\orderDetail.vue
  * @Description:
  *
@@ -156,7 +156,7 @@
         show-overflow-tooltip
       >
        <template slot-scope="scope">
-        {{scope.row.sellPrice }}
+        {{scope.row.selPrice }}
       </template>
       </el-table-column>
        <el-table-column

+ 1 - 1
src/views/operationManage/shopManage/index.vue

@@ -15,7 +15,7 @@
           size="small"
           clearable
           class="item-width-200 ml10"
-          placeholder="请选择主商户"
+          placeholder="请选择所属平台"
         >
           <el-option
             v-for="item in masterShopOptions"

+ 98 - 13
src/views/operationManage/shopManage/shopAdd.vue

@@ -2,7 +2,7 @@
  * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
  * @Date: 2023-05-26 16:37:34
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-09-03 13:58:11
+ * @LastEditTime: 2024-10-31 17:42:39
  * @FilePath: \admin-manage\src\views\operationManage\shopManage\shopAdd.vue
  * @Description:
  *
@@ -16,7 +16,7 @@
       :rules="rules"
       v-loading="pageLoading"
       :disabled="disabled"
-      label-width="130px"
+      label-width="180px"
     >
     <el-tabs v-model="activeName">
     <el-tab-pane label="基本信息" name="1">
@@ -170,7 +170,7 @@
         }"
         @change=""></el-cascader>
       </el-form-item>
-      <el-form-item label="银联分账帐户:">
+      <!-- <el-form-item label="银联分账帐户:">
         <el-select v-model="setQuery.authAccount" size="small" filterable class="item-width-300" placeholder="请搜索选择店铺主体">
           <el-option
             v-for="(item,index) in authOptions"
@@ -194,7 +194,7 @@
               >
               </el-option>
             </el-select>
-          </el-form-item>
+          </el-form-item> -->
         <el-form-item label="店铺搜索:">
 
        <el-radio-group v-model="setQuery.searchEnable">
@@ -205,17 +205,51 @@
 
        <el-form-item label="店铺状态:" >
 
-       <el-radio-group :disabled="!setQuery.authAccount" v-model="setQuery.state">
+       <el-radio-group :disabled="isDisabled" v-model="setQuery.state">
         <el-radio :label="1">运营中</el-radio>
         <el-radio :label="2">关闭</el-radio>
       </el-radio-group>
       </el-form-item>
-      <el-form-item label="绑定主商户" prop="platformType">
-          <el-checkbox-group v-model="setQuery.platformType">
-            <el-checkbox label="1">慧研学惠生活</el-checkbox>
-            <el-checkbox label="2" >印象贵大</el-checkbox>
+       <el-form-item label="绑定所属平台及分账规则" prop="platformType">
+
+        <el-checkbox-group v-model="setQuery.platformType" prop="platformType">
+            <div class="flex" v-for="(item,index) in masterShopOptions" :key="index" ><el-checkbox :label="item.value">{{item.label}}</el-checkbox> 
+            <el-form-item label="分账规则:" v-if="setQuery.platformType.includes(item.value)" :prop="'shopInfos.' + index + '.shareId'" :rules="{required: true, message: '请选择分账规则', trigger: 'change'}">
+              <el-select
+              v-model="setQuery.shopInfos[index].shareId"
+              class="item-width-300"
+              placeholder="请选择分账规则"
+            >
+              <el-option
+                v-for="item in ruleOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+            </el-form-item>
+             <el-form-item label="银联分账帐户:" v-if="setQuery.platformType.includes(item.value)" >
+            <el-select v-model="setQuery.shopInfos[index].authAccount" size="small" filterable class="item-width-300" placeholder="请搜索选择店铺主体">
+              <el-option
+                v-for="(item,index) in authOptions"
+                :key="index"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+
+            </div>
           </el-checkbox-group>
-        </el-form-item>
+       
+      </el-form-item>
+      <!-- <el-form-item label="绑定主商户" prop="platformType">
+        <el-checkbox-group v-model="setQuery.platformType">
+          <el-checkbox label="1">慧研学惠生活</el-checkbox>
+          <el-checkbox label="2" >印象贵大</el-checkbox>
+        </el-checkbox-group>
+      </el-form-item> -->
 
     </el-tab-pane>
 
@@ -335,7 +369,8 @@ export default {
         authAccount:"",
         searchEnable:1,
         state:2,
-        platformType:[]
+        platformType:[],
+        shopInfos:[],//店铺主体分账规则绑定
       },
       authOptions:[],//银联账号
       typeOptions:[],//商品分类
@@ -405,7 +440,7 @@ export default {
           { required: true, message: "请选择经营商品类型", trigger: "change" },
         ],
         platformType: [
-          { type: 'array', required: true, message: '请至少绑定一个主商户', trigger: 'change' }
+          { type: 'array', required: true, message: '请绑定所属平台', trigger: 'change' }
         ],
         serviceTel: [
           { required: true, message: "请输入店铺电话", trigger: "blur" },
@@ -464,7 +499,27 @@ export default {
         }
     }
   },
+  computed: {
+    isDisabled(val){
+      let flag = true
+
+      this.setQuery.platformType.forEach(item=>{
+        this.setQuery.shopInfos.forEach(i=>{
+          if(i.platformType == item&&i.authAccount){
+            flag = false
+          }
+
+        })
+      })
+      if(flag){
+        this.setQuery.state = 2
+      }
+
+      return flag
+    },
+  },
   methods: {
+    
     // 选择地址
     selectAddress(val){
       let item = this.addressOptions.filter(item=>item.value==val)[0]
@@ -533,6 +588,15 @@ export default {
           })
           obj.serviceCate = str
           obj.shopMenuId = obj.shopMenuId.toString()
+          let shopInfos = JSON.parse(JSON.stringify(obj.shopInfos))
+          obj.shopInfos = []
+          shopInfos.map(item=>{
+            if(item.shareId&&obj.platformType.includes(Number(item.platformType))){
+              obj.shopInfos.push(item)
+            }
+          })
+              console.log(obj.shopInfos);
+
           obj.platformType = obj.platformType.toString()
           if (this.setQuery.shopId) {
             this.update(obj);
@@ -602,7 +666,17 @@ export default {
           this.setQuery.serviceCode = this.setQuery.serviceCode.split(',')
           this.setQuery.serviceCate = this.setQuery.serviceCate.split('/').map(item=>{return item = item.split(',').map(item=> Number(item))})
           this.setQuery.shopMenuId = this.setQuery.shopMenuId.split(',').map(item=> Number(item))
-          this.setQuery.platformType = this.setQuery.platformType.split(',')
+          this.setQuery.platformType = this.setQuery.platformType.split(',').map(item=> Number(item))
+          if(!this.setQuery.shopInfos){
+            this.setQuery.shopInfos=[]
+            this.masterShopOptions.map(item=>{
+              this.setQuery.shopInfos.push({
+                shareId:'',
+                authAccount:'',
+                platformType:item.value
+              })
+            })
+          }
         }
       });
     },
@@ -769,6 +843,14 @@ export default {
     }
   },
   created() {
+    this.setQuery.shopInfos=[]
+    this.masterShopOptions.map(item=>{
+      this.setQuery.shopInfos.push({
+        shareId:'',
+        authAccount:'',
+        platformType:item.value
+      })
+    })
     // this.finishComplexList()
     this.getData()
     this.getRuleList()
@@ -793,6 +875,9 @@ export default {
 <style lang="scss" scoped>
 .shopAdd {
   padding-bottom: 40px;
+  .flex{
+    display: flex;
+  }
   .position{
     cursor: pointer;
     font-size: 20px;

+ 4 - 0
src/views/userManage/memberManage/index.vue

@@ -143,6 +143,10 @@ export default {
         {
           label:'印象贵大',
           value:2
+        },
+        {
+          label:'中数未来生活宝',
+          value:3
         }
       ],
       loading: false,