修改bug,添加四分屏功能

This commit is contained in:
yangjun 2024-12-09 08:24:29 +08:00
parent d0bfba96ae
commit 81eef127a7
21 changed files with 1317 additions and 57 deletions

View File

@ -40,7 +40,7 @@
</a-col>
<a-col :span="8">
<a-form-item label="在职状态">
<j-dict-select-tag ref="xqDictTag" placeholder="请选择在职状态" v-model:value="queryParam.zt" dictCode="kc_export_config_tpkwcqkjzglx,zt,zt,true group by zt"/>
<j-dict-select-tag ref="xqDictTag" placeholder="请选择在职状态" v-model:value="queryParam.zt" dictCode="kc_export_config_tpkwcqkjzglx,zt,zt,(zt = '在职' or zt = '退休') group by zt"/>
</a-form-item>
</a-col>
<!-- <a-col :lg="8">

View File

@ -775,6 +775,12 @@ function loadData(){
let child = item.child;
Object.values(child).forEach(item => {
let x:any = item;
// if(x.pullUrl == '-1') {
// x.isOnLine = true;
// }
// if(x.pullUrl == '-2') {
// x.isOnLine = false;
// }
// if(x.pullUrl == 'https://kczx.nenu.edu.cn:9553/live_hls/yfjxl101s_lbzj.m3u8')
if(x.pullUrl){
getListAction.push(liveIsExist(x));
@ -916,7 +922,7 @@ function getIsOnLineClass(record){
if(!record?.child['学生全景']?.isOnLine){
bfStatusInfoList.push('学生全景没有信号');
}
if(!record?.child['PPT']?.isOnLine){
if(record.child['PPT'] && !record?.child['PPT']?.isOnLine){
bfStatusInfoList.push('PPT没有信号');
}
if(allIsOnLine == 4){

View File

@ -30,6 +30,11 @@ export const columns: BasicColumn[] = [
align: "center",
dataIndex: 'skrq'
},
{
title: '节次',
align: "center",
dataIndex: 'hh'
},
{
title: '上课地点',
align: "center",

View File

@ -14,22 +14,24 @@
<div style=" width: 100%;margin-left: 30px;" v-html="content"></div>
<!-- 题干信息 -->
<div style="width: 100%; padding: 0 40px; margin: 0 auto" v-for="(item, index) in tiganData" :key="index">
<div style="width: 100%; padding: 0 10px; margin: 0 auto" v-for="(item, index) in tiganData" :key="index">
<!-- 单选题 -->
<div style="width: 100%" v-if="(item.wjType == 3 || item.wjType == '3') && item.wjSubtype==null">
<div style="text-align: left; width: 100%; font-weight: bold; line-height: 80px; font-size: 18px">单选题</div>
<a-card>
<template #title>
<span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span>
<div style="white-space: pre-wrap; word-wrap: break-word"><span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span></div>
<div v-if="item.picPath">
<j-upload v-model:value="item.picPath" fileType="image" disabled :maxCount="item.picPath.split(',').length" :buttonVisible="true" ></j-upload>
</div>
<div style="text-align: right;">题目分值 <span class="answer-word">{{ item.wjScore }}</span> </div>
</template>
<template #extra>
<!-- <template #extra>
<span style="margin-left: 40px" v-if="isShow"
>题目分值 <span class="answer-word">{{ item.wjScore }}</span> </span
>
</template>
</template> -->
<a-radio-group v-model:value="item.itemSelected" style="width: 100%" size="default" :disabled="disabled">
<div style="width: 100%" v-for="(tmxx, index) in item.wjxWjxxTmxxList" :key="index">
<a-radio :value="tmxx.itemIndex + ``" style="width: 100%; margin-bottom: 5px">
@ -44,15 +46,12 @@
<div style="text-align: left; width: 100%; font-weight: bold; line-height: 80px; font-size: 18px">判断题</div>
<a-card>
<template #title>
<span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span>
<div style="white-space: pre-wrap; word-wrap: break-word"><span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span></div>
<div v-if="item.picPath">
<j-upload v-model:value="item.picPath" fileType="image" disabled :maxCount="item.picPath.split(',').length" :buttonVisible="true" ></j-upload>
</div>
</template>
<template #extra>
<span style="margin-left: 40px" v-if="isShow"
>题目分值 <span class="answer-word">{{ item.wjScore }}</span> </span
>
<div style="text-align: right;">题目分值 <span class="answer-word">{{ item.wjScore }}</span> </div>
</template>
<a-radio-group v-model:value="item.itemSelected" style="width: 100%" size="default" :disabled="disabled">
<div style="width: 100%" v-for="(tmxx, index) in item.wjxWjxxTmxxList" :key="index">
@ -68,15 +67,12 @@
<div style="text-align: left; width: 100%; font-weight: bold; line-height: 80px; font-size: 18px">多选题</div>
<a-card>
<template #title>
<span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word" />
<div style="white-space: pre-wrap; word-wrap: break-word"><span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span></div>
<div v-if="item.picPath">
<j-upload v-model:value="item.picPath" fileType="image" disabled :maxCount="item.picPath.split(',').length" :buttonVisible="true" ></j-upload>
</div>
</template>
<template #extra>
<span style="margin-left: 40px" v-if="isShow"
>题目分值<span class="answer-word"> {{ item.wjScore }}</span> </span
>
<div style="text-align: right;">题目分值 <span class="answer-word">{{ item.wjScore }}</span> </div>
</template>
<a-checkbox-group v-model:value="item.itemSelected" style="width: 100%" size="default" :disabled="disabled">
<a-row>
@ -94,16 +90,12 @@
<div style="text-align: left; width: 100%; font-weight: bold; line-height: 80px; font-size: 18px">填空题</div>
<a-card>
<template #title>
<span>{{ index + 1 }}</span
><span v-html="item.wjTitle" style="font-weight: bold; white-space: pre-wrap; word-wrap: break-word" />
<div style="white-space: pre-wrap; word-wrap: break-word"><span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span></div>
<div v-if="item.picPath">
<j-upload v-model:value="item.picPath" fileType="image" disabled :maxCount="item.picPath.split(',').length" :buttonVisible="true" ></j-upload>
</div>
</template>
<template #extra>
<span style="margin-left: 40px" v-if="isShow"
>题目分值 <span class="answer-word">{{ item.wjScore }}</span> </span
>
<div style="text-align: right;">题目分值 <span class="answer-word">{{ item.wjScore }}</span> </div>
</template>
<a-row>
<a-col :span="24">
@ -123,16 +115,12 @@
<div style="text-align: left; width: 100%; font-weight: bold; line-height: 80px; font-size: 18px">简答题</div>
<a-card>
<template #title>
<span>{{ index + 1 }}</span
><span v-html="item.wjTitle" style="font-weight: bold; white-space: pre-wrap; word-wrap: break-word" />
<div style="white-space: pre-wrap; word-wrap: break-word"><span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span></div>
<div v-if="item.picPath">
<j-upload v-model:value="item.picPath" fileType="image" disabled :maxCount="item.picPath.split(',').length" :buttonVisible="true" ></j-upload>
</div>
</template>
<template #extra>
<span style="margin-left: 40px" v-if="isShow"
>题目分值 <span class="answer-word">{{ item.wjScore }}</span> </span
>
<div style="text-align: right;">题目分值 <span class="answer-word">{{ item.wjScore }}</span> </div>
</template>
<a-row>
<a-col :span="24">
@ -152,16 +140,12 @@
<div style="text-align: left; width: 100%; font-weight: bold; line-height: 80px; font-size: 18px">文件题</div>
<a-card>
<template #title>
<span>{{ index + 1 }}</span
><span v-html="item.wjTitle" style="font-weight: bold; white-space: pre-wrap; word-wrap: break-word" />
<div style="white-space: pre-wrap; word-wrap: break-word"><span>{{ index + 1 }}</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word"></span></div>
<div v-if="item.picPath">
<j-upload v-model:value="item.picPath" fileType="image" disabled :maxCount="item.picPath.split(',').length" :buttonVisible="true" ></j-upload>
</div>
</template>
<template #extra>
<span style="margin-left: 40px" v-if="isShow"
>题目分值 <span class="answer-word">{{ item.wjScore }}</span> </span
>
<div style="text-align: right;">题目分值 <span class="answer-word">{{ item.wjScore }}</span> </div>
</template>
<a-row>
<a-col :span="24">

View File

@ -1,8 +1,14 @@
<template>
<a-layout-footer style="margin-bottom:10px;">
<span class="footerLeft">TEL0431-85099971</span>
<span class="footerRight">Copyright 东北师范大学教务处 2022</span>
</a-layout-footer>
<!-- <a-layout-footer style="margin-bottom:10px;"> -->
<div class="ant-layout-footer">
<a-row :span="24">
<a-col :xs="24" :md="12" :sm="24"><span class="footerLeft">TEL0431-85099971</span></a-col>
<a-col :xs="24" :md="12" :sm="24" style="text-align: right;"><span class="footerRight">Copyright 东北师范大学教务处 2022</span></a-col>
</a-row>
</div>
<!-- <span class="footerLeft">TEL0431-85099971</span>
<span class="footerRight">Copyright 东北师范大学教务处 2022</span> -->
<!-- </a-layout-footer> -->
</template>
<script setup lang="ts">
</script>
@ -11,15 +17,12 @@
.footerLeft{
font-size: 16px;
font-weight: 700;
float:left;
}
.footerRight{
font-size: 16px;
font-weight: 700;
float: right;
}
.ant-layout-footer{
line-height: 0;
background: #FFF;
}
</style>

View File

@ -39,7 +39,7 @@
<span style="margin-left:15px;">
<a-tooltip placement="topRight">
<template #title>
<span>平台分别在三个时间节点上课后10分钟课中50分钟下课前10分钟抓取学生全景图片进行AI人流量识别当前显示的人数为最近一个时间的人数识别</span>
<span>平台分别在三个时间节点上课后10分钟课中50分钟下课前10分钟抓取学生全景图片进行AI人流量识别当前显示的人数为最近一个时间的人数识别目前部分教室摄像头拍摄画面广角待更新AI识别出勤人数仅供参考</span>
</template>
<!-- <Icon icon="ant-design:question-circle-outlined" /> -->
<span class="helpClass">?</span>

View File

@ -32,7 +32,7 @@
<span style="margin-left:15px;">
<a-tooltip placement="topRight">
<template #title>
<span>平台分别在三个时间节点上课后10分钟课中50分钟下课前10分钟抓取学生全景图片进行AI人流量识别当前显示的人数为最近一个时间的人数识别</span>
<span>平台分别在三个时间节点上课后10分钟课中50分钟下课前10分钟抓取学生全景图片进行AI人流量识别当前显示的人数为最近一个时间的人数识别目前部分教室摄像头拍摄画面广角待更新AI识别出勤人数仅供参考</span>
</template>
<span class="helpClass">?</span>
</a-tooltip>

View File

@ -49,10 +49,10 @@
<BlockOutlined />
<span>课程资源</span>
</a-menu-item>
<!-- <a-menu-item key="sub7" @click="getGzt('khcl')">
<a-menu-item key="sub7" @click="getGzt('khcl')">
<BlockOutlined />
<span>上传考核材料</span>
</a-menu-item> -->
</a-menu-item>
<!-- <a-menu-item key="sub6">
<template #icon>
<BlockOutlined />

View File

@ -0,0 +1,59 @@
<template>
<div>
<a-row>
<a-col><a-button type="primary" @click="init">刷新</a-button> </a-col>
<a-col :span="12" v-for="(item) in list">
<a-row style="text-align: center;">
<a-col class="colCss">{{item.name}}</a-col>
<a-col class="colCss">总次数{{item.totalcount}}</a-col>
<a-col class="colCss">使用次数{{item.usecount}}</a-col>
<a-col class="colCss">剩余次数{{item.remaincount}}</a-col>
<a-col class="colCss">到期时间{{item.endtime}}</a-col>
</a-row>
</a-col>
</a-row>
</div>
</template>
<script lang="ts" name="zyJxdg-zyJxdg" setup>
import { ref, reactive,onMounted } from 'vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { defHttp } from '/@/utils/http/axios';
const list = ref<any>([]);
function init(){
defHttp.get({url:'/zyInfoStudent/zyInfoStudent/getWpSycccs'}).then(res=>{
console.log("🚀 ~ defHttp.get ~ res:", res)
list.value = res
})
}
onMounted(() => {
init();
});
</script>
<style lang="less" scoped>
.jeecg-basic-table-form-container {
.table-page-search-submitButtons {
display: block;
margin-bottom: 24px;
white-space: nowrap;
}
.query-group-cust{
width: calc(50% - 15px);
min-width: 100px !important;
}
.query-group-split-cust{
width: 30px;
display: inline-block;
text-align: center
}
}
.colCss{
line-height: 30px;
}
</style>

View File

@ -10,6 +10,9 @@
<a-tab-pane key="3" tab="测验统计">
<CyKctjList></CyKctjList>
</a-tab-pane>
<a-tab-pane key="4" tab="查重次数剩余数量">
<CccssyslList></CccssyslList>
</a-tab-pane>
</a-tabs>
<!-- 表单区域 -->
<ZyJxdgModal ref="registerModal" @success="handleSuccess"></ZyJxdgModal>
@ -31,6 +34,7 @@
import TjsjList from '/@/views/zy/sysZy/kczygl/TjsjList.vue';
import ZyKctjList from '/@/views/zy/sysZy/kczygl/ZyKctjList.vue';
import CyKctjList from '/@/views/zy/sysZy/kczygl/CyKctjList.vue';
import CccssyslList from '/@/views/zy/sysZy/kczygl/CccssyslList.vue';
const globSetting = useGlobSetting();
const baseApiUrl = globSetting.domainUrl;

View File

@ -38,6 +38,7 @@
<a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" style="margin-left: 8px"> 导出</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="handleCsbz" style="margin-left: 8px" hidden> 修复次数不足的问题</a-button>
</a-col>
</span>
</a-col>
@ -68,6 +69,7 @@
import { useMessage } from '/@/hooks/web/useMessage';
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import { useGlobSetting } from '/@/hooks/setting';
import { defHttp } from '/@/utils/http/axios';
const globSetting = useGlobSetting();
@ -154,6 +156,13 @@
createMessage.warning("正在向文件服务器进行传输请稍等10秒刷新后进行预览")
}
}
//
function handleCsbz(){
defHttp.post({url:'/zyInfoStudent/zyInfoStudent/cxtjByJccsbz'}).then(res=>{
})
}
/**
* 详情

View File

@ -164,9 +164,16 @@ export const columnsKhcl: BasicColumn[] = [
},
},
{
title: '状态',
title: '是否全部完成',
align: "center",
dataIndex: 'zyStatus_dictText'
dataIndex: 'zyStatus',
customRender:({text}) =>{
var rt = "未完成";
if(text=='2'){
rt = "已完成";
}
return rt;
},
},
{
title: '学年学期',

View File

@ -0,0 +1,230 @@
<template>
<div>
<!--查询区域-->
<div class="jeecg-basic-table-form-container">
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :lg="8">
<a-form-item label="学年学期">
<j-dict-select-tag ref="xqDictTag" placeholder="请选择学年学期" v-model:value="queryParam.xqxn" dictCode="kc_xqxn_history,title,title,true order by start_time desc"/>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
</a-col>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px">上传考核材料</a-button>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<!--省市区字段回显插槽-->
<!--<template #pcaSlot="{text}">
{{ getAreaTextByCode(text) }}
</template>-->
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<ZyInfoModal ref="registerModal" @success="handleSuccess"></ZyInfoModal>
</div>
</template>
<script lang="ts" name="zyInfo-zyInfo" setup>
import { ref, reactive } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columnsKhcl } from './ZyInfo.data';
import { listKhcl, deleteOne, batchDelete, getImportUrl, getExportUrl } from './ZyInfo.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import ZyInfoModal from './components/ZyInfoModal.vue'
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { defHttp } from '/@/utils/http/axios';
const queryParam = ref<any>({zyStatus:'1,2'});
const toggleSearchStatus = ref<boolean>(false);
const { createConfirm, createMessage } = useMessage();
const registerModal = ref();
//table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: 'zy_info',
api: listKhcl,
columns:columnsKhcl,
canResize:false,
useSearchForm: false,
showActionColumn: false,
actionColumn: {
width: 120,
fixed: 'right',
},
beforeFetch: (params) => {
params.column = '',params.order = '';//
return Object.assign(params, queryParam.value);
},
},
exportConfig: {
name: "zy_info",
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
success: handleSuccess
},
});
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
const labelCol = reactive({
xs: { span: 24 },
sm: { span: 7 },
});
const wrapperCol = reactive({
xs: { span: 24 },
sm: { span: 16 },
});
/**
* 新增事件
*/
function handleAdd() {
registerModal.value.disableSubmit = false;
registerModal.value.add();
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
registerModal.value.disableSubmit = false;
registerModal.value.edit(record);
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
registerModal.value.disableSubmit = true;
registerModal.value.edit(record);
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({ id: record.id }, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record) {
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
];
}
/**
* 下拉操作栏
*/
function getDropDownAction(record) {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
//
function batchHandleKhcl() {
if (selectedRowKeys.value.length == 0) {
createMessage.warn('请勾选要上传的作业数据!');
return;
}
console.log("🚀 ~ batchHandleKhcl ~ selectedRowKeys.value:", selectedRowKeys.value)
// batchZyinfoKhcl({ ids: selectedRowKeys.value }, reload);
// defHttp.post({url:'/zyInfoStudent/zyInfoStudent/uploadSckhcl',params:{id:selectedRowKeys.value.join(',')}}).then(res=>{})
defHttp.post({url:'/zyInfoStudent/zyInfoStudent/uploadSckhcl',data:{id:selectedRowKeys.value.join(',')}}).then(res=>{
reload();
})
createMessage.success("系统上传中,请等待")
}
/**
* 查询
*/
function searchQuery() {
reload();
}
/**
* 重置
*/
function searchReset() {
queryParam.value = {};
selectedRowKeys.value = [];
//
reload();
}
</script>
<style lang="less" scoped>
.jeecg-basic-table-form-container {
.table-page-search-submitButtons {
display: block;
margin-bottom: 24px;
white-space: nowrap;
}
.query-group-cust{
width: calc(50% - 15px);
min-width: 100px !important;
}
.query-group-split-cust{
width: 30px;
display: inline-block;
text-align: center
}
}
</style>

View File

@ -380,9 +380,7 @@
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" style="margin-left: 8px"> 导出</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleFabu" style="margin-left: 8px">发布成绩</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px"
>上传考核材料</a-button
>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px">上传考核材料</a-button> -->
<span class="tishi" style="margin-left: 20px; padding: 10px">温馨提示考试完成后请及时发布评分</span>
</a-col>
</a-row>

View File

@ -380,7 +380,7 @@
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" style="margin-left: 8px"> 导出</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleFabu" style="margin-left: 8px">发布成绩</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px">上传考核材料</a-button>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px">上传考核材料</a-button> -->
<span class="tishi" style="margin-left: 20px; padding: 10px">温馨提示作业完成后请及时发布评分</span>
</a-col>
</a-row>

View File

@ -0,0 +1,485 @@
<template>
<a-spin :spinning="confirmLoading" >
<a-form ref="formRef" style="background:#f9f9f9;" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-col :span="24">
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<div class="wrapper-back">
<div class="wrapper-title">基本信息</div>
<a-col :span="24">
<a-form-item label="作业题目">
<span class="spanb-word">{{ formData.title }}</span>
</a-form-item>
</a-col>
<a-col :span="24" v-if="dataKhnr.length > 0">
<a-form-item label="考察内容">
<a-table :columns="columnsKhnr" class="spanb-word" rowKey="id" :data-source="dataKhnr" :pagination="false" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="作业截止时间" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<span class="spanb-word">{{ formData.endTime }}</span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="作业发布时间" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<span class="spanb-word">{{ formData.startTime }}</span>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="作业要求">
<div class="spanb-word" style="margin-top:5px" v-html="formData.content"></div>
</a-form-item>
</a-col>
<a-col :span="24" v-if="formData.filePath">
<a-form-item label="参考资料">
<span>{{ lastString(formData.filePath) }}</span>
<a-button type="primary" style="margin-left: 10px" @click="downLoad(formData.filePath)">下载</a-button>
</a-form-item>
</a-col>
<a-col :span="24" v-show="formData.sturead == '1' && formData.pfbz">
<a-form-item label="评分标准" layout="inline">
<div class="spanb-word" style="margin-top:5px" v-html="formData.pfbz"></div>
</a-form-item>
</a-col>
</div>
<a-col :span="24" v-if="formData.wwtgl" class="wrapper-back">
<div class="wrapper-title">查重设置</div>
<a-form-item layout="inline" style="margin-left: 100px">
<a-form-item label="检测通过率" :labelCol="labelCol3" :wrapperCol="wrapperCol3">
<span style="padding: 7px 10px"></span>
<a-input-number v-model:value="formData.wwtgl" placeholder="检测通过率" style="width: 60%" :max="100" :min="0" disabled>
<template #addonAfter> % </template>
</a-input-number>
</a-form-item>
<a-form-item label="比对库设置" :labelCol="labelCol3" :wrapperCol="wrapperCol3">
<div style="padding: 7px 20px">维普</div>
<div style="padding: 0 10px">
<a-checkbox v-model:checked="formData.wwcc" style="margin-left: 10px;" disabled>
<span class="Check-title">维普资源库查重</span><br>
<span class="Check-concent">中文科技期刊数据库硕博学位论文库高校特色论文库互联网数据资源/互联网文档资源</span>
</a-checkbox>
<a-checkbox v-model:checked="formData.xncc" disabled>
<span class="Check-title">学校作业库查重</span><br>
<span class="Check-concent">历届学生提供的作业库内查重</span>
</a-checkbox>
<a-checkbox v-model:checked="formData.nwcc" disabled>
<span class="Check-title">本次作业查重</span><br>
<span class="Check-concent">本次学生提交的作业间查重</span>
</a-checkbox>
</div>
<div style="padding: 7px 20px">AIGC</div>
<div style="padding: 0 10px">
<a-checkbox v-model:checked="formData.aigccc" style="margin-left: 10px" disabled>
<span class="Check-title">AIGC查重</span><br>
<span class="Check-concent">检测作业是否部分或全部由AI模型生成</span>
</a-checkbox>
</div>
</a-form-item>
</a-form-item>
</a-col>
<a-col v-show="formData.pyContent || formData.pyFilePath|| formData.score">
<div class="wrapper-back">
<div class="wrapper-title">批阅信息</div>
<a-row>
<a-col :span="24" v-if="formData.pyContent">
<a-form-item label="批阅内容" layout="inline">
<div class="spanb-word" style="margin-top:5px" v-html="formData.pyContent"></div>
</a-form-item>
</a-col>
<a-col :span="24" v-if="formData.pyFilePath">
<a-form-item label="批阅附件">
<span>{{ lastString(formData.pyFilePath) }}</span>
<a-button type="primary" style="margin-left: 10px" @click="downLoad(formData.pyFilePath)">下载</a-button>
</a-form-item>
</a-col>
<a-col :span="24" v-show="showType == '1'">
<div class="wps-iframe" id="wpsiframeid" style="width:100%;height: 500px;"></div>
</a-col>
</a-row>
</div>
</a-col>
</a-row>
</a-form>
</a-col>
<!-- <a-col :span="24">
<span class="spana">作业分值{{formData.score?formData.score:'未填写'}}</span>
</a-col>
<a-col :span="24">
<span class="spana">描述
<span v-if="formData.content">
{{formData.content}}
</span>
<span v-else>暂无内容</span>
</span>
</a-col>
<a-col :span="12">
<span class="spana">附件
<span v-if="formData.filePath">
<a-button :ghost="true" type="primary" preIcon="ant-design:download" size="small" @click="downloadFile(formData.filePath)"> 下载 </a-button>
</span>
<span v-else>暂无内容</span>
</span>
</a-col>
<a-col :span="12">
<span class="spana">上传时间{{formData.startTime}} ~ {{formData.endTime}}</span>
</a-col>
<a-col :span="12">
<span class="spana">是否网络查重{{formData.wwcc=='0'?'否':'是'}}</span> <span class="spanb">网络通过率{{formData.wwtgl?formData.wwtgl+"%":'未配置'}}</span>
</a-col>
<a-col :span="12">
<span class="spana">是否课程内查重{{formData.nwcc=='0'?'否':'是'}}</span> <span class="spanb">网络通过率{{formData.nwtgl?formData.nwtgl+"%":'未配置'}}</span>
</a-col>
<a-col :span="12">
<span class="spana">Aigc是否查重{{formData.aigccc=='0'?'否':'是'}}</span> <span class="spanb">网络通过率{{formData.aigctgl?formData.aigctgl+"%":'未配置'}}</span>
</a-col>
<a-col :span="12">
<span class="spana">是否校内查重{{formData.xncc=='0'?'否':'是'}}</span> <span class="spanb">网络通过率{{formData.xntgl?formData.xntgl+"%":'未配置'}}</span>
</a-col> -->
</a-row>
</a-form>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted, unref } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { getValueType } from '/@/utils';
import { saveOrUpdate } from '../ZyInfo.api';
import { Form } from 'ant-design-vue';
import { useRouter } from 'vue-router';
import dayjs, { Dayjs } from 'dayjs';
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import WebOfficeSDK from '/@/views/zy/zyInfoStudent/components/wpsApi/web-office-sdk-solution-v2.0.7.es'
import { downloadFile } from '/@/utils/common/renderUtils';
//
const { currentRoute } = useRouter();
const { query } = unref(currentRoute);
const { rwbh } = query; //
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => {} },
formBpm: { type: Boolean, default: true },
});
const showType = ref<string>('1');
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const dataKhnr = ref<any>([]);
const formData = reactive<Record<string, any>>({
id: '',
title: '',
zyType: '0',
content: '',
filePath: '',
startTime: '',
endTime: '',
wwcc: '0',
wwtgl: undefined,
nwcc: '0',
nwtgl: undefined,
aigccc: '0',
aigctgl: undefined,
rwbh: '',
xncc: '0',
xntgl: undefined,
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
// const labelCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 3 } });
// const wrapperCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 20 } });
const labelCol2 = reactive({
sm: { span: 10 },
});
const wrapperCol2 = reactive({
sm: { span: 10 },
});
const labelCol3 = reactive({
sm: { span: 4 },
});
const wrapperCol3 = reactive({
sm: { span: 20 },
});
const confirmLoading = ref<boolean>(false);
//
const validatorRules = {
title: [{ required: true, message: '请输入作业名称!' }],
// zyType: [{ required: true, message: '!'},],
startTime: [{ required: true, message: '请输入开始时间!' }],
endTime: [{ required: true, message: '请输入结束时间!' }],
wwcc: [{ required: true, message: '请输入外网是否查重!' }],
wwtgl: [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '请输入数字!' }],
nwcc: [{ required: true, message: '请输入内网查重!' }],
nwtgl: [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '请输入数字!' }],
aigccc: [{ required: true, message: '请输入aigc查重!' }],
aigctgl: [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '请输入数字!' }],
xncc: [{ required: true, message: '请输入aigc查重!' }],
xntgl: [{ required: false }, { pattern: /^-?\d+\.?\d*$/, message: '请输入数字!' }],
};
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
const disabledDate = (current: Dayjs) => {
return current && current < dayjs().subtract(1, 'days').endOf('day');
};
//
const disabled = computed(() => {
if (props.formBpm === true) {
if (props.formData.disabled === false) {
return false;
} else {
return true;
}
}
return props.formDisabled;
});
const columnsKhnr = [
{
title: '序号',
dataIndex: 'no',
key: 'no',
customRender: (text) => {
return text.index + 1;
},
width: 80,
},
{
title: '章次',
dataIndex: 'title',
key: 'title',
},
{
title: '节次',
dataIndex: 'twoTitle',
key: 'twoTitle',
},
];
function downLoad(file) {
if (file) {
let url = getFileAccessHttpUrl(file);
if (url) {
window.open(url);
}
} else {
createMessage.warning('暂无文件或文件上传中');
}
}
/**
* 新增
*/
function add() {
edit({ rwbh });
}
/**
* 编辑
*/
function edit(record) {
console.log("🚀 ~ edit ~ record:", record)
nextTick(() => {
resetFields();
//
Object.assign(formData, record);
handleKcnr(formData.kcnr);
const parts = record.stuFilePath.split('.');
const filetype = parts[parts.length - 1];
console.log(`🚀 ~ nextTick ~ filetype:`, filetype)
// var file = getFileAccessHttpUrl(record.filePath);
// ylurl.value = file;
let wpsType = "w";
if(filetype=='doc' || filetype=='docx'){
showType.value = '1';
wpsType = "w";
}else if(filetype=='pdf'){
showType.value = '1';
wpsType = "f";
}else if(filetype=='ppt' || filetype=='pptx' ){
showType.value = '1';
wpsType = "p";
}else if(filetype=='xls' || filetype=='xlsx' ){
showType.value = '1';
wpsType = "s";
}
if(showType.value == '1'){
const element = document.getElementById('wpsiframeid');
//
element.innerHTML = '';
const jssdk = WebOfficeSDK.init({
officeType: wpsType,
appId: 'SX20241118WSUGQN',
fileId: formData.stuId,
mount:document.querySelector('.wps-iframe'),
commonOptions: {
isShowDocMap: false, //
isShowTopArea: false, //
isShowHeader: false, //
isBrowserViewFullscreen: true, //
isIframeViewFullscreen: true, // iframe
acceptVisualViewportResizeEvent: true // WebOffice VisualViewport
},
wordOptions: {
isShowDocMap: false, //
isBestScale: true, //
isShowBottomStatusBar: false, //
}
//token: getToken()
})
}
});
}
function lastString(record) {
console.log('😓', record);
const parts = record.split('/');
console.log('🧔', parts);
return parts[parts.length - 1];
}
/**
* 提交数据
*/
async function submitForm() {
//
await validate();
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//
for (let data in model) {
//
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
if (model.wwcc == '1') {
if (!model.wwtgl) {
createMessage.warning('网络通过率不能为空');
confirmLoading.value = false;
return;
}
}
if (model.nwcc == '1') {
if (!model.nwtgl) {
createMessage.warning('内网通过率不能为空');
confirmLoading.value = false;
return;
}
}
if (model.aigccc == '1') {
if (!model.aigctgl) {
createMessage.warning('AIGC通过率不能为空');
confirmLoading.value = false;
return;
}
}
if (model.xncc == '1') {
if (!model.xntgl) {
createMessage.warning('校内通过率不能为空');
confirmLoading.value = false;
return;
}
}
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
//
function handleKcnr(kcnr) {
if (kcnr) {
defHttp.get({ url: '/teachingunitcontent/kcTeachingUnitContentOne/getAllList', params: { id: kcnr } }).then((res) => {
console.log('🤦‍♀️', res);
dataKhnr.value = res;
});
} else {
dataKhnr.value = [];
}
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
min-height: 300px !important;
overflow-y: auto;
padding: 24px 24px 24px 24px;
}
.spanSm {
top: -22px;
position: inherit;
padding: 0 0 0 164px;
color: #a9a9a9;
}
.spana {
margin-left: 30px;
line-height: 30px;
}
.spanb {
margin-left: 30px;
line-height: 30px;
}
.spanb-word {
color: #999999;
}
.wrapper-back {
background: #fff;
border-radius: 10px;
margin-top: 10px;
padding-top: 15px;
width: 100%;
}
.wrapper-title {
font-size: 18px;
border-left: 4px solid #1ab394;
font-weight: bold;
padding-left: 20px;
margin-bottom: 20px;
}
.Check-title{
color: #333;
font-weight: bold;
}
.Check-concent{
color: #999;
}
</style>

View File

@ -81,7 +81,7 @@
</a-form-item>
</a-col>
<a-col v-if="formData.pyContent || formData.pyFilePath">
<a-col v-show="formData.pyContent || formData.pyFilePath|| formData.score">
<div class="wrapper-back">
<div class="wrapper-title">批阅信息</div>
<a-row>
@ -96,6 +96,9 @@
<a-button type="primary" style="margin-left: 10px" @click="downLoad(formData.pyFilePath)">下载</a-button>
</a-form-item>
</a-col>
<a-col :span="24" v-show="showType == '1'">
<div class="wps-iframe" id="wpsiframeid" style="width:100%;height: 500px;"></div>
</a-col>
</a-row>
</div>
</a-col>
@ -155,6 +158,7 @@ import { useRouter } from 'vue-router';
import dayjs, { Dayjs } from 'dayjs';
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import WebOfficeSDK from '/@/views/zy/zyInfoStudent/components/wpsApi/web-office-sdk-solution-v2.0.7.es'
import { downloadFile } from '/@/utils/common/renderUtils';
//
@ -166,6 +170,7 @@ const props = defineProps({
formData: { type: Object, default: () => {} },
formBpm: { type: Boolean, default: true },
});
const showType = ref<string>('0');
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
@ -283,11 +288,58 @@ function add() {
* 编辑
*/
function edit(record) {
console.log("🚀 ~ edit ~ record:", record)
nextTick(() => {
resetFields();
//
Object.assign(formData, record);
handleKcnr(formData.kcnr);
// const parts = record.stuFilePath.split('.');
// const filetype = parts[parts.length - 1];
// console.log(`🚀 ~ nextTick ~ filetype:`, filetype)
// let wpsType = "w";
// if(filetype=='doc' || filetype=='docx'){
// showType.value = '1';
// wpsType = "w";
// }else if(filetype=='pdf'){
// showType.value = '1';
// wpsType = "f";
// }else if(filetype=='ppt' || filetype=='pptx' ){
// showType.value = '1';
// wpsType = "p";
// }else if(filetype=='xls' || filetype=='xlsx' ){
// showType.value = '1';
// wpsType = "s";
// }
// if(showType.value == '1'){
// const element = document.getElementById('wpsiframeid');
// //
// element.innerHTML = '';
// const jssdk = WebOfficeSDK.init({
// officeType: wpsType,
// appId: 'SX20241118WSUGQN',
// fileId: formData.stuId,
// mount:document.querySelector('.wps-iframe'),
// commonOptions: {
// isShowDocMap: false, //
// isShowTopArea: false, //
// isShowHeader: false, //
// isBrowserViewFullscreen: true, //
// isIframeViewFullscreen: true, // iframe
// acceptVisualViewportResizeEvent: true // WebOffice VisualViewport
// },
// wordOptions: {
// isShowDocMap: false, //
// isBestScale: true, //
// isShowBottomStatusBar: false, //
// }
// //token: getToken()
// })
// }
});
}

View File

@ -0,0 +1,415 @@
/**
*
*/
interface IUserHeaderSubItemsConf {
/**
*
*/
type: 'export_img' | 'split_line' | 'custom';
/**
*
*/
text?: string;
/**
*
*/
subscribe?: ((arg0?: any) => any) | string;
}
/**
*
*/
interface IUserHeaderButtonConf {
/**
*
*/
tooltip?: string;
/**
*
*/
subscribe?: ((arg0?: any) => any) | string;
/**
*
*/
items?: IUserHeaderSubItemsConf[];
}
/**
* iframe原始尺寸
*/
interface IIframeWH {
width: string;
height: string;
}
/**
*
*/
interface IUserHeadersConf {
/**
*
*/
backBtn?: IUserHeaderButtonConf;
/**
*
*/
shareBtn?: IUserHeaderButtonConf;
/**
*
*/
otherMenuBtn?: IUserHeaderButtonConf;
}
interface ICommonOptions {
/**
*
*/
isShowTopArea: boolean;
/**
*
*/
isShowHeader: boolean;
/**
*
*/
isParentFullscreen: boolean;
/**
* iframe区域内全屏
*/
isIframeViewFullscreen: boolean;
/**
*
*/
isBrowserViewFullscreen: boolean;
}
/**
*
*/
interface IWpsOptions {
/**
*
*/
isShowDocMap?: boolean;
/**
*
*/
isBestScale?: boolean;
/**
* pc-
*/
isShowBottomStatusBar?: boolean;
}
/**
*
*/
interface IEtOptions {
/**
* pc-
*/
isShowBottomStatusBar?: boolean;
}
/**
* pdf自定义配置
*/
interface IPDFOptions {
isShowComment?: boolean;
isInSafeMode?: boolean;
/**
* pc-
*/
isShowBottomStatusBar?: boolean;
}
/**
*
*/
interface IWppOptions {
/**
* pc-
*/
isShowBottomStatusBar?: boolean;
}
/**
*
*/
interface IDBOptions {
/**
* 使
*/
isShowFeedback?: boolean
}
/**
*
*/
interface ISubscriptionsConf {
[key: string]: any;
/**
*
*/
navigate: (arg0?: any) => any;
/**
* WPSWEB ready
*/
ready: (arg0?: any) => any;
/**
*
*/
print?: {
custom?: boolean,
subscribe: (arg0?: any) => any,
};
/**
* PDF
*/
exportPdf?: (arg0?: any) => any;
}
interface ITokenData {
token: string;
timeout: number;
}
interface IClipboardData {
text: string;
html: string;
}
/**
*
*/
interface IConfig {
/**
* WPSWEB iframe
*/
mount?: HTMLElement;
/**
* url参数
*/
url?: string;
wpsUrl?: string; // 即将废弃
/**
*
*/
headers?: IUserHeadersConf;
/**
*
*/
mode?: 'nomal' | 'simple';
/**
*
*/
commonOptions?: ICommonOptions;
/**
*
*/
wpsOptions?: IWpsOptions;
wordOptions?: IWppOptions;
/**
*
*/
etOptions?: IEtOptions;
excelOptions?: IEtOptions;
/**
*
*/
wppOptions?: IWppOptions;
pptOptions?: IWppOptions;
/**
* pdf自定义配置
*/
pdfOptions?: IPDFOptions;
/**
* db自定义配置
*/
dbOptions?: IDBOptions;
/**
*
*/
subscriptions?: ISubscriptionsConf;
// 调试模式
debug?: boolean;
commandBars?: IWpsCommandBars[];
print?: {
custom?: boolean,
callback?: string,
};
exportPdf?: {
callback?: string,
};
// 获取token
refreshToken?: TRefreshToken;
cooperUserAttribute?: {
isCooperUsersAvatarVisible?: boolean,
cooperUsersColor?: [{
userId: string | number,
color: string,
}],
};
}
// type eventConfig = {
// eventName: cbEventNames,
// }
/** ============================= */
interface IMessage {
eventName: string;
msgId?: string;
callbackId?: number;
data?: any;
url?: any;
result?: any;
error?: any;
_self?: boolean;
sdkInstanceId?: number
}
/**
* WPSWEBAPI
*/
interface IWpsWebApi {
WpsApplication?: () => any;
}
/**
*
*/
interface IWpsCommandBars {
cmbId: string;
attributes: IWpsCommandBarAttr[] | IWpsCommandBarObjectAttr;
}
/**
*
*/
interface IWpsCommandBarAttr {
name: string;
value: any;
}
/**
*
*/
interface IWpsCommandBarObjectAttr {
[propName: string]: any;
}
/**
* D.IWPS
*/
interface IWps extends IWpsCompatible {
version: string;
url: string;
iframe: any;
Enum? : any; // 即将废弃
Events?: any; // 即将废弃
Props?: string;
advancedApiReady: () => Promise<any>;
/**
* 1.x用法
*/
ready?:() => Promise<any>;
destroy: () => Promise<any>;
WpsApplication?: () => any;
WordApplication?: () => any;
EtApplication?: () => any;
ExcelApplication?: () => any;
WppApplication?: () => any;
PPTApplication?: () => any;
PDFApplication?: () => any;
Application?: any;
CommonApi?: any;
commonApiReady: () => Promise<any>;
setToken: (tokenData: {
token: string, timeout?: number, hasRefreshTokenConfig: boolean,
}) => Promise<any>;
tokenData?: { token: string } | null;
commandBars?: IWpsCommandBars[] | null;
iframeReady?: boolean;
on: (eventName: string, handle: (event?: any) => void) => void;
off: (eventName: string, handle: (event?: any) => void) => void;
Stack?: any;
Free?: (objId: any) => Promise<any>;
}
/**
* 1.x用法
*/
interface IWpsCompatible {
tabs?: {
getTabs: () => Promise<Array<{tabKey: number, text: string}>>
switchTab: (tabKey: number) => Promise<any>,
}
setCommandBars?: (args: Array<IWpsCommandBars>) => Promise<void>;
save?: () => Promise<any>;
ApiEvent?: {
AddApiEventListener: (eventName: string, handle: (event?: any) => void) => void
RemoveApiEventListener: (eventName: string, handle: (event?: any) => void) => void
}
executeCommandBar?: (id: string) => void
}
interface IFlag {
advancedApiReadySended: boolean;
advancedApiReadySendedJust: boolean;
commonApiReadySended: boolean;
commonApiReadySendedJust: boolean;
}
interface ICbEvent {
refreshToken?: TRefreshToken;
}
interface IWebOfficeSDK {
config: (conf: IConfig) => IWps | undefined;
init: (conf: IAppConfig) => IWps | undefined;
OfficeType: OfficeType;
}
interface IReadyEvent {
event: string;
callback?: (...args: any) => void;
after?: boolean;
}
type TRefreshToken = () => ITokenData | Promise<ITokenData>;
type sendMsgToWps = (msg: IMessage) => void;
type getId = () => string;
interface IAppConfig extends IConfig {
appId: string;
fileId: string | number;
officeType: string;
/**
* @deprecated use token instead
*/
fileToken?: string | ITokenData;
token?: string | ITokenData;
endpoint?: string;
customArgs?: Record<string, string | number>;
/**
* @deprecated A config item for WebOfficeSDK.config
*/
url?: string;
mount?: any;
attrAllow: string | string[];
isListenResize?: boolean; // sdk内部是否监听resize变化默认监听
}
type OfficeType = {
Spreadsheet: string,
Writer: string,
Presentation: string,
Pdf: string,
Otl: string
}
export { IAppConfig, ICbEvent, IClipboardData, ICommonOptions, IConfig, IDBOptions, IEtOptions, IFlag, IIframeWH, IMessage, IPDFOptions, IReadyEvent, ISubscriptionsConf, ITokenData, IUserHeaderButtonConf, IUserHeaderSubItemsConf, IUserHeadersConf, IWebOfficeSDK, IWppOptions, IWps, IWpsCommandBarAttr, IWpsCommandBarObjectAttr, IWpsCommandBars, IWpsCompatible, IWpsOptions, IWpsWebApi, OfficeType, TRefreshToken, getId, sendMsgToWps };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long