Bläddra i källkod

商业模式管理下页面接口联调完成

htc 23 timmar sedan
förälder
incheckning
66c3f39c72

+ 4 - 4
src/api/agent/index.js

@@ -164,7 +164,7 @@ export function updateProgram(data) {
 }
 export function getProgramInfo(query) {
   return request({
-    url: `core/program/${query}`,
+    url: `/core/program/${query}`,
     method: 'get'
   })
 }
@@ -201,7 +201,7 @@ export function updateCoachProgram(data) {
 }
 export function getCoachProgramInfo(query) {
   return request({
-    url: `core/project/${query}`,
+    url: `/core/project/${query}`,
     method: 'get'
   })
 }
@@ -236,7 +236,7 @@ export function updateProgramProgress(data) {
 }
 export function getProgramProgressInfo(query) {
   return request({
-    url: `core/project/progress/${query}`,
+    url: `/core/project/progress/${query}`,
     method: 'get'
   })
 }
@@ -273,7 +273,7 @@ export function updateProgramTeam(data) {
 }
 export function getProgramTeamInfo(query) {
   return request({
-    url: `core/team/${query}`,
+    url: `/core/team/${query}`,
     method: 'get'
   })
 }

+ 64 - 0
src/api/agent/indexTwo.js

@@ -0,0 +1,64 @@
+import request from '@/utils/request2'
+
+// ---start 商业模式管理
+// ------start 商品管理
+export function getCommodityList(query) {
+  return request({
+    url: `/core.v2/queproduct/page`,
+    method: 'get',
+    params: query
+  })
+}
+export function addCommodity(data) {
+  return request({
+    url: '/core.v2/queproduct',
+    method: 'post',
+    data
+  })
+}
+export function updateCommodity(data) {
+  return request({
+    url: '/core.v2/queproduct',
+    method: 'put',
+    data
+  })
+}
+export function getCommodityInfo(id) {
+  return request({
+    url: `/core.v2/queproduct/${id}`,
+    method: 'get'
+  })
+}
+export function deleteCommodity(data) {
+  return request({
+    url: `/core.v2/queproduct`,
+    method: 'delete',
+    data
+  })
+}
+// ------end 商品管理
+// ------start 订单管理
+export function getOrderList(query) {
+  return request({
+    url: `/core.v2/queorder/page`,
+    method: 'get',
+    params: query
+  })
+}
+// ------end 订单管理
+// ------start 账单明细
+export function getBillList(query) {
+  return request({
+    url: `/core/flowrecords/page`,
+    method: 'get',
+    params: query
+  })
+}
+export function getBillAmountList() {
+  return request({
+    url: `/core/flowrecords/totalAmount`,
+    method: 'get'
+  })
+}
+// ------end 账单明细
+// ---end 商业模式管理

+ 42 - 18
src/views/modules/business/bill.vue

@@ -5,13 +5,13 @@
           <el-row>
             <el-col :span="6" style="padding-right: 20px;">
                 <el-form-item label="订单编号">
-                    <el-input v-model="queryParams.xxx" placeholder="请输入订单编号"></el-input>
+                    <el-input v-model="queryParams.orderNo" placeholder="请输入订单编号"></el-input>
                 </el-form-item>
             </el-col>
             <el-col :span="8" style="padding-right: 20px;">
                 <el-form-item label="起止时间">
                     <el-date-picker
-                        v-model="queryParams.yyy"
+                        v-model="queryParams.startEndTime"
                         type="datetimerange"
                         range-separator="至"
                         start-placeholder="开始时间"
@@ -36,14 +36,12 @@
                     {{ scope.$index + 1 }}
                 </template>
             </el-table-column>
-            <el-table-column label="订单编号" prop="xx"></el-table-column>
-            <el-table-column label="交易时间" prop="xx"></el-table-column>
-            <el-table-column label="交易金额(元)" prop="xx"></el-table-column>
-            <el-table-column label="手机号" prop="xx"></el-table-column>
+            <el-table-column label="订单编号" prop="orderNo"></el-table-column>
+            <el-table-column label="交易时间" prop="createDate"></el-table-column>
+            <el-table-column label="交易金额(元)" prop="amount"></el-table-column>
+            <el-table-column label="手机号" prop="mobile"></el-table-column>
             <el-table-column label="商品类型" prop="xx">
-                <template #default="{ row }">
-                    
-                </template>
+                <template #default="{ row }">{{ typeCfg[row.type] }}</template>
             </el-table-column>
         </el-table>
         <el-row style="display: flex;justify-content: center;">
