src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java
@@ -2,9 +2,13 @@ import cc.mrbird.febs.ai.entity.AiProductPoint; import cc.mrbird.febs.ai.entity.AiProductQuestion; import cc.mrbird.febs.ai.entity.AiProductQuestionItem; import cc.mrbird.febs.ai.service.AiProductQuestionItemService; import cc.mrbird.febs.ai.service.AiProductQuestionService; import cc.mrbird.febs.common.entity.FebsConstant; import cc.mrbird.febs.common.utils.FebsUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; @@ -12,6 +16,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; /** * @author Administrator @@ -23,6 +29,7 @@ private final AiProductQuestionService aiProductQuestionService; private final AiProductQuestionItemService aiProductQuestionItemService; @GetMapping("list") @RequiresPermissions("productQuestionList:view") @@ -42,6 +49,12 @@ @RequiresPermissions("productQuestionList:info") public String artInfo(@PathVariable String id, Model model) { AiProductQuestion entity = aiProductQuestionService.getById(id); LambdaQueryWrapper<AiProductQuestionItem> query = Wrappers.lambdaQuery(AiProductQuestionItem.class); query.eq(AiProductQuestionItem::getProductQuestionId, id); query.orderByAsc(AiProductQuestionItem::getCreatedTime); List<AiProductQuestionItem> aiProductQuestionItems = aiProductQuestionItemService.getListByQuery(query); entity.setAiProductQuestionItems(aiProductQuestionItems); model.addAttribute("aiProductQuestion", entity); return FebsUtil.view("modules/ai/productQuestion/info"); } src/main/java/cc/mrbird/febs/ai/entity/AiProductQuestion.java
@@ -1,8 +1,11 @@ package cc.mrbird.febs.ai.entity; import cc.mrbird.febs.common.entity.AiBaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.List; /** * AI产品题目 @@ -38,4 +41,7 @@ * 状态 0-禁用 1-启用 2-已删除 */ private Integer state; @TableField(exist = false) private List<AiProductQuestionItem> aiProductQuestionItems; } src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionItemService.java
@@ -1,7 +1,10 @@ package cc.mrbird.febs.ai.service; import cc.mrbird.febs.ai.entity.AiProductQuestionItem; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * AI产品题目子表 Service接口 @@ -11,4 +14,8 @@ */ public interface AiProductQuestionItemService extends IService<AiProductQuestionItem> { List<AiProductQuestionItem> getListByQuery(LambdaQueryWrapper<AiProductQuestionItem> query); void deleteByQuestionId(String id); } src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionItemServiceImpl.java
@@ -3,10 +3,17 @@ import cc.mrbird.febs.ai.entity.AiProductQuestionItem; import cc.mrbird.febs.ai.mapper.AiProductQuestionItemMapper; import cc.mrbird.febs.ai.service.AiProductQuestionItemService; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * AI产品题目子表 Service实现类 @@ -19,4 +26,23 @@ @Transactional public class AiProductQuestionItemServiceImpl extends ServiceImpl<AiProductQuestionItemMapper, AiProductQuestionItem> implements AiProductQuestionItemService { private final AiProductQuestionItemMapper aiProductQuestionItemMapper; @Override public List<AiProductQuestionItem> getListByQuery(LambdaQueryWrapper<AiProductQuestionItem> query) { return aiProductQuestionItemMapper.selectList( query); } @Override public void deleteByQuestionId(String id) { LambdaQueryWrapper<AiProductQuestionItem> query = Wrappers.lambdaQuery(AiProductQuestionItem.class); query.eq(AiProductQuestionItem::getProductQuestionId, id); List<AiProductQuestionItem> listByQuery = this.getListByQuery(query); if(CollUtil.isNotEmpty(listByQuery)){ Set<String> collect = listByQuery.stream().map(AiProductQuestionItem::getId).collect(Collectors.toSet()); this.removeByIds(collect); } } } src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
@@ -3,11 +3,14 @@ import cc.mrbird.febs.ai.entity.AiMemberRole; import cc.mrbird.febs.ai.entity.AiProductPoint; import cc.mrbird.febs.ai.entity.AiProductQuestion; import cc.mrbird.febs.ai.entity.AiProductQuestionItem; import cc.mrbird.febs.ai.mapper.AiProductQuestionMapper; import cc.mrbird.febs.ai.service.AiProductQuestionItemService; import cc.mrbird.febs.ai.service.AiProductQuestionService; import cc.mrbird.febs.ai.util.UUID; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -34,6 +37,7 @@ public class AiProductQuestionServiceImpl extends ServiceImpl<AiProductQuestionMapper, AiProductQuestion> implements AiProductQuestionService { private final AiProductQuestionMapper aiProductQuestionMapper; private final AiProductQuestionItemService aiProductQuestionItemService; @Override public AiProductQuestion getById(String id) { @@ -45,6 +49,7 @@ public IPage<AiProductQuestion> listInPage(AiProductQuestion dto, QueryRequest request) { Page<AiProductQuestion> page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper<AiProductQuestion> query = Wrappers.lambdaQuery(AiProductQuestion.class); query.ne(AiProductQuestion::getState, 2); Page<AiProductQuestion> pages = aiProductQuestionMapper.selectPage(page, query); return pages; } @@ -65,6 +70,16 @@ @Override public FebsResponse add(AiProductQuestion dto) { List<AiProductQuestionItem> aiProductQuestionItems = dto.getAiProductQuestionItems(); if(CollUtil.isEmpty(aiProductQuestionItems)){ return new FebsResponse().fail().message("请添加答案选项"); } //stream流操作aiProductQuestionItems,返回aiProductQuestionItems是否存在中correctAnswer为1的元素 boolean hasCorrectAnswer = aiProductQuestionItems.stream().anyMatch(item -> item != null && item.getCorrectAnswer() != null && item.getCorrectAnswer() == 1); if (!hasCorrectAnswer) { return new FebsResponse().fail().message("请添加一项为正确的答案"); } AiProductQuestion entity = new AiProductQuestion(); entity.setId(UUID.getSimpleUUIDString()); entity.setCompanyId(dto.getCompanyId()); @@ -73,13 +88,34 @@ entity.setDifficulty(dto.getDifficulty()); entity.setCreatedTime(new Date()); this.save(entity); for (AiProductQuestionItem item : dto.getAiProductQuestionItems()){ item.setId(UUID.getSimpleUUIDString()); item.setProductQuestionId(entity.getId()); item.setTitle(entity.getTitle()); item.setCreatedTime(new Date()); aiProductQuestionItemService.getBaseMapper().insert(item); } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse update(AiProductQuestion dto) { String id = dto.getId(); AiProductQuestion entity = this.getById(id); List<AiProductQuestionItem> aiProductQuestionItems = dto.getAiProductQuestionItems(); if(CollUtil.isEmpty(aiProductQuestionItems)){ return new FebsResponse().fail().message("请添加答案选项"); } //stream流操作aiProductQuestionItems,返回aiProductQuestionItems是否存在中correctAnswer为1的元素 boolean hasCorrectAnswer = aiProductQuestionItems.stream().anyMatch(item -> item != null && item.getCorrectAnswer() != null && item.getCorrectAnswer() == 1); if (!hasCorrectAnswer) { return new FebsResponse().fail().message("请添加一项为正确的答案"); } if (ObjectUtil.isNotNull( entity)){ this.update(null, Wrappers.lambdaUpdate(AiProductQuestion.class) @@ -90,6 +126,16 @@ .set(AiProductQuestion::getUpdatedTime, new Date()) .eq(AiProductQuestion::getId, id) ); aiProductQuestionItemService.deleteByQuestionId(id); for (AiProductQuestionItem item : dto.getAiProductQuestionItems()){ item.setId(UUID.getSimpleUUIDString()); item.setProductQuestionId(entity.getId()); item.setTitle(entity.getTitle()); item.setCreatedTime(new Date()); aiProductQuestionItemService.getBaseMapper().insert(item); } } return new FebsResponse().success().message("操作成功"); } src/main/resources/mapper/modules/AiProductQuestionItemMapper.xml
New file @@ -0,0 +1,4 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cc.mrbird.febs.ai.mapper.AiProductQuestionItemMapper"> </mapper> src/main/resources/templates/febs/views/modules/ai/productQuestion/add.html
@@ -19,45 +19,44 @@ </div> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">标题:</label> <label class="layui-form-label febs-form-item-require">题目:</label> <div class="layui-input-block"> <input type="text" name="title" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> </div> </div> </div> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">答案:</label> <div class="layui-input-block"> <input type="text" name="answer" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> </div> </div> </div> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">正确答案:</label> <label class="layui-form-label febs-form-item-require">难度:</label> <div class="layui-input-block"> <input type="radio" name="correctAnswer" value="1" title="是" > <input type="radio" name="correctAnswer" value="2" title="否" checked=""> <input type="radio" name="difficulty" value="1" title="简单" checked=""> <input type="radio" name="difficulty" value="2" title="中等" > <input type="radio" name="difficulty" value="3" title="困难" > </div> </div> </div> <div class="layui-form-item multi-sku-table"> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">答案:</label> </div> <div class="layui-col-lg1"> <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test3"> 添加 </button> </div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">详情:</label> <div class="layui-input-block"> <div style="border: 1px solid #ccc;"> <div id="product-point-toolbar-container" class="toolbar"></div> <div id="product-point-text-container" class="text" style="height: 450px;"></div> <div class="layui-form-item"> <div class="layui-input-block"> <table id="multiSku" lay-filter="multiSku"></table> </div> </div> </div> </div> </div> @@ -71,6 +70,11 @@ </div> </div> </div> <script type="text/html" id="toolbar"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delSku">删除</button> </div> </script> <!-- 表格操作栏 end --> <script data-th-inline="javascript"> @@ -121,18 +125,117 @@ }); }) form.on('select(point-type-select)', function(data){ $('.tc-set').each(function() { if (data.value == 2) { $(this).show(); } else { $(this).hide(); var tableSkuData=[]; var tableIns = table.render({ elem: '#multiSku' ,limit:999 ,toolbar:"#toolbar" ,defaultToolbar:[] ,cols: [[ //表头 {type: 'checkbox'} ,{field: 'index', title: '序号', width:70} ,{field: 'answer', title: '答案', edit:'text', width:500} ,{field: 'correctAnswer', title: '正确答案', templet: function(d){ var options = ''; if(d.correctAnswer == 1) { options = '<option value="0">否</option><option value="1" selected>是</option>'; } else { options = '<option value="0" selected>否</option><option value="1">是</option>'; } return '<select lay-ignore name="correctAnswer" lay-filter="correctAnswerSelect">' + options + '</select>'; }, width:200} ,{field: 'answerAnalysis', title: '答案解析', edit:'text', width:500} ]] ,data: [] }); // 监听下拉框变化 $(document).on('change', 'select[name="correctAnswer"]', function() { var selectIndex = $(this).closest('tr').index(); // 获取行索引 var newValue = $(this).val(); // 获取新值 // 更新表格数据 var hasData = table.cache['multiSku']; if (hasData && hasData[selectIndex]) { hasData[selectIndex].correctAnswer = parseInt(newValue); // 更新全局数据 for (let i = 0; i < tableSkuData.length; i++) { if (tableSkuData[i].index == hasData[selectIndex].index) { tableSkuData[i].correctAnswer = parseInt(newValue); break; } } }) } }); table.on('toolbar(multiSku)', function(obj){ var data = obj.data; var hasData = table.cache['multiSku']; var checkData = table.checkStatus('multiSku').data; if (checkData.length <= 0) { febs.alert.warn('请选择删除数据'); return; } if(obj.event === 'delSku'){ for (let i = 0; i < checkData.length; i++) { var delData = checkData[i]; for (let j = 0; j < hasData.length; j++) { if (hasData[j].index == delData.index) { hasData.splice(j, 1); break; } } } for (let i = 0; i < hasData.length; i++) { hasData[i].index = i + 1; } tableSkuData=hasData; reloadTable(hasData); } }); function addTableDate(data) { var hasData = table.cache['multiSku']; data.index = hasData.length + 1; tableSkuData.push(data); reloadTable(tableSkuData); return data.index; } function reloadTable(data) { table.reload('multiSku', { data : data }); } table.on('edit(multiSku)', function(obj){ var value = obj.value //得到修改后的值 ,data = obj.data //得到所在行所有键值 ,field = obj.field; //得到字段 for (let i = 0; i < tableSkuData.length; i++) { if (tableSkuData[i].index == data.index) { tableSkuData[i] = data; } } }); $('#test3').on('click', function (){ var data = {}; addTableDate(data); }); form.on('submit(productQuestion-add-form-submit)', function (data) { data.field.description = editor.txt.html(); data.field.productCategoryId = category.getValue('valueStr'); data.field.aiProductQuestionItems = tableSkuData; $.ajax({ 'url':ctx + 'admin/productQuestion/add', 'type':'post', src/main/resources/templates/febs/views/modules/ai/productQuestion/info.html
@@ -1,8 +1,8 @@ <div class="layui-fluid layui-anim febs-anim" id="febs-productPoint-Info" lay-title="编辑"> <div class="layui-fluid layui-anim febs-anim" id="febs-productQuestion-Info" lay-title="编辑"> <div class="layui-row febs-container"> <div class="layui-col-md12"> <div class="layui-fluid" id="productPoint-info"> <form class="layui-form" action="" lay-filter="productPoint-info-form"> <div class="layui-fluid" id="productQuestion-info"> <form class="layui-form" action="" lay-filter="productQuestion-info-form"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <ul class="layui-tab-title"> <li class="layui-this">基础信息</li> @@ -14,35 +14,15 @@ <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">类型:</label> <label class="layui-form-label febs-form-item-require">分类:</label> <div class="layui-input-block"> <select name="isNormal" class="point-type" lay-filter="point-type-select"> <option value="1">普通内容</option> <option value="2">视频号内容</option> </select> </div> </div> </div> <blockquote class="layui-elem-quote blue-border febs-hide tc-set">视频号信息</blockquote> <div class="layui-form-item febs-hide tc-set"> <div class="layui-col-lg6"> <label class="layui-form-label">视频号 id:</label> <div class="layui-input-block"> <input type="text" name="finderUserName" placeholder="请输入" autocomplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux">视频号 id,以“sph”开头的id,可在视频号助手获取。</div> </div> </div> <div class="layui-col-lg6"> <label class="layui-form-label">视频 feedId:</label> <div class="layui-input-block"> <input type="text" name="feedId" placeholder="请输入" autocomplete="off" class="layui-input"> <div id="product-category"></div> </div> </div> </div> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">标题:</label> <label class="layui-form-label febs-form-item-require">题目:</label> <div class="layui-input-block"> <input type="text" name="title" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> @@ -50,12 +30,33 @@ </div> </div> <div class="layui-form-item"> <label class="layui-form-label febs-form-item-require">详情:</label> <div class="layui-input-block"> <div style="border: 1px solid #ccc;"> <div id="product-point-toolbar-container" class="toolbar"></div> <div id="product-point-text-container" class="text" style="height: 450px;"></div> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">难度:</label> <div class="layui-input-block"> <input type="radio" name="difficulty" value="1" title="简单" checked=""> <input type="radio" name="difficulty" value="2" title="中等" > <input type="radio" name="difficulty" value="3" title="困难" > </div> </div> </div> <div class="layui-form-item multi-sku-table"> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">答案:</label> </div> <div class="layui-col-lg1"> <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test3"> 添加 </button> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <table id="multiSku" lay-filter="multiSku"></table> </div> </div> </div> @@ -64,7 +65,7 @@ </div> </div> <div class="layui-form-item febs-hide"> <button class="layui-btn" lay-submit="" lay-filter="productPoint-info-form-submit" id="submit">保存</button> <button class="layui-btn" lay-submit="" lay-filter="productQuestion-info-form-submit" id="submit">保存</button> </div> </form> </div> @@ -86,6 +87,12 @@ margin: 0 5px !important; } </style> <script type="text/html" id="toolbar"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delSku">删除</button> </div> </script> <!-- 表格操作栏 end --> <script data-th-inline="javascript"> layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () { @@ -94,73 +101,182 @@ layer = layui.layer, table = layui.table, form = layui.form, $view = $('#productPoint-info'), aiProductPoint = [[${aiProductPoint}]], $view = $('#productQuestion-info'), aiProductQuestion = [[${aiProductQuestion}]], upload = layui.upload, validate = layui.validate; form.render(); const E = window.wangEditor; const editor = new E('#product-point-toolbar-container', '#product-point-text-container'); // 传入两个元素 editor.config.showLinkImg = false; editor.config.uploadFileName = 'file'; editor.config.customUploadImg = function (files, insertImgFn) { // files 是 input 中选中的文件列表 // insertImgFn 是获取图片 url 后,插入到编辑器的方法 // 上传图片,返回结果,将图片插入到编辑器中 for (let i = 0; i < files.length; i++){ var form = new FormData(); form.append("file", files[0]); $.ajax({ url:'/admin/goods/uploadFileBase64', type: "post", processData: false, contentType: false, data: form, dataType: 'json', success(res) { // 上传代码返回结果之后,将图片插入到编辑器中 insertImgFn(res.data.src, res.data.title, '') } }) } }; editor.create(); var category = xmSelect.render({ el: '#product-category', language: 'zn', prop : { value : 'id', children : 'child' }, iconfont: { parent: 'hidden', }, tips: '请选择', filterable: true, radio: true, clickClose: true, tree: { show: true, //非严格模式 strict: false, }, data: [] }) form.on('select(point-type-select)', function(data){ $('.tc-set').each(function() { if (data.value == 2) { $(this).show(); } else { $(this).hide(); febs.get(ctx + 'admin/productCategory/categoryTree', null, function(res) { category.update({ data : res.data, autoRow: true, }); }) var tableSkuData=[]; var tableIns = table.render({ elem: '#multiSku' ,limit:999 ,toolbar:"#toolbar" ,defaultToolbar:[] ,cols: [[ //表头 {type: 'checkbox'} ,{field: 'index', title: '序号', width:70} ,{field: 'answer', title: '答案', edit:'text', width:500} ,{field: 'correctAnswer', title: '正确答案', templet: function(d){ var options = ''; if(d.correctAnswer == 1) { options = '<option value="0">否</option><option value="1" selected>是</option>'; } else { options = '<option value="0" selected>否</option><option value="1">是</option>'; } return '<select lay-ignore name="correctAnswer" lay-filter="correctAnswerSelect">' + options + '</select>'; }, width:200} ,{field: 'answerAnalysis', title: '答案解析', edit:'text', width:500} ]] ,data: [] }); // 监听下拉框变化 $(document).on('change', 'select[name="correctAnswer"]', function() { var selectIndex = $(this).closest('tr').index(); // 获取行索引 var newValue = $(this).val(); // 获取新值 // 更新表格数据 var hasData = table.cache['multiSku']; if (hasData && hasData[selectIndex]) { hasData[selectIndex].correctAnswer = parseInt(newValue); // 更新全局数据 for (let i = 0; i < tableSkuData.length; i++) { if (tableSkuData[i].index == hasData[selectIndex].index) { tableSkuData[i].correctAnswer = parseInt(newValue); break; } } }) } }); table.on('toolbar(multiSku)', function(obj){ var data = obj.data; var hasData = table.cache['multiSku']; var checkData = table.checkStatus('multiSku').data; if (checkData.length <= 0) { febs.alert.warn('请选择删除数据'); return; } if(obj.event === 'delSku'){ for (let i = 0; i < checkData.length; i++) { var delData = checkData[i]; for (let j = 0; j < hasData.length; j++) { if (hasData[j].index == delData.index) { hasData.splice(j, 1); break; } } } for (let i = 0; i < hasData.length; i++) { hasData[i].index = i + 1; } tableSkuData=hasData; reloadTable(hasData); } }); function addTableDate(data) { var hasData = table.cache['multiSku']; data.index = hasData.length + 1; tableSkuData.push(data); reloadTable(tableSkuData); return data.index; } function reloadTable(data) { table.reload('multiSku', { data : data }); } table.on('edit(multiSku)', function(obj){ var value = obj.value //得到修改后的值 ,data = obj.data //得到所在行所有键值 ,field = obj.field; //得到字段 for (let i = 0; i < tableSkuData.length; i++) { if (tableSkuData[i].index == data.index) { tableSkuData[i] = data; } } }); $('#test3').on('click', function (){ var data = {}; addTableDate(data); }); setTimeout(() => { initProductPointInfo(); initProductQuestionInfo(); }, 500); function initProductPointInfo() { form.val("productPoint-info-form", { "id": aiProductPoint.id, "title": aiProductPoint.title, "isNormal": aiProductPoint.isNormal, "finderUserName": aiProductPoint.finderUserName, "feedId": aiProductPoint.feedId, function initProductQuestionInfo() { form.val("productQuestion-info-form", { "id": aiProductQuestion.id, "title": aiProductQuestion.title, "difficulty": aiProductQuestion.difficulty, }); editor.txt.html(aiProductPoint.description); if (aiProductPoint.isNormal == 2) { $(".tc-set").show(); var categoryList = []; categoryList.push(aiProductQuestion.productCategoryId) category.setValue(categoryList); let aiProductQuestionItems = aiProductQuestion.aiProductQuestionItems; if(Array.isArray(aiProductQuestionItems) && aiProductQuestionItems.length){ for (let i = 0; i < aiProductQuestionItems.length; i++) { aiProductQuestionItems[i].index = i+1; } } if (aiProductQuestionItems) { tableSkuData = aiProductQuestionItems; reloadTable(aiProductQuestionItems); } } form.on('submit(productPoint-info-form-submit)', function (data) { data.field.description = editor.txt.html(); form.on('submit(productQuestion-info-form-submit)', function (data) { data.field.productCategoryId = category.getValue('valueStr'); data.field.aiProductQuestionItems = tableSkuData; $.ajax({ 'url':ctx + 'admin/productPoint/update', 'url':ctx + 'admin/productQuestion/update', 'type':'post', 'dataType':'json', 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 @@ -170,7 +286,7 @@ if(data.code==200){ layer.closeAll(); febs.alert.success(data.message); $('#febs-productPoint').find('#query').click(); $('#febs-productQuestion').find('#query').click(); }else{ febs.alert.warn(data.message); } src/main/resources/templates/febs/views/modules/ai/productQuestion/list.html
@@ -185,7 +185,7 @@ productSwitch(data.value,0); } }) function productSwitch(id,type,state) { function productSwitch(id,state) { febs.get(ctx + 'admin/productQuestion/changeState/' + id+'/' + state, null, function (data) { febs.alert.success(data.message); $query.click();