This commit is contained in:
2025-04-27 09:16:42 +08:00
parent 3a40d2d3ee
commit 95ee4bcebf
13 changed files with 964 additions and 752 deletions

1
.gitignore vendored
View File

@@ -20,3 +20,4 @@ selenium-debug.log
# common # common
common/common.vue common/common.vue
/src/views/common/common.vue /src/views/common/common.vue
config/index.js

View File

@@ -23,7 +23,7 @@ module.exports = {
}, },
// Various Dev Server settings // Various Dev Server settings
host: '192.168.110.160', // can be overwritten by process.env.HOST host: '192.168.110.157', // can be overwritten by process.env.HOST
port: 8001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined port: 8001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true, autoOpenBrowser: true,
errorOverlay: true, errorOverlay: true,

BIN
dist.zip Normal file

Binary file not shown.

View File

@@ -5,31 +5,6 @@
`width: 100%; height: 100%; margin-top: ${!isNoSearch ? '-50px' : '0'}` `width: 100%; height: 100%; margin-top: ${!isNoSearch ? '-50px' : '0'}`
" "
> >
<!-- <el-form
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
style="float: right"
>
<el-form-item>
<el-input
v-model="dataForm.key"
placeholder="商品名称"
clearable
size="small"
></el-input>
</el-form-item>
<el-form-item>
<el-button
@click="
pageIndex = 1;
getDataList(bookMarketId);
"
size="small"
>查询</el-button
>
</el-form-item>
</el-form> -->
<div class="search_form"> <div class="search_form">
<div class="addFormBox shopFormBox"> <div class="addFormBox shopFormBox">
<el-form ref="addForm" label-width="80px" :model="dataForm"> <el-form ref="addForm" label-width="80px" :model="dataForm">
@@ -57,16 +32,16 @@
</div> </div>
</div> </div>
<div class="shop_box"> <div class="shop_box" v-loading="dataListLoading">
<!-- @selection-change="handleSelectionChange" --> <!-- @selection-change="handleSelectionChange" -->
<el-table <el-table
v-if="!dataListLoading"
ref="table" ref="table"
:height="`${isShowPagination ? 'calc(100% - 50px)' : '100%'}`" :height="`${isShowPagination ? 'calc(100% - 50px)' : '100%'}`"
:data="associatedGoodsList" :data="associatedGoodsList"
:row-key="getRowKeys" :row-key="getRowKeys"
border border
size="mini" size="mini"
v-loading="dataListLoading"
style="width: 100%" style="width: 100%"
> >
<slot name="tableItem"></slot> <slot name="tableItem"></slot>
@@ -81,7 +56,8 @@
</el-table-column> --> </el-table-column> -->
<!-- --> <!-- -->
<el-table-column v-if="!disableOperate" <el-table-column
v-if="!disableOperate"
header-align="center" header-align="center"
align="center" align="center"
label="操作" label="操作"
@@ -105,8 +81,9 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="margin-top: 10px;" <el-pagination
v-if="isShowPagination" style="margin-top: 10px;"
v-if="isShowPagination && !dataListLoading"
@size-change="handleSizeChange" @size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
:current-page="current" :current-page="current"
@@ -162,7 +139,7 @@
</div> </div>
</template> </template>
<script> <script>import axios from 'axios'
// import chooseBook from './chooseBook.vue' // import chooseBook from './chooseBook.vue'
// import AddOrUpdate from './shopproduct-add-or-update' // import AddOrUpdate from './shopproduct-add-or-update'
export default { export default {
@@ -227,35 +204,94 @@ export default {
}, },
async activated() { async activated() {
this.multipleSelection = []; this.multipleSelection = [];
if (this.otherInfo.statisticsQuery) {
await this.statisticsQuery();
} else {
await this.getAssociatedGoodsList({ ...this.dataForm }); await this.getAssociatedGoodsList({ ...this.dataForm });
}
// await this.getGoodsTypeList(); // await this.getGoodsTypeList();
}, },
methods: { methods: {
handleSizeChange(val) { async handleExport() {
var filename = "downloaded_file.xlsx";
try {
this.$http({
url: this.$http.adornUrl(/master/userContribution/exportContributionStatQuery),
method: "post",
data: this.$http.adornData({
current: this.current,
limit: this.limit
},{
responseType: "blob" // 关键点:告诉 axios 返回的是二进制文件
})
}).then(res=>{
console.log('res at line 230:', res)
})
// const res = await axios.post(
// window.SITE_CONFIG.baseUrl+"/master/userContribution/exportContributionStatQuery",
// {
// current: this.current,
// limit: this.limit
// },
// {
// responseType: "blob" // 关键点:告诉 axios 返回的是二进制文件
// }
// );
const blob = new Blob([res.data]);
const link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();
window.URL.revokeObjectURL(link.href); // 释放内存
} catch (err) {
console.error("文件下载失败:", err);
}
},
async handleSizeChange(val) {
this.limit = val; this.limit = val;
this.getAssociatedGoodsList({ ...this.dataForm }); if (this.otherInfo.statisticsQuery) {
await this.statisticsQuery();
} else {
await this.getAssociatedGoodsList({ ...this.dataForm });
}
console.log(`每页 ${val}`); console.log(`每页 ${val}`);
}, },
handleCurrentChange(val) { async handleCurrentChange(val) {
this.current = val; this.current = val;
this.getAssociatedGoodsList({ ...this.dataForm }); if (this.otherInfo.statisticsQuery) {
await this.statisticsQuery();
} else {
await this.getAssociatedGoodsList({ ...this.dataForm });
}
console.log(`当前页: ${val}`); console.log(`当前页: ${val}`);
}, },
editHandleClose() { editHandleClose() {
this.editForm = {}; this.editForm = {};
this.editVisible = false; this.editVisible = false;
}, },
submitEdit() { async submitEdit() {
this.$http({ this.$http({
url: this.$http.adornUrl(`${this.urlList.editCourse}`), url: this.$http.adornUrl(`${this.urlList.editCourse}`),
method: "post", method: "post",
data: this.$http.adornData(this.editForm) data: this.$http.adornData(this.editForm)
}).then(data => { }).then(async data => {
this.$message.success("操作成功!"); this.$message.success("操作成功!");
this.editHandleClose(); this.editHandleClose();
this.getAssociatedGoodsList(); if (this.otherInfo.statisticsQuery) {
await this.statisticsQuery();
} else {
await this.getAssociatedGoodsList();
}
}); });
}, },
editCourse(row) { editCourse(row) {
console.log("row", row); console.log("row", row);
if (this.CustomEdit) { if (this.CustomEdit) {
@@ -369,8 +405,11 @@ export default {
// this.$refs.table.clearSelection(); // this.$refs.table.clearSelection();
// this.multipleSelection = []; // this.multipleSelection = [];
}, },
// 获取关联数据列表 // 获取关联数据列表
async getAssociatedGoodsList() { async getAssociatedGoodsList() {
this.$emit("changeStatisticsQuery");
this.disableOperate = false;
console.log("🚀 ~ getAssociatedGoodsList ~ form:11111", form); console.log("🚀 ~ getAssociatedGoodsList ~ form:11111", form);
var form = { ...this.defaultForm, ...this.dataForm }; var form = { ...this.defaultForm, ...this.dataForm };
@@ -394,7 +433,7 @@ export default {
this.associatedGoodsList = [ this.associatedGoodsList = [
...data[this.otherInfo.resultValueName].records ...data[this.otherInfo.resultValueName].records
]; ];
this.total = data.certificateList.total; this.total = data[this.otherInfo.resultValueName].total;
console.log("this.total at line 392:", this.total); console.log("this.total at line 392:", this.total);
this.$forceUpdate(); this.$forceUpdate();
} else { } else {
@@ -475,6 +514,47 @@ export default {
}); });
} }
}, },
async statisticsQuery() {
this.disableOperate = true;
var form = { ...this.defaultForm, ...this.dataForm };
this.dataListLoading = true;
this.$http
.request({
url: this.$http.adornUrl(
`/master/userContribution/contributionStatQuery`
),
method: "POST",
data: {
current: this.current,
limit: this.limit,
tel: form.tel,
startTime: form.startTime ? form.startTime : ""
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json"
}
})
.then(async ({ data }) => {
if (data && data.code === 0) {
if (this.otherInfo.resultValueName) {
this.associatedGoodsList = [
...data[this.otherInfo.resultValueName].records
];
this.total = data[this.otherInfo.resultValueName].total;
this.$forceUpdate();
} else {
this.associatedGoodsList = [...data.result.records];
this.total = data[result].total;
}
this.dataListLoading = false;
}
});
},
// 每页数 // 每页数
sizeChangeHandle(val) { sizeChangeHandle(val) {
// this.changePageCoreRecordData(); // this.changePageCoreRecordData();

View File

@@ -45,6 +45,7 @@
default-expand-all default-expand-all
:filter-node-method="filterNode" :filter-node-method="filterNode"
ref="tree" ref="tree"
@node-click="handleNodeClick" @node-click="handleNodeClick"
:expand-on-click-node="false" :expand-on-click-node="false"
> >
@@ -75,7 +76,7 @@
type="text" type="text"
size="mini" size="mini"
@click.stop="handleClickNodes(node, data, 'addChildren')" @click.stop="handleClickNodes(node, data, 'addChildren')"
v-if="data.isLast != 1" v-if="data.isLast != 1&&!disableAddChild"
> >
添加下级 添加下级
</el-button> </el-button>
@@ -88,7 +89,7 @@
</el-button> --> </el-button> -->
<!-- v-if="node.childNodes.length == 0" --> <!-- v-if="node.childNodes.length == 0" -->
<el-button <el-button v-if="!data.disabled"
type="text" type="text"
size="mini" size="mini"
@click.stop="remove(data)" @click.stop="remove(data)"
@@ -114,7 +115,8 @@ export default {
"productId", "productId",
"sourceType", "sourceType",
"axiosType", "axiosType",
"axiosResultKey" "axiosResultKey",
"disableAddChild",
], ],
data() { data() {
return { return {

View File

@@ -17,9 +17,31 @@
<p>绑定用户</p> <p>绑定用户</p>
</div> --> </div> -->
<template v-if="pageType == 'label'"> <template v-if="pageType == 'label'">
<el-form-item label="手机号/邮箱:" prop="userKey" class="form_item"> <el-form-item
label="手机号/邮箱:"
prop="userKey"
class="form_item"
>
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
<el-autocomplete
v-if="!isEdit"
style="width: 400px;"
v-model="addCertificateForm.userKey"
:fetch-suggestions="loadAll"
placeholder="请输入手机号/邮箱"
@select="handleSelect"
>
<template #default="{ item }">
<div class="custom-item">
<span>{{ item.tel ? item.tel : item.email }}</span>
<span
style="color: gray; margin-left: 10px;"
v-if="item.name"
>({{ item.name }})</span
>
</div>
</template>
</el-autocomplete>
<span v-if="isEdit">{{ addCertificateForm.userKey }}</span> <span v-if="isEdit">{{ addCertificateForm.userKey }}</span>
</div> </div>
</el-form-item> </el-form-item>

View File

@@ -1,6 +1,5 @@
<template> <template>
<div class="mod-config"> <div class="mod-config">
<commonTree <commonTree
source="tags" source="tags"
axiosType="raw" axiosType="raw"
@@ -66,7 +65,8 @@
</div> </div>
</div> </div>
<div <div
style="padding-top: 0;padding-bottom: 0;" class="border_box tree_content_box" style="padding-top: 0;padding-bottom: 0;"
class="border_box tree_content_box"
v-if="currentNode && currentNode.data.isLast == 1" v-if="currentNode && currentNode.data.isLast == 1"
> >
<div class="title_box" style="margin-bottom: 10px; height: 40px"> <div class="title_box" style="margin-bottom: 10px; height: 40px">
@@ -89,7 +89,6 @@
</div> </div>
<!-- :isNoSearch="true" --> <!-- :isNoSearch="true" -->
<commonShop <commonShop
:CustomEdit="true" :CustomEdit="true"
:otherInfo="{ :otherInfo="{
httpType: 'raw', httpType: 'raw',
@@ -103,7 +102,6 @@
axiosType="raw" axiosType="raw"
getAssociatedGoodsListKey="id" getAssociatedGoodsListKey="id"
:isNoPaging="true" :isNoPaging="true"
:isShowPagination="true" :isShowPagination="true"
getAssociatedGoodsListValue="result" getAssociatedGoodsListValue="result"
:tableColumnList="tableColumnList" :tableColumnList="tableColumnList"
@@ -296,7 +294,8 @@
</el-form> --> </el-form> -->
<addCertificate v-if="currentNode.data&&currentNode.data.id" <addCertificate
v-if="currentNode.data && currentNode.data.id"
ref="addCertificate" ref="addCertificate"
:data="addCertificateForm" :data="addCertificateForm"
:labelId="currentNode.data.id" :labelId="currentNode.data.id"
@@ -447,8 +446,7 @@ export default {
saveShop: "/master/userCertificate/editCertificate", saveShop: "/master/userCertificate/editCertificate",
add: "/master/userCertificate/saveUserCertificateLabel", add: "/master/userCertificate/saveUserCertificateLabel",
edit: "/master/userCertificate/editUserCertificateLabel", edit: "/master/userCertificate/editUserCertificateLabel",
hasBindProductList: hasBindProductList: "/master/userCertificate/userCertificateList",
"/master/userCertificate/userCertificateList",
CanBindProductList: "/master/courseMedical/getCourseListCanMedical", CanBindProductList: "/master/courseMedical/getCourseListCanMedical",
editCourse: "/master/courseMedical/updateCourseToMedicalSort" editCourse: "/master/courseMedical/updateCourseToMedicalSort"
}, },
@@ -575,9 +573,8 @@ export default {
methods: { methods: {
refresh() { refresh() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.commonShop.getAssociatedGoodsList() this.$refs.commonShop.getAssociatedGoodsList();
}) });
}, },
getCate(id) { getCate(id) {
this.linshiids = []; this.linshiids = [];
@@ -617,8 +614,8 @@ export default {
courseId: data.courseId, courseId: data.courseId,
courseName: data.title, courseName: data.title,
labelId: data.labelId, labelId: data.labelId,
images:data.certificateUrl, images: data.certificateUrl
},); });
}); });
// this.selectChange(data.id) // this.selectChange(data.id)