@@ -63,35 +61,56 @@
 
 <script setup name="">
     import { ref, getCurrentInstance, onMounted } from 'vue'
+    import { 
+        getBillList,
+        getBillAmountList
+    } from '@/api/agent/indexTwo.js'
     const { proxy } = getCurrentInstance();
     const title = proxy.$route.meta.title;
     const queryParams = ref({
         page: 1,
         limit: 10,
-        xxx: '',
-        yyy: ''
+        orderNo: '',
+        startEndTime: '',
+        beginTime:'',
+        endTime:''
+    })
+    const typeCfg = ref({
+        1:'基础版',
+        2:'专业版',
+        3:'专家版'
     })
     const queryRef = ref(null)
     const dataList = ref([])
     const total = ref(0)
     const loading = ref(false)
-    const totalMoney = ref('1234567.89')
+    const totalMoney = ref('0.00')
 
     const resetQuery = () => {
         proxy.$refs.queryRef.resetFields();
         queryParams.value = {
-            xxx: '',
-            yyy: ''
+            page: 1,
+            limit: 10,
+            orderNo: '',
+            startEndTime: '',
+            beginTime:'',
+            endTime:''
         }
         getList();
     }
 
     const getList = async () => {
-        let query = {...queryParams.value};
+        let query = JSON.parse(JSON.stringify(queryParams.value));
+        if(query.startEndTime && query.startEndTime.length > 0) {
+            query.beginTime = proxy.parseTime(new Date(query.startEndTime[0]), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}')
+            query.endTime = proxy.parseTime(new Date(query.startEndTime[1]), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}')
+        }
+
         loading.value = true;
-        // const res = await getCoachList(query);
-        // dataList.value = res.data.list;
-        // total.value = res.data.total;
+        delete query.startEndTime;
+        const res = await getBillList(query);
+        dataList.value = res.data.list;
+        total.value = res.data.total;
         loading.value = false;
     }
     const handleSizeChange = (e)=>{
@@ -102,9 +121,14 @@
         queryParams.value.page = e;
         getList();
     }
+    const getBillAmountListFn = async () => {
+        const res = await getBillAmountList();
+        totalMoney.value = (+res.data||0).toFixed(2);
+    }
 
     onMounted(()=>{
         getList();
+        getBillAmountListFn();
     })
 </script>
 

+ 105 - 63
src/views/modules/business/commodity.vue

@@ -5,16 +5,17 @@
           <el-row>
             <el-col :span="6" style="padding-right: 20px;">
                 <el-form-item label="商品类型">
-                    <el-select style="width: 100%" v-model="queryParams.xxx" placeholder="请选择商品类型" filterable clearable>
-                        
+                    <el-select style="width: 100%" v-model="queryParams.type" placeholder="请选择商品类型" filterable clearable>
+                        <el-option label="基础版" :value="1"/>
+                        <el-option label="专业版" :value="2"/>
                     </el-select>
                 </el-form-item>
             </el-col>
             <el-col :span="6" style="padding-right: 20px;">
                 <el-form-item label="商品状态">
-                    <el-select style="width: 100%" v-model="queryParams.yyy" placeholder="请选择商品状态" filterable clearable>
-                        <el-option label="上架" :value="1"/>
-                        <el-option label="下架" :value="2"/>
+                    <el-select style="width: 100%" v-model="queryParams.status" placeholder="请选择商品状态" filterable clearable>
+                        <el-option label="未上架" :value="0"/>
+                        <el-option label="已上架" :value="1"/>
                     </el-select>
                 </el-form-item>
             </el-col>
@@ -36,20 +37,22 @@
                     {{ scope.$index + 1 }}
                 </template>
             </el-table-column>
-            <el-table-column label="商品ID" prop="xx"></el-table-column>
+            <el-table-column label="商品ID" prop="id"></el-table-column>
             <el-table-column label="商品类型" prop="xx">
-                <template #default="{ row }"></template>
+                <template #default="{ row }">{{ typeCfg[row.type] }}</template>
             </el-table-column>
-            <el-table-column label="问卷次数" prop="xx">
-                <template #default="{ row }"></template>
+            <el-table-column label="问卷次数" prop="frequency">
+                <template #default="{ row }">{{ row.frequency==11?'10次以上':(row.frequency+'次') }}</template>
             </el-table-column>
-            <el-table-column label="价格(元)" prop="xx"></el-table-column>
-            <el-table-column label="有效期" prop="xx">
-                <template #default="{ row }"></template>
+            <el-table-column label="价格(元)" prop="price">
+                <template #default="{ row }">{{ row.frequency==11?(row.price+'/次'):row.price }}</template>
+            </el-table-column>
+            <el-table-column label="有效期" prop="valid">
+                <template #default="{ row }">{{ row.valid }}年</template>
             </el-table-column>
             <el-table-column label="创建时间" prop="createDate"></el-table-column>
