Pārlūkot izejas kodu

reactor:对接随手拍邀请码;

zhangchong 3 mēneši atpakaļ
vecāks
revīzija
d7a8aeb4b7

+ 32 - 0
src/api/snapshot/inviteCode.ts

@@ -35,4 +35,36 @@ export const addInviteCode = (data: object) =>{
 		method: 'post',
 		data
 	});
+}
+/**
+ * @description 获取邀请码列表
+ * @param {string} id
+ */
+export const getInviteCodeDetail = (id: string) =>{
+	return request({
+		url: `/api/v1/InviteCode/${id}`,
+		method: 'get'
+	});
+}
+/**
+ * @description 修改部门邀请码
+ * @param {object} data
+ */
+export const updateInviteCode = (data: object) =>{
+	return request({
+		url: `/api/v1/InviteCode`,
+		method: 'put',
+		data
+	});
+}
+/**
+ * @description 邀请码统计
+ * @param {object} params
+ */
+export const getInviteCodeStatistics = (params?: object) =>{
+	return request({
+		url: `/api/v1/InviteCode/statistic`,
+		method: 'get',
+		params
+	});
 }

+ 45 - 46
src/views/snapshot/inviteCode/list/components/Code-edit.vue

@@ -2,38 +2,38 @@
 	<el-dialog v-model="state.dialogVisible" width="50%" draggable title="编辑人员" destroy-on-close append-to-body @close="close">
 		<el-form :model="state.ruleForm" label-width="100px" ref="ruleFormRef" :disabled="loading">
 			<el-row :gutter="10">
-			<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-				<el-form-item label="上级名称" prop="parentOrgId" :rules="[{ required: false, message: '请选择上级名称', trigger: 'change' }]">
-					<el-select v-model="state.ruleForm.parentOrgId" placeholder="请选择上级名称" class="w100" clearable filterable>
-						<el-option v-for="item in orgNameOptions" :key="item.key" :label="item.value" :value="item.key" />
-					</el-select>
-				</el-form-item>
-			</el-col>
-			<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-				<el-form-item label="部门名称" prop="orgName" :rules="[{ required: true, message: '请填写部门名称', trigger: 'blur' }]">
-					<el-input v-model="state.ruleForm.orgName" placeholder="请填写部门名称" clearable></el-input>
-				</el-form-item>
-			</el-col>
-			<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-				<el-form-item label="邀请码" prop="beginCode" :rules="[{ required: true, message: '请填写邀请码', trigger: 'blur' }]">
-					<el-input
-						type="number"
-						v-model.number="state.ruleForm.beginCode"
-						placeholder="请填写邀请码"
-						oninput="if(value.length > 5) value = value.slice(0, 5)"
-					></el-input>
-				</el-form-item>
-			</el-col>
-			<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-				<el-form-item label="邀请码2" prop="endCode" :rules="[{ required: true, message: '请填写邀请码2', trigger: 'blur' }]">
-					<el-input
-						type="number"
-						v-model.number="state.ruleForm.endCode"
-						placeholder="请填写邀请码2"
-						oninput="if(value.length > 5) value = value.slice(0, 5)"
-					></el-input>
-				</el-form-item>
-			</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="上级名称" prop="parentOrgId" :rules="[{ required: false, message: '请选择上级名称', trigger: 'change' }]">
+						<el-select v-model="state.ruleForm.parentOrgId" placeholder="请选择上级名称" class="w100" clearable filterable>
+							<el-option v-for="item in orgNameOptions" :key="item.key" :label="item.value" :value="item.key" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="部门名称" prop="orgName" :rules="[{ required: true, message: '请填写部门名称', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.orgName" placeholder="请填写部门名称" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="邀请码" prop="beginCode" :rules="[{ required: true, message: '请填写邀请码', trigger: 'blur' }]">
+						<el-input
+							type="number"
+							v-model.number="state.ruleForm.beginCode"
+							placeholder="请填写邀请码"
+							oninput="if(value.length > 5) value = value.slice(0, 5)"
+						></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="邀请码2" prop="endCode" :rules="[{ required: true, message: '请填写邀请码2', trigger: 'blur' }]">
+						<el-input
+							type="number"
+							v-model.number="state.ruleForm.endCode"
+							placeholder="请填写邀请码2"
+							oninput="if(value.length > 5) value = value.slice(0, 5)"
+						></el-input>
+					</el-form-item>
+				</el-col>
 			</el-row>
 		</el-form>
 		<template #footer>
