''
liukangdong
2024-05-28 797c27eb2cbe0ee4eb3c3a999b26bd5bd20d456f
''
已修改3个文件
已重命名1个文件
694 ■■■■■ 文件已修改
h5/pages.json 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/answer/answer.vue 663 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/login.vue 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json
@@ -2,7 +2,15 @@
    "easycom": {
        "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
    },
    "pages": [{
    "pages": [
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "访客中心",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/notice/notice",
            "style": {
                "navigationBarTitleText": "入园须知",
@@ -10,14 +18,7 @@
            }
        },
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "访客中心",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/login/login",
            "path": "pages/staffLogin/login",
            "style": {
                "navigationBarTitleText": "登录",
                "enablePullDownRefresh": false,
@@ -356,11 +357,11 @@
        }
        ,{
            "path" : "pages/auth/auth",
            "style" :
            {
                "navigationBarTitleText": "微信授权",
                "enablePullDownRefresh": false
            }
            "style" :
            {
                "navigationBarTitleText": "微信授权",
                "enablePullDownRefresh": false
            }
            
        }
    ],
h5/pages/answer/answer.vue
@@ -1,13 +1,13 @@
<template>
    <view class="box">
        <view class="box_bgimage" :style="{backgroundImage: 'url(' + bg + ')'}">
            <text class="box_bgimage_a">{{ title }}</text>
            <text class="box_bgimage_b">{{ content }}</text>
        </view>
        <view class="box_list">
            <view class="box_list_answer" v-if="list && list.length > 0">
                <!--    判断   -->
<!--                 <template v-if="list[i].type === 0">
  <view class="box">
    <view class="box_bgimage" :style="{ backgroundImage: 'url(' + bg + ')' }">
      <text class="box_bgimage_a">{{ title }}</text>
      <text class="box_bgimage_b">{{ content }}</text>
    </view>
    <view class="box_list">
      <view class="box_list_answer" v-if="list && list.length > 0">
        <!--    判断   -->
        <!--                 <template v-if="list[i].type === 0">
                    <view class="box_list_answer_item" v-for="(item, index) in list[i].options" :key="index" @click="select(index)">
                        <image src="@/static/video_error@2x.png" v-if="success && problemIndex === index" />
                        <image src="@/static/video@2x.png" v-else-if="!String(problemIndex) || problemIndex !== index" />
@@ -17,34 +17,106 @@
                        <text style="color: rgba(2, 94, 239, 1)" v-else-if="problemIndex === index">{{item.code}}</text>
                    </view>
                </template> -->
                <!--    单选   -->
                <view v-for="(item,index) in list"  :key="index" class="list_item">
                    <template v-if="item.type == 1">
                        <view class="box_list_answer_name">
                        {{index + 1}}、{{item.title}}<text style="color:#ED4545;">*</text>
                    </view>
                    <view class="box_list_answer_item" v-for="(line, lIndex) in item.options" :key="lIndex" @click="select(line, index)">
                        <image  src="@/static/video@2x.png" v-if="!item.selAnswer || item.selAnswer !== line.code" />
                        <image src="@/static/video_sel@2x.png" v-if="item.selAnswer && item.selAnswer == line.code && item.answer === item.selAnswer" />
                        <image src="@/static/video_error@2x.png" v-if="item.selAnswer && item.selAnswer == line.code && item.answer !== item.selAnswer" />
                        <text v-if="!item.selAnswer"><text class="mr24">{{line.code}}</text> {{line.value}}</text>
                        <text v-if="item.selAnswer && item.answer === item.selAnswer" style="color: rgba(2, 94, 239, 1)" ><text class="mr24" style="color: rgba(2, 94, 239, 1)">{{line.code}}</text> {{line.value}}</text>
                        <text v-if="item.selAnswer && item.answer !== item.selAnswer" style="color: rgba(237, 69, 69, 1)" ><text class="mr24" style="color: rgba(237, 69, 69, 1)">{{line.code}}</text> {{line.value}}</text>
                    </view>
                    <view class="box_list_answer_tips" v-if="item.selAnswer && item.answer !== item.selAnswer">
                        <image src="@/static/ic_wrong@2x.png" />
                        <text>回答错误</text>
                    </view>
                    <view class="box_list_answer_tips" v-if="item.selAnswer && item.answer === item.selAnswer">
                        <image src="@/static/meeting/icon/ic_choose_sel@2x.png" />
                        <text>回答正确</text>
                    </view>
                    </template>
                </view>
                <view class="empty"></view>
                <view class="box_list_answer_btn" @click="next()">提交</view>
                <!--    多选    -->
<!--                 <template v-else-if="list[i].type === 2">
        <!--    单选   -->
        <view v-for="(item, index) in list" :key="index" class="list_item">
          <template v-if="item.type == 1">
            <view class="box_list_answer_name">
              {{ index + 1 }}、{{ item.title
              }}<text style="color: #ed4545">*</text>
            </view>
            <view
              class="box_list_answer_item"
              v-for="(line, lIndex) in item.options"
              :key="lIndex"
              @click="select(line, index)"
            >
              <image
                src="@/static/video@2x.png"
                v-if="!item.selAnswer || item.selAnswer !== line.code"
              />
              <image
                src="@/static/video_sel@2x.png"
                v-if="
                  (item.selAnswer &&
                    item.answer === item.selAnswer &&
                    item.selAnswer == line.code) ||
                  item.selAnswer == line.code
                "
              />
              <image
                src="@/static/video_error@2x.png"
                v-if="
                  item.selAnswer &&
                  item.selAnswer == line.code &&
                  item.answer !== item.selAnswer &&
                  status == '2'
                "
              />
              <text v-if="!item.selAnswer || item.selAnswer !== line.code"
                ><text class="mr24">{{ line.code }}</text>
                {{ line.value }}</text
              >
              <text
                v-if="
                  (item.selAnswer &&
                    item.answer === item.selAnswer &&
                    item.selAnswer == line.code) ||
                  item.selAnswer == line.code
                "
                style="color: rgba(2, 94, 239, 1)"
                ><text class="mr24" style="color: rgba(2, 94, 239, 1)">{{
                  line.code
                }}</text>
                {{ line.value }}</text
              >
              <text
                v-if="
                  item.selAnswer &&
                  item.answer !== item.selAnswer &&
                  status == '2'
                "
                style="color: rgba(237, 69, 69, 1)"
                ><text class="mr24" style="color: rgba(237, 69, 69, 1)">{{
                  line.code
                }}</text>
                {{ line.value }}</text
              >
            </view>
            <view
              class="box_list_answer_tips"
              v-if="item.selAnswer && item.answer !== item.selAnswer && status != '0'"
            >
              <image src="@/static/ic_wrong@2x.png" />
              <text>回答错误</text>
            </view>
            <view
              class="box_list_answer_tips"
              v-if="item.selAnswer && item.answer === item.selAnswer && status != '0'"
            >
              <image src="@/static/meeting/icon/ic_choose_sel@2x.png" />
              <text>回答正确</text>
            </view>
          </template>
        </view>
        <view class="empty"></view>
        <view
          v-if="status == '0'"
          class="box_list_answer_btn"
          @click="onSubmit()"
          >提交</view
        >
        <view v-if="status == '1'" class="box_list_answer_btn" @click="next()"
          >恭喜你答题成功,去申请</view
        >
        <view
          v-if="status == '2'"
          style="background-color: #db534c"
          class="box_list_answer_btn"
          @click="status = '0'"
          >答题失败,再来一次</view
        >
        <!--    多选    -->
        <!--                 <template v-else-if="list[i].type === 2">
                    <view class="box_list_answer_item" v-for="(item, index) in list[i].options" :key="index"
                        @click="selectMultiple(item.code)">
                        <image src="@/static/checkbox_wrong@2x.png"
@@ -60,272 +132,269 @@
                            v-else-if="multiple.toString().indexOf(item.code) !== -1">{{item.code}} {{item.value}}</text>
                    </view>
                </template> -->
            </view>
        </view>
    </view>
      </view>
    </view>
  </view>
</template>
<script>
    import { getProblemsVO, getSystemDictData } from '@/api'
    export default {
        name: 'answer',
import { getProblemsVO, getSystemDictData } from '@/api'
export default {
  name: 'answer',
        data() {
            return {
                list: [],
                bg: require("@/static/banner_dati.jpg"),
                title: '',
                content: ''
            }
        },
        onLoad() {
            this.getProblems()
            this.getInfo()
        },
  data() {
    return {
      list: [],
      bg: require("@/static/banner_dati.jpg"),
      title: '',
      content: '',
        methods: {
            getInfo() {
                // title
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'THEME'
                }).then(res => {
                    if (res.code === 200) {
                        this.title = res.data.code
                    }
                })
                // this.$u.api.getSystemDictData({
                getSystemDictData({
                    dictCode: 'SYSTEM',
                    label: 'DESCRIPTION'
                }).then(res => {
                    if (res.code === 200) {
                        this.content = res.data.code
                    }
                })
            },
            getProblems() {
                getProblemsVO({ useType: 1 })
                    .then(res => {
                        if (res.code === 200) {
                            res.data.forEach(item => {
                                // 判断
                                if (item.type === 0) {
                                    item.options = [{ code: '正确', value: '正确' },{ code: '错误', value: '错误' }]
                                }
                                // 单选/多选
                                if (item.type === 1 || item.type === 2) {
                                    item.options = JSON.parse(item.options)
                                }
                                item.status = '0'
                                item.selAnswer = null
                            })
                            console.log('options', res.data);
                            this.list = res.data
                        }
                        // res.param.problemsDOList.forEach(item => {
                        //     item.options = JSON.parse(item.options)
                        // })
                        // this.list = res.param.problemsDOList
                        // console.log(this.list)
                    })
            },
            // 单选选择中题目
            select(line, i) {
                this.list.forEach((item,index)=>{
                    if(index === i){
                        item.selAnswer = line.code
                    }
                })
                // this.problemIndex = index
            },
            sort(arr) {
                arr.sort(function(a, b) {
                    return a.localeCompare(b)
                })
            },
            // 多选
            selectMultiple(key) {
                if (!this.multiple) {
                    this.multiple = key
                    return
                }
                let arr = this.multiple.split(',')
                if (this.multiple.indexOf(key) !== -1) {
                    arr.forEach((item, index) => {
                        if (key === item) {
                            arr.splice(index, 1)
                        }
                    })
                    this.sort(arr)
                    this.multiple = arr.join(',')
                } else {
                    arr.push(key)
                    this.sort(arr)
                    this.multiple = arr.join(',')
                }
            },
            // 下一题
            next() {
                uni.navigateTo({
                    url: `/pages/userinfo/userinfo?userAnswerId=${1}`
                })
                return
                if (this.list[this.i].type === 0 || this.list[this.i].type === 1) {
                    if (!String(this.problemIndex)) return
                    if (this.list[this.i].answer === this.list[this.i].options[this.problemIndex].code) {
                        this.success = false
                        this.problemIndex = null
                        this.i += 1
                    } else {
                        this.success = true
                    }
                } else {
                    if (!this.multiple) return
                    if (this.list[this.i].answer === this.multiple) {
                        this.success = false
                        this.multiple = null
                        this.i += 1
                    } else {
                        this.success = true
                    }
                }
                if (this.i + 1 > this.list.length) {
                    let arr = []
                    this.list.forEach(item => {
                        arr.push({ id: item.id, answer: item.answer })
                    })
                    this.$u.api.finishAnswer({
                        content: JSON.stringify(arr),
                        openId: this.$store.state.openId,
                        useType: 1
                    }).then(res => {
                        if (res.code === 200) {
                            uni.navigateTo({
                                url: `/pages/userinfo/userinfo?userAnswerId=${res.data}`
                            })
                        }
                    })
                }
            }
        }
    }
      status: '0'
    }
  },
  onLoad() {
    this.getProblems()
    this.getInfo()
  },
  methods: {
    getInfo() {
      // title
      getSystemDictData({
        dictCode: 'SYSTEM',
        label: 'THEME'
      }).then(res => {
        if (res.code === 200) {
          this.title = res.data.code
        }
      })
      // this.$u.api.getSystemDictData({
      getSystemDictData({
        dictCode: 'SYSTEM',
        label: 'DESCRIPTION'
      }).then(res => {
        if (res.code === 200) {
          this.content = res.data.code
        }
      })
    },
    getProblems() {
      getProblemsVO({ useType: 1 })
        .then(res => {
          if (res.code === 200) {
            res.data.forEach(item => {
              // 判断
              if (item.type === 0) {
                item.options = [{ code: '正确', value: '正确' }, { code: '错误', value: '错误' }]
              }
              // 单选/多选
              if (item.type === 1 || item.type === 2) {
                item.options = JSON.parse(item.options)
              }
              item.status = '0'
              item.selAnswer = null
            })
            console.log('options', res.data)
            this.list = res.data
          }
          // res.param.problemsDOList.forEach(item => {
          //     item.options = JSON.parse(item.options)
          // })
          // this.list = res.param.problemsDOList
          // console.log(this.list)
        })
    },
    // 单选选择中题目
    select(line, i) {
      this.list.forEach((item, index) => {
        if (index === i) {
          item.selAnswer = line.code
        }
      })
      // this.problemIndex = index
    },
    sort(arr) {
      arr.sort(function (a, b) {
        return a.localeCompare(b)
      })
    },
    // 多选
    selectMultiple(key) {
      if (!this.multiple) {
        this.multiple = key
        return
      }
      let arr = this.multiple.split(',')
      if (this.multiple.indexOf(key) !== -1) {
        arr.forEach((item, index) => {
          if (key === item) {
            arr.splice(index, 1)
          }
        })
        this.sort(arr)
        this.multiple = arr.join(',')
      } else {
        arr.push(key)
        this.sort(arr)
        this.multiple = arr.join(',')
      }
    },
    // 下一题
    onSubmit() {
      const { list } = this
      // 验证所有题目都有选项
      let count = 0
      list.forEach(item => {
        if (!item.selAnswer) {
          count++
        }
      })
      if (count > 0) {
        return uni.showToast({
          title: '请先完成所有答题在提交',
          icon: 'none'
        })
      }
      // 判断对错
      let flag = 0
      list.forEach(item => {
        if (item.selAnswer !== item.answer) {
          flag++
        }
      })
      if (flag > 0) {
        this.status = '2'
        return uni.showToast({
          title: '答题失败,再来一次',
          icon: 'none'
        })
      } else {
        this.status = '1'
      }
    },
    next() {
      uni.navigateTo({
        url: `/pages/userinfo/userinfo`
      })
    }
  }
}
</script>
<style lang="scss" scoped>
    .box {
        width: 100%;
        height: 100vh;
        background: #025EEF;
        .box_bgimage {
            width: 100%;
            padding: 0 40rpx;
            box-sizing: border-box;
            height: 223rpx;
            display: flex;
            flex-direction: column;
            align-items: flex-start;
            justify-content: center;
            background-repeat: no-repeat;
            background-size: cover;
            .box_bgimage_a {
                font-size: 54rpx;
                font-weight: bold;
                color: #FFFFFF;
                text-shadow: 0rpx 4rpx 8rpx rgba(0, 0, 0, 0.19);
            }
            .box_bgimage_b {
                font-size: 26rpx;
                font-weight: 400;
                color: #FFFFFF;
                text-shadow: 0rpx 2rpx 4rpx rgba(0, 0, 0, 0.24);
                margin-top: 18rpx;
            }
        }
        .box_list {
            width: 100%;
            height: calc(100vh - 253rpx);
            padding: 0 30rpx 30rpx 30rpx;
            box-sizing: border-box;
            .box_list_answer {
                width: 100%;
                height: 100%;
                overflow-y: auto;
                background: #FFFFFF;
                border-radius: 16rpx;
                padding: 30rpx;
                box-sizing: border-box;
                position: relative;
                .box_list_answer_name {
                    font-size: 30rpx;
                    font-weight: 400;
                    color: #222222;
                    margin-bottom: 32rpx;
                }
                .box_list_answer_tips {
                    width: 100%;
                    padding: 22rpx 30rpx;
                    box-sizing: border-box;
                    background: #F7F7F7;
                    border-radius: 8rpx;
                    display: flex;
                    align-items: center;
                    margin-bottom: 24rpx;
                    image {
                        width: 28rpx;
                        height: 28rpx;
                    }
                    text {
                        font-size: 28rpx;
                        font-weight: 400;
                        color: #E42D2D;
                        margin-left: 16rpx;
                    }
                }
            }
            .list_item{
                margin-bottom: 24rpx;
            }
            .box_list_answer_item {
                width: 100%;
                display: flex;
                align-items: center;
                margin-bottom: 30rpx;
                image {
                    width: 36rpx;
                    height: 36rpx;
                    margin-right: 20rpx;
                }
                text {
                    font-size: 28rpx;
                    font-weight: 400;
                    color: #333333;
                }
            }
            .des {
                background: #CCCCCC !important;
                border: none !important;
            }
            .empty{
                height: 160rpx;
                width: 100%;
            }
            .box_list_answer_btn {
                position: fixed;
                bottom: 140rpx;
                left: 60rpx;
                width: 630rpx;
                height: 88rpx;
                line-height: 88rpx;
                text-align: center;
                background: #025EEF;
                box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(2, 94, 239, 0.3);
                border-radius: 44rpx;
                font-size: 30rpx;
                font-weight: 500;
                color: #FFFFFF;
            }
        }
    }
