Browse Source

会员营销配置和租户字段增加

yinbin 6 months ago
parent
commit
509d1282dc
2 changed files with 141 additions and 55 deletions
  1. 64 31
      src/views/member/config/index.vue
  2. 77 24
      src/views/system/tenant/TenantForm.vue

+ 64 - 31
src/views/member/config/index.vue

@@ -10,41 +10,78 @@
       v-loading="formLoading"
     >
       <el-form-item label="hideId" v-show="false">
-        <el-input v-model="formData.id" />
+        <el-input v-model="formData.id"/>
       </el-form-item>
 
       <el-tabs>
-        <el-tab-pane label="积分">
-          <el-form-item label="积分抵扣" prop="pointTradeDeductEnable">
-            <el-switch v-model="formData.pointTradeDeductEnable" style="user-select: none" />
-            <el-text class="w-full" size="small" type="info">下单积分是否抵用订单金额</el-text>
+        <el-tab-pane label="提现">
+          <el-form-item label="赠送提现" prop="withdrawCombo">
+            <el-switch v-model="formData.withdrawCombo" style="user-select: none"/>
+            <el-text class="w-full" size="small" type="info">是否允许提现赠送金额</el-text>
           </el-form-item>
-          <el-form-item label="积分抵扣" prop="pointTradeDeductUnitPrice">
+          <el-form-item label="分红提现" prop="withdrawDividend">
+            <el-switch v-model="formData.withdrawDividend" style="user-select: none"/>
+            <el-text class="w-full" size="small" type="info">是否允许提现分红金额</el-text>
+          </el-form-item>
+          <el-form-item label="最大提现金额" prop="withdrawMoneyMax">
             <el-input-number
-              v-model="computedPointTradeDeductUnitPrice"
-              placeholder="请输入积分抵扣金额"
+              v-model="formData.withdrawMoneyMax"
+              placeholder="请输入提现金额最大值"
               :precision="2"
             />
             <el-text class="w-full" size="small" type="info">
-              积分抵用比例(1 积分抵多少金额),单位:元
+              允许用户可以单次提现的最大额
+            </el-text>
+          </el-form-item>
+        </el-tab-pane>
+        <el-tab-pane label="分裂">
+          <el-form-item label="最大树高限制" prop="treeDepthMax">
+            <el-input-number
+              v-model="formData.treeDepthMax"
+              placeholder="许发展的用户层级数"
+            />
+            <el-text class="w-full" size="small" type="info">
+              最大树高即允许发展的用户层级数
+            </el-text>
+          </el-form-item>
+          <el-form-item label="允许发展最大会员数" prop="userCountMax">
+            <el-input-number
+              v-model="formData.userCountMax"
+              placeholder="允许发展最大会员数"
+            />
+            <el-text class="w-full" size="small" type="info">
+              超过次数量,可能会有崩盘风险
             </el-text>
           </el-form-item>
-          <el-form-item label="积分抵扣最大值" prop="pointTradeDeductMaxPrice">
+        </el-tab-pane>
+        <el-tab-pane label="套餐">
+          <el-form-item label="允许最大充值套餐金额" prop="comboRechargeMoneyMax">
             <el-input-number
-              v-model="formData.pointTradeDeductMaxPrice"
-              placeholder="请输入积分抵扣最大值"
+              v-model="formData.comboRechargeMoneyMax"
+              placeholder="允许最大充值套餐金额"
             />
             <el-text class="w-full" size="small" type="info">
-              单次下单积分使用上限,0 不限制
+              允许最大充值套餐金额
             </el-text>
           </el-form-item>
-          <el-form-item label="1 元赠送多少分" prop="pointTradeGivePoint">
+          <el-form-item label="允许最大赠送金额" prop="comboBonusMoneyMax">
             <el-input-number
-              v-model="formData.pointTradeGivePoint"
-              placeholder="请输入 1 元赠送多少积分"
+              v-model="formData.comboBonusMoneyMax"
+              placeholder="允许最大赠送金额"
             />
             <el-text class="w-full" size="small" type="info">
-              下单支付金额按比例赠送积分(实际支付 1 元赠送多少积分)
+              允许最大赠送金额,超过此金额可能有风险
+            </el-text>
+          </el-form-item>
+        </el-tab-pane>
+        <el-tab-pane label="分润">
+          <el-form-item label="允许最大分润比例" prop="profitRatioMax">
+            <el-input-number
+              v-model="formData.profitRatioMax"
+              placeholder="允许最大分润比例"
+            />
+            <el-text class="w-full" size="small" type="info">
+              允许最大分润比例,超过此比例可能会很快导致资金链断裂
             </el-text>
           </el-form-item>
         </el-tab-pane>
