123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502 |
- <template>
- <div class="ai_body" v-loading="loading">
- <div class="ai_body_dialog">
- <div class="dialog_content" :class="{ right: item.role == 2 }" v-for="(item, index) in array" :key="index">
- <div class="role">
- <img src="../../../assets/icon/new/role1.png" v-if="item.role == 1">
- <img src="../../../assets/icon/new/role2.png" v-else>
- </div>
- <div class="content" :class="{ content2: item.role == 2 }">{{ item.text }}</div>
- </div>
- </div>
- <div class="ai_body_select">
- <div class="checkBox" v-if="checkBool">
- <div class="task">
- <div class="title">选择需要优化的任务:</div>
- <div class="content">
- <div class="span" @click="addAllTask()">
- <div class="check">
- <img :src="checkImg" alt="" v-if="checkArray.length !== course.length">
- <img :src="checkIsImg" alt="" v-else>
- </div>
- <span>全选</span>
- </div>
- <div class="span" v-for="(item, index) in course" :key="index" @click="addTask(index)">
- <div class="check">
- <img :src="checkImg" alt="" v-if="checkArray.indexOf(index) === -1">
- <img :src="checkIsImg" alt="" v-else>
- </div>
- <span>任务{{ index + 1 }}</span>
- </div>
- </div>
- </div>
- <div class="part">
- <div class="title">选择优化的部分:</div>
- <div class="content">
- <div class="span" v-for="(item, index) in partArray" :key="index"
- :class="{ active: part == item.name }" @click="checkPart(item.name)">
- {{ item.name }}
- </div>
- </div>
- </div>
- </div>
- <span class="check" :class="{ isCheck: checkBool }" v-if="!checkArray.length && !part"
- @click="checkBool = !checkBool">选择优化内容</span>
- <span class="check" :class="{ isCheck: checkBool }" @click="checkBool = !checkBool" v-else>
- <el-tooltip :content="taskName" placement="top" effect="dark">
- <!-- content to trigger tooltip here -->
- <span>{{ taskName }}</span>
- </el-tooltip>
- </span>
- </div>
- <div class="ai_body_input">
- <textarea rows="5" class="binfo_input binfo_textarea" cols v-model="courseText" placeholder="在此输入您想了解的内容"
- style="padding-right: 86px;"></textarea>
- <div class="c_pub_button_confirm" @click="addContent">发送</div>
- </div>
- </div>
- </template>
- <script>
- import checkImg from '../../../assets/icon/sourceFile/check.png'
- import checkIsImg from '../../../assets/icon/sourceFile/check_is.png'
- export default {
- props: {
- unitJson: {
- type: Array,
- },
- },
- data() {
- return {
- array: [
- { text: '你好,有说么可以帮你', role: 1 },
- ],
- courseText: '',
- checkImg: checkImg,
- checkIsImg: checkIsImg,
- checkArray: [],
- course: [
- { title: '任务1' },
- { title: '任务2' },
- { title: '任务3' }
- ],
- partArray: [{ name: '全部内容' }, { name: '任务设计' }, { name: '评价设计' }],
- part: '',
- checkBool: false,
- loading: false
- }
- },
- watch: {
- unitJson: {
- immediate: true,
- deep: true,
- handler(newValue, oldValue) {
- this.course = this.unitJson[0].chapterInfo[0].taskJson
- }
- },
- },
- methods: {
- addContent() {
- if (this.courseText) {
- this.loading = true
- this.array.push({ text: this.courseText, role: 2 })
- setTimeout(() => {
- this.loading = false
- if (this.courseText == '请告诉我任务四该具体如何实施?') {
- this.array.push({
- text: `任务四:设计保温杯的初步方案
- 教学目标:
- •学会应用热传递原理设计保温杯。
- •掌握基本的设计思维和创新方法。
- •理解材料选择对保温效果的影响。
- 教学过程:
- 1.复习:回顾热传递的基本原理和不同材料的导热性能。
- 2.需求分析:讨论保温杯的使用场景和功能需求,如保温时间、容量、便携性等。
- 3.设计指导:教师介绍设计原则和考虑因素,如材料的导热性能、结构设计、成本和环保等。
- 4.创意发散:学生团队进行头脑风暴,提出多种设计方案,并选出最可行的方案。
- 5.方案绘制:学生绘制保温杯的设计图,包括尺寸、形状、结构和所用材料。
- 师生研讨:
- •分享各组的设计方案,讨论设计的创新点和实用性。
- •教师提供专业意见和建议,帮助学生完善设计方案。
- •讨论如何将设计方案转化为实际操作的步骤。
- 拓展:
- •学生研究市场上不同类型保温杯的设计和功能。
- •分析保温杯的改进空间和潜在的创新点。
- 学生任务单:
- •列出保温杯的功能需求和设计目标。
- •绘制保温杯的设计方案图,并标注所用材料和尺寸。
- •简述所选材料的导热性能和对保温效果的影响。
- 知识点练习:
- 1.为什么保温杯通常使用不锈钢或陶瓷作为内胆材料?
- 2.描述一个创新的保温杯设计方案,并解释其工作原理。
- 3.讨论在设计保温杯时需要考虑的环境因素。
- 答案:
- 1.保温杯通常使用不锈钢或陶瓷作为内胆材料,因为这些材料是热的不良导体,可以有效减缓热量的散失。
- 2.一个创新的保温杯设计方案可能是采用多层结构,内层为不锈钢,中间层为真空隔热层,外层为塑料保护层。这种设计可以有效隔绝外界温度对热水温度的影响。
- 在设计保温杯时,需要考虑的环境因素包括材料的可回收性、生产过程中的能源消耗和废弃物处理等。`, role: 1
- })
- }else if(this.courseText == '请你重新设计该任务,我没有感温粉末。'){
- this.array.push({text:`任务一:探究热的传递方式
- 任务名: 观察热在水中的传递
- 任务描述:
- 同学们,今天我们将通过一个有趣的实验来探究热是如何在水中传递的。你将需要加热水并观察温度是如何分布的。请准备好实验器材,并按照安全指南进行操作。在实验过程中,请注意观察热水和冷水之间的相互作用,以及水温是如何随时间和空间变化的。你将需要记录你的观察结果,并思考热是如何从一个地方传递到另一个地方的。
- 工具名字: 电子白板
- 工具指引:
- 使用电子白板工具来绘制你的实验设置和观察到的热传递过程。你可以使用电子白板的绘图功能来创建一个温度分布图,展示热水和冷水相遇时的情况。同时,你可以用它来记录实验步骤和关键观察点,以便于你和同学们进行讨论和分享。
- 评价维度:
- •实验观察和记录:学生应该能够准确地记录实验过程中的观察结果,包括水温变化和热传递的现象。
- •数据分析和解释:学生应该能够分析实验数据,解释热在水中的传递方式,并能够用自己的话描述热对流的原理。
- •实验报告撰写:学生应该能够撰写一份清晰的实验报告,包括实验目的、方法、结果和结论,以及对实验过程的反思。`,role: 1})
- this.$emit('setUnitJson')
- } else {
- this.array.push({ text: '请输入正确的文案', role: 1 })
- }
- // this.array.push({text: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', role: 1})
- this.courseText = ''
- }, 5000);
- }
- },
- addTask(index) {
- if (this.checkArray.indexOf(index) !== -1) {
- this.checkArray.splice(this.checkArray.indexOf(index), 1)
- } else {
- this.checkArray.push(index)
- }
- console.log(index);
- },
- addAllTask() {
- if (this.checkArray.length === this.course.length) {
- this.checkArray = []
- } else {
- this.checkArray = []
- this.course.forEach((item, index) => {
- this.checkArray.push(index)
- })
- }
- },
- checkPart(name) {
- this.part = name
- }
- },
- computed: {
- courseTextLength() {
- return this.courseText.length
- },
- taskName() {
- let task = ''
- if (this.checkArray.length) {
- task = '任务'
- this.checkArray = this.checkArray.sort((a, b) => a - b)
- let a = JSON.parse(JSON.stringify(this.checkArray))
- for (let index = 0; index < a.length; index++) {
- a[index]++;
- }
- task += a.join('/')
- }
- return task + ' ' + this.part
- }
- },
- }
- </script>
- <style scoped>
- .ai_body {
- height: 100%;
- width: calc(100% - 20px);
- margin: 0 auto;
- }
- .binfo_input {
- width: 100%;
- margin: 0;
- padding: 12px 14px;
- display: block;
- min-width: 0;
- outline: none;
- box-sizing: border-box;
- background: none;
- border: none;
- border-radius: 4px;
- background: #fff;
- font-size: 14px;
- resize: none;
- font-family: "Microsoft YaHei";
- min-height: 48px;
- /* border: 1px solid #3682fc00; */
- border: 1.5px solid #cad1dc;
- }
- .binfo_textarea {
- border: 1.5px solid #cad1dc;
- font-size: 14px;
- resize: none;
- /* background: #f6f6f6; */
- font-family: "Microsoft YaHei";
- }
- .binfo_textarea::-webkit-scrollbar {
- /*滚动条整体样式*/
- width: 6px;
- /*高宽分别对应横竖滚动条的尺寸*/
- height: 6px;
- }
- /*定义滚动条轨道 内阴影+圆角*/
- .binfo_textarea::-webkit-scrollbar-track {
- border-radius: 10px;
- background-color: rgba(0, 0, 0, 0.1);
- }
- /*定义滑块 内阴影+圆角*/
- .binfo_textarea::-webkit-scrollbar-thumb {
- border-radius: 10px;
- -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
- background-color: rgba(0, 0, 0, 0.1);
- }
- .binfo_input:focus-visible {
- border: 1.5px solid #3681fc !important;
- }
- .ai_body_input {
- position: relative;
- }
- .c_pub_button_confirm {
- position: absolute;
- bottom: 13px;
- right: 13px;
- }
- .ai_body_dialog {
- padding: 10px 0;
- box-sizing: border-box;
- height: calc(100% - 180px);
- overflow: auto;
- margin-bottom: 10px;
- }
- .dialog_content {
- width: 100%;
- display: flex;
- }
- .dialog_content+.dialog_content {
- margin-top: 20px;
- }
- .dialog_content.right {
- flex-direction: row-reverse;
- }
- .dialog_content.right .role {
- margin-right: 0;
- margin-left: 10px;
- }
- .dialog_content .role {
- min-width: 30px;
- width: 30px;
- height: 30px;
- margin-right: 10px;
- border-radius: 50%;
- }
- .dialog_content .role>img {
- height: 100%;
- width: 100%;
- }
- .dialog_content .content {
- padding: 5px;
- border-radius: 5px;
- width: 100%;
- word-break: break-word;
- box-sizing: border-box;
- white-space: pre-line;
- max-width: 100%;
- overflow: hidden;
- }
- .dialog_content .content2 {
- background: #3681fc;
- color: #fff;
- }
- .ai_body_select {
- position: relative;
- }
- .ai_body_select>.check {
- background: #e7e7e7;
- display: flex;
- width: fit-content;
- padding: 0 10px;
- height: 30px;
- border-radius: 21px;
- font-size: 14px;
- align-items: center;
- justify-content: center;
- color: #0061FF;
- font-weight: 700;
- margin: 10px 0;
- cursor: pointer;
- }
- .ai_body_select>.check::before {
- content: '';
- width: 15px;
- height: 15px;
- display: block;
- background-image: url('../../../assets/icon/course/aiPart.png');
- background-size: 100% 100%;
- margin-right: 5px;
- }
- .ai_body_select>.check::after {
- content: '';
- width: 15px;
- height: 15px;
- display: block;
- background-image: url('../../../assets/icon/course/aiPart_arrow.png');
- background-size: 100% 100%;
- margin-right: 5px;
- }
- .ai_body_select>.isCheck {
- background: #0061FF;
- display: flex;
- width: fit-content;
- padding: 0 10px;
- height: 30px;
- border-radius: 21px;
- font-size: 14px;
- align-items: center;
- justify-content: center;
- color: #fff;
- font-weight: 700;
- margin: 10px 0;
- cursor: pointer;
- max-width: 100%;
- box-sizing: border-box;
- }
- .ai_body_select>.isCheck>span {
- width: calc(100% - 40px);
- display: block;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- }
- .ai_body_select>.isCheck::before {
- content: '';
- width: 15px;
- height: 15px;
- display: block;
- background-image: url('../../../assets/icon/course/aiPart_active.png');
- background-size: 100% 100%;
- margin-right: 5px;
- }
- .ai_body_select>.isCheck::after {
- content: '';
- width: 15px;
- height: 15px;
- display: block;
- background-image: url('../../../assets/icon/course/aiPart_arrow_active.png');
- background-size: 100% 100%;
- margin-right: 5px;
- }
- .ai_body_select>.checkBox {
- position: absolute;
- bottom: 40px;
- border: 1px solid #E0EAFB;
- width: 100%;
- height: 300px;
- background: #fff;
- border-radius: 5px;
- padding: 10px;
- box-sizing: border-box;
- }
- .ai_body_select>.checkBox>.task>.title,
- .ai_body_select>.checkBox>.part>.title {
- font-size: 14px;
- font-weight: 700;
- margin-bottom: 5px;
- }
- .ai_body_select>.checkBox>.task {
- height: calc(100% - 60px);
- }
- .ai_body_select>.checkBox>.part {}
- .ai_body_select>.checkBox>.task>.content {
- height: calc(100% - 40px);
- overflow: auto;
- }
- .ai_body_select>.checkBox>.task>.content>.span+.span {
- margin-top: 5px;
- }
- .ai_body_select>.checkBox>.task>.content>.span {
- display: flex;
- align-items: center;
- font-size: 14px;
- cursor: pointer;
- }
- .ai_body_select>.checkBox>.task>.content>.span>.check {
- width: 13px;
- height: 13px;
- display: flex;
- align-items: center;
- margin-right: 5px;
- }
- .ai_body_select>.checkBox>.task>.content>.span>.check>img {
- width: 100%;
- height: 100%;
- }
- .ai_body_select>.checkBox>.part>.content {
- display: flex;
- align-items: center;
- font-size: 14px;
- justify-content: space-between;
- }
- .ai_body_select>.checkBox>.part>.content>.span {
- padding: 3px 6px;
- border: 1px solid #E0EAFB;
- border-radius: 40px;
- cursor: pointer;
- }
- .ai_body_select>.checkBox>.part>.content>.span.active {
- color: #0061ff;
- border-color: #0061ff;
- }
- </style>
|