cmy 1 gadu atpakaļ
vecāks
revīzija
b46c51c7f7

+ 1 - 1
.env.base

@@ -8,7 +8,7 @@ VITE_API_BASE_PATH=
 VITE_BASE_PATH=/
 
 # 标题
-VITE_APP_TITLE=七牛数字
+VITE_APP_TITLE=后台管理
 
 # 是否全量引入element-plus样式
 VITE_USE_ALL_ELEMENT_PLUS_STYLE=true

+ 1 - 1
.env.dev

@@ -20,7 +20,7 @@ VITE_SOURCEMAP=true
 VITE_OUT_DIR=dist-dev
 
 # 标题
-VITE_APP_TITLE=七牛数字
+VITE_APP_TITLE=后台管理
 
 # 是否包分析
 VITE_USE_BUNDLE_ANALYZER=false

+ 1 - 1
.env.gitee

@@ -20,7 +20,7 @@ VITE_SOURCEMAP=false
 VITE_OUT_DIR=dist-pro
 
 # 标题
-VITE_APP_TITLE=七牛数字
+VITE_APP_TITLE=后台管理
 
 # 是否包分析
 VITE_USE_BUNDLE_ANALYZER=false

+ 1 - 1
.env.pro

@@ -20,7 +20,7 @@ VITE_SOURCEMAP=false
 VITE_OUT_DIR=dist-pro
 
 # 标题
-VITE_APP_TITLE=七牛数字
+VITE_APP_TITLE=后台管理
 
 # 是否包分析
 VITE_USE_BUNDLE_ANALYZER=true

+ 1 - 1
.env.test

@@ -20,7 +20,7 @@ VITE_SOURCEMAP=true
 VITE_OUT_DIR=dist-test
 
 # 标题
-VITE_APP_TITLE=七牛数字
+VITE_APP_TITLE=后台管理
 
 # 是否包分析
 VITE_USE_BUNDLE_ANALYZER=false

+ 2 - 2
src/api/user/types.ts

@@ -25,12 +25,12 @@ export interface userLevelSearch {
 export interface userLevelData {
   id?: number
   name: string //等级名称
-  is_forever: number | string //是否永久 1永久 0非永久
+  is_forever: number | string | true | false //是否永久 1永久 0非永久
   valid_date: number //有效时间(天) 0为永久
   grade: number //等级
   icon?: number //图标
   image?: number //背景
-  is_show: number //是否启用
+  is_show: number | true | false //是否启用
   explain: number //等级描述
   task?: any[] //等级任务,完成任务即可升级
 }

+ 3 - 0
src/views/System/log/index.vue

@@ -153,6 +153,9 @@ const searchParams = ref<{
   time: ''
 })
 const setSearchParams = (data: any) => {
+  if (data.time) {
+    data.time = data.time.join(' - ')
+  }
   searchParams.value = data
   getList()
 }

+ 62 - 39
src/views/User/level/components/Write.vue

@@ -1,15 +1,19 @@
 <script setup lang="tsx">
 import { Form, FormSchema } from '@/components/Form'
 import { useForm } from '@/hooks/web/useForm'
-import { PropType, watch, ref } from 'vue'
+import { PropType, watch, ref, onMounted } from 'vue'
 import { useValidator } from '@/hooks/web/useValidator'
 import { cloneDeep } from 'lodash-es'
 import { ElInput, ElSwitch, ElTable, ElTableColumn } from 'element-plus'
 import { BaseButton } from '@/components/Button'
 import { UpImgButtom } from '@/components/UpFile'
+import addLevelTesk from './addLevelTesk.vue'
+import { levelTaskBase } from '@/api/user'
 
 const { required } = useValidator()
