Kaynağa Gözat

中奖记录:发货

Xiao_123 5 ay önce
ebeveyn
işleme
ccd1ebbdc2

+ 2 - 4
src/views/mall/promotion/lottery/config/PrizeForm.vue

@@ -82,7 +82,7 @@
             class="w-full"
             clearable 
             placeholder="省市区 *" 
-            :props="{ value: 'id', label: 'name', emitPath: false }" 
+            :props="{ value: 'id', label: 'name', emitPath: false, checkStrictly: true }" 
             :options="areaTreeData" 
             @change="handleChangeArea"
             @clear="handleClearArea"
@@ -253,7 +253,7 @@
           districtId: undefined,
           districtName: undefined
         }
-      }
+      } else area.value = data.extend.districtId || data.extend.cityId || data.extend.provinceId
       showAddPrize.value = true
     } catch {}
   }
@@ -298,8 +298,6 @@
   }
 
   const submitPrize = async () => {
-    console.log(addPrizeData.value, 'submit');
-    
     // 校验表单
     await formRef.value.validate()
 

+ 130 - 0
src/views/mall/promotion/lottery/record/LuckLotteryRecordForm copy.vue

@@ -0,0 +1,130 @@
+<template>
+    <Dialog :title="dialogTitle" v-model="dialogVisible">
+        <el-form
+            ref="formRef"
+            :model="formData"
+            :rules="formRules"
+            label-width="130px"
+            v-loading="formLoading"
+        >
+            <el-form-item label="奖品类型" prop="type">
+                <el-select v-model="formData.type" placeholder="请选择奖品类型" clearable>
+                    <el-option v-for="dict in getIntDictOptions(DICT_TYPE.PROMOTION_LUCK_PRIZE_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value.toString()" />
+                </el-select>
+            </el-form-item>
+            <el-form-item label="是否领取" prop="isReceive">
+                <el-switch v-model="formData.isReceive" />
+            </el-form-item>
+            <el-form-item label="领取时间" prop="receiveTime">
+                <el-date-picker v-model="formData.receiveTime" type="date" value-format="x" placeholder="选择领取时间" />
+            </el-form-item>
+            <el-form-item label="收获地址、备注等" prop="receiveInfo">
+                <el-input v-model="formData.receiveInfo" placeholder="请输入收获地址、备注等" />
+            </el-form-item>
+            <el-form-item label="是否发货" prop="isDeliver">
+                <el-switch v-model="formData.isDeliver" />
+            </el-form-item>
+            <el-form-item label="发货处理时间" prop="deliverTime">
+                <el-date-picker v-model="formData.deliverTime" type="date" value-format="x" placeholder="选择发货处理时间" />
+            </el-form-item>
+            <el-form-item label="发货单号、备注等" prop="deliverInfo">
+                <el-input v-model="formData.deliverInfo" placeholder="请输入发货单号、备注等" />
+            </el-form-item>
+        </el-form>
+        <template #footer>
+          <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
+          <el-button @click="dialogVisible = false">取 消</el-button>
+        </template>
+    </Dialog>
+</template>
+
+<script setup lang="ts">
+import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { LuckLotteryRecordApi, LuckLotteryRecordVO } from '@/api/mall/promotion/lottery/record'
+          
+/** 幸运抽奖-抽奖记录 表单 */
+defineOptions({ name: 'LuckLotteryRecordForm' })
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+    id: undefined,
+    userId: undefined,
+    lotteryId: undefined,
+    prizeId: undefined,
+    type: undefined,
+    isReceive: undefined,
+    receiveTime: undefined,
+    receiveInfo: undefined,
+    isDeliver: undefined,
+    deliverTime: undefined,
+    deliverInfo: undefined,
+})
+const formRules = reactive({
+    type: [{ required: true, message: '奖品类型不能为空', trigger: 'change' }],
+    isReceive: [{ required: true, message: '是否领取不能为空', trigger: 'change' }],
+    isDeliver: [{ required: true, message: '是否发货不能为空', trigger: 'change' }],
+})
+const formRef = ref() // 表单 Ref
+          
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+    dialogVisible.value = true
+    dialogTitle.value = t('action.' + type)
+    formType.value = type
+    resetForm()
+    // 修改时,设置数据
+    if (id) {
+        formLoading.value = true
+        try {
+            formData.value = await LuckLotteryRecordApi.getLuckLotteryRecord(id)
+        } finally {
+            formLoading.value = false
+        }
+    }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+    // 校验表单
+    await formRef.value.validate()
+    // 提交请求
+    formLoading.value = true
+    try {
+        const data = formData.value as unknown as LuckLotteryRecordVO
+        if (formType.value === 'create') {
+            await LuckLotteryRecordApi.createLuckLotteryRecord(data)
+            message.success(t('common.createSuccess'))
+        } else {
+            await LuckLotteryRecordApi.updateLuckLotteryRecord(data)
+            message.success(t('common.updateSuccess'))
+        }
+        dialogVisible.value = false
+        // 发送操作成功的事件
+        emit('success')
+    } finally {
+        formLoading.value = false
+    }
+}
+/** 重置表单 */
+const resetForm = () => {
+    formData.value = {
+        id: undefined,
+        userId: undefined,
+        lotteryId: undefined,
+        prizeId: undefined,
+        type: undefined,
+        isReceive: undefined,
+        receiveTime: undefined,
+        receiveInfo: undefined,
+        isDeliver: undefined,
+        deliverTime: undefined,
+        deliverInfo: undefined,
+    }
+    formRef.value?.resetFields()
+}
+</script>