.box {
  width: 100%;
  height: 100vh;
  background: #025eef;
  .box_bgimage {
    width: 100%;
    padding: 0 40rpx;
    box-sizing: border-box;
    height: 223rpx;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    background-repeat: no-repeat;
    background-size: cover;
    .box_bgimage_a {
      font-size: 54rpx;
      font-weight: bold;
      color: #ffffff;
      text-shadow: 0rpx 4rpx 8rpx rgba(0, 0, 0, 0.19);
    }
    .box_bgimage_b {
      font-size: 26rpx;
      font-weight: 400;
      color: #ffffff;
      text-shadow: 0rpx 2rpx 4rpx rgba(0, 0, 0, 0.24);
      margin-top: 18rpx;
    }
  }
  .box_list {
    width: 100%;
    height: calc(100vh - 253rpx);
    padding: 0 30rpx 30rpx 30rpx;
    box-sizing: border-box;
    .box_list_answer {
      width: 100%;
      height: 100%;
      overflow-y: auto;
      background: #ffffff;
      border-radius: 16rpx;
      padding: 30rpx;
      box-sizing: border-box;
      position: relative;
      .box_list_answer_name {
        font-size: 30rpx;
        font-weight: 400;
        color: #222222;
        margin-bottom: 32rpx;
      }
      .box_list_answer_tips {
        width: 100%;
        padding: 22rpx 30rpx;
        box-sizing: border-box;
        background: #f7f7f7;
        border-radius: 8rpx;
        display: flex;
        align-items: center;
        margin-bottom: 24rpx;
        image {
          width: 28rpx;
          height: 28rpx;
        }
        text {
          font-size: 28rpx;
          font-weight: 400;
          color: #e42d2d;
          margin-left: 16rpx;
        }
      }
    }
    .list_item {
      margin-bottom: 24rpx;
    }
    .box_list_answer_item {
      width: 100%;
      display: flex;
      align-items: center;
      margin-bottom: 30rpx;
      image {
        width: 36rpx;
        height: 36rpx;
        margin-right: 20rpx;
      }
      text {
        font-size: 28rpx;
        font-weight: 400;
        color: #333333;
      }
    }
    .des {
      background: #cccccc !important;
      border: none !important;
    }
    .empty {
      height: 160rpx;
      width: 100%;
    }
    .box_list_answer_btn {
      position: fixed;
      bottom: 140rpx;
      left: 60rpx;
      width: 630rpx;
      height: 88rpx;
      line-height: 88rpx;
      text-align: center;
      background: #025eef;
      box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(2, 94, 239, 0.3);
      border-radius: 44rpx;
      font-size: 30rpx;
      font-weight: 500;
      color: #ffffff;
    }
  }
}
</style>
h5/pages/staff/index.vue
@@ -87,7 +87,7 @@
        loginOut() {
            uni.clearStorageSync()
            uni.redirectTo({
                url: '/pages/login/login'
                url: '/pages/staffLogin/login'
            })
        },
    }
h5/pages/staffLogin/login.vue