@@ -47,12 +47,10 @@
 </template>
 
 <script setup lang="ts" name="parameterEdit">
-import { computed, onMounted, reactive, ref } from 'vue';
+import { reactive, ref } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { throttle } from '@/utils/tools';
-import { modifySettings, setitngsDetail } from '@/api/system/parameter';
-import { baseClue, editClue, getClueDetail } from '@/api/snapshot/config';
-import { getInviteCodeBaseData } from '@/api/snapshot/inviteCode';
+import { getInviteCodeBaseData, getInviteCodeDetail, updateInviteCode } from '@/api/snapshot/inviteCode';
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
 
@@ -60,23 +58,26 @@ const emit = defineEmits(['updateList']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		beginCode:0, // 邀请码
-		endCode:0, // 邀请码2
-		parentOrgId:null, // 上级名称
-		orgName:null, // 部门名称
+		beginCode: 0, // 邀请码
+		endCode: 0, // 邀请码2
+		parentOrgId: null, // 上级名称
+		orgName: null, // 部门名称
 	},
 });
 let loading = ref<boolean>(false); // 加载状态
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = async (id: string) => {
+	state.dialogVisible = true;
+	loading.value = true;
 	await getBaseData();
 	try {
-		const res: any = await getClueDetail(id);
+		const res: any = await getInviteCodeDetail(id);
 		state.ruleForm = res.result ?? <EmptyObjectType>{};
-		state.dialogVisible = true;
+		loading.value = false;
 	} catch (error) {
 		console.log(error);
+		loading.value = false;
 	}
 };
 // 关闭弹窗