+ 27 - 31
src/views/mall/promotion/lottery/record/LuckLotteryRecordForm.vue

@@ -3,32 +3,17 @@
         <el-form
             ref="formRef"
             :model="formData"
-            :rules="formRules"
-            label-width="130px"
+            label-width="80px"
             v-loading="formLoading"
         >
-            <el-form-item label="奖品类型" prop="type">
-                <el-select v-model="formData.type" placeholder="请选择奖品类型" clearable>
-                    <el-option v-for="dict in getIntDictOptions(DICT_TYPE.PROMOTION_LUCK_PRIZE_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value.toString()" />
-                </el-select>
+            <el-form-item label="快递公司" prop="deliverInfo.name" :rules="[{ required: true, message: '快递公司不能为空', trigger: 'blur' }]">
+                <el-input v-model="formData.deliverInfo.name" placeholder="请输入快递公司" />
             </el-form-item>
-            <el-form-item label="是否领取" prop="isReceive">
-                <el-switch v-model="formData.isReceive" />
+            <el-form-item label="快递单号" prop="deliverInfo.no" :rules="[{ required: true, message: '快递单号不能为空', trigger: 'blur' }]">
+                <el-input v-model="formData.deliverInfo.no" placeholder="请输入快递单号" />
             </el-form-item>
-            <el-form-item label="领取时间" prop="receiveTime">
-                <el-date-picker v-model="formData.receiveTime" type="date" value-format="x" placeholder="选择领取时间" />
-            </el-form-item>
-            <el-form-item label="收获地址、备注等" prop="receiveInfo">
-                <el-input v-model="formData.receiveInfo" placeholder="请输入收获地址、备注等" />
-            </el-form-item>
-            <el-form-item label="是否发货" prop="isDeliver">
-                <el-switch v-model="formData.isDeliver" />
-            </el-form-item>
-            <el-form-item label="发货处理时间" prop="deliverTime">
-                <el-date-picker v-model="formData.deliverTime" type="date" value-format="x" placeholder="选择发货处理时间" />
-            </el-form-item>
-            <el-form-item label="发货单号、备注等" prop="deliverInfo">
-                <el-input v-model="formData.deliverInfo" placeholder="请输入发货单号、备注等" />
+            <el-form-item label="备注" prop="deliverInfo.remark">
+                <el-input v-model="formData.deliverInfo.remark" placeholder="请输入备注" />
             </el-form-item>
         </el-form>
         <template #footer>
@@ -39,7 +24,6 @@
 </template>
 
 <script setup lang="ts">
-import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
 import { LuckLotteryRecordApi, LuckLotteryRecordVO } from '@/api/mall/promotion/lottery/record'
           
 /** 幸运抽奖-抽奖记录 表单 */
@@ -61,12 +45,11 @@ const formData = ref({
     receiveInfo: undefined,
     isDeliver: undefined,
     deliverTime: undefined,
-    deliverInfo: undefined,
-})
-const formRules = reactive({
-    type: [{ required: true, message: '奖品类型不能为空', trigger: 'change' }],
-    isReceive: [{ required: true, message: '是否领取不能为空', trigger: 'change' }],
-    isDeliver: [{ required: true, message: '是否发货不能为空', trigger: 'change' }],
+    deliverInfo: {
+        no: undefined,
+        name: undefined,
+        remark: undefined
+    }
 })
 const formRef = ref() // 表单 Ref
           
