Prechádzať zdrojové kódy

渠道管理修改测试版本

学习?学个屁 4 mesiacov pred
rodič
commit
5b282ce43f

BIN
channel-dist.zip


+ 2 - 2
config/dev.env.js

@@ -4,6 +4,6 @@ const prodEnv = require('./prod.env')
 
 module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
-  BASE_API: '"http://192.168.110.241:9120/zs/channel/admin"'
-  // BASE_API: '"http://192.168.2.13:9120/zs/channel/admin"'
+  // BASE_API: '"http://192.168.110.241:9120/zs/channel/admin"'
+  BASE_API: '"http://192.168.2.20:9120/zs/channel/admin"'
 })

+ 2 - 2
config/prod.env.js

@@ -1,6 +1,6 @@
 'use strict'
 module.exports = {
   NODE_ENV: '"production"',
-  // BASE_API: '"http://channel.admin.dev.zonelife.cn/zs/channel/admin"'
-  BASE_API: '"https://channel-api.zonelife.cn/zs/channel/admin"'
+  BASE_API: '"http://channel.admin.dev.zonelife.cn/zs/channel/admin"'
+  // BASE_API: '"https://channel-api.zonelife.cn/zs/channel/admin"'
 }

+ 10 - 1
src/api/channel.js

@@ -12,7 +12,7 @@ export function channelList(params) {
   //渠道列表编辑
 export function editList(data) {
   return request({
-    url:'/pms/cThirdPartyInfo/update',
+    url:'/pms/cThirdPartyInfo/updateThirdPartyInfo',
     method:'post',
     data:data
   })
@@ -61,4 +61,13 @@ export function upTheAccount(data) {
     method:'post',
     data:data
   })
+}
+
+// 上账/结算
+export function createChannel(data) {
+  return request({
+    url:'pms/cThirdPartyInfo/saveThirdPartyInfo',
+    method:'post',
+    data:data
+  })
 }

BIN
src/assets/images/qrCode_bg.jpg


+ 17 - 15
src/components/Upload/uploadImg.vue

@@ -1,6 +1,13 @@
+<!--
+ * @Descripttion: 图片上传组件
+ * @version: 1.0
+ * @Author: zzx
+ * @Date: 2024-11-09 16:08:16
+ * @LastEditors: zzx tigerzouzx@foxmail.com
+ * @LastEditTime: 2024-11-21 18:00:00   
+-->
 <template>
     <div>
-        <!-- :on-change="uploadFile" -->
         <el-upload :limit="limit" action accept="image/*" :on-change="uploadFile" list-type="picture-card"
             :auto-upload="false" :file-list="fileList" :on-exceed="handleExceed" :on-preview="handlePictureCardPreview"
             :on-remove="handleRemove" ref="upload" class="avatar-uploader" :class="{ hide: showUpload }"
@@ -17,7 +24,6 @@
 <script>
 //引入上传图片接口
 import { policy } from '@/api/oss'
