| | |
| | | </template> |
| | | |
| | | <!-- 资源贡献 --> |
| | | <div class="rule-category"> |
| | | <h4>资源贡献</h4> |
| | | <div class="rule-category" v-for="rule in rules.getPointsRuleList"> |
| | | <h4>{{ rule.category}}</h4> |
| | | <div class="rule-subcategory"> |
| | | <h5>提报标杆</h5> |
| | | <!-- <h5>提报标杆</h5> --> |
| | | <div class="rule-items"> |
| | | |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">每提报1个标杆,并审批完成,获</span> |
| | | <div class="rule-item" v-for="pointRuleDetial in rule.pointsRules"> |
| | | <span class="rule-desc">{{ pointRuleDetial.ruleName }} : {{ pointRuleDetial.ruleDescription}} </span> |
| | | <el-input |
| | | v-model="rules.benchmarkSubmission" |
| | | size="small" |
| | |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分</span> |
| | | <span class="unit" v-if="pointRuleDetial.isLimit === 1">,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.productSubscribedDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | v-if="pointRuleDetial.isLimit === 1" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="rule-subcategory"> |
| | | <!-- <div class="rule-subcategory"> |
| | | <h5>提报知识</h5> |
| | | <div class="rule-items"> |
| | | <div class="rule-item"> |
| | |
| | | <span class="unit">积分</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | |
| | | </div> |
| | | |
| | | <!-- 资源交易 --> |
| | | <div class="rule-category"> |
| | | <!-- <div class="rule-category"> |
| | | <h4>资源交易</h4> |
| | | <div class="rule-subcategory"> |
| | | <h5>产品接入</h5> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | |
| | | <!-- 资源传播 --> |
| | | <div class="rule-category"> |
| | | <h4>资源传播</h4> |
| | | <div class="rule-subcategory"> |
| | | <h5>数字资源</h5> |
| | | <div class="rule-items"> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">提报产品被订阅,获</span> |
| | | <el-input |
| | | v-model="rules.productSubscribed" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.productSubscribedDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | /> |
| | | </div> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">提报产品被试用,获</span> |
| | | <el-input |
| | | v-model="rules.productTrialed" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.productTrialedDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | /> |
| | | </div> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">提报产品被点赞,获</span> |
| | | <el-input |
| | | v-model="rules.resourceLiked" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.resourceLikedDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | /> |
| | | </div> |
| | | <!-- 后端无此规则,移除此项(如后端后续支持再开启) --> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">提报产品被试用,获</span> |
| | | <el-input |
| | | v-model="rules.productTrialed" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.productTrialedDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <!-- 用户参与 --> |
| | | <div class="rule-category"> |
| | | <h4>用户参与</h4> |
| | | <div class="rule-subcategory"> |
| | | <h5>交流互动</h5> |
| | | <div class="rule-items"> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">每日首次登录,获</span> |
| | | <el-input |
| | | v-model="rules.dailyFirstLogin" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分</span> |
| | | </div> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">发布提问,获</span> |
| | | <el-input |
| | | v-model="rules.postQuestion" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.postQuestionDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | /> |
| | | </div> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">发布评论,获</span> |
| | | <el-input |
| | | v-model="rules.postComment" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.postCommentDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | /> |
| | | </div> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">评论被点赞,获</span> |
| | | <el-input |
| | | v-model="rules.commentLiked" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分,每日积分上限</span> |
| | | <el-input |
| | | v-model="rules.commentLikedDailyLimit" |
| | | size="small" |
| | | style="width: 80px;" |
| | | placeholder="请输入" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 其他 --> |
| | | <div class="rule-category"> |
| | | <h4>其他</h4> |
| | | <div class="rule-subcategory"> |
| | | <h5>荣誉奖励</h5> |
| | | <div class="rule-items"> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">提报产品每月交易量TOP1,获</span> |
| | | <el-input |
| | | v-model="rules.monthlyTop1" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分</span> |
| | | </div> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">提报产品每月交易量TOP2,获</span> |
| | | <el-input |
| | | v-model="rules.monthlyTop2" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分</span> |
| | | </div> |
| | | <div class="rule-item"> |
| | | <span class="rule-desc">提报产品每月交易量TOP3,获</span> |
| | | <el-input |
| | | v-model="rules.monthlyTop3" |
| | | size="small" |
| | | style="width: 60px;" |
| | | placeholder="请输入" |
| | | /> |
| | | <span class="unit">积分</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | |
| | |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { ArrowLeft } from '@element-plus/icons-vue' |
| | | import pointsApi from '../../../api/pointsApi' |
| | | import qs from 'qs' |
| | | |
| | | // 获取路由实例 |
| | | const route = useRoute() |
| | | // 获取路由参数中的规则id |
| | | const ruleId = route.query.ruleId as string |
| | | |
| | | interface PointRule { |
| | | category: string, |
| | | pointsRules: PointRuleDetial[] |
| | | } |
| | | interface PointRuleDetial { |
| | | category: string, |
| | | id: number, |
| | | ruleDescription: string, |
| | | ruleName: string, |
| | | createdAt: string, |
| | | ruleType: number, |
| | | pointsWinner: number, |
| | | isLimit: number |
| | | } |
| | | |
| | | // 积分规则配置 |
| | | const rules = ref({ |
| | | // 积分获取规则 |
| | | benchmarkSubmission: 100, |
| | | knowledgeSubmission: 100, |
| | | productSubmission: 200, |
| | | productAccess: 1000, |
| | | resourceTransaction: 50, |
| | | resourceFavorited: 1, |
| | | resourceFavoritedDailyLimit: 100, |
| | | resourceLiked: 1, |
| | | resourceLikedDailyLimit: 100, |
| | | resourceViewThreshold: 100, |
| | | resourceViewed: 1, |
| | | resourceVideoPlayed: 5, |
| | | resourceDocumentViewed: 2, |
| | | productSubscribed: 10, |
| | | productSubscribedDailyLimit: 500, |
| | | productTrialed: 5, |
| | | productTrialedDailyLimit: 200, |
| | | dailyFirstLogin: 1, |
| | | postQuestion: 1, |
| | | postQuestionDailyLimit: 50, |
| | | postComment: 1, |
| | | postCommentDailyLimit: 100, |
| | | commentLiked: 1, |
| | | commentLikedDailyLimit: 50, |
| | | // 其他演示字段(后端未保存这些项时会忽略) |
| | | monthlyTop1: 1000, |
| | | monthlyTop2: 500, |
| | | monthlyTop3: 300, |
| | | interface PointsRules { |
| | | getPointsRuleList: PointRule[], |
| | | consumePointsRuleList: PointRule[], |
| | | benchmarkSubmission: number, |
| | | productSubscribedDailyLimit: number, |
| | | productAccess: number, |
| | | resourceTransaction: number, |
| | | productSubscribed: number, |
| | | productTrialed: number, |
| | | productTrialedDailyLimit: number, |
| | | resourceLiked: number, |
| | | resourceLikedDailyLimit: number, |
| | | dailyFirstLogin: number, |
| | | postQuestion: number, |
| | | postQuestionDailyLimit: number, |
| | | postComment: number, |
| | | postCommentDailyLimit: number, |
| | | commentLiked: number, |
| | | commentLikedDailyLimit: number, |
| | | monthlyTop1: number, |
| | | monthlyTop2: number, |
| | | monthlyTop3: number, |
| | | productUnfavorited: number, |
| | | productUnliked: number, |
| | | benchmarkPersonalToUnit: number, |
| | | benchmarkUnitToPersonal: number, |
| | | knowledgePersonalToUnit: number, |
| | | knowledgeUnitToPersonal: number, |
| | | productPersonalToUnit: number, |
| | | productUnitToPersonal: number |
| | | } |
| | | |
| | | // 积分消耗规则 |
| | | resourceUnfavorited: 1, |
| | | resourceUnliked: 1, |
| | | productUnsubscribed: 10, |
| | | productUntrialed: 5, |
| | | deleteQuestion: 1, |
| | | deleteComment: 1, |
| | | commentUnliked: 1, |
| | | productUnfavorited: 2, |
| | | productUnliked: 1, |
| | | |
| | | // 积分转换规则 |
| | | benchmarkPersonalToUnit: 100, |
| | | benchmarkUnitToPersonal: 100, |
| | | knowledgePersonalToUnit: 100, |
| | | knowledgeUnitToPersonal: 100, |
| | | productPersonalToUnit: 100, |
| | | productUnitToPersonal: 100, |
| | | const rules = ref<PointsRules>({ |
| | | consumePointsRuleList: [], |
| | | getPointsRuleList: [], |
| | | benchmarkSubmission: 0, |
| | | productSubscribedDailyLimit: 0, |
| | | productAccess: 0, |
| | | resourceTransaction: 0, |
| | | productSubscribed: 0, |
| | | productTrialed: 0, |
| | | productTrialedDailyLimit: 0, |
| | | resourceLiked: 0, |
| | | resourceLikedDailyLimit: 0, |
| | | dailyFirstLogin: 0, |
| | | postQuestion: 0, |
| | | postQuestionDailyLimit: 0, |
| | | postComment: 0, |
| | | postCommentDailyLimit: 0, |
| | | commentLiked: 0, |
| | | commentLikedDailyLimit: 0, |
| | | monthlyTop1: 0, |
| | | monthlyTop2: 0, |
| | | monthlyTop3: 0, |
| | | productUnfavorited: 0, |
| | | productUnliked: 0, |
| | | benchmarkPersonalToUnit: 0, |
| | | benchmarkUnitToPersonal: 0, |
| | | knowledgePersonalToUnit: 0, |
| | | knowledgeUnitToPersonal: 0, |
| | | productPersonalToUnit: 0, |
| | | productUnitToPersonal: 0 |
| | | }) |
| | | |
| | | // 获取积分规则配置 |
| | |
| | | try { |
| | | if (ruleId) { |
| | | // 如果有ruleId参数,则获取特定规则 |
| | | const res = await pointsApi.getPointsRuleById(ruleId) |
| | | const formData = new URLSearchParams(); |
| | | formData.append('ruleId', ruleId); |
| | | |
| | | const res = await pointsApi.getPointsRuleById(formData) |
| | | if (res.code === 200 && res.data) { |
| | | // 将后端数据映射到前端规则对象 |
| | | Object.assign(rules.value, res.data) |
| | | console.log(rules.value) |
| | | } |
| | | } else { |
| | | // 如果没有ruleId参数,则获取所有规则 |