View File

@@ -16,7 +16,11 @@
<p>绑定用户</p> <p>绑定用户</p>
</div> --> </div> -->
<template v-if="pageType == 'label'"> <template v-if="pageType == 'label'">
<el-form-item label="手机号/邮箱:" prop="userKey" class="form_item"> <el-form-item
label="手机号/邮箱:"
prop="userKey"
class="form_item"
>
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
<el-autocomplete <el-autocomplete
v-if="!isEdit" v-if="!isEdit"
@@ -52,11 +56,7 @@
style="width: 110px;display: inline-block;text-align: right;" style="width: 110px;display: inline-block;text-align: right;"
>用户姓名</span >用户姓名</span
> --> > -->
{{ {{ addPointsForm.userName ? addPointsForm.userName : "-" }}
addPointsForm.userName
? addPointsForm.userName
: "-"
}}
</div></el-form-item </div></el-form-item
> >
</template> </template>
@@ -65,7 +65,6 @@
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
{{ dataInfo.tel ? dataInfo.tel : dataInfo.email }} {{ dataInfo.tel ? dataInfo.tel : dataInfo.email }}
<span v-if="dataInfo.name"> {{ dataInfo.name }}</span> <span v-if="dataInfo.name"> {{ dataInfo.name }}</span>
</div> </div>
</el-form-item> </el-form-item>
@@ -80,9 +79,9 @@
> >
<el-option <el-option
v-for="item in cateOptions" v-for="item in cateOptions"
:key="item.value" :key="item.id"
:label="item.label" :label="item.dictValue"
:value="item.value" :value="item.dictType"
> >
</el-option </el-option
></el-select></div ></el-select></div
@@ -99,7 +98,8 @@
</el-form-item> </el-form-item>
<el-form-item label="充值明细"> <el-form-item label="充值明细">
<el-input style="width: 400px;" <el-input
style="width: 400px;"
type="textarea" type="textarea"
rows="5" rows="5"
v-model="addPointsForm.detail" v-model="addPointsForm.detail"
@@ -247,49 +247,28 @@ export default {
this.totalLaoding = false; this.totalLaoding = false;
} }
}, },
handleChange() {}, handleChange(e) {
console.log('e at line 250:', e)
this.addPointsForm.type = e.toString();
this.$forceUpdate()
},
getCateList() { getCateList() {
// this.$http({ this.$http({
// url: this.$http.adornUrl( url: this.$http.adornUrl(
// "/master/userCertificate/userCertificateLabelList" "/master/userContribution/getUserContributionLabelList"
// ), ),
// method: "post", method: "post",
// data: this.$http.adornData({}) data: this.$http.adornData({})
// }).then(({ data }) => { }).then(({ data }) => {
// if (data && data.code === 0) { if (data && data.code === 0) {
// this.cateOptions = data.labelList; this.cateOptions = data.labelList;
// } else { } else {
// this.cateOptions = []; this.cateOptions = [];
// }
// this.totalLaoding = false;
// if (data.code !== 0) return this.$message.error(data.msg);
// });
this.cateOptions = [
{
value: "01",
label: "在线教学"
},
{
value: "03",
label: "学术期刊"
},
{
value: "05",
label: "太湖讲堂"
},
{
value: "07",
label: "创作技术"
},
{
value: "11",
label: "注册邀请"
},
{
value: "13",
label: "课程邀请"
} }
]; this.totalLaoding = false;
if (data.code !== 0) return this.$message.error(data.msg);
});
}, },
loadAll(queryString, cb) { loadAll(queryString, cb) {
if (queryString == "") { if (queryString == "") {
@@ -334,9 +313,8 @@ export default {
this.addPointsForm = {}; this.addPointsForm = {};
this.fileList = []; this.fileList = [];
this.isEdit = type == "edit" ? true : false; this.isEdit = type == "edit" ? true : false;
if(this.pageType == 'label'){ if (this.pageType == "label") {
this.dataRule = { this.dataRule = {
score: [ score: [
{ {
required: true, required: true,
@@ -344,16 +322,16 @@ if(this.pageType == 'label'){
// trigger: "change", // trigger: "change",
} }
] ]
} };
} else { } else {
this.dataRule = { this.dataRule = {
type: [ // type: [
{ // {
required: true, // required: true,
message: "请选择湖分分类" // message: "请选择湖分分类"
// trigger: "change", // // trigger: "change",
} // }
], // ],
score: [ score: [
{ {
required: true, required: true,
@@ -361,16 +339,10 @@ if(this.pageType == 'label'){
// trigger: "change", // trigger: "change",
} }
] ]
} };
} }
if (data) { if (data) {
this.addPointsForm = {
// courseId: data.id,
// courseName: data.title,
// courseImg: data.image,
// images: data.image
// userId: data.userId
};
this.remoteMethod(this.addPointsForm.courseName); this.remoteMethod(this.addPointsForm.courseName);
if (this.addPointsForm.images) { if (this.addPointsForm.images) {
this.fileList = this.addPointsForm.images this.fileList = this.addPointsForm.images
@@ -400,9 +372,19 @@ if(this.pageType == 'label'){
this.addPointsForm.userId = this.dataInfo.id; this.addPointsForm.userId = this.dataInfo.id;
} }
console.log('data at line 395:', data)
this.addPointsForm.type = data.type? data.type : "";
this.dialogVisible = true; this.dialogVisible = true;
}, },
handleSubmit: debounce(async function() { handleSubmit: debounce(async function() {
if(this.addPointsForm.type == ""){
this.$message({
message: "请选择湖分分类",
type: "error"
});
return false;
}
this.$refs["addPointsForm"].validate(valid => { this.$refs["addPointsForm"].validate(valid => {
if (valid) { if (valid) {
this.$http({ this.$http({
@@ -411,12 +393,15 @@ if(this.pageType == 'label'){
), ),
method: "post", method: "post",
data: this.$http.adornData({ data: this.$http.adornData({
userId: this.dataInfo.id, userId:
this.dataInfo && this.dataInfo.id
? this.dataInfo.id
: this.addPointsForm.userId,
score: this.addPointsForm.score, score: this.addPointsForm.score,
detail: this.addPointsForm.detail detail: this.addPointsForm.detail
? this.addPointsForm.detail ? this.addPointsForm.detail
: "", : "",
type: this.addPointsForm.type type: this.addPointsForm.type,
}) })
}).then(({ data }) => { }).then(({ data }) => {
if (data && data.code === 0) { if (data && data.code === 0) {

View File

@@ -1,9 +1,9 @@
<template> <template>
<div class="mod-config"> <div class="mod-config">
<commonTree <commonTree
source="tags" source="tags"
axiosType="raw" axiosType="raw"
:disableAddChild="true"
axiosResultKey="market" axiosResultKey="market"
@changeCurrentNode="changeCurrentNode" @changeCurrentNode="changeCurrentNode"
ref="commonTree" ref="commonTree"
@@ -15,9 +15,9 @@
<div <div
v-if="isFresh" v-if="isFresh"
v-loading="!isFresh" v-loading="!isFresh"
style="width: calc(100% - 360px); height: 100%; overflow-y: scroll; float: right; border: 1px solid #bababa; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); border-radius: 10px;position: relative;" style="width: calc(100% - 310px); height: 100%; overflow-y: scroll; float: right; border: 1px solid #bababa; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); border-radius: 10px;position: relative;"
> >
<div class="border_box info_box"> <div class="border_box info_box" v-if="!currentNode.data.disabled">
<div class="title_box"> <div class="title_box">
<div class="title"><span class="line"></span>基本标签信息</div> <div class="title"><span class="line"></span>基本标签信息</div>
</div> </div>
@@ -45,39 +45,27 @@
> >
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
<el-form-item
label="是否为最终级"
prop="isLast"
label-width="120px"
class="form_item"
>
<el-switch
v-model="addForm.isLast"
active-color="#13ce66"
:active-value="1"
:inactive-value="0"
active-text=""
inactive-text=""
@change="handleChangeIsLast"
>
</el-switch>
</el-form-item>
</el-form> </el-form>
</div> </div>
</div> </div>
<div <div
style="padding-top: 0;padding-bottom: 0;" class="border_box tree_content_box" style="padding-top: 0;padding-bottom: 0;"
v-if="currentNode && currentNode.data.isLast == 1" class="border_box tree_content_box"
v-if="currentNode.data && currentNode.data.id"
> >
<div class="title_box" style="margin-bottom: 10px; height: 40px"> <div class="title_box" style="margin-bottom: 10px; height: 40px">
<div class="title"> <div class="title">
<span class="line"></span>证书列表 <span class="line"></span
>{{
currentNode.data && currentNode.data.id == "all" ? "全部" : ""
}}湖分列表
<el-button <el-button
plain plain
type="primary" type="primary"
style="margin-left: 20px" style="margin-left: 20px"
@click="openTable('addForm')" @click="openTable('addForm')"
size="mini" size="mini"
v-if="currentNode.data && currentNode.data.id != 'all'"
>新增</el-button >新增</el-button
> >
@@ -88,22 +76,24 @@
</div> </div>
</div> </div>
<!-- :isNoSearch="true" --> <!-- :isNoSearch="true" -->
<commonShop
<commonShop
v-if="isFresh"
:CustomEdit="true" :CustomEdit="true"
:otherInfo="{ :otherInfo="{
httpType: 'raw', httpType: 'raw',
resultValueName: 'certificateList' resultValueName: 'result',
statisticsQuery: statisticsQuery
}" }"
:defaultForm="{ :defaultForm="{
tel: '', tel: '',
title:'', detail: '',
type: currentNode.data ? currentNode.data.dictType : '',
labelId: addForm.id labelId: addForm.id
}" }"
axiosType="raw" axiosType="raw"
getAssociatedGoodsListKey="id" getAssociatedGoodsListKey="id"
:isNoPaging="true" :isNoPaging="true"
:isShowPagination="true" :isShowPagination="true"
getAssociatedGoodsListValue="result" getAssociatedGoodsListValue="result"
:tableColumnList="tableColumnList" :tableColumnList="tableColumnList"
@@ -112,14 +102,18 @@
:dataList="associatedGoodsList" :dataList="associatedGoodsList"
:urlList="urlList" :urlList="urlList"
@delete="dataFormDelete" @delete="dataFormDelete"
@changeStatisticsQuery="statisticsQuery = false"
@edit="handleDataFormEdit" @edit="handleDataFormEdit"
:isEdit="isEdit" :isEdit="false"
ref="commonShop" ref="commonShop"
:style="`height: calc(100vh - 340px); `" :style="{
height:
currentNode.data && currentNode.data.id == 'all'
? 'calc(100vh - 200px) !important'
: 'calc(100vh - 340px)'
}"
> >
<template slot="searchFormItem" slot-scope="slotProps"> <template slot="searchFormItem" slot-scope="slotProps">
<el-form-item <el-form-item
label="手机号:" label="手机号:"
prop="title" prop="title"
@@ -135,21 +129,53 @@
> >
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item <!-- <el-form-item
label="证书名称:" label="描述:"
prop="title" prop="title"
class="form_item" class="form_item"
style="width: 240px;" style="width: 240px;"
> >
<el-input <el-input
size="small" size="small"
placeholder="请输入证书名称" placeholder="请输入描述"
style="width: 100%" style="width: 100%"
v-model="slotProps.dataForm.title" v-model="slotProps.dataForm.detail"
clearable clearable
> >
</el-input> </el-input>
</el-form-item> -->
<el-form-item
label="时间:"
prop="title"
class="form_item"
style="width: 240px;"
>
<el-date-picker
size="small"
value-format="yyyy-MM-dd"
v-model="slotProps.dataForm.startTime"
type="date"
style="width: 100%"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item> </el-form-item>
<el-button
v-if="currentNode.data && currentNode.data.id == 'all'"
size="mini"
style="float: right;margin-top: 6px;margin-left: 6px;"
@click="handleExport()"
>全部导出</el-button
>
<el-button
v-if="currentNode.data && currentNode.data.id == 'all'"
size="mini"
:type="statisticsQuery ? 'primary' : 'info'"
style="float: right;margin-top: 6px;"
@click="handleStatisticsQuery"
>统计查询</el-button
>
</template> </template>
<template slot="tableItem" slot-scope="slotProps"> <template slot="tableItem" slot-scope="slotProps">
<el-table-column <el-table-column
@@ -161,7 +187,8 @@
<template slot-scope="scope"> <template slot-scope="scope">
{{ (pageIndex - 1) * pageSize + scope.$index + 1 }} {{ (pageIndex - 1) * pageSize + scope.$index + 1 }}
</template> </template>
</el-table-column> <el-table-column </el-table-column>
<el-table-column
width="180" width="180"
prop="toSociologySort" prop="toSociologySort"
header-align="center" header-align="center"
@@ -182,29 +209,108 @@
<div v-else-if="scope.row.user.email"> <div v-else-if="scope.row.user.email">
<span>邮箱{{ scope.row.user.email }}</span> <span>邮箱{{ scope.row.user.email }}</span>
</div> </div>
<!-- <span v-if="getStarLevel(scope.row.score)>0">{{ getStarLevel(scope.row.score) }} 星湖粉</span> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="湖分" label="湖分"
width="120" width="90"
align="center" align="center"
prop="certificateNo" prop="score"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="星级"
width="160"
align="center"
prop="score"
>
<template slot-scope="scope">
<div style="">
<el-rate
v-if="getStarLevel(scope.row.score) > 0"
disabled
:max="7"
:colors="colors"
class="custom-rate"
text-color="#ff9900"
:value="getStarLevel(scope.row.score)"
>
</el-rate>
<span v-if="getStarLevel(scope.row.score) > 0"
>{{ getStarLevel(scope.row.score) }} </span
>
</div>
</template>
</el-table-column>
<el-table-column
label="湖分明细"
align="left"
prop="detail"
v-if="statisticsQuery"
>
<template slot-scope="scope">
<p style="overflow: hidden;margin-bottom: 0;">
<span
v-if="scope.row.statQueryScore > 0"
style="text-align: right;float: left;"
>共涨
<span
style="font-weight: bold;"
:style="{
color: getColor(getStarLevel(scope.row.statQueryScore))
}"
>{{ getStarLevel(scope.row.statQueryScore) }}</span
>
(<span
:style="{
color: getColor(getStarLevel(scope.row.statQueryScore))
}"
>{{ scope.row.statQueryScore }}</span
>
湖分)
</span>
<span style="text-align: right;float: right;"
>{{ scope.row.contributions.length }}条记录</span
>
</p>
<div
style="text-align: left;max-height: 200px;overflow-y: auto;position: relative;"
>
<div
v-for="(v, i) in scope.row.contributions"
style="text-align: left;cursor: pointer;"
:style="
v.statQueryFlag == 1
? {
color: getColor(
getStarLevel(scope.row.statQueryScore)
)
}
: ''
"
>
<span style="margin-right: 4px;"
>{{ i + 1 }}{{ getTreeLabel(v.type) }}</span
>-
{{ v.detail }} ({{ v.score }})
</div>
</div>
</template>
</el-table-column>
<el-table-column
v-else
prop="detail"
header-align="center"
align="center"
label="描述" label="描述"
align="center"
prop="certificateNo"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
v-if="!statisticsQuery"
prop="createTime" prop="createTime"
header-align="center" header-align="center"
align="center" align="center"
@@ -240,7 +346,8 @@
</el-form> --> </el-form> -->
<addCertificate v-if="currentNode.data&&currentNode.data.id" <addCertificate
v-if="currentNode.data && currentNode.data.id"
ref="addCertificate" ref="addCertificate"
:data="addCertificateForm" :data="addCertificateForm"
:labelId="currentNode.data.id" :labelId="currentNode.data.id"
@@ -373,8 +480,9 @@ export default {
data() { data() {
return { return {
disabled: false, disabled: false,
statisticsQuery: false,
restaurants: [], restaurants: [],
treeLabelTypeList: [],
options: [], options: [],
state: "", state: "",
timeout: null, timeout: null,
@@ -385,16 +493,15 @@ export default {
isIndeterminate: true, isIndeterminate: true,
dialogVisible: false, dialogVisible: false,
urlList: { urlList: {
treeList: "/master/userCertificate/userCertificateLabelList", treeList: "/master/userContribution/getUserContributionLabelList",
delete: "/master/userCertificate/delUserCertificateLabel", delete: "/master/userContribution/delUserContributionLabelList",
deleteShop: "/master/userCertificate/delCertificate", deleteShop: "/master/userContribution/delUserContribution",
saveShop: "/master/userCertificate/editCertificate", saveShop: "/master/userContribution/saveUserContribution",
add: "/master/userCertificate/saveUserCertificateLabel", add: "/master/userContribution/addUserContributionLabelList",
edit: "/master/userCertificate/editUserCertificateLabel", edit: "/master/userContribution/editUserContributionLabelList",
hasBindProductList: hasBindProductList: "/master/userContribution/listByPage",
"/master/userCertificate/userCertificateList", CanBindProductList: "/master/courseMedical/getCourseListCanMedical"
CanBindProductList: "/master/courseMedical/getCourseListCanMedical", // editCourse: "/master/courseMedical/updateCourseToMedicalSort"
editCourse: "/master/courseMedical/updateCourseToMedicalSort"
}, },
activeName: "first", activeName: "first",
addForm: {}, addForm: {},
@@ -435,6 +542,22 @@ export default {
dataListLoading: false, dataListLoading: false,
dataListSelections: [], dataListSelections: [],
addOrUpdateVisible: false, addOrUpdateVisible: false,
colors: {
0.5: { value: "#f7ba2a" }, // 半星,黄色
1: { value: "#66CC66" }, // 一星,绿色
1.5: { value: "#FF6347" }, // 一星半,红色
2: { value: "#0094ff" }, // 二星,蓝色
2.5: { value: "#0094ff" }, // 二星,蓝色
3: { value: "#802eff" }, // 三星,紫色
3.5: { value: "#802eff" }, // 三星,紫色
4: { value: "#FF7F50", excluded: true }, // 四星,橙色,排除的颜色
4.5: { value: "#FF7F50", excluded: true }, // 四星,橙色,排除的颜色
5: { value: "#ff8300" }, // 五星,金色
6: { value: "#00CED1" }, // 六星,青色
7: { value: "#ff3666" } // 七星,粉红色
},
tableColumnList: [ tableColumnList: [
{ label: "商品ID", width: 70, align: "center", prop: "productId" }, { label: "商品ID", width: 70, align: "center", prop: "productId" },
{ {
@@ -498,6 +621,10 @@ export default {
} }
}; };
}, },
filters: {
// 自定义过滤器:货币格式化
labelType(value) {}
},
components: { components: {
AddOrUpdate, AddOrUpdate,
addCertificate, addCertificate,
@@ -512,16 +639,61 @@ export default {
this.$refs.tree.filter(val); this.$refs.tree.filter(val);
} }
}, },
activated() { async activated() {
this.isEdit = false; this.isEdit = false;
this.getDataList(); await this.getDataList();
this.$nextTick(() => {
this.$refs.commonTree.setCurrentNodeShow("all");
setTimeout(() => {
this.$refs.commonShop.getDataList();
}, 3000);
});
},
async created() {
this.isEdit = false;
await this.getDataList();
this.$nextTick(() => {
this.$refs.commonTree.setCurrentNodeShow("all");
});
}, },
methods: { methods: {
async handleExport() {
this.$refs.commonShop.handleExport();
},
getColor(star) {
return this.colors[star].value || "#333"; // 默认黑色
},
getStarLevel(score) {
let level = 0; // 初始化星级
let starLevel = 0;
if (score < 15) {
level = 0; // 分数低于 15 没有星级
} else if (score >= 15 && score < 150) {
// 15 到 149 分之间,每 15 分增加 0.5 星
starLevel = Math.floor((score - 15) / 15) + 1; // 确保 15 分就返回 0.5 星
level = starLevel / 2; // 每次增加 0.5 星
} else if (score >= 150 && score < 300) {
level = 5; // 五星
} else if (score >= 300 && score < 500) {
level = 6; // 六星
} else if (score >= 500) {
level = 7; // 七星
}
return level;
},
refresh() { refresh() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.commonShop.getAssociatedGoodsList() this.$refs.commonShop.getAssociatedGoodsList();
}) });
},
handleStatisticsQuery() {
this.statisticsQuery = true;
this.$nextTick(() => {
this.$refs.commonShop.statisticsQuery();
});
}, },
getCate(id) { getCate(id) {
this.linshiids = []; this.linshiids = [];
@@ -677,7 +849,9 @@ export default {
openTable() { openTable() {
this.restaurants = []; this.restaurants = [];
this.$refs.addCertificate.init("add", {}); this.$refs.addCertificate.init("add", {
type: this.currentNode.data.dictType
});
this.$forceUpdate(); this.$forceUpdate();
// this.dialogVisible = true; // this.dialogVisible = true;
// this.isEdit = false; // this.isEdit = false;
@@ -699,10 +873,6 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
if (e == 1) { if (e == 1) {
if (this.$refs.commonShop) { if (this.$refs.commonShop) {
// this.$refs.commonShop.getAssociatedGoodsList.dataForm={
// ...this.$refs.commonShop.getAssociatedGoodsList.dataForm,
// id:this.addForm.id ? this.addForm.id : null
// }
this.$refs.commonShop.getAssociatedGoodsList(); this.$refs.commonShop.getAssociatedGoodsList();
} }
} }
@@ -716,6 +886,7 @@ export default {
console.log("🚀 ~ getCommonShopDataList ~ type, id:", type, id); console.log("🚀 ~ getCommonShopDataList ~ type, id:", type, id);
this.currentNode = { data: { ...form } }; this.currentNode = { data: { ...form } };
console.log("this.currentNode at line 705:", this.currentNode);
this.addForm = form; this.addForm = form;
if (this.addForm.isLast == 0) { if (this.addForm.isLast == 0) {
this.activeName = "first"; this.activeName = "first";
@@ -730,18 +901,12 @@ export default {
// } // }
await this.getDataList(); await this.getDataList();
// this.$refs.commonTree.setCurrentNodeShow();
this.$nextTick(() => { this.$nextTick(() => {
// this.$refs.commonShop.clear(); if (this.$refs.commonShop && this.currentNode.data.id) {
// this.$refs.commonShop.bookMarketId = null;
if (form.isLast == 1) {
if (this.$refs.commonShop) {
// this.$refs.commonShop.getAssociatedGoodsList.dataForm={
// ...this.$refs.commonShop.getAssociatedGoodsList.dataForm,
// id:this.addForm.id ? this.addForm.id : null
// }
this.$refs.commonShop.getAssociatedGoodsList(); this.$refs.commonShop.getAssociatedGoodsList();
} } else {
this.currentNode = {};
} }
}); });
}, },
@@ -782,14 +947,18 @@ export default {
), ),
method: "post", method: "post",
data: this.$http.adornData({ data: this.$http.adornData({
...this.addForm ...this.addForm,
dictValue: this.addForm.title
}) })
}).then(async ({ data }) => { }).then(async ({ data }) => {
console.log("data at line 755:", data);
if (data && data.code === 0) { if (data && data.code === 0) {
// var status = await this.correlationShop(data.result.id); // var status = await this.correlationShop(data.result.id);
await this.getDataList(); await this.getDataList();
this.$nextTick(async () => { this.$nextTick(async () => {
this.$refs.commonTree.setCurrentNodeShow(data.labelId); this.$refs.commonTree.setCurrentNodeShow(
data.sysDictDataEntity.id
);
this.$message({ this.$message({
message: "操作成功", message: "操作成功",
type: "success", type: "success",
@@ -830,7 +999,7 @@ export default {
dataFormDelete: debounce(async function(row, deleteType) { dataFormDelete: debounce(async function(row, deleteType) {
console.log("row at line 515:", row); console.log("row at line 515:", row);
this.$confirm( this.$confirm(
`确定要删除${deleteType != "all" ? "该" : "所有"}证书吗?`, `确定要删除${deleteType != "all" ? "该" : "所有"}湖分吗?`,
"提示", "提示",
{ {
confirmButtonText: "确定", confirmButtonText: "确定",
@@ -873,10 +1042,6 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
// this.$refs.commonShop.selectShopArr = []; // this.$refs.commonShop.selectShopArr = [];
if (this.$refs.commonShop) { if (this.$refs.commonShop) {
// this.$refs.commonShop.getAssociatedGoodsList.dataForm={
// ...this.$refs.commonShop.getAssociatedGoodsList.dataForm,
// id:this.addForm.id ? this.addForm.id : null
// }
this.$refs.commonShop.getAssociatedGoodsList(); this.$refs.commonShop.getAssociatedGoodsList();
} }
}); });
@@ -897,8 +1062,10 @@ export default {
this.isFresh = true; this.isFresh = true;
}, },
handleClickNodes(node, data, type) { handleClickNodes(node, data, type) {
console.log("node at line 878:", node, data, type);
this.isEdit = false; this.isEdit = false;
this.addForm = {}; this.addForm = {};
// console.log(this.$refs.tree.handleClickNodes(), "当前选中节点"); // console.log(this.$refs.tree.handleClickNodes(), "当前选中节点");
console.log(node, data, "当前选中节点"); console.log(node, data, "当前选中节点");
this.currentNode = node ? node : {}; this.currentNode = node ? node : {};
@@ -944,7 +1111,7 @@ export default {
title: "", title: "",
icon: "" icon: ""
}; };
this.handleClickNodes({ data: addform }, addform, "add");
// if (!this.currentNode) { // if (!this.currentNode) {
// this.$message.error("请先选择分类"); // this.$message.error("请先选择分类");
// return; // return;
@@ -1200,27 +1367,40 @@ export default {
} }
}, },
// 获取数据列表 // 获取数据列表
getTreeLabel(type) {
const label = this.treeLabelTypeList.find(item => item.type === type);
return label ? label.title : "未知类型";
},
async getDataList() { async getDataList() {
this.dataListLoading = true; this.dataListLoading = true;
await this.$http({ await this.$http({
url: this.$http.adornUrl(this.urlList.treeList), url: this.$http.adornUrl(this.urlList.treeList),
method: "get" method: "get"
// params: this.$http.adornParams({
// 'page': this.pageIndex,
// 'limit': this.pageSize,
// 'key': this.dataForm.key
// })
}).then(({ data }) => { }).then(({ data }) => {
console.log("🚀 ~ getDataList ~ data:", data); console.log("🚀 ~ getDataList ~ data:", data);
if (data && data.code === 0) { if (data && data.code === 0) {
this.treeDataList = data.labelList; this.treeDataList = [
{ title: "全部", id: "all", disabled: true },
...data.labelList.map(e => ({ ...e, title: e.dictValue }))
];
this.treeLabelTypeList = this.treeDataList
.filter(e => e.dictType !== "") // 过滤掉 type 为空的项
.map(e => ({
type: e.dictType,
title: e.dictValue
}));
console.log(
"this.treeLabelTypeList at line 1293:",
this.treeLabelTypeList
);
// this.totalPage = data.page.totalCount // this.totalPage = data.page.totalCount
} else { } else {
this.treeDataList = []; this.treeDataList = [];
// this.totalPage = 0 // this.totalPage = 0
} }
this.dataListLoading = false; this.dataListLoading = false;
this.$nextTick(() => {});
// this.$refs.commonTree.setCurrentNodeShow('all');
}); });
}, },
// 每页数 // 每页数
@@ -1287,7 +1467,7 @@ export default {
} }
.tree_box { .tree_box {
width: 350px !important; width: 300px !important;
height: 100%; height: 100%;
float: left; float: left;
border: 1px solid #bababa; border: 1px solid #bababa;
@@ -1491,6 +1671,7 @@ p {
/deep/ .quill-editor { /deep/ .quill-editor {
min-height: 200px !important; min-height: 200px !important;
} }
.loading-spinner { .loading-spinner {
position: absolute; position: absolute;
top: 50%; top: 50%;
@@ -1498,4 +1679,11 @@ p {
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
font-size: 24px; font-size: 24px;
} }
/deep/ .custom-rate .el-rate__item .el-rate__icon {
font-size: 13px !important;
height: 14px !important;
}
/deep/ .custom-rate {
height: 14px !important;
}
</style> </style>

View File

@@ -429,46 +429,21 @@ export default {
.catch(() => {}); .catch(() => {});
}, 200), }, 200),
getCateList() { getCateList() {
// this.$http({ this.$http({
// url: this.$http.adornUrl( url: this.$http.adornUrl(
// "/master/userCertificate/userCertificateLabelList" "/master/userContribution/getUserContributionLabelList"
// ), ),
// method: "post", method: "post",
// data: this.$http.adornData({}) data: this.$http.adornData({})
// }).then(({ data }) => { }).then(({ data }) => {
// if (data && data.code === 0) { if (data && data.code === 0) {
this.cateOptions = [ this.cateOptions = data.labelList;
{ } else {
value: "01", this.cateOptions = [];
label: "在线教学"
},
{
value: "03",
label: "学术期刊"
},
{
value: "05",
label: "太湖讲堂"
},
{
value: "07",
label: "创作技术"
},
{
value: "11",
label: "注册邀请"
},
{
value: "13",
label: "课程邀请"
} }
]; this.totalLaoding = false;
// } else { if (data.code !== 0) return this.$message.error(data.msg);
// this.cateOptions = []; });
// }
// if (data.code !== 0) return this.$message.error(data.msg);
// });
}, },
delay(val) { delay(val) {
this.$nextTick(() => { this.$nextTick(() => {

View File

@@ -25,9 +25,9 @@
> >
<el-option <el-option
v-for="item in cateOptions" v-for="item in cateOptions"
:key="item.value" :key="item.id"
:label="item.label" :label="item.dictValue"
:value="item.value" :value="item.dictType"
> >
</el-option </el-option
></el-select></div ></el-select></div
@@ -366,25 +366,12 @@ export default {
getPointsType(type) { getPointsType(type) {
var str = ""; var str = "";
//在线教学 01 学术期刊 03 太湖讲堂 05 创作技术 07 注册邀请 11 课程邀请 13 //在线教学 01 学术期刊 03 太湖讲堂 05 创作技术 07 注册邀请 11 课程邀请 13
switch (type) { this.cateOptions.forEach(item => {
case "01": if (item.dictType == type) {
return "在线教学"; str = item.dictValue;
case "03":
return "学术期刊";
case "05":
return "太湖讲堂";
case "07":
return "创作技术";
case "11":
return "注册邀请";
case "13":
return "课程邀请";
} }
});
return str;
}, },
dataFormDelete: debounce(async function(row, deleteType) { dataFormDelete: debounce(async function(row, deleteType) {
console.log("row at line 515:", row); console.log("row at line 515:", row);
@@ -429,46 +416,21 @@ export default {
.catch(() => {}); .catch(() => {});
}, 200), }, 200),
getCateList() { getCateList() {
// this.$http({ this.$http({
// url: this.$http.adornUrl( url: this.$http.adornUrl(
// "/master/userCertificate/userCertificateLabelList" "/master/userContribution/getUserContributionLabelList"
// ), ),
// method: "post", method: "post",
// data: this.$http.adornData({}) data: this.$http.adornData({})
// }).then(({ data }) => { }).then(({ data }) => {
// if (data && data.code === 0) { if (data && data.code === 0) {
this.cateOptions = [ this.cateOptions = data.labelList;
{ } else {
value: "01", this.cateOptions = [];
label: "在线教学"
},
{
value: "03",
label: "学术期刊"
},
{
value: "05",
label: "太湖讲堂"
},
{
value: "07",
label: "创作技术"
},
{
value: "11",
label: "注册邀请"
},
{
value: "13",
label: "课程邀请"
} }
]; this.totalLaoding = false;
// } else { if (data.code !== 0) return this.$message.error(data.msg);
// this.cateOptions = []; });
// }
// if (data.code !== 0) return this.$message.error(data.msg);
// });
}, },
delay(val) { delay(val) {
this.$nextTick(() => { this.$nextTick(() => {

View File

@@ -5,8 +5,8 @@
window.SITE_CONFIG = {}; window.SITE_CONFIG = {};
// api接口请求地址 // api接口请求地址
//window.SITE_CONFIG['baseUrl'] = 'https://api.nuttyreading.com'; window.SITE_CONFIG['baseUrl'] = 'https://api.nuttyreading.com';
window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.100:9200/pb'; // window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.100:9200/pb';
//window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.110:9200/pb'; //window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.110:9200/pb';
// cdn地址 = 域名 + 版本号 // cdn地址 = 域名 + 版本号

View File

@@ -5,8 +5,8 @@
window.SITE_CONFIG = {}; window.SITE_CONFIG = {};
// api接口请求地址 // api接口请求地址
//window.SITE_CONFIG['baseUrl'] = 'https://api.nuttyreading.com'; // 线上正式环境 window.SITE_CONFIG['baseUrl'] = 'https://api.nuttyreading.com'; // 线上正式环境
window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.100:9200/pb'; //川 // window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.100:9200/pb'; //川
//window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.110:9200/pb'; //本地 //window.SITE_CONFIG['baseUrl'] = 'http://192.168.110.110:9200/pb'; //本地
// cdn地址 = 域名 + 版本号 // cdn地址 = 域名 + 版本号