@@ -80,7 +63,15 @@ const open = async (type: string, id?: number) => {
     if (id) {
         formLoading.value = true
         try {
-            formData.value = await LuckLotteryRecordApi.getLuckLotteryRecord(id)
+            const data = await LuckLotteryRecordApi.getLuckLotteryRecord(id)
+            formData.value = data
+            if (!data.deliverInfo || !Object.keys(data.deliverInfo).length) {
+                formData.value.deliverInfo = {
+                    no: undefined,
+                    name: undefined,
+                    remark: undefined
+                }
+            } else formData.value.deliverInfo = JSON.parse(data.deliverInfo)
         } finally {
             formLoading.value = false
         }
@@ -96,6 +87,7 @@ const submitForm = async () => {
     formLoading.value = true
     try {
         const data = formData.value as unknown as LuckLotteryRecordVO
+        data.deliverInfo = JSON.stringify(data.deliverInfo)
         if (formType.value === 'create') {
             await LuckLotteryRecordApi.createLuckLotteryRecord(data)
             message.success(t('common.createSuccess'))
@@ -123,7 +115,11 @@ const resetForm = () => {
         receiveInfo: undefined,
         isDeliver: undefined,
         deliverTime: undefined,
-        deliverInfo: undefined,
+        deliverInfo: {
+            name: undefined,
+            no: undefined,
+            remark: undefined
+        }
     }
     formRef.value?.resetFields()
 }

+ 22 - 16
src/views/mall/promotion/lottery/record/index.vue

@@ -45,14 +45,14 @@
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
+        <!-- <el-button
           type="primary"
           plain
           @click="openForm('create')"
           v-hasPermi="['promotion:luck-lottery-record:create']"
         >
           <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
+        </el-button> -->
         <el-button
           type="success"
           plain
@@ -70,26 +70,32 @@
   <ContentWrap>
     <el-table v-loading="loading" :data="list" :stripe="true">
       <el-table-column label="中奖用户" align="center" prop="user.name" />
-      <el-table-column label="奖品类型" align="center" prop="record.type" width="153px">
+      <el-table-column label="活动名称" align="center" prop="lottery.name" />
+      <el-table-column label="奖品信息" align="center" prop="prize.name">
         <template #default="scope">
-          <dict-tag :type="DICT_TYPE.PROMOTION_LUCK_PRIZE_TYPE" :value="scope.row.record.type" />
+          <div class="flex items-center">
+            <el-image :src="scope.row.prize.image" class="!w-60px !h-50px mr-5px" />
+            {{ scope.row.prize.name }}
+          </div>
         </template>
       </el-table-column>
-      <el-table-column label="是否领取" align="center" prop="record.isReceive">
-        <template #default="scope">{{ scope.row.record.isReceive ? '是' : '否' }}</template>
+      <el-table-column label="抽奖时间" align="center" prop="record.createTime" :formatter="dateFormatter" width="170px" />
+      <el-table-column label="收货信息" align="center" prop="" />
+      <el-table-column label="发货信息" align="center" prop="record.deliverInfo">
+        <template #default="{ row }">
+          {{ row.record.deliverInfo ? JSON.parse(row.record.deliverInfo).name + '-' + JSON.parse(row.record.deliverInfo).no : ''}}
+        </template>
       </el-table-column>
-      <el-table-column label="领取时间" align="center" prop="record.receiveTime" :formatter="dateFormatter" width="180px" />
-      <el-table-column label="收获地址、备注等" align="center" prop="record.receiveInfo" />
-      <el-table-column label="是否发货" align="center" prop="record.isDeliver">
-        <template #default="scope">{{ scope.row.record.isDeliver ? '是' : '否' }}</template>
+      <el-table-column label="备注" align="center" prop="record.deliverInfo">
+        <template #default="{ row }">
+          {{ row.record.deliverInfo ? JSON.parse(row.record.deliverInfo).remark : ''}}
+        </template>
       </el-table-column>
-      <el-table-column label="发货处理时间" align="center" prop="record.deliverTime" :formatter="dateFormatter" width="180px" />
-      <el-table-column label="发货单号、备注等" align="center" prop="record.deliverInfo" />
-      <el-table-column label="创建时间" align="center" prop="record.createTime" :formatter="dateFormatter" width="180px" />
-      <el-table-column label="操作" align="center" fixed="right" min-width="120">
+      <el-table-column label="操作" align="center" fixed="right" min-width="80">
         <template #default="scope">
-          <el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['promotion:luck-lottery-record:update']">编辑</el-button>
-          <el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['promotion:luck-lottery-record:delete']">删除</el-button>
+          <!-- <el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['promotion:luck-lottery-record:update']">编辑</el-button>
+          <el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['promotion:luck-lottery-record:delete']">删除</el-button> -->
+          <el-button link type="primary" @click="openForm('update', scope.row.record.id)">{{ scope.row.record.deliverInfo ? '修改发货信息' : '发货' }}</el-button>
         </template>
       </el-table-column>
     </el-table>