-            <el-table-column label="销量" prop="xx"></el-table-column>
-            <el-table-column label="上架状态" prop="xx">
+            <el-table-column label="销量" prop="sales"></el-table-column>
+            <el-table-column label="上架状态" prop="status">
                 <template #default="{ row }">
                     <el-switch v-model="row.status" active-color="#33A7A7" inactive-color="#B9C0C8" @change="e=>statusChange(e,row)"></el-switch>
                 </template>
@@ -87,28 +90,28 @@
                         </div>
                     </div>
                 </el-form-item>
-                <el-form-item label="问卷次数" prop="bbb">
-                    <el-select v-model="goodForm.bbb" placeholder="请选择问卷次数" style="width:100%">
+                <el-form-item label="问卷次数" prop="frequency">
+                    <el-select v-model="goodForm.frequency" placeholder="请选择问卷次数" style="width:100%">
                         <el-option label="1次" value="1"></el-option>
                         <el-option label="5次" value="5"></el-option>
                         <el-option label="10次" value="10"></el-option>
                         <el-option label="10次以上" value="11"></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="价格" prop="ccc">
-                    <el-input type="number" v-model="goodForm.ccc" placeholder="请输入次数价格"></el-input>
+                <el-form-item label="价格" prop="price">
+                    <el-input type="number" v-model="goodForm.price" placeholder="请输入次数价格"></el-input>
                 </el-form-item>
-                <el-form-item label="有效期" prop="ddd">
-                    <el-select v-model="goodForm.ddd" placeholder="请选择有效期" style="width:100%">
-                        <el-option label="购买成功后,6个月内有效" value="1"></el-option>
-                        <el-option label="购买成功后,1年内有效" value="2"></el-option>
-                        <el-option label="购买成功后,2年内有效" value="3"></el-option>
+                <el-form-item label="有效期" prop="valid">
+                    <el-select v-model="goodForm.valid" placeholder="请选择有效期" style="width:100%">
+                        <el-option label="购买成功后,1年内有效" value="1"></el-option>
+                        <el-option label="购买成功后,2年内有效" value="2"></el-option>
+                        <el-option label="购买成功后,3年内有效" value="3"></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="商品状态" prop="eee">
-                    <el-radio-group v-model="goodForm.eee">
+                <el-form-item label="商品状态" prop="status">
+                    <el-radio-group v-model="goodForm.status">
                         <el-radio :label="1">上架</el-radio>
-                        <el-radio :label="2">下架</el-radio>
+                        <el-radio :label="0">下架</el-radio>
                     </el-radio-group>
                 </el-form-item>
             </el-form>
@@ -122,13 +125,25 @@
 
 <script setup name="">
     import { ref, getCurrentInstance, onMounted } from 'vue'
+    import { 
+        getCommodityList,
+        addCommodity,
+        updateCommodity,
+        getCommodityInfo,
+        deleteCommodity 
+    } from '@/api/agent/indexTwo.js'
     const { proxy } = getCurrentInstance();
     const title = proxy.$route.meta.title;
     const queryParams = ref({
         page: 1,
         limit: 10,
-        xxx: '',
-        yyy: ''
+        type: '',
+        status: ''
+    })
+    const typeCfg = ref({
+        1:'基础版',
+        2:'专业版',
+        3:'专家版'
     })
     const queryRef = ref(null)
     const dataList = ref([])
