From 6fb9052c35348987cb4876cfab65f59d0558ab1b Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 05 Sep 2025 16:17:04 +0800
Subject: [PATCH] feat(ai): 添加 AI 生成题目的功能
---
src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java | 59 +++----
src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java | 2
src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java | 7 +
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java | 119 ++++++++++++++++
src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java | 15 +-
src/main/resources/templates/febs/views/modules/ai/productQuestion/list.html | 15 ++
src/main/java/cc/mrbird/febs/ai/req/AiProductQuestionAiDto.java | 2
pom.xml | 23 +++
src/main/resources/templates/febs/views/modules/ai/productQuestion/aiAdd.html | 148 +++++++++++++++++++++
9 files changed, 345 insertions(+), 45 deletions(-)
diff --git a/pom.xml b/pom.xml
index 56ecf7c..91a70f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,29 @@
<dependencies>
<dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>2.8.9</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>dashscope-sdk-java</artifactId>
+ <version>2.21.5</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
<groupId>com.volcengine</groupId>
<artifactId>volcengine-java-sdk-ark-runtime</artifactId>
<version>LATEST</version>
diff --git a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java
index faa94f0..591aa13 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/AiProductQuestionController.java
@@ -1,6 +1,5 @@
package cc.mrbird.febs.ai.controller.productQuestion;
-import cc.mrbird.febs.ai.entity.AiProductPoint;
import cc.mrbird.febs.ai.entity.AiProductQuestion;
import cc.mrbird.febs.ai.req.AiProductQuestionAiDto;
import cc.mrbird.febs.ai.service.AiProductQuestionService;
@@ -53,6 +52,13 @@
return aiProductQuestionService.add(dto);
}
+ @PostMapping("aiAdd")
+ @ControllerEndpoint(operation = "AI生成题目", exceptionMessage = "操作失败")
+ public FebsResponse aiAdd(@RequestBody @Valid AiProductQuestionAiDto dto) {
+
+ return aiProductQuestionService.aiAdd(dto);
+ }
+
@PostMapping("update")
@ControllerEndpoint(operation = "更新", exceptionMessage = "操作失败")
public FebsResponse update(@RequestBody @Valid AiProductQuestion dto) {
@@ -67,13 +73,6 @@
) {
return aiProductQuestionService.delete(id);
- }
-
- @PostMapping("aiCreate/{id}")
- @ControllerEndpoint(operation = "AI生成题目", exceptionMessage = "操作失败")
- public FebsResponse aiCreate(@RequestBody @Valid AiProductQuestionAiDto dto) {
-
- return aiProductQuestionService.aiCreate(dto);
}
@GetMapping(value = "/questionTree")
diff --git a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java
index fe0640d..81dfc37 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/productQuestion/ViewController.java
@@ -45,6 +45,13 @@
return FebsUtil.view("modules/ai/productQuestion/add");
}
+ @GetMapping(value = "/aiAdd")
+ @RequiresPermissions("productQuestionList:aiAdd")
+ public String aiAdd() {
+
+ return FebsUtil.view("modules/ai/productQuestion/aiAdd");
+ }
+
@GetMapping("info/{id}")
@RequiresPermissions("productQuestionList:info")
public String artInfo(@PathVariable String id, Model model) {
diff --git a/src/main/java/cc/mrbird/febs/ai/req/AiProductQuestionAiDto.java b/src/main/java/cc/mrbird/febs/ai/req/AiProductQuestionAiDto.java
index e6114cd..1714826 100644
--- a/src/main/java/cc/mrbird/febs/ai/req/AiProductQuestionAiDto.java
+++ b/src/main/java/cc/mrbird/febs/ai/req/AiProductQuestionAiDto.java
@@ -7,6 +7,8 @@
private String productCategoryId;
+ private Integer difficulty;
+
private String query;
private String promptAiSystem;
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java b/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java
index f7a4517..b10b521 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiProductQuestionService.java
@@ -39,5 +39,5 @@
List<AiProductQuestion> productQuestionTree(LambdaQueryWrapper<AiProductQuestion> aiProductQuestionLambdaQueryWrapper);
- FebsResponse aiCreate(AiProductQuestionAiDto dto);
+ FebsResponse aiAdd(AiProductQuestionAiDto dto);
}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
index b33a42b..24d05ec 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductQuestionServiceImpl.java
@@ -11,6 +11,9 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -166,9 +169,121 @@
}
@Override
- public FebsResponse aiCreate(AiProductQuestionAiDto dto) {
+ public FebsResponse aiAdd(AiProductQuestionAiDto dto) {
+
+ String jsonFormat = "{\"question_list\":[{\"title\": \"消费者对透明质酸的主要担忧是什么?\",\"answer_list\":[{\"answer\": \"消费者担心透明质酸维持时间短,效果不明显。\",\"type\": 1,\"analysis\": \"\"},{\"answer\": \"消费者担心透明质酸注射后可能出现移位、凹陷、馒化、僵硬以及炎症反应。\",\"type\": 1,\"analysis\": \"\"},{\"answer\": \"消费者的主要担忧包括效果不明显、维持时间短、注射后出现移位、凹陷、馒化、僵硬以及炎症反应。他们希望既达到理想效果,又避免这些副作用。\",\"type\": 2,\"analysis\": \"标准答案涵盖了消费者对透明质酸的所有主要担忧,既包括效果问题,也涵盖副作用风险,全面反映消费者心理需求。\"}]}]} ";
+ dto.setJsonFormat(jsonFormat);
String questionAndAnswerStr = aiService.llmInvokeNonStreaming(dto);
- return null;
+ // 解析AI返回的结果
+ List<JSONObject> questionList = parseAiQuestionResponse(questionAndAnswerStr);
+
+ String productCategoryId = dto.getProductCategoryId();
+ Integer difficulty = dto.getDifficulty();
+ Date createdTime = new Date();
+ // 处理解析后的问题列表
+ for (JSONObject questionObj : questionList) {
+ String title = questionObj.getStr("title");
+
+ AiProductQuestion aiProductQuestion = new AiProductQuestion();
+ aiProductQuestion.setId(UUID.getSimpleUUIDString());
+ aiProductQuestion.setProductCategoryId(productCategoryId);
+ aiProductQuestion.setTitle(title);
+ aiProductQuestion.setDifficulty(difficulty);
+ aiProductQuestion.setCreatedTime(createdTime);
+ this.save(aiProductQuestion);
+
+ JSONArray answerList = questionObj.getJSONArray("answer_list");
+ System.out.println("问题: " + title);
+ for (int i = 0; i < answerList.size(); i++) {
+ JSONObject answer = answerList.getJSONObject(i);
+ System.out.println("答案" + (i+1) + ": " + answer.getStr("answer"));
+ System.out.println("类型: " + answer.getStr("type"));
+ System.out.println("分析: " + answer.getStr("analysis"));
+ AiProductQuestionItem aiProductQuestionItem = new AiProductQuestionItem();
+ aiProductQuestionItem.setId(UUID.getSimpleUUIDString());
+ aiProductQuestionItem.setProductQuestionId(aiProductQuestion.getId());
+ aiProductQuestionItem.setTitle(aiProductQuestion.getTitle());
+ aiProductQuestionItem.setAnswer(answer.getStr("answer"));
+ aiProductQuestionItem.setCorrectAnswer(answer.getInt("type") == 2 ? 1 : 0);
+ aiProductQuestionItem.setAnswerAnalysis(answer.getStr("analysis"));
+ aiProductQuestionItem.setCreatedTime(createdTime);
+ aiProductQuestionItemService.getBaseMapper().insert(aiProductQuestionItem);
+ }
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ /**
+ * 解析AI返回的包含问题和答案的JSON字符串
+ * @param aiResponse AI返回的原始响应字符串
+ * @return 解析后的问题列表
+ */
+ public List<JSONObject> parseAiQuestionResponse(String aiResponse) {
+ try {
+ // 解析外层JSON
+ JSONObject outerJson = JSONUtil.parseObj(aiResponse);
+
+ // 提取output字段
+ String output = outerJson.getStr("output");
+
+ // 去除<start>和</start>标签,并清理多余字符
+ String jsonContent = output.replace("<start>", "")
+ .replace("</start>", "")
+ .replace("\\n", "")
+ .replace("\\\"", "\"")
+ .trim();
+
+ // 解析内部JSON
+ JSONObject innerJson = JSONUtil.parseObj(jsonContent);
+
+ // 提取question_list
+ JSONArray questionList = innerJson.getJSONArray("question_list");
+
+ // 转换为List<JSONObject>返回
+ return questionList.toList(JSONObject.class);
+
+ } catch (Exception e) {
+ log.error("解析AI问题响应失败: ", e);
+ throw new RuntimeException("解析AI响应失败", e);
+ }
+ }
+
+ public static void main(String[] args) {
+ String questionStr = "{\"output\":\"<start>\\n{\\n \\\"question_list\\\": [\\n {\\n \\\"title\\\": \\\"1. 如何通过菲欧曼品牌背景和价值塑造透明质酸产品的高端形象?\\\",\\n \\\"answer_list\\\": [\\n {\\n \\\"answer\\\": \\\"强调菲欧曼拥有45年历史,是法国第一家医学美容实验室,产品行销全球60多个国家,树立其国际权威形象。\\\",\\n \\\"type\\\": \\\"2\\\",\\n \\\"analysis\\\": \\\"该答案全面结合品牌历史、科研投入及市场影响力,系统塑造高端定位,符合标准答案要求。\\\"\\n },\\n {\\n \\\"answer\\\": \\\"通过讲述菲欧曼产品获得欧盟CE、中国NMPA等国际认证,强调其安全性和合规性。\\\",\\n \\\"type\\\": \\\"1\\\",\\n \\\"analysis\\\": \\\"\\\"\\n },\\n {\\n \\\"answer\\\": \\\"通过明星使用、医生推荐等口碑效应,提升菲欧曼在消费者心中的高端认知。\\\",\\n \\\"type\\\": \\\"1\\\",\\n \\\"analysis\\\": \\\"\\\"\\n }\\n ]\\n }\\n ]\\n}\\n</start>\"}";
+ // 第一步:解析外层JSON
+ JSONObject outerJson = JSONUtil.parseObj(questionStr);
+
+ // 第二步:提取output字段
+ String output = outerJson.getStr("output");
+
+ // 第三步:去除<start>和</start>标签
+ String jsonContent = output.replace("<start>", "").replace("</start>", "").trim();
+
+ // 第四步:解析内部的JSON
+ JSONObject innerJson = JSONUtil.parseObj(jsonContent);
+
+ // 第五步:提取question_list
+ JSONArray questionList = innerJson.getJSONArray("question_list");
+
+ // 遍历问题列表
+ for (int i = 0; i < questionList.size(); i++) {
+ JSONObject question = questionList.getJSONObject(i);
+
+ System.out.println("问题标题: " + question.getStr("title"));
+
+ JSONArray answerList = question.getJSONArray("answer_list");
+ System.out.println("答案列表:");
+
+ // 遍历答案列表
+ for (int j = 0; j < answerList.size(); j++) {
+ JSONObject answer = answerList.getJSONObject(j);
+ System.out.println(" 答案 " + (j+1) + ": " + answer.getStr("answer"));
+ System.out.println(" 类型: " + answer.getStr("type"));
+ System.out.println(" 分析: " + answer.getStr("analysis"));
+ System.out.println();
+ }
+ }
+
}
}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java
index f89d249..75d87dd 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiServiceImpl.java
@@ -5,6 +5,13 @@
import cc.mrbird.febs.common.exception.FebsException;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.dashscope.app.Application;
+import com.alibaba.dashscope.app.ApplicationParam;
+import com.alibaba.dashscope.app.ApplicationResult;
+import com.alibaba.dashscope.app.FlowStreamMode;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.utils.JsonUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -35,38 +42,24 @@
bizParams.put(bizParam_3,dto.getJsonFormat());
String query = dto.getQuery();
long startTime = System.currentTimeMillis();
-// ApplicationParam param = ApplicationParam.builder()
-// // 若没有配置环境变量,可用百炼API Key将下行替换为:.apiKey("sk-xxx")。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
-// .apiKey(apiKey)
-// .appId(appId) //替换为实际的应用 ID
-// .flowStreamMode(FlowStreamMode.MESSAGE_FORMAT)
-// .prompt(query)
-// .bizParams(JsonUtils.toJsonObject( bizParams))
-// .build();
-//
-// Application application = new Application();
-// Flowable<ApplicationResult> result;
-// try {
-// result = application.streamCall(param);
-// } catch (NoApiKeyException | InputRequiredException e) {
-// throw new FebsException(StrUtil.format("百炼工作流输出失败:{}",e.getMessage()));
-// }
-//
-// return Flux.from(result)
-// .map(message -> {
-// HashMap<String, String> stringStringHashMap = new HashMap<>();
-// if (!message.getOutput().getFinishReason().equals("stop")){
-// stringStringHashMap.put(LlmStrategyContextEnum.CONTENT.name(),message.getOutput().getWorkflowMessage().getMessage().getContent());
-// }
-// return new FebsResponse().success().data(stringStringHashMap);
-// })
-// .doOnComplete(() -> {
-// long endTime = System.currentTimeMillis();
-// System.out.println("百炼工作流输出:" + (endTime - startTime) + "毫秒");
-// })
-// .doOnError(error -> {
-// throw new FebsException(StrUtil.format("百炼工作流输出失败:{}",error));
-// });
- return null;
+ ApplicationParam param = ApplicationParam.builder()
+ // 若没有配置环境变量,可用百炼API Key将下行替换为:.apiKey("sk-xxx")。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
+ .apiKey(apiKey)
+ .appId(appId) //替换为实际的应用 ID
+ .flowStreamMode(FlowStreamMode.MESSAGE_FORMAT)
+ .prompt(query)
+ .bizParams(JsonUtils.toJsonObject( bizParams))
+ .build();
+
+ Application application = new Application();
+ ApplicationResult result = null;
+ try {
+ result = application.call(param);
+ } catch (NoApiKeyException e) {
+ throw new FebsException("百炼工作流调用异常");
+ } catch (InputRequiredException e) {
+ throw new FebsException("百炼工作流调用异常");
+ }
+ return result.getOutput().getText();
}
}
diff --git a/src/main/resources/templates/febs/views/modules/ai/productQuestion/aiAdd.html b/src/main/resources/templates/febs/views/modules/ai/productQuestion/aiAdd.html
new file mode 100644
index 0000000..a4e8b34
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/ai/productQuestion/aiAdd.html
@@ -0,0 +1,148 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-productQuestion-ai-add" lay-title="新增">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="productQuestion-add">
+ <form class="layui-form" action="" lay-filter="productQuestion-add-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show">
+ <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">
+ <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">AI角色设定:</label>
+ <div class="layui-input-block">
+ <input type="text" name="promptAiSystem" 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="number" name="questionCnt" 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="query" 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="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>
+ </div>
+ </div>
+
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="productQuestion-add-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ formSelects = layui.formSelects,
+ treeSelect = layui.treeSelect,
+ form = layui.form,
+ laydate = layui.laydate,
+ eleTree = layui.eleTree,
+ $view = $('#productQuestion-add'),
+ layedit = layui.layedit,
+ upload = layui.upload,
+ validate = layui.validate,
+ element = layui.element;
+
+ form.render();
+
+ 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: []
+ })
+
+ febs.get(ctx + 'admin/productCategory/categoryTree', null, function(res) {
+ category.update({
+ data : res.data,
+ autoRow: true,
+ });
+ })
+
+
+ form.on('submit(productQuestion-add-form-submit)', function (data) {
+ data.field.productCategoryId = category.getValue('valueStr');
+ $.ajax({
+ 'url':ctx + 'admin/productQuestion/aiAdd',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-productQuestion').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/ai/productQuestion/list.html b/src/main/resources/templates/febs/views/modules/ai/productQuestion/list.html
index d21d086..b3b244e 100644
--- a/src/main/resources/templates/febs/views/modules/ai/productQuestion/list.html
+++ b/src/main/resources/templates/febs/views/modules/ai/productQuestion/list.html
@@ -45,7 +45,8 @@
<script type="text/html" id="productQuestionToolbar">
<div class="layui-btn-container">
- <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain" shiro:hasPermission="productQuestionList:add" lay-event="productQuestionAdd">新增</button>
+ <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain" shiro:hasPermission="productQuestionList:add" lay-event="productQuestionAdd">手动新增</button>
+ <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain" shiro:hasPermission="productQuestionList:aiAdd" lay-event="productQuestionAiAdd">AI新增</button>
</div>
</script>
@@ -157,6 +158,18 @@
}
});
}
+ if(layEvent === 'productQuestionAiAdd'){
+ febs.modal.open('新增', 'modules/ai/productQuestion/aiAdd/', {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#febs-productQuestion-ai-add').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
});
function initProductQuestionTable() {
--
Gitblit v1.9.1