-// import { uploadImg } from "@/api/public/api";
 export default {
     props: {
         limit: Number,
@@ -31,7 +37,6 @@ export default {
             imgUrl: {}, //上传图片后地址合集
         };
     },
-    //监听上传图片的数组(为了处理修改时,自动渲染问题,和上传按钮消失问题);
     watch: {
         fileList(newName, oldName) {
             if (newName.length == this.limit) this.showUpload = false;
@@ -51,7 +56,7 @@ export default {
             this.imgUrl = file;
             this.dialogVisible = true;
         },
-        //这里是不需要直接上传而是通过按钮上传的方法
+        //不需要直接上传而是通过按钮上传的方法
         submitUpload() {
             this.$refs.upload.submit();
         },
@@ -71,22 +76,20 @@ export default {
                     file.type === "image/jpeg"
                 )
             ) {
-                this.$notify.warning({
-                    title: "警告",
-                    message:
-                        "请上传格式为image/png, image/gif, image/jpg, image/jpeg的图片",
-                });
+                this.$message.warning("请上传格式为image/png, image/gif, image/jpg, image/jpeg的图片");
             } else if (size > 2) {
-                this.$notify.warning({
-                    title: "警告",
-                    message: "图片大小必须小于2M",
-                });
+                this.$message.warning("图片大小必须小于2M");
+                // this.$notify.warning({
+                //     title: "警告",
+                //     message:
+                //         "请上传格式为image/png, image/gif, image/jpg, image/jpeg的图片",
+                // });
             } else {
                 if (this.limit == 1) this.imgUrl = []; //此处判断为一张的时候需要清空数组
                 const params = new FormData();
                 params.append("fileMut", file);
                 policy(params).then((res) => {
-                    //这里返回的数据结构(根据自己返回结构进行修改)
+                    //修改为自己接口的状态码
                     if (res.code === 200) {
                         this.$message.success("上传成功");
                         this.imgUrl = res.data;
@@ -96,7 +99,6 @@ export default {
                 });
             }
         },
-        //文件超出个数限制时的函数
         handleExceed(files, fileList) {
             this.$message.info(`最多只允许上传${this.limit}张图片`);
         },

+ 7 - 1
src/utils/common.js

@@ -3,4 +3,10 @@ export function addAndsub(add,reduce, s, num){
 	let m = Math.pow(10, num); //num是10的次幂
 	let res = s == '+' ? (add * m + reduce * m) / m : (add * m - reduce * m) / m;
 	return Math.round(res * m) / m;
-}
+}
+
+// 导出一个函数,用于判断一个对象是否为空
+export function isEmpty(obj) {
+	// 使用Object.keys()方法获取对象的所有键,并判断其长度是否为0
+	return Object.keys(obj).length === 0;
+  }

+ 197 - 66
src/views/channel/info/index.vue

@@ -4,7 +4,7 @@
  * @Author: zzx
  * @Date: 2024-11-09 16:08:16
  * @LastEditors: zzx tigerzouzx@foxmail.com
- * @LastEditTime: 2024-11-19 16:08:16
+ * @LastEditTime: 2025-01-08 12:00:00
 -->
 <template>
   <div class="app-container">
@@ -35,47 +35,71 @@
     <el-card class="operate-container" shadow="hover">
       <i class="el-icon-tickets"></i>
       <span>数据列表</span>
-      <!-- <el-button size="mini" class="btn-add" @click="handleAdd()" style="margin-left: 20px">添加</el-button> -->
+      <el-button size="mini" class="btn-add" @click="handleAdd()" style="margin-left: 20px">添加</el-button>
     </el-card>
     <div class="table-container">
       <el-table ref="adminTable" :data="list" style="width: 100%" v-loading="listLoading" border>
-        <el-table-column label="渠道编号" width="100" align="center" prop="appId"></el-table-column>
+        <el-table-column label="渠道编号(key)" align="center" prop="appId"></el-table-column>
+        <el-table-column label="app_id" align="center" prop="authCode"></el-table-column>
         <el-table-column label="渠道名称" align="center" prop="ecName"></el-table-column>
-        <el-table-column label="联系人" align="center">
+        <el-table-column label="合作模式" align="center" prop="serviceMoneyType">
           <template slot-scope="scope">
-            {{ scope.row.contactName||'--' }}
+            <span v-if="scope.row.serviceMoneyType == 1">{{ '统一服务费' || '--' }}</span>
+            <span v-if="scope.row.serviceMoneyType == 2">{{ '服务费抽成' || '--' }}</span>
+            <span v-if="scope.row.serviceMoneyType == 3">{{ '分时段服务费' || '--' }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="手机号" align="center">
+        <el-table-column label="抽成比例" align="center">
+          <template slot-scope="scope">{{ scope.row.commissionServiceMoney || "--" }}</template>
+        </el-table-column>
+        <el-table-column label="分时段服务费(元/度)" align="center">
           <template slot-scope="scope">
-            {{ scope.row.contactPhone||'--' }}
+            <div style="color: rgb(245,108,108);">峰:{{ scope.row.timeServiceMoney &&
+              scope.row.timeServiceMoney['1'] || '--' }}</div>
+            <div style="color: rgb(230, 162, 10);">平:{{ scope.row.timeServiceMoney &&
+              scope.row.timeServiceMoney['2'] || '--' }}</div>
+            <div style="color: rgb(103, 194, 58);">谷:{{ scope.row.timeServiceMoney &&
+              scope.row.timeServiceMoney['3'] || '--' }}</div>
           </template>
         </el-table-column>
-        <el-table-column label="渠道服务费/元" width="160" align="center" prop="serviceMoney"></el-table-column>
+        <el-table-column label="统一服务费(元/度)" align="center">
+          <template slot-scope="scope">{{ scope.row.serviceMoney || "--" }}</template>
+        </el-table-column>
+        <!-- <el-table-column label="联系人" align="center">
+          <template slot-scope="scope">
+            {{ scope.row.contactName || "--" }}
+          </template>
+        </el-table-column> -->
+        <!-- <el-table-column label="手机号" align="center">
+          <template slot-scope="scope">
+            {{ scope.row.contactPhone || "--" }}
+          </template>
+        </el-table-column> -->
+        <!-- <el-table-column label="渠道服务费/元" width="160" align="center" prop="serviceMoney"></el-table-column> -->
         <el-table-column label="使用状态" width="160" align="center">
           <template slot-scope="scope">
-            <el-tag type='success' v-if="scope.row.status === 1">正常</el-tag>
+            <el-tag type="success" v-if="scope.row.status === 1">启用</el-tag>
             <el-tag type="danger" v-else>禁用</el-tag>
           </template>
         </el-table-column>
-        <el-table-column label="创建人" width="140" align="center">
+        <!-- <el-table-column label="创建人" width="140" align="center">
           <template slot-scope="scope">
-            {{ scope.row.createBy||'--' }}
+            {{ scope.row.createBy || "--" }}
           </template>
         </el-table-column>
         <el-table-column label="创建时间" width="140" align="center">
           <template slot-scope="scope">
-            {{ scope.row.createTime||'--' }}
+            {{ scope.row.createTime || "--" }}
           </template>
         </el-table-column>
         <el-table-column label="更新人" width="140" align="center">
           <template slot-scope="scope">
-            {{ scope.row.updateBy||'--' }}
+            {{ scope.row.updateBy || "--" }}
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column label="更新时间" width="140" align="center">
           <template slot-scope="scope">
-            {{ scope.row.updateTime||'--' }}
+            {{ scope.row.updateTime || "--" }}
           </template>
         </el-table-column>
         <el-table-column label="操作" width="180" align="center">
@@ -94,23 +118,60 @@
       </el-pagination>
     </div>
     <el-dialog :title="isEdit ? '编辑' : '添加'" :visible.sync="dialogVisible" width="40%">
-      <el-form :model="admin" ref="adminForm" label-width="150px" size="small">
-        <el-form-item label="渠道编号:">
+      <el-form :model="admin" ref="adminForm" label-width="150px" size="small" :rules="rules">
+        <el-form-item label="渠道编号(key):">
           <el-input disabled v-model="admin.appId" style="width: 250px"></el-input>
         </el-form-item>
-        <el-form-item label="渠道名称:">
+        <el-form-item label="app_id:">
+          <el-input disabled v-model="admin.authCode" style="width: 250px"></el-input>
+        </el-form-item>
+        <el-form-item label="渠道名称:" prop="ecName">
           <el-input v-model="admin.ecName" style="width: 250px"></el-input>
         </el-form-item>
-        <el-form-item label="联系人:">
+        <el-form-item label="联系人:" prop="contactName">
           <el-input v-model="admin.contactName" style="width: 250px"></el-input>
         </el-form-item>
-        <el-form-item label="手机号:">
+        <el-form-item label="手机号:" prop="contactPhone">
           <el-input v-model="admin.contactPhone" type="number" style="width: 250px"></el-input>
         </el-form-item>
-        <el-form-item label="渠道服务费:">
-          <el-input v-model="admin.serviceMoney" type="text" :rows="5" style="width: 250px"></el-input>
+        <el-form-item label="合作模式:" prop="serviceMoneyType">
+          <el-radio-group v-model="admin.serviceMoneyType" @input="changeCooperation">
+            <el-radio :label="1">统一服务费</el-radio>
+            <el-radio :label="2">服务费抽成</el-radio>
+            <el-radio :label="3">分时段服务费</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label=" 渠道服务费(元/度):" prop="serviceMoney" v-if="admin.serviceMoneyType == 1">
+          <el-input v-model="admin.serviceMoney" type="number" style="width: 250px"></el-input>
           <div>当前平台服务费为0.1元/度</div>
         </el-form-item>
+        <el-form-item label=" 抽成比例:" prop="commissionServiceMoney" v-if="admin.serviceMoneyType == 2">
+          <el-input v-model="admin.commissionServiceMoney" type="number" style="width: 250px"></el-input> %
+        </el-form-item>
+        <div class="serviceMoney-box" v-if="admin.serviceMoneyType == 3">
+          <el-form-item label="峰" prop="peakServiceMoney">
+            <div class="serviceMoney-item">
+              <el-input v-model="admin.peakServiceMoney" @input="changeServiceMoney" type="number" style="width:100px"></el-input>
+              <div class="serviceMoney-item-unit">元/度</div>
+            </div>
+          </el-form-item>
+          <el-form-item label="平" prop="flatServiceMoney">
+            <div class="serviceMoney-item">
+              <el-input v-model="admin.flatServiceMoney" type="number" style="width:100px"></el-input>
+              <div class="serviceMoney-item-unit">元/度</div>
+            </div>
+          </el-form-item>
+          <el-form-item label="谷" prop="valleyServiceMoney">
+            <div class="serviceMoney-item">
+              <el-input v-model="admin.valleyServiceMoney" type="number" style="width:100px"></el-input>
+              <div class="serviceMoney-item-unit">元/度</div>
+            </div>
+          </el-form-item>
+        </div>
+        <el-form-item label="使用状态:">
+          <el-switch v-model="switchStatus" @change="changeSwitch">
+          </el-switch>
+        </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="dialogVisible = false" size="small">取 消</el-button>
@@ -120,31 +181,36 @@
   </div>
 </template>
 <script>
-import {
-  createAdmin,
-} from "@/api/login";
-import { channelList, editList } from "@/api/channel";
+import { channelList, editList, createChannel } from "@/api/channel";
 import { formatDate } from "@/utils/date";
-
+import { isEmpty } from "@/utils/common";
 const defaultListQuery = {
   pageNum: 1,
   pageSize: 10,
   ecName: null,
-  startTime: '',
-  endTime: ''
+  startTime: "",
+  endTime: "",
 };
 const defaultAdmin = {
   appId: null,
+  authCode: null,
   ecName: null,
   contactName: null,
   contactPhone: null,
+  serviceMoneyType: null,
+  status: null,
   serviceMoney: null,
+  thirdPartyId: null,
+  commissionServiceMoney: null, //抽成比例
+  peakServiceMoney: null, //峰
+  flatServiceMoney: null, //平
+  valleyServiceMoney: null, //谷
 };
 export default {
   name: "info",
   data() {
     return {
-      date: '',
+      date: "",
       listQuery: Object.assign({}, defaultListQuery),
       list: null,
       total: null,
@@ -156,6 +222,20 @@ export default {
       allocRoleIds: [],
       allRoleList: [],
       allocAdminId: null,
+      switchStatus: true,
+      rules: {
+        ecName: [{ required: true, message: "请输入渠道名称", trigger: "blur" }],
+        contactName: [{ required: true, message: "请输入联系人", trigger: "blur" }],
+        contactPhone: [{ required: true, message: "请输入联系电话", trigger: "blur" },
+        { pattern: /^1[3-9]\d{9}$/, message: '请输入正确手机号', trigger: 'blur' },
+        ],
+        serviceMoneyType: [{ required: true, message: "请选择服务费类型", trigger: "blur" }],
+        serviceMoney: [{ required: true, message: "请输入服务费", trigger: "blur" }],
+        commissionServiceMoney: [{ required: true, message: "请输入抽成比例", trigger: "blur" }],
+        peakServiceMoney: [{ required: true, message: "请输入峰值服务费", trigger: "blur" }],
+        flatServiceMoney: [{ required: true, message: "请输入平峰服务费", trigger: "blur" }],
+        valleyServiceMoney: [{ required: true, message: "请输入谷值服务费", trigger: "blur" }],
+      }
     };
   },
   watch: {
@@ -182,6 +262,25 @@ export default {
     },
   },
   methods: {
+    // 是否禁用
+    changeSwitch(val) {
+      if (val == true) {
+        this.admin.status = 1
+      } else {
+        this.admin.status = 2
+      }
+    },
+
+    // 合作方式
+    changeCooperation(val) {
+      this.admin.serviceMoneyType = val
+      this.admin.serviceMoney = ''
+      this.admin.commissionServiceMoney = ''
+      this.admin.peakServiceMoney = ''
+      this.admin.flatServiceMoney = ''
+      this.admin.valleyServiceMoney = ''
+    },
+
     // 重置搜索框
     handleResetSearch() {
       this.date = "";
@@ -211,6 +310,7 @@ export default {
     handleAdd() {
       this.dialogVisible = true;
       this.isEdit = false;
+      this.switchStatus = true;
       this.admin = Object.assign({}, defaultAdmin);
     },
 
@@ -218,48 +318,67 @@ export default {
     handleUpdate(index, row) {
       this.dialogVisible = true;
       this.isEdit = true;
-      this.admin = Object.assign({}, row);
+      if (row.status == 1) {
+        this.switchStatus = true;
+      } else {
+        this.switchStatus = false;
+      }
+      let timeServiceMoneyObj = {}
+      if (isEmpty(row.timeServiceMoney||{}) == false) {
+        timeServiceMoneyObj = {
+          peakServiceMoney: row.timeServiceMoney[1],
+          flatServiceMoney: row.timeServiceMoney[2],
+          valleyServiceMoney: row.timeServiceMoney[3]
+        }
+        this.admin = {
+          ...this.admin,
+          ...row,
+          ...timeServiceMoneyObj
+        };
+      } else {
+        this.admin = {
+          ...this.admin,
+          ...row
+        };
+      }
+      this.admin.thirdPartyId = row.id
     },
 
     // 编辑或增加确定回调
     handleDialogConfirm() {
-      this.$confirm("是否要确认?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      }).then(() => {
-        let editData = {
-          appId:this.admin.appId,
-          contactName:this.admin.contactName,
-          contactPhone:this.admin.contactPhone,
-          ecName:this.admin.ecName,
-          id: this.admin.id,
-          serviceMoney: this.admin.serviceMoney
-        }
-        if (this.isEdit) {
-          editList({...editData}).then((response) => {
-            if( response.code == 200){
-              this.$message({
-              message: "修改成功!",
-              type: "success",
-            });
-            this.dialogVisible = false;
-            this.getList();
-            }
-          });
-        } else {
-          createAdmin(this.admin).then((response) => {
-            if( response.code == 200){
-              this.$message({
-              message: "添加成功!",
-              type: "success",
-            });
-            this.dialogVisible = false;
-            this.getList();
+      this.$refs.adminForm.validate(valid => {
+        if (valid) {
+          this.$confirm("是否要确认?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          }).then(() => {
+            if (this.isEdit) {
+              editList(this.admin).then((response) => {
+                if (response.code == 200) {
+                  this.$message({
+                    message: "修改成功!",
+                    type: "success",
+                  });
+                  this.dialogVisible = false;
+                  this.getList();
+                }
+              });
+            } else {
+              createChannel(this.admin).then((response) => {
+                if (response.code == 200) {
+                  this.$message({
+                    message: "添加成功!",
+                    type: "success",
+                  });
+                  this.dialogVisible = false;
+                  this.getList();
+                }
+              });
             }
           });
         }
-      });
+      })
     },
 
     // 获取列表
@@ -267,6 +386,9 @@ export default {
       this.listLoading = true;
       channelList(this.listQuery).then((response) => {
         this.listLoading = false;
+        response.data.list.map(item => {
+          item.timeServiceMoney = JSON.parse(item.timeServiceMoney);
+        })
         this.list = response.data.list;
         this.total = response.data.total;
       });
@@ -274,4 +396,13 @@ export default {
   },
 };
 </script>
-<style></style>
+<style>
+.serviceMoney-item {
+  display: flex;
+}
+
+.serviceMoney-item-unit {
+  width: 50px;
+  margin-left: 5px;
+}
+</style>

+ 8 - 10
src/views/channel/useCondition/index.vue

@@ -67,13 +67,13 @@
                             v-else>
                             结算
                         </el-button>
-                        <el-button size="mini" type="danger" plain @click="forbiddenStatus(scope.$index, scope.row)"
+                        <!-- <el-button size="mini" type="danger" plain @click="forbiddenStatus(scope.$index, scope.row)"
                             v-if="scope.row.status === 1">
                             禁用
                         </el-button>
                         <el-button size="mini" type="warning" plain @click="enable(scope.$index, scope.row)" v-else>
                             启用
-                        </el-button>
+                        </el-button> -->
                     </template>
                 </el-table-column>
             </el-table>
@@ -121,7 +121,7 @@
                 </el-form-item>
                 <!-- <el-form-item label="上传凭证:">
                     <uploadImg :limit="1" :file-list="fileList" @getUrl="getUrl($event)" @delUrl="delUrl($event)"
-                        :disabled="true"></uploadImg>
+                        :disabled="false"></uploadImg>
                 </el-form-item> -->
             </el-form>
             <span slot="footer" class="dialog-footer">
@@ -134,7 +134,7 @@
 <script>
 import { useConditionList, updateStatus, upTheAccount } from "@/api/channel";
 import { formatDate } from "@/utils/date";
-import uploadImg from '@/components/Upload/uploadImg'
+// import uploadImg from '@/components/Upload/uploadImg'
 const defaultListQuery = {
     pageNum: 1,
     pageSize: 10,
@@ -151,7 +151,7 @@ const defaultAdmin = {
 };
 export default {
     name: "useCondition",
-    components: { uploadImg },
+    // components: { uploadImg },
     data() {
         return {
             fileList: [],
@@ -197,11 +197,9 @@ export default {
             }
         },
         //函数
-        getUrl(getUrl) {
-            this.upImg = getUrl;
-        },
-        delUrl(getUrl) {
-        },
+        // getUrl(getUrl) {
+        //     this.upImg = getUrl;
+        // },
 
         // 启用
         enable(index, row) {

+ 2 - 2
src/views/distribution/peopleManage/index.vue

@@ -4,7 +4,7 @@
  * @Author: zzx
  * @Date: 2024-11-09 16:08:16
  * @LastEditors: zzx tigerzouzx@foxmail.com
- * @LastEditTime: 2024-11-19 16:08:16
+ * @LastEditTime: 2025-01-08 16:08:16
 -->
 <template>
     <div class="app-container">
@@ -385,7 +385,7 @@ export default {
     width: 100px;
     height: 100px;
     position: absolute;
-    top: 233px;
+    top: 242px;
     left: 80px;
 }
 </style>