@@ -140,46 +155,51 @@
     const dialogTitle = ref('新增商品')
     const goodForm = ref({
         id:'',
+        type:1,
+        frequency:'',
+        price:'',
+        valid:'',
+        status:1
     })
     const goodRef = ref(null)
     const goodRules = ref({
-        bbb: [
+        frequency: [
             { required: true, message: '请选择问卷次数', trigger: 'change' },
         ],
-        ccc: [
+        price: [
             { required: true, message: '请输入价格', trigger: 'blur' },
         ],
-        ddd: [
+        valid: [
             { required: true, message: '请选择有效期', trigger: 'change' },
         ],
-        eee: [
+        status: [
             { required: true, message: '请选择商品状态', trigger: 'change' },
         ],
     })
 
-    onMounted(()=>{
-        getList();
-    })
-
     const resetQuery = () => {
         proxy.$refs.queryRef.resetFields();
         queryParams.value = {
-            xxx: '',
-            yyy: ''
+            type: '',
+            status: ''
         }
         getList();
     }
 
     const changeType = (idx) => {
         tidx.value = idx;
+        goodForm.value.type = idx;
     }
 
     const getList = async () => {
         let query = {...queryParams.value};
         loading.value = true;
-        // const res = await getCoachList(query);
-        // dataList.value = res.data.list;
-        // total.value = res.data.total;
+        const res = await getCommodityList(query);
+        dataList.value = res.data.list;
+        dataList.value.forEach(item=>{
+            item.status = item.status==1?true:false;
+        })
+        total.value = res.data.total;
         loading.value = false;
     }
     const handleSizeChange = (e)=>{
@@ -194,6 +214,11 @@
     const reset = () => {
         goodForm.value = {
             id:'',
+            type:1,
+            frequency:'',
+            price:'',
+            valid:'',
+            status:1
         };
         proxy.resetForm("goodRef");
     }
@@ -204,32 +229,35 @@
     }
     const handleEdit = (row) => {
         reset();
-        // getCoachInfo(row.id).then(response => {
+        getCommodityInfo(row.id).then(response => {
             goodForm.value = response.data;
+            goodForm.value.frequency+='';
+            goodForm.value.valid+='';
+            tidx.value = +goodForm.value.type??1;
             dialogTitle.value = "编辑商品";
             show.value = true;
-        // });
+        });
     }
 
     const submitForm = () => {
         proxy.$refs.goodRef.validate((valid) => {
             if (valid) {
                 buttonLoading.value = true;
-                // if(advertForm.value.id){
-                //     updateCoach(advertForm.value).then((res)=>{
-                //         if(res.code!==0) return proxy.$message.error(res.msg);
-                //         buttonLoading.value = false;
-                //         userShow.value = false;
-                //         getList();
-                //     })
-                // }else{
-                //     addCoach(advertForm.value).then((res)=>{
-                //         if(res.code!==0) return proxy.$message.error(res.msg);
-                //         buttonLoading.value = false;
-                //         userShow.value = false;
-                //         getList();
-                //     })
-                // }
+                if(goodForm.value.id){
+                    updateCommodity(goodForm.value).then((res)=>{
+                        if(res.code!==0) return proxy.$message.error(res.msg);
+                        buttonLoading.value = false;
+                        show.value = false;
+                        getList();
+                    })
+                }else{
+                    addCommodity(goodForm.value).then((res)=>{
+                        if(res.code!==0) return proxy.$message.error(res.msg);
+                        buttonLoading.value = false;
+                        show.value = false;
+                        getList();
+                    })
+                }
             } else {
                 return false;
             }
@@ -239,13 +267,27 @@
         show.value = false;
         reset();
     }
+
     async function handleDelete(row) {
-        // await proxy?.$modal.confirm('确认删除教练【' + row.realName + '】吗?').finally(() => loading.value = false);
-        // let res = await deleteCoach([row.id]);
-        // if (res.code === 0) proxy?.$modal.msgSuccess("删除成功");
-        // else return proxy?.$modal.msgError(res.msg);
-        // await getList();
+        await proxy?.$modal.confirm('确认删除该商品吗?').finally(() => loading.value = false);
+        let res = await deleteCommodity([row.id]);
+        if (res.code === 0) proxy?.$modal.msgSuccess("删除成功");
+        else return proxy?.$modal.msgError(res.msg);
+        await getList();
+    }
+
+    function statusChange(e,row) {
+        let data = JSON.parse(JSON.stringify(row));
+        data.status = data.status?1:0;
+        updateCommodity(data).then((res)=>{
+            if(res.code!==0) return proxy.$message.error(res.msg);
+            getList();
+        })
     }
+
+    onMounted(()=>{
+        getList();
+    })
 </script>
 
 <style scoped lang="scss">

+ 41 - 26
src/views/modules/business/order.vue

@@ -5,7 +5,7 @@
           <el-row>
             <el-col :span="6" style="padding-right: 20px;">
                 <el-form-item label="订单类型">
-                    <el-select style="width: 100%" v-model="queryParams.xxx" placeholder="请选择订单类型" filterable clearable>
+                    <el-select style="width: 100%" v-model="queryParams.type" placeholder="请选择订单类型" filterable clearable>
                         <el-option label="基础版" :value="1"/>
                         <el-option label="专业版" :value="2"/>
                     </el-select>
@@ -13,10 +13,12 @@
             </el-col>
             <el-col :span="6" style="padding-right: 20px;">
                 <el-form-item label="订单状态">
-                    <el-select style="width: 100%" v-model="queryParams.yyy" placeholder="请选择订单状态" filterable clearable>
+                    <el-select style="width: 100%" v-model="queryParams.orderStatus" placeholder="请选择订单状态" filterable clearable>
                         <el-option label="全部" value=""/>
                         <el-option label="已完成" :value="2"/>
-                        <el-option label="待支付" :value="1"/>
+                        <el-option label="生效中" :value="1"/>
+                        <el-option label="待支付" :value="0"/>
+                        <el-option label="已失效" :value="-1"/>
                         <el-option label="已取消" :value="-2"/>
                     </el-select>
                 </el-form-item>
@@ -37,23 +39,21 @@
                     {{ scope.$index + 1 }}
                 </template>
             </el-table-column>
-            <el-table-column label="交易时间" prop="xx"></el-table-column>
-            <el-table-column label="订单编号" prop="xx"></el-table-column>
-            <el-table-column label="购买类型" prop="xx">
-                <template #default="{ row }"></template>
+            <el-table-column label="交易时间" prop="createDate"></el-table-column>
+            <el-table-column label="订单编号" prop="orderNo" width="200"></el-table-column>
+            <el-table-column label="购买类型" prop="type">
+                <template #default="{ row }">{{ typeCfg[row.type] }}</template>
             </el-table-column>
-            <el-table-column label="购买次数" prop="xx">
-                <template #default="{ row }"></template>
+            <el-table-column label="购买次数" prop="totalFrequency">
+                <template #default="{ row }">{{ row.totalFrequency }}次</template>
             </el-table-column>
-            <el-table-column label="实付金额(元)" prop="xx"></el-table-column>
-            <el-table-column label="有效期至" prop="xx">
-                <template #default="{ row }"></template>
-            </el-table-column>
-            <el-table-column label="手机号" prop="xx"></el-table-column>
-            <el-table-column label="用户名" prop="xx"></el-table-column>
-            <el-table-column label="订单状态" prop="xx">
+            <el-table-column label="实付金额(元)" prop="payAmount"></el-table-column>
+            <el-table-column label="有效期至" prop="expirationTime"></el-table-column>
+            <el-table-column label="手机号" prop="mobile"></el-table-column>
+            <el-table-column label="用户名" prop="realName"></el-table-column>
+            <el-table-column label="订单状态" prop="orderStatus">
                 <template #default="{ row }">
-                    <div class="ostatus" :class="ostatusColor[row.ostatus]">{{ostatusText[row.status]}}</div>
+                    <div class="ostatus" :class="ostatusColor[row.orderStatus]">{{ostatusText[row.orderStatus]}}</div>
                 </template>
             </el-table-column>
         </el-table>
@@ -74,13 +74,21 @@
 
 <script setup name="">
     import { ref, getCurrentInstance, onMounted } from 'vue'
+    import { 
+        getOrderList
+    } from '@/api/agent/indexTwo.js'
     const { proxy } = getCurrentInstance();
     const title = proxy.$route.meta.title;
     const queryParams = ref({
         page: 1,
         limit: 10,
-        xxx: '',
-        yyy: ''
+        type: '',
+        orderStatus: ''
+    })
+    const typeCfg = ref({
+        1:'基础版',
+        2:'专业版',
+        3:'专家版'
     })
     const queryRef = ref(null)
     const dataList = ref([])
@@ -88,20 +96,26 @@
     const loading = ref(false)
     const ostatusColor = ref({
         '-2': 'grey',
-        '1': 'red',
+        '-1': 'grey',
+        '0': 'red',
+        '1': 'green',
         '2': 'green'
     })
     const ostatusText = ref({
         '-2': '已取消',
-        '1': '待支付',
+        '-1': '已失效',
+        '0': '待支付',
+        '1': '生效中',
         '2': '已完成'
     })
 
     const resetQuery = () => {
         proxy.$refs.queryRef.resetFields();
         queryParams.value = {
-            xxx: '',
-            yyy: ''
+            page: 1,
+            limit: 10,
+            type: '',
+            orderStatus: ''
         }
         getList();
     }
@@ -109,9 +123,9 @@
     const getList = async () => {
         let query = {...queryParams.value};
         loading.value = true;
-        // const res = await getCoachList(query);
-        // dataList.value = res.data.list;
-        // total.value = res.data.total;
+        const res = await getOrderList(query);
+        dataList.value = res.data.list;
+        total.value = res.data.total;
         loading.value = false;
     }
     const handleSizeChange = (e)=>{
@@ -139,6 +153,7 @@
             font-weight: 400;
             font-size: 14px;
             line-height: 16px;
+            display: inline-block;
             &.green{
                 background: #EAF6F6;
                 color: #199C9C;