p-honggang.li
2025-08-14 2f984560bb14fb157ad24bea0e2d96b9ccdc896b
src/views/pointsManage/settings/index.vue
@@ -11,14 +11,14 @@
          </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"
@@ -26,10 +26,18 @@
                  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">
@@ -58,12 +66,12 @@
                <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>
@@ -95,191 +103,8 @@
              </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>
@@ -531,62 +356,91 @@
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
})
// 获取积分规则配置
@@ -594,10 +448,14 @@
  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参数,则获取所有规则