6 Commits 21f02711e2 ... 6ca168442c

Tác giả SHA1 Thông báo Ngày
  wenjie 6ca168442c 权限和数据分离 6 tháng trước cách đây
  wenjie 1d155af0ff Merge branch 'master' into 2.0 9 tháng trước cách đây
  wenjie 5e9af3a2dc 临时会员上线 9 tháng trước cách đây
  zouzexu 8dfed96f8e 激活码开通套餐版本 -zzx 9 tháng trước cách đây
  wenjie 06b8f577b4 抽奖活动问题修复上线 10 tháng trước cách đây
  wenjie fa814e9e5f 抽奖次数字段修改 10 tháng trước cách đây
30 tập tin đã thay đổi với 588 bổ sung375 xóa
  1. 42 42
      src/router/index.js
  2. 8 3
      src/store/modules/user.js
  3. 1 1
      src/utils/config.js
  4. 2 2
      src/utils/request.js
  5. 24 4
      src/views/authorityManage/roleList.vue
  6. 54 16
      src/views/authorityManage/userList.vue
  7. 5 5
      src/views/home/index.vue
  8. 3 2
      src/views/login/index.vue
  9. 1 1
      src/views/merchantManage/addUser.vue
  10. 4 4
      src/views/merchantManage/index.vue
  11. 4 0
      src/views/operationManage/appMenuManage/addMenu.vue
  12. 11 1
      src/views/operationManage/appMenuManage/index.vue
  13. 93 21
      src/views/operationManage/comboManage/checkoutCode.vue
  14. 32 0
      src/views/operationManage/comboManage/editCombo.vue
  15. 119 228
      src/views/operationManage/comboManage/vipActivation.vue
  16. 1 2
      src/views/operationManage/equitiesManage/addEquities.vue
  17. 9 4
      src/views/operationManage/financeManage/index.vue
  18. 13 9
      src/views/operationManage/financeManage/withdraw.vue
  19. 8 1
      src/views/operationManage/goodsManage/goodsDetail.vue
  20. 11 6
      src/views/operationManage/goodsManage/index.vue
  21. 100 0
      src/views/operationManage/marketingManage/shareSetting.vue
  22. 19 2
      src/views/operationManage/shopManage/shopAdd.vue
  23. 3 3
      src/views/setting/cityList.vue
  24. 1 0
      src/views/studyManage/bannerManage/addBanner.vue
  25. 3 3
      src/views/studyManage/bannerManage/index.vue
  26. 3 3
      src/views/studyManage/communityManage/index.vue
  27. 3 3
      src/views/studyManage/courseManage/index.vue
  28. 3 3
      src/views/studyManage/menuManage/index.vue
  29. 5 3
      src/views/studyManage/questionBankManage/index.vue
  30. 3 3
      src/views/studyManage/tabManage/index.vue

+ 42 - 42
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-11-25 14:54:13
+ * @LastEditTime: 2024-12-05 14:21:31
  * @FilePath: \admin-manage\src\router\index.js
  * @Description:
  *
