浏览代码

Merge remote-tracking branch 'origin/master'

lihao16 4 月之前
父节点
当前提交
8f343acb50

+ 19 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/SmsbDifyDatasetsProduct.java

@@ -52,5 +52,24 @@ public class SmsbDifyDatasetsProduct extends TenantEntity {
      */
     private String createUser;
 
+    /**
+     * 关键词
+     */
+    private String keyword;
+
+    /**
+     * 产品属性
+     */
+    private int property;
+
+    /**
+     * 产品价格
+     */
+    private int price;
+
+    /**
+     * 产品视频
+     */
+    private String videoUrl;
 
 }

+ 4 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/SmsbDifyDatasetsQuestion.java

@@ -47,5 +47,9 @@ public class SmsbDifyDatasetsQuestion extends TenantEntity {
      */
     private String createUser;
 
+    /**
+     * 属性
+     */
+    private String property;
 
 }

+ 26 - 4
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/bo/SmsbDifyDatasetsProductBo.java

@@ -30,25 +30,25 @@ public class SmsbDifyDatasetsProductBo extends BaseEntity {
     /**
      * 名称
      */
-    @NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotBlank(message = "名称不能为空", groups = {AddGroup.class, EditGroup.class})
     private String name;
 
     /**
      * 简介
      */
-    @NotBlank(message = "简介不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotBlank(message = "简介不能为空", groups = {AddGroup.class, EditGroup.class})
     private String note;
 
     /**
      * 序号
      */
-    @NotNull(message = "序号不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotNull(message = "序号不能为空", groups = {AddGroup.class, EditGroup.class})
     private Long sort;
 
     /**
      * 产品图片
      */
-    @NotBlank(message = "产品图片不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotBlank(message = "产品图片不能为空", groups = {AddGroup.class, EditGroup.class})
     private String imgUrl;
 
     /**
@@ -57,5 +57,27 @@ public class SmsbDifyDatasetsProductBo extends BaseEntity {
     //    @NotBlank(message = "创建人不能为空", groups = { AddGroup.class, EditGroup.class })
     private String createUser;
 
+    /**
+     * 关键词
+     */
+    @NotBlank(message = "关键词不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String keyword;
+
+    /**
+     * 关键词
+     */
+    @NotBlank(message = "属性不能为空", groups = {AddGroup.class, EditGroup.class})
+    private int property;
 
+    /**
+     * 关键词
+     */
+    @NotBlank(message = "价格不能为空", groups = {AddGroup.class, EditGroup.class})
+    private int price;
+
+    /**
+     * 关键词
+     */
+//    @NotBlank(message = "视频不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String videoUrl;
 }

+ 7 - 1
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/bo/SmsbDifyDatasetsQuestionBo.java

@@ -1,5 +1,6 @@
 package com.inspur.device.domain.bo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.inspur.device.domain.SmsbDifyDatasetsQuestion;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
@@ -47,8 +48,13 @@ public class SmsbDifyDatasetsQuestionBo extends BaseEntity {
     /**
      * 创建人
      */
-    @NotBlank(message = "创建人不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "创建人不能为空", groups = { AddGroup.class, EditGroup.class })
     private String createUser;
 
+    /**
+     * 属性
+     */
+    @NotBlank(message = "属性不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String property;
 
 }

+ 23 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/vo/SmsbDifyDatasetsProductVo.java

@@ -60,5 +60,28 @@ public class SmsbDifyDatasetsProductVo implements Serializable {
     @ExcelProperty(value = "上传人")
     private String createUser;
 
+    /**
+     * 关键词
+     */
+    @ExcelProperty(value = "关键词")
+    private String keyword;
+
+    /**
+     * 关键词
+     */
+    @ExcelProperty(value = "属性")
+    private int property;
+
+    /**
+     * 关键词
+     */
+    @ExcelProperty(value = "价格")
+    private int price;
+
+    /**
+     * 关键词
+     */
+    @ExcelProperty(value = "产品视频")
+    private String videoUrl;
 
 }

+ 5 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/vo/SmsbDifyDatasetsQuestionVo.java

@@ -58,5 +58,10 @@ public class SmsbDifyDatasetsQuestionVo implements Serializable {
     @ExcelProperty(value = "上传人")
     private String createUser;
 
+    /**
+     * 属性
+     */
+    @ExcelProperty(value = "属性")
+    private String property;
 
 }

+ 2 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDifyDatasetsQuestionServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.springframework.stereotype.Service;
 import com.inspur.device.domain.bo.SmsbDifyDatasetsQuestionBo;
 import com.inspur.device.domain.vo.SmsbDifyDatasetsQuestionVo;
@@ -87,6 +88,7 @@ public class SmsbDifyDatasetsQuestionServiceImpl implements ISmsbDifyDatasetsQue
     @Override
     public Boolean insertByBo(SmsbDifyDatasetsQuestionBo bo) {
         SmsbDifyDatasetsQuestion add = MapstructUtils.convert(bo, SmsbDifyDatasetsQuestion.class);
+        add.setCreateUser(LoginHelper.getLoginUser().getNickname());
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {

+ 0 - 101
smsb-plus-ui/src/api/smsb/device/difyDatasetsProduct/types.ts

@@ -1,101 +0,0 @@
-export interface DifyDatasetsProductVO {
-  /**
-   * 主键ID
-   */
-  id: string | number;
-
-  /**
-   * 名称
-   */
-  name: string;
-
-  /**
-   * 简介
-   */
-  note: string;
-
-  /**
-   * 序号
-   */
-  sort: number;
-
-  /**
-   * 产品图片
-   */
-  imgUrl: string;
-
-  /**
-   * 上传人
-   */
-  createUser: string;
-
-}
-
-export interface DifyDatasetsProductForm extends BaseEntity {
-  /**
-   * 主键ID
-   */
-  id?: string | number;
-
-  /**
-   * 名称
-   */
-  name?: string;
-
-  /**
-   * 简介
-   */
-  note?: string;
-
-  /**
-   * 序号
-   */
-  sort?: number;
-
-  /**
-   * 产品图片
-   */
-  imgUrl?: string;
-
-  /**
-   * 上传人
-   */
-  createUser?: string;
-
-}
-
-export interface DifyDatasetsProductQuery extends PageQuery {
-
-  /**
-   * 名称
-   */
-  name?: string;
-
-  /**
-   * 简介
-   */
-  note?: string;
-
-  /**
-   * 序号
-   */
-  sort?: number;
-
-  /**
-   * 产品图片
-   */
-  imgUrl?: string;
-
-  /**
-   * 上传人
-   */
-  createUser?: string;
-
-    /**
-     * 日期范围参数
-     */
-    params?: any;
-}
-
-
-

+ 1 - 1
smsb-plus-ui/src/api/smsb/device/difyDatasetsProduct/index.ts → smsb-plus-ui/src/api/smsb/device/difyDatasetsProduct_index.ts

@@ -4,7 +4,7 @@ import {
   DifyDatasetsProductForm,
   DifyDatasetsProductQuery,
   DifyDatasetsProductVO
-} from '@/api/smsb/device/difyDatasetsProduct/types';
+} from '@/api/smsb/device/difyDatasetsProduct_types';
 import {DifyDatasetsQuestionVO} from "@/api/smsb/device/difyDatasetsQuestion_types";
 
 /**

+ 161 - 0
smsb-plus-ui/src/api/smsb/device/difyDatasetsProduct_types.ts

@@ -0,0 +1,161 @@
+export interface DifyDatasetsProductVO {
+    /**
+     * 主键ID
+     */
+    id: string | number;
+
+    /**
+     * 名称
+     */
+    name: string;
+
+    /**
+     * 简介
+     */
+    note: string;
+
+    /**
+     * 序号
+     */
+    sort: number;
+
+    /**
+     * 产品图片
+     */
+    imgUrl: string;
+
+    /**
+     * 上传人
+     */
+    createUser: string;
+
+    /**
+     * 产品关键词
+     */
+    keyword: string,
+
+    /**
+     * 产品属性
+     */
+    property: number,
+
+    /**
+     * 产品价格
+     */
+    price: number,
+
+    /**
+     * 视频地址
+     */
+    videoUrl: string,
+
+}
+
+export interface DifyDatasetsProductForm extends BaseEntity {
+    /**
+     * 主键ID
+     */
+    id?: string | number;
+
+    /**
+     * 名称
+     */
+    name?: string;
+
+    /**
+     * 简介
+     */
+    note?: string;
+
+    /**
+     * 序号
+     */
+    sort?: number;
+
+    /**
+     * 产品图片
+     */
+    imgUrl?: string;
+
+    /**
+     * 上传人
+     */
+    createUser?: string;
+
+    /**
+     * 产品关键词
+     */
+    keyword?: string,
+
+    /**
+     * 产品属性
+     */
+    property?: number,
+
+    /**
+     * 产品价格
+     */
+    price?: number,
+
+    /**
+     * 视频地址
+     */
+    videoUrl?: string,
+
+}
+
+export interface DifyDatasetsProductQuery extends PageQuery {
+
+    /**
+     * 名称
+     */
+    name?: string;
+
+    /**
+     * 简介
+     */
+    note?: string;
+
+    /**
+     * 序号
+     */
+    sort?: number;
+
+    /**
+     * 产品图片
+     */
+    imgUrl?: string;
+
+    /**
+     * 上传人
+     */
+    createUser?: string;
+
+    /**
+     * 日期范围参数
+     */
+    params?: any;
+
+    /**
+     * 产品关键词
+     */
+    keyword?: string,
+
+    /**
+     * 产品属性
+     */
+    property?: number,
+
+    /**
+     * 产品价格
+     */
+    price?: number,
+
+    /**
+     * 视频地址
+     */
+    videoUrl?: string,
+}
+
+
+

+ 19 - 4
smsb-plus-ui/src/api/smsb/device/difyDatasetsQuestion_types.ts

@@ -24,6 +24,11 @@ export interface DifyDatasetsQuestionVO {
    */
   createUser: string;
 
+  /**
+   * 属性
+   */
+  property: number;
+
 }
 
 export interface DifyDatasetsQuestionForm extends BaseEntity {
@@ -52,6 +57,11 @@ export interface DifyDatasetsQuestionForm extends BaseEntity {
    */
   createUser?: string;
 
+  /**
+   * 属性
+   */
+  property?: number;
+
 }
 
 export interface DifyDatasetsQuestionQuery extends PageQuery {
@@ -76,10 +86,15 @@ export interface DifyDatasetsQuestionQuery extends PageQuery {
    */
   createUser?: string;
 
-    /**
-     * 日期范围参数
-     */
-    params?: any;
+  /**
+   * 属性
+   */
+  property?: number;
+
+  /**
+   * 日期范围参数
+   */
+  params?: any;
 }
 
 

+ 119 - 46
smsb-plus-ui/src/views/smsb/difyDatasetsProduct/index.vue

@@ -1,24 +1,34 @@
 <template>
   <div class="p-2">
-    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
+                :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover" :style="{ marginTop: '10px', height: '60px' }">
           <el-form ref="queryFormRef" :model="queryParams" :inline="true">
             <el-form-item label="产品名称" prop="name">
-              <el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
+              <el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery"/>
             </el-form-item>
             <el-form-item label="创建人" prop="createUser">
-              <el-input v-model="queryParams.createUser" placeholder="请输入创建人" clearable @keyup.enter="handleQuery" />
+              <el-input v-model="queryParams.createUser" placeholder="请输入创建人" clearable
+                        @keyup.enter="handleQuery"/>
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
               <el-button icon="Refresh" @click="resetQuery">重置</el-button>
             </el-form-item>
             <el-form-item>
-              <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:difyDatasetsProduct:add']">新增</el-button>
-              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['system:difyDatasetsProduct:edit']">修改</el-button>
-              <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:difyDatasetsProduct:remove']">删除</el-button>
-              <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['system:difyDatasetsProduct:export']">导出</el-button>
+              <el-button type="primary" plain icon="Plus" @click="handleAdd"
+                         v-hasPermi="['system:difyDatasetsProduct:add']">新增
+              </el-button>
+              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
+                         v-hasPermi="['system:difyDatasetsProduct:edit']">修改
+              </el-button>
+              <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
+                         v-hasPermi="['system:difyDatasetsProduct:remove']">删除
+              </el-button>
+              <el-button type="warning" plain icon="Download" @click="handleExport"
+                         v-hasPermi="['system:difyDatasetsProduct:export']">导出
+              </el-button>
             </el-form-item>
           </el-form>
         </el-card>
@@ -27,51 +37,76 @@
 
     <el-card shadow="never">
       <el-table v-loading="loading" :data="difyDatasetsProductList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="left" />
-        <el-table-column label="产品ID" align="left" prop="id" v-if="true" />
-        <el-table-column label="产品名称" align="left" prop="name" />
-        <el-table-column label="产品简介" align="left" prop="note" />
-        <el-table-column label="产品序号" align="left" prop="sort" />
-<!--        <el-table-column label="产品图片" align="left" prop="imgUrl" />-->
-<!--        <el-table-column label="产品图片" align="left" prop="imgUrl">-->
+        <el-table-column type="selection" width="55" align="left"/>
+        <el-table-column label="产品ID" align="left" prop="id" v-if="true"/>
+        <el-table-column label="产品名称" align="left" prop="name"/>
+        <el-table-column label="产品属性" align="left">
+          <template #default="scope">
+            <dict-tag :options="smsb_product_properties" :value="scope.row.property" />
+          </template>
+        </el-table-column>
+        <el-table-column label="产品关键词" align="left" prop="keyword"/>
+        <el-table-column label="产品价格" align="left" prop="price"/>
+        <el-table-column label="产品简介" align="left" prop="note"/>
+        <el-table-column label="产品序号" align="left" prop="sort"/>
         <el-table-column label="产品图片" align="left">
-          <!-- 使用作用域插槽获取当前行数据 -->
+          <!--          &lt;!&ndash; 使用作用域插槽获取当前行数据 &ndash;&gt;-->
           <template #default="scope">
-            <!-- 将 imgUrl 传递给自定义组件 -->
-            <image-slot :src="scope.row.imgUrl"/>
+            <!--            &lt;!&ndash; 将 imgUrl 传递给自定义组件 &ndash;&gt;-->
+            <image-preview :src="scope.row.imgUrl" style="width: 40px; height: 40px; cursor: pointer" />
           </template>
         </el-table-column>
-        <el-table-column label="创建人" align="left" prop="createUser" />
+        <el-table-column label="产品视频" align="left" prop="videoUrl"/>
+        <el-table-column label="创建人" align="left" prop="createUser"/>
         <el-table-column label="操作" align="left" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-tooltip content="修改" placement="top">
-              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:difyDatasetsProduct:edit']"></el-button>
+              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+                         v-hasPermi="['system:difyDatasetsProduct:edit']"></el-button>
             </el-tooltip>
             <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:difyDatasetsProduct:remove']"></el-button>
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+                         v-hasPermi="['system:difyDatasetsProduct:remove']"></el-button>
             </el-tooltip>
           </template>
         </el-table-column>
       </el-table>
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                  v-model:limit="queryParams.pageSize" @pagination="getList"/>
     </el-card>
 
     <!-- 添加或修改Dify产品推荐对话框 -->
-    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body>
       <el-form ref="difyDatasetsProductFormRef" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="产品名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入名称" />
+        <el-row>
+          <el-form-item label="产品名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入名称" style="width: 300px"/>
+          </el-form-item>
+          <el-form-item label="产品序号" prop="keyword">
+            <el-input-number v-model="form.sort" controls-position="right" placeholder="请输入序号" :min="1"
+                             :max="100000" style="width: 180px" :maxlength="6"/>
+          </el-form-item>
+        </el-row>
+        <el-form-item label="产品关键词" prop="keyword">
+          <el-input v-model="form.keyword" placeholder="请输入关键词"/>
         </el-form-item>
-        <el-form-item label="产品序号" prop="sort">
-          <el-input-number v-model="form.sort" controls-position="right" placeholder="请输入序号" :min="1" :max="100000" style="width: 180px" :maxlength="6"/>
+        <el-form-item label="产品属性" prop="property">
+          <el-select v-model="form.property" placeholder="请选择属性">
+            <el-option v-for="dict in smsb_product_properties" :key="dict.value" :label="dict.label"
+                       :value="parseInt(dict.value)"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="产品价格" prop="price">
+          <el-input v-model="form.price" placeholder="请输入价格"/>
         </el-form-item>
         <el-form-item label="产品图片" prop="imgUrl">
-          <!--<el-input v-model="form.imgUrl" placeholder="请输入产品图片" />-->
-          <!--TODO-->
           <component-upload-image :limit=1 v-model="form.imgUrl"></component-upload-image>
         </el-form-item>
+        <el-form-item label="产品视频" prop="videoUrl">
+          <component-upload-image :limit=1 v-model="form.videoUrl"></component-upload-image>
+        </el-form-item>
         <el-form-item label="产品简介" prop="note">
-          <el-input v-model="form.note" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.note" type="textarea" :rows="5" placeholder="请输入内容" :maxlength="500"/>
         </el-form-item>
       </el-form>
       <template #footer>
@@ -85,12 +120,22 @@
 </template>
 
 <script setup name="DifyDatasetsProduct" lang="ts">
-import { listDifyDatasetsProduct, getDifyDatasetsProduct, delDifyDatasetsProduct, addDifyDatasetsProduct, updateDifyDatasetsProduct } from '@/api/smsb/device/difyDatasetsProduct';
-import { DifyDatasetsProductVO, DifyDatasetsProductQuery, DifyDatasetsProductForm } from '@/api/smsb/device/difyDatasetsProduct/types';
+import {
+  listDifyDatasetsProduct,
+  getDifyDatasetsProduct,
+  delDifyDatasetsProduct,
+  addDifyDatasetsProduct,
+  updateDifyDatasetsProduct
+} from '@/api/smsb/device/difyDatasetsProduct_index';
+import {
+  DifyDatasetsProductVO,
+  DifyDatasetsProductQuery,
+  DifyDatasetsProductForm
+} from '@/api/smsb/device/difyDatasetsProduct_types';
 import ComponentUploadImage from '@/components/ImageUpload/index.vue';
 import ImageSlot from '@/components/ImagePreview/index.vue';
 
-const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const {proxy} = getCurrentInstance() as ComponentInternalInstance;
 
 const difyDatasetsProductList = ref<DifyDatasetsProductVO[]>([]);
 const buttonLoading = ref(false);
@@ -109,6 +154,15 @@ const dialog = reactive<DialogOption>({
   title: ''
 });
 
+const {
+  smsb_product_properties,
+} =
+  toRefs<any>(
+    proxy?.useDict(
+      'smsb_product_properties',
+    )
+  );
+
 const initFormData: DifyDatasetsProductForm = {
   id: undefined,
   name: undefined,
@@ -116,6 +170,10 @@ const initFormData: DifyDatasetsProductForm = {
   sort: undefined,
   imgUrl: undefined,
   createUser: undefined,
+  keyword: undefined,
+  property: undefined,
+  price: undefined,
+  videoUrl: undefined,
 }
 const data = reactive<PageData<DifyDatasetsProductForm, DifyDatasetsProductQuery>>({
   form: {...initFormData},
@@ -127,32 +185,47 @@ const data = reactive<PageData<DifyDatasetsProductForm, DifyDatasetsProductQuery
     sort: undefined,
     imgUrl: undefined,
     createUser: undefined,
-    params: {
-    }
+    keyword: undefined,
+    property: undefined,
+    price: undefined,
+    videoUrl: undefined,
+    params: {}
   },
   rules: {
     id: [
-      { required: true, message: "主键ID不能为空", trigger: "blur" }
+      {required: true, message: "主键ID不能为空", trigger: "blur"}
     ],
     name: [
-      { required: true, message: "名称不能为空", trigger: "blur" }
+      {required: true, message: "名称不能为空", trigger: "blur"}
     ],
     note: [
-      { required: true, message: "简介不能为空", trigger: "blur" }
+      {required: true, message: "简介不能为空", trigger: "blur"}
     ],
     sort: [
-      { required: true, message: "序号不能为空", trigger: "blur" }
+      {required: true, message: "序号不能为空", trigger: "blur"}
     ],
     imgUrl: [
-      { required: true, message: "产品图片不能为空", trigger: "blur" }
+      {required: true, message: "产品图片不能为空", trigger: "blur"}
     ],
     createUser: [
-      { required: false, message: "创建人不能为空", trigger: "blur" }
+      {required: false, message: "创建人不能为空", trigger: "blur"}
+    ],
+    keyword: [
+      {required: true, message: "关键词不能为空", trigger: "blur"}
+    ],
+    property: [
+      {required: true, message: "产品属性不能为空", trigger: "blur"}
+    ],
+    price: [
+      {required: true, message: "产品价格不能为空", trigger: "blur"}
+    ],
+    videoUrl: [
+      {required: false, message: "产品视频不能为空", trigger: "blur"}
     ],
   }
 });
 
-const { queryParams, form, rules } = toRefs(data);
+const {queryParams, form, rules} = toRefs(data);
 
 /** 查询Dify产品推荐列表 */
 const getList = async () => {
@@ -198,7 +271,7 @@ const handleSelectionChange = (selection: DifyDatasetsProductVO[]) => {
 const handleAdd = () => {
   reset();
   dialog.visible = true;
-  dialog.title = "添加Dify产品推荐";
+  dialog.title = "添加产品条目";
 }
 
 /** 修改按钮操作 */
@@ -208,7 +281,7 @@ const handleUpdate = async (row?: DifyDatasetsProductVO) => {
   const res = await getDifyDatasetsProduct(_id);
   Object.assign(form.value, res.data);
   dialog.visible = true;
-  dialog.title = "修改Dify产品推荐";
+  dialog.title = "修改产品条目";
 }
 
 /** 提交按钮 */
@@ -217,9 +290,9 @@ const submitForm = () => {
     if (valid) {
       buttonLoading.value = true;
       if (form.value.id) {
-        await updateDifyDatasetsProduct(form.value).finally(() =>  buttonLoading.value = false);
+        await updateDifyDatasetsProduct(form.value).finally(() => buttonLoading.value = false);
       } else {
-        await addDifyDatasetsProduct(form.value).finally(() =>  buttonLoading.value = false);
+        await addDifyDatasetsProduct(form.value).finally(() => buttonLoading.value = false);
       }
       proxy?.$modal.msgSuccess("操作成功");
       dialog.visible = false;
@@ -231,7 +304,7 @@ const submitForm = () => {
 /** 删除按钮操作 */
 const handleDelete = async (row?: DifyDatasetsProductVO) => {
   const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除Dify产品推荐编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
+  await proxy?.$modal.confirm('是否确认删除产品条目编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
   await delDifyDatasetsProduct(_ids);
   proxy?.$modal.msgSuccess("删除成功");
   await getList();

+ 82 - 35
smsb-plus-ui/src/views/smsb/difyDatasetsQuestion/index.vue

@@ -1,24 +1,34 @@
 <template>
   <div class="p-2">
-    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
+                :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover" :style="{ marginTop: '10px', height: '60px' }">
           <el-form ref="queryFormRef" :model="queryParams" :inline="true">
             <el-form-item label="问题" prop="question">
-              <el-input v-model="queryParams.question" placeholder="请输入问题" clearable @keyup.enter="handleQuery" />
+              <el-input v-model="queryParams.question" placeholder="请输入问题" clearable @keyup.enter="handleQuery"/>
             </el-form-item>
             <el-form-item label="创建人" prop="createUser">
-              <el-input v-model="queryParams.createUser" placeholder="请输入创建人" clearable @keyup.enter="handleQuery" />
+              <el-input v-model="queryParams.createUser" placeholder="请输入创建人" clearable
+                        @keyup.enter="handleQuery"/>
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
               <el-button icon="Refresh" @click="resetQuery">重置</el-button>
             </el-form-item>
             <el-form-item>
-              <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['device:difyDatasetsQuestion:add']">新增</el-button>
-              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['device:difyDatasetsQuestion:edit']">修改</el-button>
-              <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['device:difyDatasetsQuestion:remove']">删除</el-button>
-              <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['device:difyDatasetsQuestion:export']">导出</el-button>
+              <el-button type="primary" plain icon="Plus" @click="handleAdd"
+                         v-hasPermi="['device:difyDatasetsQuestion:add']">新增
+              </el-button>
+              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
+                         v-hasPermi="['device:difyDatasetsQuestion:edit']">修改
+              </el-button>
+              <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
+                         v-hasPermi="['device:difyDatasetsQuestion:remove']">删除
+              </el-button>
+              <el-button type="warning" plain icon="Download" @click="handleExport"
+                         v-hasPermi="['device:difyDatasetsQuestion:export']">导出
+              </el-button>
             </el-form-item>
           </el-form>
         </el-card>
@@ -27,37 +37,52 @@
 
     <el-card shadow="never">
       <el-table v-loading="loading" :data="difyDatasetsQuestionList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="left" />
-        <el-table-column label="问答ID" align="left" prop="id" v-if="true" />
-        <el-table-column label="问题" align="left" prop="question" />
-        <el-table-column label="回答" align="left" prop="answer" />
-        <el-table-column label="问答序号" align="left" prop="sort" />
-        <el-table-column label="创建人" align="left" prop="createUser" />
+        <el-table-column type="selection" width="55" align="left"/>
+        <el-table-column label="条目ID" align="left" prop="id" v-if="true"/>
+        <el-table-column label="问题" align="left" prop="question"/>
+        <el-table-column label="回答" align="left" prop="answer"/>
+        <el-table-column label="条目序号" align="left" prop="sort"/>
+        <el-table-column label="属性" align="left">
+          <template #default="scope">
+            <dict-tag :options="smsb_question_properties" :value="scope.row.property" />
+          </template>
+        </el-table-column>
+        <el-table-column label="创建人" align="left" prop="createUser"/>
         <el-table-column label="操作" align="left" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-tooltip content="修改" placement="top">
-              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['device:difyDatasetsQuestion:edit']"></el-button>
+              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+                         v-hasPermi="['device:difyDatasetsQuestion:edit']"></el-button>
             </el-tooltip>
             <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['device:difyDatasetsQuestion:remove']"></el-button>
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+                         v-hasPermi="['device:difyDatasetsQuestion:remove']"></el-button>
             </el-tooltip>
           </template>
         </el-table-column>
       </el-table>
 
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                  v-model:limit="queryParams.pageSize" @pagination="getList"/>
     </el-card>
     <!-- 添加或修改Dify知识问答对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
       <el-form ref="difyDatasetsQuestionFormRef" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="序号" prop="sort">
-          <el-input-number v-model="form.sort" controls-position="right" placeholder="请输入序号" :min="1" :max="100000" style="width: 180px" :maxlength="6"/>
+          <el-input-number v-model="form.sort" controls-position="right" placeholder="请输入序号" :min="1" :max="100000"
+                           style="width: 180px" :maxlength="6"/>
+        </el-form-item>
+        <el-form-item label="属性" prop="property">
+          <el-select v-model="form.property" placeholder="请选择属性">
+            <el-option v-for="dict in smsb_question_properties" :key="dict.value" :label="dict.label"
+                       :value="parseInt(dict.value)"></el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label="问题" prop="question">
-          <el-input v-model="form.question" placeholder="请输入问题" />
+          <el-input v-model="form.question" placeholder="请输入问题"/>
         </el-form-item>
         <el-form-item label="回答" prop="answer">
-          <el-input v-model="form.answer" type="textarea" placeholder="请输入内容" />
+          <el-input v-model="form.answer" type="textarea" placeholder="请输入内容" :rows="4"/>
         </el-form-item>
       </el-form>
       <template #footer>
@@ -71,10 +96,20 @@
 </template>
 
 <script setup name="DifyDatasetsQuestion" lang="ts">
-import { listDifyDatasetsQuestion, getDifyDatasetsQuestion, delDifyDatasetsQuestion, addDifyDatasetsQuestion, updateDifyDatasetsQuestion } from '@/api/smsb/device/difyDatasetsQuestion_index';
-import { DifyDatasetsQuestionVO, DifyDatasetsQuestionQuery, DifyDatasetsQuestionForm } from '@/api/smsb/device/difyDatasetsQuestion_types';
+import {
+  listDifyDatasetsQuestion,
+  getDifyDatasetsQuestion,
+  delDifyDatasetsQuestion,
+  addDifyDatasetsQuestion,
+  updateDifyDatasetsQuestion
+} from '@/api/smsb/device/difyDatasetsQuestion_index';
+import {
+  DifyDatasetsQuestionVO,
+  DifyDatasetsQuestionQuery,
+  DifyDatasetsQuestionForm
+} from '@/api/smsb/device/difyDatasetsQuestion_types';
 
-const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const {proxy} = getCurrentInstance() as ComponentInternalInstance;
 
 const difyDatasetsQuestionList = ref<DifyDatasetsQuestionVO[]>([]);
 const buttonLoading = ref(false);
@@ -84,6 +119,14 @@ const ids = ref<Array<string | number>>([]);
 const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
+const {
+  smsb_question_properties,
+} =
+  toRefs<any>(
+    proxy?.useDict(
+      'smsb_question_properties',
+    )
+  );
 
 const queryFormRef = ref<ElFormInstance>();
 const difyDatasetsQuestionFormRef = ref<ElFormInstance>();
@@ -99,6 +142,7 @@ const initFormData: DifyDatasetsQuestionForm = {
   answer: undefined,
   sort: undefined,
   createUser: undefined,
+  property: undefined,
 }
 const data = reactive<PageData<DifyDatasetsQuestionForm, DifyDatasetsQuestionQuery>>({
   form: {...initFormData},
@@ -109,29 +153,32 @@ const data = reactive<PageData<DifyDatasetsQuestionForm, DifyDatasetsQuestionQue
     answer: undefined,
     sort: undefined,
     createUser: undefined,
-    params: {
-    }
+    property: undefined,
+    params: {}
   },
   rules: {
     id: [
-      { required: true, message: "主键ID不能为空", trigger: "blur" }
+      {required: true, message: "主键ID不能为空", trigger: "blur"}
     ],
     question: [
-      { required: true, message: "问题不能为空", trigger: "blur" }
+      {required: true, message: "问题不能为空", trigger: "blur"}
     ],
     answer: [
-      { required: true, message: "回答不能为空", trigger: "blur" }
+      {required: true, message: "回答不能为空", trigger: "blur"}
     ],
     sort: [
-      { required: true, message: "序号不能为空", trigger: "blur" }
+      {required: true, message: "序号不能为空", trigger: "blur"}
     ],
     createUser: [
-      { required: true, message: "上传人不能为空", trigger: "blur" }
+      {required: true, message: "上传人不能为空", trigger: "blur"}
+    ],
+    property: [
+      {required: true, message: "属性不能为空", trigger: "blur"}
     ],
   }
 });
 
-const { queryParams, form, rules } = toRefs(data);
+const {queryParams, form, rules} = toRefs(data);
 
 /** 查询Dify知识问答列表 */
 const getList = async () => {
@@ -177,7 +224,7 @@ const handleSelectionChange = (selection: DifyDatasetsQuestionVO[]) => {
 const handleAdd = () => {
   reset();
   dialog.visible = true;
-  dialog.title = "添加Dify知识问答";
+  dialog.title = "添加知识条目";
 }
 
 /** 修改按钮操作 */
@@ -187,7 +234,7 @@ const handleUpdate = async (row?: DifyDatasetsQuestionVO) => {
   const res = await getDifyDatasetsQuestion(_id);
   Object.assign(form.value, res.data);
   dialog.visible = true;
-  dialog.title = "修改Dify知识问答";
+  dialog.title = "修改知识条目";
 }
 
 /** 提交按钮 */
@@ -196,9 +243,9 @@ const submitForm = () => {
     if (valid) {
       buttonLoading.value = true;
       if (form.value.id) {
-        await updateDifyDatasetsQuestion(form.value).finally(() =>  buttonLoading.value = false);
+        await updateDifyDatasetsQuestion(form.value).finally(() => buttonLoading.value = false);
       } else {
-        await addDifyDatasetsQuestion(form.value).finally(() =>  buttonLoading.value = false);
+        await addDifyDatasetsQuestion(form.value).finally(() => buttonLoading.value = false);
       }
       proxy?.$modal.msgSuccess("操作成功");
       dialog.visible = false;
@@ -210,7 +257,7 @@ const submitForm = () => {
 /** 删除按钮操作 */
 const handleDelete = async (row?: DifyDatasetsQuestionVO) => {
   const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除Dify知识问答编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
+  await proxy?.$modal.confirm('是否确认删除知识条目编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
   await delDifyDatasetsQuestion(_ids);
   proxy?.$modal.msgSuccess("删除成功");
   await getList();