@@ -93,7 +94,7 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	await formEl.validate((valid: boolean) => {
 		if (!valid) return;
 		loading.value = true;
-		editClue(state.ruleForm)
+		updateInviteCode(state.ruleForm)
 			.then(() => {
 				ElMessage({
 					message: '操作成功',
@@ -120,9 +121,7 @@ const getBaseData = async () => {
 	}
 };
 // 生成二维码
-const onQrcode =()=>{
-
-}
+const onQrcode = () => {};
 // 暴露变量
 defineExpose({
 	openDialog,

+ 21 - 17
src/views/snapshot/inviteCode/list/index.vue

@@ -1,13 +1,13 @@
 <template>
 	<div class="snapshot-invite-code-list-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<vxe-grid v-bind="gridOptions" ref="gridRef"  @checkbox-all="selectAllChangeEvent" @checkbox-change="selectChangeEvent">
+			<vxe-grid v-bind="gridOptions" ref="gridRef" @checkbox-all="selectAllChangeEvent" @checkbox-change="selectChangeEvent">
 				<template #toolbar_buttons>
 					<el-button type="primary" @click="onAdd" v-auth="'snapshot:inviteCode:list:add'">
 						<SvgIcon name="ele-Plus" class="mr5" />新增邀请码
 					</el-button>
-					<el-button type="danger" @click="onDelete" v-auth="'snapshot:inviteCode:list:delete'" :disabled="isChecked" :loading="state.loading"
-					>	<SvgIcon name="ele-Delete" class="mr5" />删除<span v-if="checkTable.length">({{ checkTable.length }})</span>
+					<el-button type="danger" @click="onDelete" v-auth="'snapshot:inviteCode:list:delete'" :disabled="isChecked" :loading="state.loading">
+						<SvgIcon name="ele-Delete" class="mr5" />删除<span v-if="checkTable.length">({{ checkTable.length }})</span>
 					</el-button>
 					<el-button type="primary" @click="onExport" v-auth="'snapshot:inviteCode:list:export'">
 						<SvgIcon name="iconfont icon-daochu" class="mr5" />导出邀请码
@@ -16,6 +16,14 @@
 						<SvgIcon name="iconfont icon-daochu" class="mr5" />批量生成
 					</el-button>
 				</template>
+				<template #qrCodeUrl="{ row }">
+					<el-image
+						style="width: 40px; height: 40px"
+						:src="'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg'"
+						:preview-src-list="['https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg']"
+						fit="cover"
+					/>
+				</template>
 				<template #action="{ row }">
 					<el-button link type="primary" @click="onEdit(row)" v-auth="'snapshot:inviteCode:list:edit'" title="编辑"> 编辑 </el-button>
 					<el-button link type="primary" @click="download(row)" v-auth="'snapshot:inviteCode:list:download'" title="编辑人员"> 下载 </el-button>
@@ -42,7 +50,6 @@
 
 <script lang="tsx" setup name="snapshotInviteCodeList">
 import { computed, defineAsyncComponent, onMounted, reactive, ref } from 'vue';
-import { getClueList } from '@/api/snapshot/config';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import { getInviteCodeList } from '@/api/snapshot/inviteCode';
 
@@ -92,14 +99,14 @@ const gridOptions = reactive<any>({
 		storage: true,
 	},
 	id: 'snapshotInviteCodeList',
-	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	rowConfig: { isHover: true, height: 50, isCurrent: true, useKey: true },
 	height: 'auto',
 	columns: [
 		{ type: 'checkbox', width: 50, align: 'center' },
 		{
 			field: 'orgName',
 			title: '部门名称',
-			minWidth: 200
+			minWidth: 200,
 		},
 		{
 			field: 'beginCode',
@@ -112,6 +119,7 @@ const gridOptions = reactive<any>({
 		{
 			field: 'qrCodeUrl',
 			title: '邀请码地址',
+			slots: { default: 'qrCodeUrl' },
 		},
 		{ title: '操作', width: 120, fixed: 'right', align: 'center', slots: { default: 'action' } },
 	],
@@ -149,9 +157,7 @@ const onEdit = (row: any) => {
 	codeEditRef.value.openDialog(row.id);
 };
 // 下载
-const download = (row:any)=>{
-
-}
+const download = (row: any) => {};
 const checkTable = ref<EmptyArrayType>([]);
 const gridRef = ref<RefType>();
 const selectAllChangeEvent = ({ checked }) => {
@@ -173,16 +179,14 @@ const isChecked = computed(() => {
 	return !Boolean(checkTable.value.length);
 });
 // 删除
-const onDelete = ()=>{
-
-}
+const onDelete = () => {};
 // 导出邀请码
 const exportCodeRef = ref<RefType>();
-const onExport = ()=>{
+const onExport = () => {
 	exportCodeRef.value.openDialog();
-}
+};
 // 批量生成
-const onCreate = ()=>{
+const onCreate = () => {
 	ElMessageBox.confirm(`您确定要批量生成邀请码,是否继续?`, '提示', {
 		confirmButtonText: '确认',
 		cancelButtonText: '取消',
@@ -192,10 +196,10 @@ const onCreate = ()=>{
 		autofocus: false,
 	})
 		.then(() => {
-				queryList();
+			queryList();
 		})
 		.catch(() => {});
-}
+};
 // 页面加载时
 onMounted(() => {
 	queryList();

+ 5 - 4
src/views/snapshot/inviteCode/statistics/index.vue

@@ -38,6 +38,7 @@ import { getClueList } from '@/api/snapshot/config';
 import { defaultDate } from '@/utils/constants';
 import Other from '@/utils/other';
 import { useRouter } from 'vue-router';
+import { getInviteCodeStatistics } from '@/api/snapshot/inviteCode';
 
 // 引入组件
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
@@ -87,17 +88,17 @@ const gridOptions = reactive<any>({
 	height: 'auto',
 	columns: [
 		{
-			field: 'name',
+			field: 'orgName',
 			title: '部门名称',
 		},
 		{
-			field: 'industryName',
+			field: 'count',
 			title: '邀请总量',
 			slots:{
 				default (scope:any) {
 					return (
 						<el-button type="primary" onClick={() => linkDetail(scope)} link>
-							{scope.row.industryName}
+							{scope.row.count}
 						</el-button>
 					)
 				}
@@ -121,7 +122,7 @@ const queryList = () => {
 	requestParams.value.StartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
 	requestParams.value.EndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	Reflect.deleteProperty(requestParams.value, 'crTime');
-	getClueList(requestParams.value)
+	getInviteCodeStatistics(requestParams.value)
 		.then((res) => {
 			state.loading = false;
 			gridOptions.data = res.result.items ?? [];