@@ -1399,47 +1399,47 @@ export let constantRoutes = [{
 ]
 
 export const asyncRouter = [
-  {
-    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: 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: ''
+  //       },
+  //     },
+  //   ]
+  // },
 
 ]
 

+ 8 - 3
src/store/modules/user.js

@@ -2,7 +2,7 @@
  * @Author: wenjie 1454560336@qq.com
  * @Date: 2024-11-14 15:02:58
  * @LastEditors: wenjie 1454560336@qq.com
- * @LastEditTime: 2024-11-25 17:13:07
+ * @LastEditTime: 2024-12-12 09:29:54
  * @FilePath: \admin-manage\src\store\modules\user.js
  * @Description: 
  * 
@@ -83,7 +83,12 @@ const actions = {
       getMenuAuth({menuSource:1,shopId:0}).then(response => {
         if(response.state == 'Success'){
 
-        let menuList = response.content
+        let menuList = []
+        response.content.map(item=>{
+          if(item.menuSource == 1){
+            menuList.push(item) 
+          }
+        })
         let list = []
         menuList.map(item=>{
           let obj = {}
@@ -149,7 +154,7 @@ const actions = {
         list = asyncRouter.concat(list)
         commit('SET_MENU', list)
 
-          getAuthButton({shopId:0}).then(res=>{
+          getAuthButton({menuSource:1,shopId:0}).then(res=>{
             if(res.state == 'Success'){
                 commit('SET_BTNAUTH', res.content)
             }

+ 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-29 17:17:03
+ * @LastEditTime: 2024-12-04 15:31:42
  * @FilePath: \admin-manage\src\utils\config.js
  * @Description: 124234
  * 

+ 2 - 2
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-11-12 15:35:43
+ * @LastEditTime: 2024-12-11 16:44:19
  * @FilePath: \admin-manage\src\utils\request.js
  * @Description: 
  * 
@@ -33,7 +33,7 @@ service.interceptors.request.use(
       // ['X-Token'] is a custom headers key
       // please modify it according to the actual situation
       config.headers['Accesstoken'] = getToken()
-      config.headers['code'] = '520100,5201000,p-0001' //慧研学520100 中数5201000 贵大 p-0001
+      config.headers['code'] = 'p-0001,p-0002,p-0003' //慧研学p-0002 中数p-0003 贵大 p-0001
       config.headers['epid'] = localStorage.getItem('epid')
       // config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
     // }

+ 24 - 4
src/views/authorityManage/roleList.vue

@@ -270,6 +270,17 @@ export default {
     }
   },
   methods: {
+    formatData(data){
+      let arr = []
+      data.map(item=>{
+        if(item.childs.length){
+          arr = arr.concat(this.formatData(item.childs)) 
+        }else{
+          arr.push(item.id)
+        }
+      })
+      return arr
+    },
     handleEdit(row){
         this.title = "编辑"
         this.dialogFormVisible = true
@@ -282,11 +293,20 @@ export default {
           "sourceId": row.sourceId,
           "status": row.status
         }
-        let parentIds = this.data.map(item => {
-          return item.id
-        })
+ 
+
+        // let parentIds = this.data.map(item => {
+        //   return item.id
+        // })
+        // let authRang = this.setQuery.authRang.map(item=>{
+        //   if(!parentIds.includes(item)){
+        //     return item
+        //   }
+        // })
+        
+        // 筛选出最后一层
         let authRang = this.setQuery.authRang.map(item=>{
-          if(!parentIds.includes(item)){
+          if(this.formatData(this.data).includes(item)){
             return item
           }
         })

+ 54 - 16
src/views/authorityManage/userList.vue

@@ -4,21 +4,21 @@
     <div class="search">
         <div>
             <el-input
-            v-model="query.name"
+            v-model="query.employeeName"
             size="small"
             clearable
             placeholder="请输入名称"
             class="item-width-200 "
             ></el-input>
              <el-input
-            v-model="query.name"
+            v-model="query.phoneNum"
             size="small"
             clearable
             placeholder="请输入登录账号"
             class="item-width-200 ml10"
             ></el-input>
             <el-select
-          v-model="query.activityType"
+          v-model="query.roleId"
           size="small"
           class="item-width-200 ml10"
           placeholder="请选择角色"
@@ -36,7 +36,8 @@
         <el-date-picker
           v-model="date"
           size="small"
-          value-format="timestamp"
+          :default-time="['00:00:00', '23:59:59']"
+          value-format="yyyy-MM-dd HH:mm:ss"
           class="item-width-350 ml10"
           type="datetimerange"
           range-separator="至"
@@ -143,6 +144,7 @@
             </el-form-item>
             <el-form-item label="登录账号:"  prop="phoneNum">
                 <el-input
+                :disabled="title == '编辑'"
                 v-model="setQuery.phoneNum"
                 :maxlength="11"
                 class="item-width-300"
@@ -191,9 +193,12 @@
 
   <script>
   import {getUserList,enableUser,addUser,updateUser,getAllRole} from '@/api/auth'
+  import {setAes} from '@/utils/index'
+
 export default {
   name: "userList",
   data() {
+   
     return {
         date:'',
       options:[
@@ -212,8 +217,12 @@ export default {
       btnLoading: false,
       dialogFormVisible: false,
       query: {
-        "activityType":null,
-        "state":'',
+        source:1,
+        "employeeName":'',
+        "phoneNum":'',
+        "roleId":'',
+        "start":'',
+        "end":'',
         "currentPage": 1,
         "pageSize": 10,
         shopId: 0,
@@ -239,10 +248,13 @@ export default {
               { required:true,message:'请选择角色', trigger: 'change' }
           ],
           password:[
-              { required:true,message:'请填写密码', trigger: 'blur' }
+              { required:true,message:'请填写密码', trigger: 'blur' },
+               { validator: this.validatePassword, trigger: 'blur' }
           ],
           confirmPass:[
-              { required:true,message:'请填写确认密码', trigger: 'blur' }
+              { required:true,message:'请填写确认密码', trigger: 'blur' },
+               { validator: this.validatePassword1, trigger: 'blur' }
+
           ],
         }
       }else{
@@ -265,15 +277,37 @@ export default {
   watch: {
     date(val){
       if(val){
-        this.query.startTime = val[0]
-        this.query.endTime = val[1]
+        this.query.start = val[0]
+        this.query.end = val[1]
       }else{
-        this.query.startTime = ''
-        this.query.endTime = ''
+        this.query.start = ''
+        this.query.end = ''
       }
     }
   },
   methods: {
+      validatePassword(rule, value, callback) {
+          let reg = /(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}/
+          if (reg.test(value)) {
+              callback()
+          }else if(value != this.setQuery.confirmPass){
+              callback(new Error('两次密码不一致'))
+          }
+            else {
+              callback(new Error('密码长度应在8-16,并且需要包含字母、数字、符号'))
+          }
+      },
+      validatePassword1(rule, value, callback){
+          let reg = /(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}/
+          if (reg.test(value)) {
+              callback()
+          }else if(value != this.setQuery.password){
+              callback(new Error('两次密码不一致'))
+          }
+          else {
+              callback(new Error('密码长度应在8-16,并且需要包含字母、数字、符号'))
+          }
+      },
     handleEdit(row){
         this.title = "编辑"
         this.dialogFormVisible = true
@@ -346,7 +380,7 @@ export default {
       })
     },
     getAllRole(){
-      getAllRole({roleSource:1}).then(res=>{
+      getAllRole({roleSource:1,shopId:0}).then(res=>{
         if(res.state == 'Success'){
           this.options = []
           for (const key in res.content) {
@@ -364,10 +398,14 @@ export default {
         if (v) {
           this.btnLoading = true
           if(this.title == "添加"){
-            addUser(this.setQuery).then(res=>{
-              this.btnLoading = false
+            let setQuery = JSON.parse(JSON.stringify(this.setQuery))
+            // setQuery.time = new Date().getTime()
+            // setQuery.password = setAes(setQuery.password,setQuery.time+'hyx')
+            // setQuery.confirmPass = setAes(setQuery.confirmPass,setQuery.time+'hyx')
+            addUser(setQuery).then(res=>{
               if(res.state == 'Success'){
-                  this.dialogFormVisible = false
+                this.dialogFormVisible = false
+                this.btnLoading = false
                   this.$notify({
                     title: '成功',
                     message: '操作成功',

+ 5 - 5
src/views/home/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2021-07-08 12:10:55
- * @LastEditTime: 2024-11-12 11:11:26
+ * @LastEditTime: 2024-12-11 16:43:39
  * @LastEditors: wenjie 1454560336@qq.com
  * @Description: In User Settings Edit
  * @FilePath: \admin-manage\src\views\home\index.vue
@@ -148,7 +148,7 @@
           </div>
           <div class="item">
             <!-- <div class="today">{{ userData.totalRegister }}</div> -->
-            <div class="today">{{ userData.totalRegisterByHyx }}</div>
+            <div class="today">{{ userData.totalRegisterByPm }}</div>
             <div class="lastDay">{{ userData.yesterdayRegister }} </div>
           </div>
         </el-col>
@@ -185,9 +185,9 @@ export default {
         platformType:1,
       },
       platformTypeObj:{
-        1:'520100',
-        2:'p-000',
-        3:'5201000',
+        1:'p-0002',
+        2:'p-0001',
+        3:'p-0003',
       },
       userData: {
         dayRegister: 0,

+ 3 - 2
src/views/login/index.vue

@@ -123,8 +123,9 @@ export default {
           this.$store.dispatch('user/login', obj).then((content) => {
              superadminList().then(r=>{
                 if (r.state == 'Success'&&r.content.length) {
-                  localStorage.setItem('epid',r.content[0].id)
-                  localStorage.setItem('shopName',r.content[0].name)
+                  let arr = r.content.filter(item=>item.authType == 'Platform')
+                  localStorage.setItem('epid',arr[0].id)
+                  localStorage.setItem('shopName',arr[0].name)
                   // this.$router.push({ path: this.redirect || '/' }) //登录成功进入之前访问的页面,没有权限会报错
                    if(content.update){
                     this.$router.push('/updatePassword')

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

@@ -286,7 +286,7 @@ export default {
               platformType:item.value
             })
           })
-          let platformShareLists = JSON.parse(this.setQuery.platformShares)
+          let platformShareLists = JSON.parse(this.setQuery.platformShares)||[]
           platformShareLists.map(item=>{
             this.setQuery.platformShareLists.map(i=>{
               if(item.platformType == i.platformType){

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

@@ -35,7 +35,7 @@
         搜索
       </el-button>
       </div>
-      <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+      <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addMerchant" @click="handleAdd"
         >添加</el-button
       >
     </div>
@@ -99,13 +99,13 @@
 
       <el-table-column prop="address" align="center" label="操作">
         <template slot-scope="scope">
-          <el-button type="text" size="small" @click="handleEdit(scope.row)"
+          <el-button type="text" size="small" v-if="btnAuthObj.editMerchant" @click="handleEdit(scope.row)"
             >编辑</el-button
           >
-           <el-button type="text" size="small" @click="handle(scope.row.accountId,scope.row.accountChildType)"
+           <el-button type="text" size="small" v-if="btnAuthObj.merchantAccount" @click="handle(scope.row.accountId,scope.row.accountChildType)"
             >账户</el-button
           >
-           <el-button type="text" size="small" @click="handleDel(scope.row.accountId)"
+           <el-button type="text" size="small" v-if="btnAuthObj.delMerchant" @click="handleDel(scope.row.accountId)"
             >删除</el-button
           >
         </template>

+ 4 - 0
src/views/operationManage/appMenuManage/addMenu.vue

@@ -129,6 +129,10 @@ export default {
           label: "慧研学",
           value: '2',
         },
+        {
+          label: "生活宝",
+          value: '3',
+        },
       ],
       rules: {
         menuName: [{ required: true, message: "请输入菜单名称", trigger: "blur" }],

+ 11 - 1
src/views/operationManage/appMenuManage/index.vue

@@ -64,7 +64,7 @@
         show-overflow-tooltip
       >
        <template slot-scope="scope">
-          <span>{{scope.row.belongType ==2?'慧研学':'贵大'}}</span>
+          <span>{{ filterPlat(scope.row.belongType)}}</span>
         </template>
       </el-table-column>
       <el-table-column
@@ -161,6 +161,16 @@ export default {
   //   },
   // },
   methods: {
+    filterPlat(val){
+      let msg
+      this.options.forEach(v=>{
+          if(v.value == val){
+            msg =  v.label
+          }
+        })
+        return msg
+
+    },
     handleSearch(){
       this.query.currentPage = 1
       this.getMenu();

+ 93 - 21
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,
       },
@@ -191,16 +198,16 @@ 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,71 @@ 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=''
+        let validType=''
+        if(item.activationType===1){
+          createTime = item.startTime+'至'+item.endTime
+          validType='时间段'
+        }else{
+          createTime = item.activationDay+'天'
+          validType='天数'
+        }
+        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,
+          "有效期类型":validType,
+          "时间段/天数": 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();

+ 32 - 0
src/views/operationManage/comboManage/editCombo.vue

@@ -61,6 +61,24 @@
           @uploadEnd="uploadEnd"
         ></Upload>
       </el-form-item>
+      <el-form-item label="套餐来源:">
+        <el-select v-model="setQuery.source"
+          class="item-width-300" 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="套餐天数:">
+        <el-input
+        type="number"
+          v-model.number="setQuery.setMealDay"
+          class="item-width-300"
+        ></el-input>
+      </el-form-item>
       <el-form-item label="套餐说明:">
         <el-input
           type="textarea"
@@ -97,6 +115,16 @@ export default {
       loading: false,
       loading1: false,
       mode:'',
+      options:[
+        {
+          label:'移动',
+          value:1
+        },
+        {
+          label:'其他',
+          value:2
+        }
+      ],
       setQuery: {
         setMealCode: 0,
         setMealDetail: "",
@@ -107,6 +135,8 @@ export default {
         backImg:"",
         colour:'',
         backColour:'',
+        source:'',
+        setMealDay:'',
       },
       rules: {
         setMealCode: [
@@ -148,6 +178,8 @@ export default {
                 this.setQuery.backColour = res.content.backColour
                 this.setQuery.discount = res.content.discount
                 this.setQuery.backImg = res.content.backImg
+                this.setQuery.source = res.content.source
+                this.setQuery.setMealDay = res.content.setMealDay
                 
             }
         })

+ 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&&btnAuthObj.createVipActivationl"
-            @click="gotoGenerating(scope.row)"
-            >生成激活码</el-button
-          >
-          <el-button
-            type="text"
-            size="small"
-             v-if="scope.row.groupType != 2&&btnAuthObj.vipActivationDetail"
-            @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();

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

@@ -90,7 +90,7 @@
                   :maxlength="10"
                   class="item-width-300"
               >
-                <template slot="append">次</template>
+                <template slot="append">次/月</template>
               </el-input>
           </el-form-item>
           
@@ -446,7 +446,6 @@ export default {
       setQuery: {
         claimType: 1,
         claimNum:1,
-        givenNum:1,
         getFlag:1,
         "setMealCode":'',
         "bindContent": "",

+ 9 - 4
src/views/operationManage/financeManage/index.vue

@@ -10,7 +10,7 @@
             class="item-width-200 "
           ></el-input>
           <el-select
-          v-model="query.channel"
+          v-model="query.code"
           size="small"
           class="item-width-200 ml10"
           placeholder="请选择"
@@ -155,18 +155,23 @@ export default {
     return {
       options: [
         {
-          value: "ZhongShu",
-          label: "中数未来",
+          value: "p-0002",
+          label: "慧研学",
         },
         {
-          value: "GuiDa",
+          value: "p-0001",
           label: "印象贵大",
+        },
+        {
+          value: "p-0003",
+          label: "中数本地生活宝",
         }
       ],
       date:'',
       tableData: [],
       loading: false,
       query: {
+        code:'p-0002',
         noOrGName: "",
         startTime: "",
         endTime: "",

+ 13 - 9
src/views/operationManage/financeManage/withdraw.vue

@@ -45,7 +45,7 @@
     </div>
     <div class="right">
        <el-select
-            v-model="query.channel"
+            v-model="query.code"
             size="small"
             class="item-width-200 ml10"
             placeholder="请选择"
@@ -268,11 +268,12 @@ export default {
         startTime: "",
         endTime: "",
         channel:"ZhongShu",
+        code:'p-0002',
         page: 1,
         size: 10,
       },
        query1: {
-        channel:"",
+        channel:"ZhongShu",
         page: 1,
         size: 10,
       },
@@ -285,12 +286,16 @@ export default {
       },
       options: [
         {
-          value: "ZhongShu",
-          label: "中数未来",
+          value: "p-0002",
+          label: "慧研学",
         },
         {
-          value: "GuiDa",
+          value: "p-0001",
           label: "印象贵大",
+        },
+        {
+          value: "p-0003",
+          label: "中数本地生活宝",
         }
       ],
       pickerOptions: {
@@ -362,7 +367,7 @@ export default {
           type: 'warning'
         }).then(() => {
              this.btnLoading = true
-            withdrawals({channel:this.query.channel}).then(res=>{
+            withdrawals({code:this.query.code}).then(res=>{
                 this.btnLoading = false
                 if(res.state == 'Success'){
                 this.dialogFormVisible = false
@@ -410,8 +415,7 @@ export default {
     withdrawList(){
       this.loading1 = true
       let obj = JSON.parse(JSON.stringify(this.query1))
-      obj.channel = this.query.channel
-      obj.shopId = this.query.channel
+      obj.code = this.query.code
       --obj.page
       withdrawList(obj).then(res=>{
         this.loading1 = false
@@ -435,7 +439,7 @@ export default {
     },
     getDetail(){
       this.moneyLoading = true
-      getDetail({channel:this.query.channel}).then(res=>{
+      getDetail({code:this.query.code}).then(res=>{
         this.moneyLoading = false
          if(res.state == 'Success'){
           this.money = res.content

+ 8 - 1
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-12-02 09:11:47
+ * @LastEditTime: 2024-12-11 16:45:28
  * @FilePath: \admin-manage\src\views\operationManage\goodsManage\goodsDetail.vue
  * @Description: 
  * 
@@ -456,6 +456,11 @@ export default Vue.extend({
   },
   data() {
     return {
+      platformTypeObj:{
+        1:'p-0002',
+        2:'p-0001',
+        3:'p-0003',
+      },
       that:this,
       showGoodsLabel:1,
       labelId:0,//标签id
@@ -842,6 +847,8 @@ export default Vue.extend({
       detail({
         goodsId: this.$route.query.id,
         resource: this.mode == 'audit'? 3:1,
+        platform: this.platformTypeObj[this.$route.query.source] ,
+
         // shopId: localStorage.getItem("epid"),
       }).then((res) => {
         this.loading = false;

+ 11 - 6
src/views/operationManage/goodsManage/index.vue

@@ -19,8 +19,7 @@
         ></el-input>
 
         <el-select
-          v-model="platformType"
-          multiple
+          v-model="query.platformType"
           size="small"
           clearable
           class="item-width-200 ml10"
@@ -184,6 +183,11 @@ export default {
   name: "goodsList",
   data() {
     return {
+      platformTypeObj:{
+        1:'p-0002',
+        2:'p-0001',
+        3:'p-0003',
+      },
       activeName:'上架商品',
       options: [
         {
@@ -200,6 +204,7 @@ export default {
       goodsTypeObj:JSON.parse(sessionStorage.getItem('goodsTypeObj')),
       platformType:"",
       query: {
+        platform:null,
         platformType:null,
         applyState:'',
         status: '3',
@@ -228,11 +233,11 @@ export default {
         this.goodsList()
 
     },
-    platformType(val) {
-        if(val.length){
-          this.query.platformType = val.join(',')
+    "query.platformType"(val) {
+        if(val){
+          this.query.platform = this.platformTypeObj[val]
         }else{
-          this.query.platformType = null
+          this.query.platform = null
         }
       }
     // query: {

+ 100 - 0
src/views/operationManage/marketingManage/shareSetting.vue

@@ -0,0 +1,100 @@
+<!--
+ * @Author: wenjie 1454560336@qq.com
+ * @Date: 2025-02-06 16:00:54
+ * @LastEditors: wenjie 1454560336@qq.com
+ * @LastEditTime: 2025-02-06 16:06:29
+ * @FilePath: \admin-manage\src\views\operationManage\marketingManage\shareSetting.vue
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+-->
+
+<template>
+    <div class="updatePassword app-container">
+        <el-form :model="form" status-icon :rules="rules" ref="form" label-width="100px" class="demo-form">
+            <el-form-item label="分享标题" prop="old">
+                <el-input type="text" class="item-width-300" v-model="form.old" autocomplete="off"></el-input>
+            </el-form-item>
+            <el-form-item label="分享描述" prop="pwd">
+                <el-input type="text"  class="item-width-300" v-model="form.pwd" autocomplete="off"></el-input>
+            </el-form-item>
+            <el-form-item label="分享封面" prop="pwd1">
+                 <Upload
+                type="imgUrl"
+                id="imgUrl"
+                width="150px"
+                height="150px"
+                uploadType="SHOP_INFO"
+                :imgUrl="form.imgUrl"
+                @uploadEnd="uploadEnd"
+                ></Upload>
+            </el-form-item>
+            <el-form-item>
+                <!-- <el-button @click="resetForm('form')">取消</el-button> -->
+                <el-button :loading="loading" type="primary" @click="submitForm('form')">确认</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+
+<script>
+import Upload from '@/components/Upload'
+import {updateLoginPassword} from '@/api/auth'
+import { removeToken } from '@/utils/auth'
+
+    export default {
+        components: {
+            Upload,
+        },
+        data() {
+            return {
+                loading:false,
+                form: {
+                    old:'',
+                    pwd:'',
+                    imgUrl:'',
+                },
+                rules: {
+                    old:[
+                        { required:true,message:'请填写旧密码', trigger: 'blur' }
+                    ],
+                    pwd: [
+                      { required:true,message:'请填写旧密码', trigger: 'blur' }
+                    ],
+                    imgUrl: [
+                        {  required:true,message:'请上传分享封面', trigger: 'change' }
+                    ],
+                    
+                },
+            }
+        },
+        methods: {
+            submitForm(formName) {
+                this.$refs[formName].validate((v) => {
+                    if(v){
+                        this.loading = true
+                        updateLoginPassword(this.form).then(res=>{
+                            this.loading = false
+                            if(res.state == 'Success'){
+                                this.$notify({
+                                    title: '成功',
+                                    message: '操作成功',
+                                    type: 'success'
+                                });
+                                this.resetForm('form')
+                            }
+                        })
+                    }
+                });
+            },
+            resetForm(formName) {
+                this.$refs[formName].resetFields();
+            },
+        },
+  
+    }
+</script>
+
+<style lang="scss" scoped>
+.updatePassword{
+
+}
+</style>

+ 19 - 2
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-11-12 15:37:19
+ * @LastEditTime: 2024-12-13 09:21:06
  * @FilePath: \admin-manage\src\views\operationManage\shopManage\shopAdd.vue
  * @Description:
  *
@@ -674,6 +674,23 @@ export default {
           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(',').map(item=> Number(item))
+                  
+          if(!this.setQuery.shopInfos){
+            this.setQuery.shopInfos = []
+            // this.masterShopOptions.map(item=>{
+            //       this.setQuery.shopInfos.push({
+            //         shareId:'',
+            //         authAccount:'',
+            //         platformType:item.value
+            //       })
+            //       this.shopOptions.push({
+            //         label: this.filterMasterName(item.value),
+            //         value: Number(item.value) 
+            //       })
+            //     })
+          }
+
+          // console.log('shopInfos',this.setQuery.shopInfos
           // let shopInfos = JSON.parse(JSON.stringify(this.setQuery.shopInfos))
           // this.setQuery.shopInfos=[]
 
@@ -873,7 +890,7 @@ export default {
 
                 let shopInfos = JSON.parse(JSON.stringify(this.setQuery.shopInfos))
                 this.setQuery.shopInfos=[]
-
+                console.log('shopInfos',this.setQuery.shopInfos);
                 this.shopOptions.map(item=>{
                   this.setQuery.shopInfos.push({
                     shareId:'',

+ 3 - 3
src/views/setting/cityList.vue

@@ -21,7 +21,7 @@
         搜索
       </el-button>
       </div>
-       <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+       <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addCity" @click="handleAdd"
         >添加</el-button
       >
     </div>
@@ -56,10 +56,10 @@
       </el-table-column>
       <el-table-column align="center" label="操作">
         <template slot-scope="scope">
-          <el-button type="text" size="small" @click="handleEdit(scope.row)"
+          <el-button type="text" size="small" v-if="btnAuthObj.editCity" @click="handleEdit(scope.row)"
             >编辑</el-button
           >
-          <el-button type="text" size="small" @click="handleDel(scope.row.code)"
+          <el-button type="text" size="small" v-if="btnAuthObj.delCity" @click="handleDel(scope.row.code)"
             >删除</el-button
           >
         </template>

+ 1 - 0
src/views/studyManage/bannerManage/addBanner.vue

@@ -85,6 +85,7 @@ export default {
     return {
         loading:false,
         setQuery: {
+          platformType:1,
           "bannerImg": "",
           "bannerName": "",
           "id": 0,

+ 3 - 3
src/views/studyManage/bannerManage/index.vue

@@ -34,7 +34,7 @@
           </el-option>
         </el-select> -->
       </div>
-      <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+      <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addStudyBanner" @click="handleAdd"
         >添加</el-button
       >
     </div>
@@ -90,8 +90,8 @@
       </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>
+          <el-button type="text" size="small" v-if="btnAuthObj.editStudyBanner"  @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" size="small" v-if="btnAuthObj.delStudyBanner"  @click="handleDel(scope.row.id)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>

+ 3 - 3
src/views/studyManage/communityManage/index.vue

@@ -26,7 +26,7 @@
       </el-button>
       </div>
 
-        <el-button class="add-btn" type="primary" size="small" @click="handleAdd">添加</el-button>
+        <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addArticle" @click="handleAdd">添加</el-button>
     </div>
 
     <el-table
@@ -98,10 +98,10 @@
      
        <el-table-column prop="address" align="center" label="操作">
         <template slot-scope="scope">
-          <el-button type="text" size="small" @click="handleDetail(scope.row)">编辑</el-button>
+          <el-button type="text" size="small" v-if="btnAuthObj.editArticle" @click="handleDetail(scope.row)">编辑</el-button>
           <el-button type="text" size="small" @click="handleTop(scope.row.id)">置顶</el-button>
           <el-button type="text" size="small" @click="handleState(scope.row.id,scope.row.state == 1?2:1)">{{scope.row.state == 1?'显示':'隐藏' }}</el-button>
-          <el-button type="text" class="red" size="small" @click="handleDel(scope.row.id)">删除</el-button>
+          <el-button type="text" class="red" v-if="btnAuthObj.delArticle" size="small" @click="handleDel(scope.row.id)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>

+ 3 - 3
src/views/studyManage/courseManage/index.vue

@@ -25,7 +25,7 @@
       </div>
         
 
-        <el-button class="add-btn" type="primary" size="small" @click="handleAdd">添加</el-button>
+        <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addCourse" @click="handleAdd">添加</el-button>
     </div>
 
     <el-table
@@ -93,10 +93,10 @@
        <el-table-column prop="address" align="center" label="操作">
         <template slot-scope="scope">
           <el-button type="text" size="small" @click="handleDetail(scope.row.id)">查看</el-button>
-          <el-button type="text" size="small" @click="handleEdit(scope.row.id)">编辑</el-button>
+          <el-button type="text" size="small"  v-if="btnAuthObj.editCourse" @click="handleEdit(scope.row.id)">编辑</el-button>
           <el-button type="text" size="small" @click="handleStatus(scope.row.id,scope.row.status == 1?2:1)">{{scope.row.status == 1?'立即发布':'取消发布' }}</el-button>
           <el-button type="text" size="small" @click="handleState(scope.row.id,scope.row.state == 1?2:1)">{{scope.row.state == 1?'显示':'隐藏' }}</el-button>
-          <el-button type="text" class="red" size="small" @click="handleDel(scope.row.id)">删除</el-button>
+          <el-button type="text" class="red"  v-if="btnAuthObj.delCourse" size="small" @click="handleDel(scope.row.id)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>

+ 3 - 3
src/views/studyManage/menuManage/index.vue

@@ -35,7 +35,7 @@
         </el-select> -->
         
       </div>
-      <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+      <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addColumn" @click="handleAdd"
         >添加</el-button
       >
     </div>
@@ -102,8 +102,8 @@
       <el-table-column prop="address" align="center" label="操作">
         <template slot-scope="scope">
           <el-button type="text" size="small" v-if="$route.query.title != '二级栏目'" @click="handle(scope.row.id)">查看下级</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>
+          <el-button type="text" size="small" v-if="btnAuthObj.editColumn" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" size="small" v-if="btnAuthObj.delColumn" @click="handleDel(scope.row.id)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>

+ 5 - 3
src/views/studyManage/questionBankManage/index.vue

@@ -26,7 +26,7 @@
       </el-button>
       </div>
 
-      <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+      <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addQuestion" @click="handleAdd"
         >添加</el-button
       >
     </div>
@@ -78,15 +78,17 @@
           <el-button
             type="text"
             size="small"
+             v-if="btnAuthObj.publishQuestion"
             @click="handleState(scope.row.id, scope.row.status == 1 ? 2 : 1)"
             >{{ scope.row.status == 1 ? "立即发布" : "取消发布" }}</el-button
           >
-          <el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
-          <el-button type="text" size="small" @click="editQuestions(scope.row.paperName,scope.row.id)">编辑题库</el-button>
+          <el-button type="text" size="small" v-if="btnAuthObj.editQuestion" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" size="small" v-if="btnAuthObj.editQuestionBank" @click="editQuestions(scope.row.paperName,scope.row.id)">编辑题库</el-button>
           <el-button
             type="text"
             class="red"
             size="small"
+             v-if="btnAuthObj.delQuestion"
             @click="handleDel(scope.row.id)"
             >删除</el-button
           >

+ 3 - 3
src/views/studyManage/tabManage/index.vue

@@ -2,7 +2,7 @@
 <template>
   <div class="tabManage app-container">
     <div class="search">
-      <el-button class="add-btn" type="primary" size="small" @click="handleAdd"
+      <el-button class="add-btn" type="primary" size="small" v-if="btnAuthObj.addTab" @click="handleAdd"
         >添加</el-button
       >
     </div>
@@ -31,10 +31,10 @@
 
       <el-table-column align="center" label="操作">
         <template slot-scope="scope">
-          <el-button type="text" size="small" @click="handleEdit(scope.row)"
+          <el-button type="text" size="small" v-if="btnAuthObj.editTab" @click="handleEdit(scope.row)"
             >编辑</el-button
           >
-          <el-button type="text" size="small" @click="handleDel(scope.row.id)"
+          <el-button type="text" size="small" v-if="btnAuthObj.delTab" @click="handleDel(scope.row.id)"
             >删除</el-button
           >
         </template>