123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910 |
- <template>
- <div class="ai_body">
- <div class="ai_body_dialog" v-loading="loading" ref="chatDialog">
- <div
- class="dialog_content"
- v-for="(item, index) in array"
- :key="item.uid"
- >
- <div v-if="item.content">
- <div class="content content2" v-html="item.content"></div>
- <div class="role">
- <img src="../../../assets/icon/new/role2.png" />
- </div>
- </div>
- <div style="margin-top:10px ;">
- <div class="role">
- <img src="../../../assets/icon/new/role1.png" />
- </div>
- <div
- class="content"
- v-loading="item.loading"
- v-html="item.aiContent"
- ></div>
- </div>
- <!-- <div class="role">
- <img src="../../../assets/icon/new/role1.png"/>
- <img src="../../../assets/icon/new/role2.png"/>
- </div>
- <div class="content content2" :class="{ content2: item.role == 2 }">
- {{ item.text }}
- </div>
- <div class="role">
- <img src="../../../assets/icon/new/role1.png"/>
- </div>
- <div class="content">
- {{ 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="3"
- @keyup.enter="addContent"
- class="binfo_input binfo_textarea"
- cols
- v-model.trim="courseText"
- placeholder="在此输入您想了解的内容"
- ></textarea>
- <div
- class="c_pub_button_confirm"
- v-if="!loading && courseText"
- @click="addContent"
- >
- 发送
- </div>
- <div class="c_pub_button_confirm" @click="promptTit" v-else>发送</div>
- </div>
- </div>
- </template>
- <script>
- import checkImg from "../../../assets/icon/sourceFile/check.png";
- import checkIsImg from "../../../assets/icon/sourceFile/check_is.png";
- import { v4 as uuidv4 } from "uuid";
- import MarkdownIt from "markdown-it";
- export default {
- props: {
- unitJson: {
- type: Array
- },
- courseId:{
- type:String,
- default:""
- },
- },
- data() {
- return {
- array: [],
- courseText: "",
- checkImg: checkImg,
- checkIsImg: checkIsImg,
- userid: this.$route.query.userid,
- checkArray: [],
- course: [{ title: "任务1" }, { title: "任务2" }, { title: "任务3" }],
- partArray: [
- { name: "全部内容" },
- { name: "任务设计" },
- { name: "评价设计" }
- ],
- part: "全部内容",
- checkBool: false,
- loading: false,
- username: "",
- };
- },
- watch: {
- unitJson: {
- immediate: true,
- deep: true,
- handler(newValue, oldValue) {
- this.course = this.unitJson[0].chapterInfo[0].taskJson;
- }
- }
- },
- methods: {
- promptTit() {
- if (!this.loading && !this.courseText) {
- this.$message({
- message: "请输入您想要了解的内容",
- type: "warning"
- });
- } else {
- this.$message({
- message: "请回答完毕后再次发送",
- type: "warning"
- });
- }
- },
- addContent() {
- let message = this.courseText
- if (this.courseText) {
- let msg = `
- ATTENTION: Use '##' to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".`
- if(this.checkArray.length){
- let task = []
- if(this.part == "全部内容"){
- // msg += `--------
- // ## 示例
- // [
- // {
- // detail: "面向学生的任务描述",
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1", "score": 5},
- // {"value":"评价名字2","detail":"评价维度2", "score": 5},
- // {"value":"评价名字3","detail":"评价维度3", "score": 5}
- // ],
- // toolChoose: [
- // {
- // tool:"电子白板",
- // detail: "工具描述"
- // },
- // {
- // tool:"思维大图",
- // detail: "工具描述"
- // }
- // ]
- // },
- // {
- // detail: "面向学生的任务描述",
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1", "score": 5},
- // {"value":"评价名字2","detail":"评价维度2", "score": 5},
- // {"value":"评价名字3","detail":"评价维度3", "score": 5}
- // ],
- // toolChoose: []
- // },
- // {
- // detail: "面向学生的任务描述",
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1", "score": 5},
- // {"value":"评价名字2","detail":"评价维度2", "score": 5},
- // {"value":"评价名字3","detail":"评价维度3", "score": 5}
- // ],
- // toolChoose: [
- // {
- // tool:"文档",
- // detail: "工具描述"
- // }
- // ]
- // }
- // ]
-
- // --------
- // ## 输出格式与要求
- // [
- // {
- // detail: "面向学生的任务描述",
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1","score":5},
- // {"value":"评价名字2","detail":"评价维度2","score":5},
- // {"value":"评价名字3","detail":"评价维度3","score":5}
- // ],//至少3条评价标准,这个评价是教师用来评价学生表现的,需要包含评价维度,以及该维度中教师期待学生的表现,句式为学生应该能....
- // toolChoose: [
- // {
- // tool: "工具", //电子白板,文档,思维导图,表格,作业提交中选择其中一个工具
- // detail: "工具描述"
- // }
- // ] //可0~2个工具
- // }
- // ]
- // `
- for(var i = 0; i < this.checkArray.length; i++){
- let _index = this.checkArray[i]
- task.push(this.course[_index])
- }
- }else if(this.part == "任务设计"){
- // msg += `
- // --------
- // ## 示例
- // [
- // {
- // detail: "面向学生的任务描述",
- // toolChoose: [
- // {
- // tool:"电子白板",
- // detail: "工具描述"
- // },
- // {
- // tool:"思维大图",
- // detail: "工具描述"
- // }
- // ]
- // },
- // {
- // detail: "面向学生的任务描述",
- // toolChoose: []
- // },
- // {
- // detail: "面向学生的任务描述",
- // toolChoose: [
- // {
- // tool:"文档",
- // detail: "工具描述"
- // }
- // ]
- // }
- // ]
-
- // --------
- // ## 输出格式与要求
- // [
- // {
- // detail: "面向学生的任务描述",
- // toolChoose: [
- // {
- // tool: "工具", //电子白板,文档,思维导图,表格,作业提交中选择其中一个工具
- // detail: "工具描述"
- // }
- // ] //可0~2个工具
- // }
- // ]
- // `
- for(var i = 0; i < this.checkArray.length; i++){
- let _index = this.checkArray[i]
- task.push(this.course[_index])
- }
- }else if(this.part == "评价设计"){
- // msg += `
- // --------
- // ## 示例
- // [
- // {
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1", "score": 5},
- // {"value":"评价名字2","detail":"评价维度2", "score": 5},
- // {"value":"评价名字3","detail":"评价维度3", "score": 5}
- // ],
- // },
- // {
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1", "score": 5},
- // {"value":"评价名字2","detail":"评价维度2", "score": 5},
- // {"value":"评价名字3","detail":"评价维度3", "score": 5}
- // ],
- // },
- // {
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1", "score": 5},
- // {"value":"评价名字2","detail":"评价维度2", "score": 5},
- // {"value":"评价名字3","detail":"评价维度3", "score": 5}
- // ],
- // }
- // ]
-
- // --------
- // ## 输出格式与要求
- // [
- // {
- // elist:[
- // {"value":"评价名字1","detail":"评价维度1","score":5},
- // {"value":"评价名字2","detail":"评价维度2","score":5},
- // {"value":"评价名字3","detail":"评价维度3","score":5}
- // ],//至少3条评价标准,这个评价是教师用来评价学生表现的,需要包含评价维度,以及该维度中教师期待学生的表现,句式为学生应该能....
- // }
- // ]
- // `
- for(var i = 0; i < this.checkArray.length; i++){
- let _index = this.checkArray[i]
- task.push(this.course[_index].eList)
- }
- }
-
- msg += `
- --------
- ## 修改内容
- ${JSON.stringify(task)}
- `
- msg += `
- --------
- ## 要求
- ${this.courseText}
- `
- message = msg
- }
- let _uuid = uuidv4();
- this.array.push({
- role: "user",
- content: `${this.courseText}`,
- uid: _uuid,
- AI: "AI",
- aiContent: "",
- oldContent: "",
- isShowSynchronization: false,
- filename: "",
- index: this.array.length,
- is_mind_map: false,
- loading: true
- });
- this.$nextTick(() => {
- this.$refs.chatDialog.scrollTop = this.$refs.chatDialog.scrollHeight;
- });
- let params = JSON.stringify({
- // model: "gpt-3.5-turbo",
- // model: 'gpt-4o-2024-08-06',
- model: 'qwen-plus',
- temperature: 0,
- max_tokens: 4096,
- top_p: 1,
- frequency_penalty: 0,
- presence_penalty: 0,
- messages: [{ role: "user", content: message }],
- uid: _uuid,
- mind_map_question: ""
- });
- // let params = JSON.stringify({
- // message: {
- // anthropic_version: "bedrock-2023-05-31",
- // max_tokens: 4096,
- // temperature: 0,
- // top_p: 1,
- // messages: [{
- // "role": "user",
- // "content": message
- // }] ,
- // },
- // uid: _uuid,
- // model: "Claude 3 Sonnet" // Claude 3 Sonnet或者Claude 3 Haiku
- // });
- this.courseText = "";
- this.ajax.post("https://gpt4.cocorobo.cn/chat", params).then(res => {
- // this.ajax.post("https://claude3.cocorobo.cn/chat", params).then(res => {
- if (res.data.FunctionResponse.result == "发送成功") {
- } else {
- this.$message.warning(res.data.FunctionResponse.result);
- }
- })
- .catch(e => {
- console.log(e);
- });
- this.getAiContent(_uuid);
- }
- },
- getAiContent(_uid) {
- let _source = new EventSource(`https://gpt4.cocorobo.cn/stream/${_uid}`); //http://gpt4.cocorobo.cn:8011/stream/ https://gpt4.cocorobo.cn/stream/
- // let _source = new EventSource(`https://claude3.cocorobo.cn/streamChat/${_uid}`); //http://gpt4.cocorobo.cn:8011/stream/ https://gpt4.cocorobo.cn/stream/
- let _allText = "";
- let _mdText = "";
- const md = new MarkdownIt();
- _source.onmessage = _e => {
- if (_e.data.replace("'", "").replace("'", "") == "[DONE]") {
- //对话已经完成
- _mdText = _mdText.replace("_", "");
- _source.close();
- this.$nextTick(() => {
- this.$refs.chatDialog.scrollTop = this.$refs.chatDialog.scrollHeight;
- });
- this.array.find(i => i.uid == _uid).aiContent = _mdText;
- this.array.find(i => i.uid == _uid).isalltext = true;
- this.array.find(i => i.uid == _uid).isShowSynchronization = true;
- this.array.find(i => i.uid == _uid).loading = false;
- // 这里保存对话
- this.insertChat(_uid);
- return;
- } else {
- //对话还在继续
- let _text = "";
- _text = _e.data.replaceAll("'", "");
- if (_allText == "") {
- _allText = _text.replace(/^\n+/, ""); //去掉回复消息中偶尔开头就存在的连续换行符
- } else {
- _allText += _text;
- }
- _mdText = _allText + "_";
- _mdText = _mdText.replace(/\\n/g, "\n");
- _mdText = _mdText.replace(/\\/g, "");
- if (_allText.split("```").length % 2 == 0) _mdText += "\n```\n";
- //转化返回的回复流数据
- _mdText = md.render(_mdText);
- this.array.find(i => i.uid == _uid).aiContent = _mdText;
- this.array.find(i => i.uid == _uid).loading = false;
- this.$nextTick(() => {
- this.$refs.chatDialog.scrollTop = this.$refs.chatDialog.scrollHeight;
- });
- // 处理流数据
- }
- };
- },
- async getUserName() {
- let params = { uid: this.userid };
- try {
- let res = await this.ajax.get(this.$store.state.api + "getUser", params);
- this.username = res.data[0][0].name;
- } catch (err) {
- console.error(err);
- }
- },
- //保存消息
- async insertChat(_uid) {
- let _data = this.array.find(i => i.uid == _uid);
- if (!_data) return;
- if(!this.username){
- await this.getUserName()
- }
- let params = {
- userId: this.userid,
- userName: this.username,
- groupId: "602def61-005d-11ee-91d8-005056b8q12w",
- answer: _data.aiContent,
- problem: _data.content,
- file_id: _data.fileid ? _data.fileid : "",
- alltext: _data.aiContent,
- type: "chat",
- filename: _data.filename,
- session_name: `${this.courseId}-addCourse` //这是对话记录位置
- };
- this.ajax
- .post("https://gpt4.cocorobo.cn/insert_chat", params)
- .then(res => {});
- },
- // 获取对应的聊天记录
- getChatList() {
- return new Promise((resolve, reject) => {
- if (this.loading) return this.$message.info("请稍等...");
- this.array = [];
- this.loading = true;
- let params = {
- userid: this.userid,
- groupid: "602def61-005d-11ee-91d8-005056b8q12w",
- // session_name:``
- session_name: `${this.courseId}-addCourse`
- };
- this.ajax
- .post("https://gpt4.cocorobo.cn/get_agent_park_chat", params)
- .then(res => {
- let _data = JSON.parse(res.data.FunctionResponse);
- if (_data.length > 0) {
- let _chatList = [];
- for (let i = 0; i < _data.length; i++) {
- _chatList.push({
- loading: false,
- role: "user",
- content: _data[i].problem,
- uid: _data[i].id,
- AI: "AI",
- aiContent: _data[i].answer,
- oldContent: _data[i].answer,
- isShowSynchronization: false,
- filename: _data[i].filename,
- index: i,
- is_mind_map: false,
- fileid: _data[i].fileid
- });
- }
- this.array = _chatList;
- this.loading = false;
- } else {
- //没有对话记录
- this.loading = false;
- }
- resolve();
- })
- .catch(err => {
- console.log(err);
- this.$message.error("获取对话记录失败");
- this.loading = false;
- resolve();
- });
- });
- },
- 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;
- }
- },
- mounted() {
- this.getChatList().then(_ => {
- this.$nextTick(() => {
- console.log(this.$refs.chatDialog.scrollHeight)
- this.$refs.chatDialog.scrollTop = this.$refs.chatDialog.scrollHeight;
- });
- });
- }
- };
- </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, 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; */
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: end;
- }
- .c_pub_button_confirm {
- /* position: absolute;
- bottom: 13px;
- right: 13px; */
- margin-top: 10px;
- width: 80px;
- display: flex;
- justify-content: center;
- }
- .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;
- flex-direction: column;
- }
- .dialog_content > div {
- display: flex;
- align-items: flex-start;
- }
- .dialog_content + .dialog_content {
- margin: 15px 0;
- }
- .dialog_content > div .right {
- flex-direction: row-reverse;
- }
- .dialog_content > div .right .role {
- margin-right: 0;
- margin-left: 10px;
- }
- .dialog_content > div .role {
- min-width: 30px;
- width: 30px;
- height: 30px;
- margin-right: 10px;
- border-radius: 50%;
- }
- .dialog_content > div .role > img {
- height: 100%;
- width: 100%;
- }
- .dialog_content > div .content {
- padding: 10px 5px;
- border-radius: 5px;
- width: 100%;
- word-break: break-word;
- box-sizing: border-box;
- /* white-space: pre-line; */
- max-width: 100%;
- background: #f7f7f7;
- overflow: hidden;
- margin: 0 10px;
- }
- .dialog_content > div .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>
|