Merge branch '250213-prod-master_1202-gx' into master_1202

This commit is contained in:
joshen
2025-03-07 17:37:03 +08:00
10 changed files with 94 additions and 50 deletions

View File

@@ -92,7 +92,9 @@
</a-button> </a-button>
</a-col> </a-col>
<a-col> <a-col>
<a-button class="cus-btn" style="background: #4ea6ff; color: #fff; width: 150px" @click="exportStudy"> <a-button class="cus-btn" style="background: #4ea6ff; color: #fff; width: 150px"
:disabled="exportDisabled"
@click="exportStudy">
导出详细学习记录 导出详细学习记录
</a-button> </a-button>
</a-col> </a-col>
@@ -329,11 +331,16 @@ function reset() {
function exportStu() { function exportStu() {
window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportOnlineStudent?type=3&&thirdType=8&pid=${searchParams.value.pid}`); window.open(`${process.env.VUE_APP_BASE_API}/admin/student/exportOnlineStudent?type=3&&thirdType=8&pid=${searchParams.value.pid}`);
} }
function exportStudy() {
let exportDisabled = ref(false)
const exportStudy = async () => {
if(studentList.value.length == 0){ if(studentList.value.length == 0){
return message.warning('暂无可导出的学习记录') return message.warning('暂无可导出的学习记录')
} }
downLoadXlsx(`${process.env.VUE_APP_BASE_API}/admin/student/exportOnlineStudentDetail?type=4&&thirdType=8&pid=${searchParams.value.pid}`,'在线课学员学习记录') exportDisabled.value = true;
await downLoadXlsx(`${process.env.VUE_APP_BASE_API}/admin/student/exportOnlineStudentDetail?type=4&&thirdType=8&pid=${searchParams.value.pid}`,'在线课学员学习记录');
exportDisabled.value = false;
} }
defineExpose({ defineExpose({
searchStu, searchStu,

View File

@@ -1,19 +1,19 @@
import axios from 'axios' import axios from 'axios'
import {getCookieForName} from "@/api/method"; import {getCookieForName} from "@/api/method";
const mimeMap = { const mimeMap = {
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
zip: 'application/zip' zip: 'application/zip'
} }
export function downLoadXlsx(str, filename) { export const downLoadXlsx = async (str, filename) => {
axios({ const res = await axios({
method: 'get', method: 'get',
url: str, url: str,
responseType: 'blob', responseType: 'blob',
headers: { 'Authorization': 'Bearer ' + getCookieForName("token") } headers: { 'Authorization': 'Bearer ' + getCookieForName("token") }
}).then(res => { });
resolveBlob(res, mimeMap.xlsx,filename) resolveBlob(res, mimeMap.xlsx,filename)
})
} }
const baseUrl = process.env.VUE_APP_ACT_API const baseUrl = process.env.VUE_APP_ACT_API
export function downLoadZip(str, filename) { export function downLoadZip(str, filename) {

View File

@@ -140,7 +140,7 @@
v-model:value="xzinputV1" v-model:value="xzinputV1"
v-model:validated="validated" v-model:validated="validated"
:id="offcourseId" :id="offcourseId"
:maxlength="20" :maxlength="50"
show-count show-count
:type="2" :type="2"
></NameInput> ></NameInput>

View File

@@ -571,7 +571,6 @@ export default {
let objA = { ...state.searchParam }; let objA = { ...state.searchParam };
objA.beginTime = state.searchdate ? dayjs(state.searchdate[0]).format("YYYY-MM-DD") : "", objA.beginTime = state.searchdate ? dayjs(state.searchdate[0]).format("YYYY-MM-DD") : "",
objA.endTime = state.searchdate ? dayjs(state.searchdate[1]).format("YYYY-MM-DD") : "", objA.endTime = state.searchdate ? dayjs(state.searchdate[1]).format("YYYY-MM-DD") : "",
delete objA.searchdate
expenseBillList(objA) expenseBillList(objA)
.then((res) => { .then((res) => {
tableData.value = res.data.data.records tableData.value = res.data.data.records
@@ -1101,14 +1100,14 @@ export default {
} }
//TODO1 //TODO1
watchEffect(() => { // watchEffect(() => {
console.log('Item changed:', props.activeKeyProps); // console.log('Item changed:', props.activeKeyProps);
if(props.activeKeyProps == 2){ // if(props.activeKeyProps == 2){
state.searchParam.pageNo = 1; // state.searchParam.pageNo = 1;
getTableDate() // getTableDate()
} // }
// 在这里你可以根据 props.item 进行一些操作 // // 在这里你可以根据 props.item 进行一些操作
}); // });
return { return {

View File

@@ -65,10 +65,10 @@
<UploadOutlined />导出 <UploadOutlined />导出
</a-button> </a-button>
<a-button v-if="checkMenu('lecturerMonthDown')" class="resetbtn-mo" @click="handleFeeMonthlyDown" type="primary"> <a-button v-if="checkMenu('lecturerMonthDown')" class="resetbtn-mo" @click="handleFeeMonthlyDown" type="primary">
<UploadOutlined />讲师月度费用下载 <UploadOutlined />讲师月度汇总
</a-button> </a-button>
<a-button v-if="checkMenu('lecturerMonthDetailDown')" class="resetbtn-mo" @click="handleFeeMonthlyDetail" type="primary"> <a-button v-if="checkMenu('lecturerMonthDetailDown')" class="resetbtn-mo" @click="handleFeeMonthlyDetail" type="primary">
<UploadOutlined />讲师费用详情下载 <UploadOutlined />讲师费月度详情
</a-button> </a-button>
</div> </div>
<!-- 表格 --> <!-- 表格 -->
@@ -318,7 +318,7 @@ export default {
align: "center", align: "center",
width: 140, width: 140,
customRender: ({ text }) => { customRender: ({ text }) => {
return text ? text + '分钟' : '-' return text ? (text/60).toFixed(2) + '小时' : '-'
} }
}, },
{ {
@@ -329,7 +329,7 @@ export default {
align: "center", align: "center",
width: 140, width: 140,
customRender: ({ text }) => { customRender: ({ text }) => {
return text ? text + '分钟' : '-' return text ? (text/60).toFixed(2) + '小时' : '-'
} }
}, },
{ {
@@ -340,7 +340,7 @@ export default {
align: "center", align: "center",
width: 120, width: 120,
customRender: ({ text }) => { customRender: ({ text }) => {
return text ? text + '分钟' : '-' return text ? (text/60).toFixed(2) + '小时' : '-'
} }
}, },
{ {

View File

@@ -8,7 +8,7 @@
</a-tab-pane> </a-tab-pane>
<!-- v-if="lecturerAdmin('lecturer-admin')" --> <!-- v-if="lecturerAdmin('lecturer-admin')" -->
<a-tab-pane key="2" tab="审批中心"> <a-tab-pane key="2" tab="审批中心">
<OrganizationApproval/> <OrganizationApproval ref="organizationApprovalRef" :organizationActive="organizationActive"/>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
</div> </div>
@@ -34,18 +34,24 @@ export default {
const state = reactive({ const state = reactive({
activeKey: '1', activeKey: '1',
organizationActive:"0"
}); });
const organizationApprovalRef = ref(null)
onMounted(() => { onMounted(() => {
if (route.query.activeKey) { if (route.query.activeKey) {
state.activeKey = '2' state.activeKey = '2';
state.organizationActive = "1"
} }
}) })
const activeKeyFn = () => { const activeKeyFn = () => {
state.activeKey = '2' setTimeout(() => {
state.activeKey = '2';
organizationApprovalRef.value.getTableDate()
}, 5000);
} }
return { return {

View File

@@ -27,9 +27,9 @@
<a-select-option :value="0">全部</a-select-option> <a-select-option :value="0">全部</a-select-option>
<a-select-option :value="1">待提交</a-select-option> <a-select-option :value="1">待提交</a-select-option>
<a-select-option :value="2">审核中</a-select-option> <a-select-option :value="2">审核中</a-select-option>
<a-select-option :value="3">审核通过</a-select-option> <!-- <a-select-option :value="3">已完成</a-select-option> -->
<a-select-option :value="4">拒绝</a-select-option> <a-select-option :value="4">审核失败</a-select-option>
<a-select-option :value="5">撤回</a-select-option> <!-- <a-select-option :value="5">撤回</a-select-option> -->
</a-select> </a-select>
</div> </div>
</a-form-item> </a-form-item>
@@ -534,7 +534,10 @@ export default {
lockLecturer, lockLecturer,
AddApprover, AddApprover,
}, },
setup() { props: {
organizationActive: String
},
setup(props) {
const formRef = ref(); const formRef = ref();
const state = reactive({ const state = reactive({
@@ -754,6 +757,7 @@ export default {
const tableData = ref([]); const tableData = ref([]);
// List接口数据 // List接口数据
const getTableDate = (obj) => { const getTableDate = (obj) => {
console.log("执行 gx getTableDate 111111111111111111111")
state.tableLoading = true; state.tableLoading = true;
let objA = { let objA = {
...state.searchParam , ...state.searchParam ,
@@ -762,17 +766,7 @@ export default {
approvalType:1, approvalType:1,
moduleType:1 moduleType:1
}; };
console.log("执行 gx getTableDate objA",objA);
if(objA.status == 0){
objA.approvalType = null; //全部数据
objA.status = null;
}
if(objA.status == 3){ //审核通过
objA.approvalType = 0;
}
queryTrainOrg(objA).then((res) => { queryTrainOrg(objA).then((res) => {
tableData.value = res.data.data.records; tableData.value = res.data.data.records;
state.tableDataTotal = Number(res.data.data.total); state.tableDataTotal = Number(res.data.data.total);
@@ -1048,6 +1042,16 @@ export default {
state.formParam.affiliationName = record.affiliationName; state.formParam.affiliationName = record.affiliationName;
state.formParam.remark = record.remark; state.formParam.remark = record.remark;
}; };
watch(
() => props.organizationActive,
(val) => {
console.log("organizationActive gx val",val)
}
);
const cancel = () => { const cancel = () => {
state.formParam = { state.formParam = {
orglistName: null, orglistName: null,

View File

@@ -147,14 +147,26 @@
<a-radio :style="radioStyle" :value="0"></a-radio> <a-radio :style="radioStyle" :value="0"></a-radio>
</a-radio-group> </a-radio-group>
</div> </div>
<div class="num" style="flex:3" v-if="projectInfo.boeFlag === 1"> <!-- <div class="num" style="flex:3" v-if="projectInfo.boeFlag === 1">
<div class="num_text">项目编号</div> <div class="num_text">项目编号</div>
<div class="num_input"> <div class="num_input"> -->
<!-- <a-input style="border-radius: 8px;" show-count allowClear maxlength="30" v-model:value="projectInfo.numValue" placeholder="请输入项目编号" /> --> <!-- <a-input style="border-radius: 8px;" show-count allowClear maxlength="30" v-model:value="projectInfo.numValue" placeholder="请输入项目编号" /> -->
<ProjectNumber v-model:value="projectInfo.numValue"></ProjectNumber> <!-- <ProjectNumber v-model:value="projectInfo.numValue"></ProjectNumber>
</div>
</div> -->
</div>
<div class="name name2 num" style="flex:3" v-if="projectInfo.boeFlag === 1">
<div class="namebox">
<div class="num_text">项目编号</div>
</div>
<div class="in ggysxz">
<div class="num_input">
<!-- <a-input style="border-radius: 8px;" show-count allowClear maxlength="30" v-model:value="projectInfo.numValue" placeholder="请输入项目编号" /> -->
<ProjectNumber v-model:value="projectInfo.numValue"></ProjectNumber>
</div>
</div> </div>
</div> </div>
</div>
<div class="name name2"> <div class="name name2">
<div class="namebox"> <div class="namebox">
<div class="inname">同步学习记录</div> <div class="inname">同步学习记录</div>
@@ -338,6 +350,7 @@ export default {
}); });
watch(routers.query, () => { watch(routers.query, () => {
state.projectInfo.name = routers.query.name;
state.projectInfo.id = routers.query.id; state.projectInfo.id = routers.query.id;
state.projectInfo.parentName = routers.query.parentName; state.projectInfo.parentName = routers.query.parentName;
state.projectInfo.parentId = routers.query.parentId; state.projectInfo.parentId = routers.query.parentId;
@@ -349,6 +362,7 @@ export default {
}) })
function getProjectInfo() { function getProjectInfo() {
state.projectInfo.name = routers.query.name;
state.projectInfo.parentName = routers.query.parentName; state.projectInfo.parentName = routers.query.parentName;
state.projectInfo.parentId = routers.query.parentId; state.projectInfo.parentId = routers.query.parentId;
state.projectInfo.id = routers.query.projectId; state.projectInfo.id = routers.query.projectId;

View File

@@ -1577,9 +1577,11 @@ export default {
} }
function handleEdit(record) { function handleEdit(record) {
if (record.type === 1 || record.type === 2) { if (record.type === 1 || record.type === 2) {
state.doublepro = true; console.log("state.record gx",record)
state.projectInfo = record; state.projectInfo = record;
console.log("state.projectInfo gx",state.projectInfo)
state.onceName = record.name; state.onceName = record.name;
state.doublepro = true;
} else { } else {
router.push({ router.push({
path: "/projectadd", path: "/projectadd",

View File

@@ -304,11 +304,13 @@
<NameInput <NameInput
placeholder="请输入项目名称" placeholder="请输入项目名称"
v-model:value="projectInfo.name" v-model:value="projectInfo.name"
v-model:name="projectInfo.name"
v-model:validated="projectInfo.validated" v-model:validated="projectInfo.validated"
:type="1" :type="1"
:maxlength="30" :maxlength="30"
show-count show-count
:onceName="onceName" :onceName="onceName"
:name="projectInfo.name"
:id="projectInfo.projectId" :id="projectInfo.projectId"
></NameInput> ></NameInput>
</div> </div>
@@ -1576,14 +1578,24 @@ export default {
} }
} }
function handleEdit(record) { function handleEdit(record) {
console.log("handleEdit gx 项目中心-项目" ,record);
if (record.type === 1 || record.type === 2) { if (record.type === 1 || record.type === 2) {
state.doublepro = true; state.doublepro = true;
state.projectInfo = record; state.projectInfo = record;
state.onceName = record.name; state.onceName = record.name;
console.log("handleEdit gx 项目中心-项目 进入 edit record" ,record);
console.log("handleEdit gx 项目中心-项目 进入 edit state.doublepro" ,state.doublepro);
console.log("handleEdit gx 项目中心-项目 进入 edit state.projectInfo" ,state.projectInfo);
console.log("handleEdit gx 项目中心-项目 进入 edit state.onceName" ,state.onceName);
} else { } else {
console.log("handleEdit gx 项目中心-项目 进入 add record" ,record);
console.log("handleEdit gx 项目中心-项目 进入 add state.doublepro" ,state.doublepro);
console.log("handleEdit gx 项目中心-项目 进入 add state.projectInfo" ,state.projectInfo);
console.log("handleEdit gx 项目中心-项目 进入 add state.onceName" ,state.onceName);
router.push({ router.push({
path: "/projectadd", path: "/projectadd",
query: { query: {
name: record.name,
projectId: record.id, projectId: record.id,
parentId: record.parentId, parentId: record.parentId,
parentName: record.parentName, parentName: record.parentName,