-
+onMounted(() => {
+  getTaskList()
+})
 const props = defineProps({
   currentRow: {
     type: Object as PropType<any>,
@@ -150,23 +154,29 @@ const formSchema = ref<FormSchema[]>([
                   label="名称"
                   v-slots={{
                     default: ({ row }: any) => {
-                      const list = row.info.split(/\{%num[0-9]+\%\}/g).filter((item) => item !== '')
-                      return (
-                        <>
-                          {list.map((item, ind) => {
-                            return (
-                              <>
-                                {item}
-                                <ElInput
-                                  class={'m-l-5px m-r-5px list'}
-                                  v-model={row.units[ind].value}
-                                />
-                                {row.units[ind].label}
-                              </>
-                            )
-                          })}
-                        </>
-                      )
+                      if (row.name && taskList.value && taskList.value[row.name]) {
+                        const info = taskList.value[row.name].info
+                        const list = info.split(/\{%num[0-9]+\%\}/g).filter((item) => item !== '')
+                        return (
+                          <>
+                            {list.map((item, ind) => {
+                              console.log(item, 'item')
+                              return (
+                                <>
+                                  {item}
+                                  <ElInput
+                                    class={'m-l-5px m-r-5px list'}
+                                    v-model={row.units[ind].value}
+                                  />
+                                  {row.units[ind].label}
+                                </>
+                              )
+                            })}
+                          </>
+                        )
+                      } else {
+                        return <></>
+                      }
                     }
                   }}
                 />
@@ -177,7 +187,15 @@ const formSchema = ref<FormSchema[]>([
                   align="center"
                   v-slots={{
                     default: ({ row }: any) => {
-                      return <ElSwitch v-model={row.must} on-text="是" off-text="否" />
+                      return (
+                        <ElSwitch
+                          v-model={row.must}
+                          activeValue="1"
+                          inactiveValue="0"
+                          on-text="是"
+                          off-text="否"
+                        />
+                      )
                     }
                   }}
                 />
@@ -269,35 +287,40 @@ defineExpose({
   submit
 })
 const showDrawer = ref(false)
-// const checkedLevelTesk = async (res: any) => {
-//   // console.log(res)
-//   const formData = await getFormData()
-//   res.units = res.units.map((item: any) => {
-//     return {
-//       key: item.key,
-//       value: 0,
-//       label: item.label,
-//       replace: item.replace
-//     }
-//   })
-//   //默认是否选中
-//   res.must = true
-//   setValues({
-//     task: [...(formData?.task || []), res]
-//   })
-//   showDrawer.value = false
-// }
+const checkedLevelTesk = async (res: any) => {
+  // console.log(res)
+  const formData = await getFormData()
+  res.units = res.units.map((item: any) => {
+    return {
+      key: item.key,
+      value: 0,
+      label: item.label,
+      replace: item.replace
+    }
+  })
+  //默认是否选中
+  res.must = true
+  setValues({
+    task: [...(formData?.task || []), res]
+  })
+  showDrawer.value = false
+}
 const delTask = (index: number, data: any) => {
   // console.log(index, data, 'data')
   data.task.splice(index, 1)
   return
 }
+const taskList = ref({})
+const getTaskList = async () => {
+  const { data } = await levelTaskBase()
+  taskList.value = data
+}
 </script>
 
 <template>
   <div>
     <Form :rules="rules" @register="formRegister" :schema="formSchema" />
-    <!-- <addLevelTesk v-model="showDrawer" @confirm="checkedLevelTesk" /> -->
+    <addLevelTesk :list="taskList" v-model="showDrawer" @confirm="checkedLevelTesk" />
   </div>
 </template>
 <style lang="less" scoped>

+ 21 - 23
src/views/User/level/components/addLevelTesk.vue

@@ -1,24 +1,30 @@
 <script setup lang="tsx">
 import { ElDrawer } from 'element-plus'
-import { reactive } from 'vue'
-import { useTable } from '@/hooks/web/useTable'
+import { reactive, ref, watch } from 'vue'
 import { Table, TableColumn } from '@/components/Table'
 import { BaseButton } from '@/components/Button'
-import { levelTaskBase } from '@/api/user'
 
-const { tableRegister, tableState } = useTable({
-  fetchDataApi: async () => {
-    const { data } = await levelTaskBase()
-    const list: any[] = []
-    for (const item in data) {
-      list.push(data[item])
-    }
-    return {
-      list: list || []
-    }
+const props = defineProps({
+  list: {
+    type: Object,
+    default: () => ({})
   }
 })
-const { dataList, loading } = tableState
+
+const datalist = ref<any[]>([])
+
+watch(
+  () => props.list,
+  (value) => {
+    if (value) {
+      const list: any[] = []
+      for (const item in value) {
+        list.push(value[item])
+      }
+      datalist.value = list
+    }
+  }
+)
 
 const modelValue = defineModel<boolean>()
 
@@ -61,15 +67,7 @@ const confirm = (row: any) => {
 
 <template>
   <ElDrawer v-model="modelValue" title="选择规则" size="700px">
-    <Table
-      :columns="tableColumns"
-      default-expand-all
-      node-key="id"
-      stripe
-      :data="dataList"
-      :loading="loading"
-      @register="tableRegister"
-    />
+    <Table :columns="tableColumns" default-expand-all node-key="id" stripe :data="datalist" />
     <template #footer>
       <div>
         <BaseButton @click="() => (modelValue = false)">关闭</BaseButton>

+ 1 - 1
src/views/User/level/index.vue

@@ -208,7 +208,7 @@ const setSearchParams = (data: any) => {
 }
 
 const dialogVisible = ref(false)
-const currentRow = ref()
+const currentRow = ref<userLevelData>()
 const dialogTitle = ref('')
 const actionType = ref('')
 const writeRef = ref<ComponentRef<typeof Write>>()

+ 58 - 26
src/views/User/list/components/DetailFrom.vue

@@ -17,7 +17,8 @@ import {
   ElSwitch,
   ElTag,
   ElDescriptions,
-  ElDescriptionsItem
+  ElDescriptionsItem,
+  ElMention
 } from 'element-plus'
 import {
   getBalanceLog,
@@ -47,19 +48,6 @@ const props = defineProps({
 })
 const localUserDetail = ref<userData>({ ...props.userDetail })
 
-watch(
-  () => props.userDetail,
-  (newVal) => {
-    localUserDetail.value = { ...newVal }
-    if (typeof newVal.birthday == 'number') {
-      localUserDetail.value.birthday = newVal.birthday ? formatToDate(newVal.birthday * 1000) : ''
-      localUserDetail.value.is_promoter = newVal.is_promoter == 1 ? true : false
-      localUserDetail.value.status = newVal.status == 1 ? true : false
-    }
-  },
-  { deep: true, immediate: true }
-)
-
 const rules = ref<FormRules>({
   phone: [required('请填写手机号'), phone()],
   pwd: [{}],
@@ -95,7 +83,6 @@ const userRecordList = ref([
     page: 1,
     limit: 10,
     total: 0,
-    request: getBrokerageLog,
     data: [],
     loading: true,
     columns: [
@@ -116,7 +103,8 @@ const userRecordList = ref([
         field: 'type'
       },
       {
-        label: '备注'
+        label: '备注',
+        field: 'mark'
       }
     ]
   },
@@ -127,7 +115,6 @@ const userRecordList = ref([
     limit: 10,
     total: 0,
     loading: true,
-    request: getBalanceLog,
     data: [],
     columns: [
       {
@@ -147,7 +134,8 @@ const userRecordList = ref([
         field: 'type'
       },
       {
-        label: '备注'
+        label: '备注',
+        field: 'mark'
       }
     ]
   },
@@ -158,7 +146,6 @@ const userRecordList = ref([
     limit: 10,
     total: 100,
     loading: true,
-    request: getSpreadList,
     data: [],
     columns: [
       {
@@ -185,19 +172,43 @@ const changeTable = (row: any) => {
     const element = userRecordList.value[index]
     if (row == element.type) {
       if (element.loading) {
-        element
-          .request(
+        if (element.type == '1') {
+          getSpreadList(
             {
               page: element.page,
               limit: element.limit
             },
             props.userDetail.uid
-          )
-          .then((res) => {
+          ).then((res) => {
             element.data = res.data.list
             element.total = res.data.total
             element.loading = false
           })
+        } else if (element.type == '2') {
+          getBalanceLog(
+            {
+              page: element.page,
+              limit: element.limit
+            },
+            props.userDetail.uid as number
+          ).then((res) => {
+            element.data = res.data.data
+            element.total = res.data.count
+            element.loading = false
+          })
+        } else if (element.type == '3') {
+          getBrokerageLog(
+            {
+              page: element.page,
+              limit: element.limit
+            },
+            props.userDetail.uid
+          ).then((res) => {
+            element.data = res.data.data
+            element.total = res.data.count
+            element.loading = false
+          })
+        }
       }
       break
     }
@@ -241,11 +252,32 @@ const getLabel = (list, id) => {
   // 如果找到匹配的元素,则返回该元素的标签;否则,返回null
   return item ? item.label : null
 }
+const activeName = ref('base')
+
+watch(
+  () => props.userDetail,
+  (newVal) => {
+    localUserDetail.value = { ...newVal }
+    if (typeof newVal.birthday == 'number') {
+      localUserDetail.value.birthday = newVal.birthday ? formatToDate(newVal.birthday * 1000) : ''
+      localUserDetail.value.is_promoter = newVal.is_promoter == 1 ? true : false
+      localUserDetail.value.status = newVal.status == 1 ? true : false
+    }
+    const ar = userRecordList.value
+    activeName.value = 'base'
+    for (let i = 0; i < ar.length; i++) {
+      const it = ar[i]
+      it.loading = true
+      it.page = 1
+    }
+  },
+  { deep: true, immediate: true }
+)
 </script>
 
 <template>
-  <ElTabs type="border-card" @tab-change="changeTable">
-    <ElTabPane label="用户信息">
+  <ElTabs v-model="activeName" type="border-card" @tab-change="changeTable">
+    <ElTabPane label="用户信息" name="base">
       <div v-show="modelValue" class="p-20px">
         <el-form label-width="110px" inline :rules="rules" :model="localUserDetail">
           <ElDivider content-position="left"
@@ -391,7 +423,7 @@ const getLabel = (list, id) => {
       v-for="(item, index) in userRecordList"
       :key="index"
     >
-      <ElTable v-loading="item.loading" :data="item.data" stripe>
+      <ElTable v-loading="item.loading" :data="item.data" stripe table-layout="auto">
         <ElTableColumn
           v-for="(ls, ind) in item.columns"
           :key="ind"

+ 6 - 2
src/views/User/list/index.vue

@@ -316,6 +316,9 @@ const searchParams = ref<userSearch>({
   field_key: 'all'
 })
 const setSearchParams = (data: any) => {
+  if (data.time) {
+    data.time = data.time.join(' - ')
+  }
   searchParams.value = data
   getList()
 }
@@ -557,10 +560,11 @@ watch(currentPage, (val) => {
 .searchBox {
   max-width: 1000px;
 }
+
 .example-showcase .el-dropdown-link {
-  cursor: pointer;
-  color: var(--el-color-primary);
   display: flex;
+  color: var(--el-color-primary);
+  cursor: pointer;
   align-items: center;
 }
 </style>