@@ -59,27 +96,23 @@
 <script lang="ts" setup>
 import * as ConfigApi from '@/api/member/config'
 
-defineOptions({ name: 'MemberConfig' })
+defineOptions({name: 'MemberConfig'})
 
-const { t } = useI18n() // 国际化
+const {t} = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 
 const dialogVisible = ref(false) // 弹窗的是否展示
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
 const formData = ref({
   id: undefined,
-  pointTradeDeductEnable: true,
-  pointTradeDeductUnitPrice: 0,
-  pointTradeDeductMaxPrice: 0,
-  pointTradeGivePoint: 0
-})
-
-// 创建一个计算属性,用于将 pointTradeDeductUnitPrice 显示为带两位小数的形式
-const computedPointTradeDeductUnitPrice = computed({
-  get: () => (formData.value.pointTradeDeductUnitPrice / 100).toFixed(2),
-  set: (newValue: number) => {
-    formData.value.pointTradeDeductUnitPrice = Math.round(newValue * 100)
-  }
+  withdrawCombo: false,
+  withdrawDividend: false,
+  withdrawMoneyMax: 5000,
+  treeDepthMax: 6,
+  userCountMax: 3000,
+  profitRatioMax: 0.4,
+  comboRechargeMoneyMax: 50000,
+  comboBonusMoneyMax: 10000
 })
 
 const formRules = reactive({})

+ 77 - 24
src/views/system/tenant/TenantForm.vue

@@ -8,7 +8,7 @@
       label-width="80px"
     >
       <el-form-item label="租户名" prop="name">
-        <el-input v-model="formData.name" placeholder="请输入租户名" />
+        <el-input v-model="formData.name" placeholder="请输入租户名"/>
       </el-form-item>
       <el-form-item label="租户套餐" prop="packageId">
         <el-select v-model="formData.packageId" clearable placeholder="请选择租户套餐">
@@ -21,13 +21,16 @@
         </el-select>
       </el-form-item>
       <el-form-item label="联系人" prop="contactName">
-        <el-input v-model="formData.contactName" placeholder="请输入联系人" />
+        <el-input v-model="formData.contactName" placeholder="请输入联系人"/>
       </el-form-item>
       <el-form-item label="联系手机" prop="contactMobile">
-        <el-input v-model="formData.contactMobile" placeholder="请输入联系手机" />
+        <el-input v-model="formData.contactMobile" placeholder="请输入联系手机"/>
       </el-form-item>
       <el-form-item v-if="formData.id === undefined" label="用户名称" prop="username">
-        <el-input v-model="formData.username" placeholder="请输入用户名称" />
+        <el-input v-model="formData.username" placeholder="请输入用户名称"/>
+      </el-form-item>
+      <el-form-item label="法人身份证" prop="idCard">
+        <el-input v-model="formData.idCard" placeholder="请输入法人身份证"/>
       </el-form-item>
       <el-form-item v-if="formData.id === undefined" label="用户密码" prop="password">
         <el-input
@@ -55,7 +58,7 @@
         />
       </el-form-item>
       <el-form-item label="绑定域名" prop="website">
-        <el-input v-model="formData.website" placeholder="请输入绑定域名" />
+        <el-input v-model="formData.website" placeholder="请输入绑定域名"/>
       </el-form-item>
       <el-form-item label="租户状态" prop="status">
         <el-radio-group v-model="formData.status">
@@ -68,6 +71,32 @@
           </el-radio>
         </el-radio-group>
       </el-form-item>
+      <el-form-item label="区域" prop="areaId">
+        <el-input v-model="formData.areaId" placeholder="请输入区域"/>
+      </el-form-item>
+      <el-form-item label="详细地址" prop="address">
+        <el-input v-model="formData.address" placeholder="请输入详细地址"/>
+      </el-form-item>
+      <el-form-item label="面积" prop="coveredArea">
+        <el-input v-model="formData.coveredArea" placeholder="请输入面积"/>
+      </el-form-item>
+      <el-form-item label="房间数" prop="roomCount">
+        <el-input v-model="formData.roomCount" placeholder="请输入房间数"/>
+      </el-form-item>
+      <el-form-item label="技师人数" prop="technicianCount">
+        <el-input v-model="formData.technicianCount" placeholder="请输入技师人数"/>
+      </el-form-item>
+      <el-form-item label="营业执照" prop="businessLicense">
+        <UploadImg v-model="formData.businessLicense"/>
+      </el-form-item>
+      <el-form-item label="开业时间" prop="openTime">
+        <el-date-picker
+          v-model="formData.openTime"
+          type="date"
+          value-format="x"
+          placeholder="选择开业时间"
+        />
+      </el-form-item>
     </el-form>
     <template #footer>
       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
