Ver código fonte

reactor:新增报表【提起甄别审批统计】 277 :新增报表【提起甄别统计】 276;

zhangchong 8 meses atrás
pai
commit
6ee73b9e2b

+ 7 - 5
src/App.vue

@@ -1,9 +1,9 @@
 <template>
 	<el-config-provider :size="getGlobalComponentSize" :locale="zhCn" :message="messageConfig" :button="buttonConfig">
-		<router-view v-show="setLockScreen" />
-		<LockScreen v-if="themeConfig.isLockScreen" />
-		<SetTings ref="setTingsRef" v-show="setLockScreen" />
-		<CloseFull v-if="!themeConfig.isLockScreen" />
+			<router-view v-show="setLockScreen" />
+			<LockScreen v-if="themeConfig.isLockScreen" />
+			<SetTings ref="setTingsRef" v-show="setLockScreen" />
+			<CloseFull v-if="!themeConfig.isLockScreen" />
 	</el-config-provider>
 </template>
 
@@ -66,11 +66,13 @@ onBeforeMount(async () => {
 	// 获取登录页的背景图和系统名称等
 	const { result } = await loginPageInfo();
 	const globalTitle = result.sysName.join('|') ?? ''; // 标题名称
+	console.log(result)
 	const loginImage = result.loginImage ? `url(${result.loginImage})` : `url(${getImageUrl('login/login_bg.png')})`; // 登录页背景图
 	const isLoginMessageCode = result.isLoginMessageCode; // 是否开启短信验证码
 	const appScope = result.appScope ?? 'YiBin';
 	const callCenterType = result.callCenterType ?? 'TianRun';
 	storesThemeConfig.setThemeConfig(Object.assign(themeConfig.value, { globalTitle, loginImage, isLoginMessageCode, appScope, callCenterType }));
+	console.log(globalTitle, loginImage, isLoginMessageCode, appScope, callCenterType )
 	// 设置批量第三方 icon 图标
 	setIntroduction.cssCdn();
 	// 设置批量第三方 js
@@ -124,7 +126,7 @@ onMounted(() => {
 });
 // 清除缓存 name
 const clearCacheTagsView = async (routeName: string) => {
-	let item;
+	let item:EmptyObjectType;
 	tagsViewRoutes.value.forEach((v: any) => {
 		if (v.name === routeName) {
 			item = v;

+ 50 - 0
src/api/statistics/center.ts

@@ -222,4 +222,54 @@ export const centerGenerateAnalysisReport = (params: object) => {
     method: 'get',
     params,
   });
+}
+/**
+ * @description 甄别申请统计
+ * @param {object} params
+ */
+export const centerDifferentiateApply = (params: object) => {
+  return request({
+    url: `/api/v1/BiOrder/screen-apply`,
+    method: 'get',
+    params,
+  });
+}
+/**
+ * @description 甄别申请统计导出
+ * @param {object} data
+ */
+export const centerDifferentiateApplyExport = (data: object) => {
+  return request({
+    url: `/api/v1/BiOrder/screen-apply-export`,
+    method: 'post',
+    data,
+    responseType: 'blob',
+  }, {
+    reduce_data_format: false
+  });
+}
+/**
+ * @description 甄别审批统计
+ * @param {object} params
+ */
+export const centerDifferentiateApproval = (params: object) => {
+  return request({
+    url: `/api/v1/BiOrder/screen-audit`,
+    method: 'get',
+    params,
+  });
+}
+/**
+ * @description 甄别审批统计导出
+ * @param {object} data
+ */
+export const centerDifferentiateApprovalExport = (data: object) => {
+  return request({
+    url: `/api/v1/BiOrder/screen-audit-export`,
+    method: 'post',
+    data,
+    responseType: 'blob',
+  }, {
+    reduce_data_format: false
+  });
 }

BIN
src/assets/images/login/login_bg.png


+ 5 - 5
src/utils/appConfig.ts

@@ -32,8 +32,8 @@ export const getCurrentCityConfig = () => {
 				city: 'YiBin',
 				cityName: '宜宾市', // 中文名称
 				cityCode: '511500', // 6位区号
-				operate: '中国电信股份有限公司宜宾分公司',
-				techSupport: '成都丰窝科技有限公司',
+				operate: '中国电信股份有限公司宜宾分公司', // 管理运营 页脚
+				techSupport: '成都丰窝科技有限公司', // 技术支撑 页脚
 				cityAbbr: '宜宾', // 简写
 				recordNumber: '蜀ICP备19035032号-36', // 备案号
 				locationCenter: [104.643, 28.751694], // 地图中心点
@@ -72,9 +72,9 @@ export const getCurrentCityConfig = () => {
 				cityAbbr: '宜宾', // 简写
 				recordNumber: '蜀ICP备19035032号-36', // 备案号
 				locationCenter: [104.643, 28.751694], // 地图中心点
-				loginBg: `${themeConfig.value.appScope}/login_bg.png`, // 登录背景
-				isShowLogo: true, // 是否显示菜单左上角logo
-				favicon: `${themeConfig.value.appScope}/favicon.ico`,
+				loginBg: `login/login_bg.png`, // 登录背景
+				isShowLogo: false, // 是否显示菜单左上角logo
+				favicon: `login/favicon.ico`,
 				callCenterSocketUrl: isProduction() ? 'ws://218.6.151.146:50104/ola_socket' : ' ws://222.213.23.229:29003/ola_socket', // 呼叫中心socket地址
 				recordPrefix: isProduction() ? 'http://218.6.151.146:50104' : 'http://222.213.23.229:10085', // 播放录音地址前缀
 				recordDownLoadPrefix: isProduction() ? 'http://192.168.2.212:29003' : 'http://222.213.23.229:10085', // 录音地址下载前

+ 2 - 3
src/views/login/index.vue

@@ -54,14 +54,13 @@ const state = reactive<LoginState>({
 	tabsActiveName: 'account', // 默认显示账号密码登录
 	isScan: false, // 是否显示扫码登录
 });
-const { loginBg } = getCurrentCityConfig();
+const { loginBg,favicon } = getCurrentCityConfig();
 // 设置 footer 显示/隐藏
 const isFooter = computed(() => {
 	return themeConfig.value.isFooter;
 });
-
-// let bgImg = themeConfig.value.loginImage ?? `url(${getImageUrl('login/login_bg.png')})`;
 const bgImg = `url(${getImageUrl(loginBg)}`;
+console.log(loginBg,favicon)
 // 获取布局配置信息
 const getThemeConfig = computed(() => {
 	return themeConfig.value;

+ 132 - 0
src/views/statistics/center/discernAudit.vue

@@ -0,0 +1,132 @@
+<template>
+	<div class="statistics-center-discern-audit-container layout-padding">
+		<div class="layout-padding-auto layout-padding-view pd20">
+			<ProTable
+				ref="proTableRef"
+				:columns="columns"
+				:data="state.tableData"
+				@updateTable="queryList"
+				:loading="state.loading"
+				:total="state.total"
+				v-model:page-index="state.queryParams.PageIndex"
+				v-model:page-size="state.queryParams.PageSize"
+				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
+				:exportMethod="centerDifferentiateApprovalExport"
+				:exportParams="requestParams"
+			>
+				<template #table-search>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-form-item label="审批人" prop="AuditUserName">
+							<el-input v-model="state.queryParams.AuditUserName" placeholder="审批人" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="" prop="AuditType">
+							<el-radio-group v-model="state.queryParams.AuditType" @change="handleQuery">
+								<el-radio value="1">中心班长</el-radio>
+								<el-radio value="2">中心领导</el-radio>
+							</el-radio-group>
+						</el-form-item>
+						<el-form-item label="时间段" prop="crTime">
+							<el-date-picker
+								v-model="state.queryParams.crTime"
+								type="daterange"
+								unlink-panels
+								range-separator="至"
+								start-placeholder="开始时间"
+								end-placeholder="结束时间"
+								:shortcuts="shortcuts"
+								@change="handleQuery"
+								value-format="YYYY-MM-DD"
+								:clearable="false"
+							/>
+						</el-form-item>
+						<el-form-item label-width="0">
+							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+							<el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="state.loading">
+								<SvgIcon name="ele-Refresh" class="mr5" />重置
+							</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
+				<template #description>
+					<el-popover :width="400" trigger="click">
+						<template #reference>
+							<el-button circle title="口径说明"><SvgIcon name="ele-QuestionFilled" /></el-button>
+						</template>
+						<el-descriptions title="" :column="1" border style="max-height: 400px; overflow: auto">
+							<el-descriptions-item label="审批人">甄别待审批工单审批时登录的用户</el-descriptions-item>
+							<el-descriptions-item label="审批数量">甄别待审批工单审批通过数量  </el-descriptions-item>
+							<el-descriptions-item label="被退回数量">甄别待审批工单被退回数量</el-descriptions-item>
+							<el-descriptions-item label="小计"> 审批数量+被退回数量</el-descriptions-item>
+						</el-descriptions>
+					</el-popover>
+				</template>
+			</ProTable>
+		</div>
+	</div>
+</template>
+<script setup lang="tsx" name="statisticsCenterDiscernAudit">
+import { onMounted, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { centerDifferentiateApplyExport, centerDifferentiateApproval, centerDifferentiateApprovalExport, departmentHighFrequency } from '@/api/statistics/center';
+import { defaultDate, shortcuts } from "@/utils/constants";
+import { useRouter } from 'vue-router';
+import Other from "@/utils/other";
+
+const proTableRef = ref<RefType>(); // 表格ref
+// 表格配置项
+const columns = ref<any[]>([
+	{ prop: 'auditName', label: '审批人' },
+	{ prop: 'auditNum', label: '审批数量' },
+	{ prop: 'auditBackNum', label: '被退回数量' },
+	{ prop: 'total', label: '小计' },
+]);
+// 定义变量内容
+const ruleFormRef = ref<RefType>(); // 表单ref
+const state = reactive<any>({
+	queryParams: {
+		// 查询条件
+		PageIndex: 1,
+		PageSize: 20,
+		AuditUserName: null, //
+		AuditType:'1',
+		crTime: defaultDate,
+		StartTime:null,
+		EndTime:null,
+	},
+	tableData: [], //表单
+	loading: false, // 加载
+	total: 0, // 总数
+});
+/** 搜索按钮操作 */
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	queryList();
+};
+/** 获取列表 */
+const requestParams = ref<EmptyObjectType>({})
+const queryList = () => {
+	state.loading = true;
+	requestParams.value = Other.deepClone(state.queryParams);
+	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');
+	centerDifferentiateApproval(requestParams.value)
+		.then((res: any) => {
+			state.tableData = res.result?.items ?? [];
+			state.total = res.result?.total ?? 0;
+			state.loading = false;
+		})
+		.catch(() => {
+			state.loading = false;
+		});
+};
+/** 重置按钮操作 */
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
+};
+onMounted(() => {
+	queryList();
+});
+</script>

+ 128 - 0
src/views/statistics/center/initiateDiscern.vue

@@ -0,0 +1,128 @@
+<template>
+	<div class="statistics-center-initiate-discern-container layout-padding">
+		<div class="layout-padding-auto layout-padding-view pd20">
+			<ProTable
+				ref="proTableRef"
+				:columns="columns"
+				:data="state.tableData"
+				@updateTable="queryList"
+				:loading="state.loading"
+				:total="state.total"
+				v-model:page-index="state.queryParams.PageIndex"
+				v-model:page-size="state.queryParams.PageSize"
+				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
+				:exportMethod="centerDifferentiateApplyExport"
+				:exportParams="requestParams"
+			>
+				<template #table-search>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-form-item label="提起人" prop="ApplyUserName">
+							<el-input v-model="state.queryParams.ApplyUserName" placeholder="提起人" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="部门名称" prop="ApplyOrgName">
+							<el-input v-model="state.queryParams.ApplyOrgName" placeholder="部门名称" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="时间段" prop="crTime">
+							<el-date-picker
+								v-model="state.queryParams.crTime"
+								type="daterange"
+								unlink-panels
+								range-separator="至"
+								start-placeholder="开始时间"
+								end-placeholder="结束时间"
+								:shortcuts="shortcuts"
+								@change="handleQuery"
+								value-format="YYYY-MM-DD"
+								:clearable="false"
+							/>
+						</el-form-item>
+						<el-form-item label-width="0">
+							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+							<el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="state.loading">
+								<SvgIcon name="ele-Refresh" class="mr5" />重置
+							</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
+				<template #description>
+					<el-popover :width="400" trigger="click">
+						<template #reference>
+							<el-button circle title="口径说明"><SvgIcon name="ele-QuestionFilled" /></el-button>
+						</template>
+						<el-descriptions title="" :column="1" border style="max-height: 400px; overflow: auto">
+							<el-descriptions-item label="提起时间">甄别申请工单新建时间</el-descriptions-item>
+							<el-descriptions-item label="提起人">发起甄别工单的登录用户  </el-descriptions-item>
+							<el-descriptions-item label="部门名称">甄别工单的部门</el-descriptions-item>
+							<el-descriptions-item label="数量"> 发起甄别申请的工单数量 </el-descriptions-item>
+						</el-descriptions>
+					</el-popover>
+				</template>
+			</ProTable>
+		</div>
+	</div>
+</template>
+<script setup lang="tsx" name="statisticsCenterInitiateDiscern">
+import { onMounted, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { centerDifferentiateApply, centerDifferentiateApplyExport } from '@/api/statistics/center';
+import { defaultDate, shortcuts } from "@/utils/constants";
+import Other from "@/utils/other";
+
+const proTableRef = ref<RefType>(); // 表格ref
+// 表格配置项
+const columns = ref<any[]>([
+	{ prop: 'applyTime', label: '提起时间' },
+	{ prop: 'applyUserName', label: '提起人' },
+	{ prop: 'applyOrgName', label: '部门名称' },
+	{ prop: 'applyNum', label: '数量' },
+]);
+// 定义变量内容
+const ruleFormRef = ref<RefType>(); // 表单ref
+const state = reactive<any>({
+	queryParams: {
+		// 查询条件
+		PageIndex: 1,
+		PageSize: 20,
+		ApplyUserName: null, // 提起人
+		ApplyOrgName:null,// 部门名称
+		crTime: defaultDate,
+		StartTime:null,
+		EndTime:null,
+	},
+	tableData: [], //表单
+	loading: false, // 加载
+	total: 0, // 总数
+});
+/** 搜索按钮操作 */
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	queryList();
+};
+/** 获取列表 */
+const requestParams = ref<EmptyObjectType>({})
+const queryList = () => {
+	state.loading = true;
+	requestParams.value = Other.deepClone(state.queryParams);
+	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');
+	centerDifferentiateApply(requestParams.value)
+		.then((res: any) => {
+			state.tableData = res.result?.items ?? [];
+			state.total = res.result?.total ?? 0;
+			state.loading = false;
+		})
+		.catch(() => {
+			state.loading = false;
+		});
+};
+/** 重置按钮操作 */
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
+};
+onMounted(() => {
+	queryList();
+});
+</script>