@@ -76,14 +105,14 @@
   </Dialog>
 </template>
 <script lang="ts" setup>
-import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
+import {DICT_TYPE, getIntDictOptions} from '@/utils/dict'
 import * as TenantApi from '@/api/system/tenant'
-import { CommonStatusEnum } from '@/utils/constants'
+import {CommonStatusEnum} from '@/utils/constants'
 import * as TenantPackageApi from '@/api/system/tenantPackage'
 
-defineOptions({ name: 'SystemTenantForm' })
+defineOptions({name: 'SystemTenantForm'})
 
-const { t } = useI18n() // 国际化
+const {t} = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 const dialogVisible = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题
@@ -92,27 +121,43 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
 const formData = ref({
   id: undefined,
   name: undefined,
-  packageId: undefined,
+  contactUserId: undefined,
   contactName: undefined,
+  idCard: undefined,
   contactMobile: undefined,
-  accountCount: undefined,
-  expireTime: undefined,
+  status: undefined,
   website: undefined,
-  status: CommonStatusEnum.ENABLE,
+  packageId: undefined,
+  expireTime: undefined,
+  accountCount: undefined,
+  areaId: undefined,
+  address: undefined,
+  coveredArea: undefined,
+  roomCount: undefined,
+  technicianCount: undefined,
+  businessLicense: undefined,
+  openTime: undefined,
   // 新增专属
   username: undefined,
   password: undefined
 })
 const formRules = reactive({
-  name: [{ required: true, message: '租户名不能为空', trigger: 'blur' }],
-  packageId: [{ required: true, message: '租户套餐不能为空', trigger: 'blur' }],
-  contactName: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
-  status: [{ required: true, message: '租户状态不能为空', trigger: 'blur' }],
-  accountCount: [{ required: true, message: '账号额度不能为空', trigger: 'blur' }],
-  expireTime: [{ required: true, message: '过期时间不能为空', trigger: 'blur' }],
-  website: [{ required: true, message: '绑定域名不能为空', trigger: 'blur' }],
-  username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
-  password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }]
+  name: [{required: true, message: '租户名不能为空', trigger: 'blur'}],
+  packageId: [{required: true, message: '租户套餐不能为空', trigger: 'blur'}],
+  contactName: [{required: true, message: '联系人不能为空', trigger: 'blur'}],
+  idCard: [{required: true, message: '法人身份证不能为空', trigger: 'blur'}],
+  status: [{required: true, message: '租户状态不能为空', trigger: 'blur'}],
+  accountCount: [{required: true, message: '账号额度不能为空', trigger: 'blur'}],
+  expireTime: [{required: true, message: '过期时间不能为空', trigger: 'blur'}],
+  address: [{required: true, message: '详细地址不能为空', trigger: 'blur'}],
+  coveredArea: [{required: true, message: '面积不能为空', trigger: 'blur'}],
+  roomCount: [{required: true, message: '房间数不能为空', trigger: 'blur'}],
+  technicianCount: [{required: true, message: '技师人数不能为空', trigger: 'blur'}],
+  businessLicense: [{required: true, message: '营业执照不能为空', trigger: 'blur'}],
+  openTime: [{required: true, message: '开业时间不能为空', trigger: 'blur'}],
+  website: [{required: true, message: '绑定域名不能为空', trigger: 'blur'}],
+  username: [{required: true, message: '用户名称不能为空', trigger: 'blur'}],
+  password: [{required: true, message: '用户密码不能为空', trigger: 'blur'}]
 })
 const formRef = ref() // 表单 Ref
 const packageList = ref([] as TenantPackageApi.TenantPackageVO[]) // 租户套餐
@@ -135,7 +180,7 @@ const open = async (type: string, id?: number) => {
   // 加载套餐列表
   packageList.value = await TenantPackageApi.getTenantPackageList()
 }
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+defineExpose({open}) // 提供 open 方法,用于打开弹窗
 
 /** 提交表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
@@ -170,13 +215,21 @@ const resetForm = () => {
     name: undefined,
     packageId: undefined,
     contactName: undefined,
+    idCard: undefined,
     contactMobile: undefined,
     accountCount: undefined,
     expireTime: undefined,
     website: undefined,
     status: CommonStatusEnum.ENABLE,
     username: undefined,
-    password: undefined
+    password: undefined,
+    areaId: undefined,
+    address: undefined,
+    coveredArea: undefined,
+    roomCount: undefined,
+    technicianCount: undefined,
+    businessLicense: undefined,
+    openTime: undefined
   }
   formRef.value?.resetFields()
 }