Эх сурвалжийг харах

feat: 1、产品下发记录界面开发,数据展示2、产品下发记录关联产品条目查询展示

lihao16 4 сар өмнө
parent
commit
292bde1fba

+ 9 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/controller/SmsbDifyDatasetsProductController.java

@@ -64,6 +64,15 @@ public class SmsbDifyDatasetsProductController extends BaseController {
         return R.ok(smsbDifyDatasetsProductService.queryListByDatasetsId(datasetsId));
     }
 
+    /**
+     * 查询所有的Dify产品推荐列表
+     */
+    @SaCheckPermission("device:difyDatasetsProduct:list")
+    @GetMapping("/listProductByRidAndDid/{recordId}/{datasetsId}")
+    public R<List<SmsbDifyDatasetsProductVo>> listProductByRidAndDid(@PathVariable("recordId") Long recordId, @PathVariable("datasetsId") Long datasetsId) {
+        return R.ok(smsbDifyDatasetsProductService.listProductByRidAndDid(recordId,datasetsId));
+    }
+
     /**
      * 导出Dify产品推荐列表
      */

+ 8 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/ISmsbDifyDatasetsProductService.java

@@ -73,4 +73,12 @@ public interface ISmsbDifyDatasetsProductService {
      * @return
      */
     List<SmsbDifyDatasetsProductVo> queryListByDatasetsId(Long datasetsId);
+
+    /**
+     * 根据产品库ID、下发记录ID 查询历史下发的产品内容
+     * @param datasetsId
+     * @param recordId
+     * @return
+     */
+    List<SmsbDifyDatasetsProductVo> listProductByRidAndDid(Long recordId, Long datasetsId);
 }

+ 5 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDifyDatasetsProductServiceImpl.java

@@ -92,6 +92,11 @@ public class SmsbDifyDatasetsProductServiceImpl implements ISmsbDifyDatasetsProd
         return baseMapper.selectVoListByRIdAndDid(lastPushRecord.getId(),datasetsId);
     }
 
+    @Override
+    public List<SmsbDifyDatasetsProductVo> listProductByRidAndDid(Long recordId, Long datasetsId) {
+        return baseMapper.selectVoListByRIdAndDid(recordId,datasetsId);
+    }
+
     private LambdaQueryWrapper<SmsbDifyDatasetsProduct> buildQueryWrapper(SmsbDifyDatasetsProductBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<SmsbDifyDatasetsProduct> lqw = Wrappers.lambdaQuery();

+ 7 - 0
smsb-plus-ui/src/api/smsb/device/difyDatasetsProduct/index.ts

@@ -35,6 +35,13 @@ export const listProductByDatasetsId = (datasetsId: string | number): AxiosPromi
   });
 };
 
+export const listProductByRidAndDid= (recordId:string | number ,datasetsId: string | number): AxiosPromise<DifyDatasetsProductVO[]> => {
+  return request({
+    url: '/device/difyDatasetsProduct/listProductByRidAndDid/' + recordId + "/" + datasetsId,
+    method: 'get'
+  });
+};
+
 /**
  * 查询Dify产品推荐详细
  * @param id

+ 256 - 0
smsb-plus-ui/src/views/smsb/datasetsPushRecord/product.vue

@@ -0,0 +1,256 @@
+<template>
+  <div class="p-2">
+    <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" label-width="55px">
+            <el-form-item label="产品库" prop="datasetsName">
+              <el-input v-model="queryParams.datasetsName" 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-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>
+        </el-card>
+      </div>
+    </transition>
+
+    <el-card shadow="never">
+      <!--      <template #header>
+              <el-row :gutter="10" class="mb8">
+                <el-col :span="1.5">
+                  <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['device:datasetsPushRecord:add']">新增</el-button>
+                </el-col>
+                <el-col :span="1.5">
+                  <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['device:datasetsPushRecord:edit']">修改</el-button>
+                </el-col>
+                <el-col :span="1.5">
+                  <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['device:datasetsPushRecord:remove']">删除</el-button>
+                </el-col>
+                <el-col :span="1.5">
+                  <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['device:datasetsPushRecord:export']">导出</el-button>
+                </el-col>
+                <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+              </el-row>
+            </template>-->
+      <div class="table-content">
+        <el-table v-loading="loading" :data="datasetsPushRecordList" @selection-change="handleSelectionChange">
+          <el-table-column label="" align="left" prop="" width="10"/>
+          <el-table-column label="ID" align="left" prop="id" v-if="true" width="180"/>
+          <el-table-column label="产品库 ID" align="left" prop="datasetsId" width="180"/>
+          <el-table-column label="产品库名称" align="left" prop="datasetsName"/>
+          <el-table-column label="条目数量" align="center" prop="entryNum" width="120"/>
+          <el-table-column label="创建人名称" align="center" prop="createUser" width="120"/>
+          <el-table-column label="创建时间" align="left" prop="createTime" width="180">
+          </el-table-column>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
+            <template #default="scope">
+              <el-tooltip content="产品条目" placement="top">
+                <el-button link type="primary" icon="View" @click="handleEntryList(scope.row)"
+                           v-hasPermi="['device:datasets:query']"></el-button>
+              </el-tooltip>
+              <el-tooltip content="删除" placement="top">
+                <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+                           v-hasPermi="['device:datasetsPushRecord:remove']"></el-button>
+              </el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                  v-model:limit="queryParams.pageSize" @pagination="getList"/>
+    </el-card>
+    <!-- 下发详情 -->
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="1200px" append-to-body>
+      <div class="table-content">
+        <el-table v-loading="entryLoading" :data="productList">
+          <el-table-column label="产品名称" align="left" prop="name" width="250" :show-overflow-tooltip="true"/>
+          <el-table-column label="产品简介" align="left" prop="note" :show-overflow-tooltip="true"/>
+          <el-table-column label="产品图片" align="left" width="100">
+            <template #default="scope">
+              <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" width="100" :show-overflow-tooltip="true"/>
+        </el-table>
+      </div>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="DatasetsPushRecord" lang="ts">
+import {
+  addDatasetsPushRecord,
+  delDatasetsPushRecord,
+  getDatasetsPushRecord,
+  listDatasetsPushRecord,
+  updateDatasetsPushRecord
+} from '@/api/smsb/device/datasetsPushRecord/api';
+import {
+  DatasetsPushRecordForm,
+  DatasetsPushRecordQuery,
+  DatasetsPushRecordVO
+} from '@/api/smsb/device/datasetsPushRecord/types';
+import {DifyDatasetsProductVO} from "@/api/smsb/device/difyDatasetsProduct/types";
+import {listProductByRidAndDid} from "@/api/smsb/device/difyDatasetsProduct";
+
+const {proxy} = getCurrentInstance() as ComponentInternalInstance;
+
+const datasetsPushRecordList = ref<DatasetsPushRecordVO[]>([]);
+const buttonLoading = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref<Array<string | number>>([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const entryLoading = ref(true);
+const productList = ref<DifyDatasetsProductVO>([]);
+
+const queryFormRef = ref<ElFormInstance>();
+const datasetsPushRecordFormRef = ref<ElFormInstance>();
+
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+
+const initFormData: DatasetsPushRecordForm = {
+  id: undefined,
+  datasetsId: undefined,
+  datasetsType: undefined,
+  datasetsName: undefined,
+  entryNum: undefined,
+  createUser: undefined,
+}
+const data = reactive<PageData<DatasetsPushRecordForm, DatasetsPushRecordQuery>>({
+  form: {...initFormData},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    datasetsId: undefined,
+    datasetsType: undefined,
+    datasetsName: undefined,
+    createUser: undefined,
+    params: {}
+  },
+  rules: {}
+});
+
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询知识库下发记录列表 */
+const getList = async () => {
+  loading.value = true;
+  const res = await listDatasetsPushRecord(queryParams.value);
+  datasetsPushRecordList.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+}
+
+/** 取消按钮 */
+const cancel = () => {
+  reset();
+  dialog.visible = false;
+}
+
+/** 表单重置 */
+const reset = () => {
+  form.value = {...initFormData};
+  datasetsPushRecordFormRef.value?.resetFields();
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields();
+  handleQuery();
+}
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: DatasetsPushRecordVO[]) => {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset();
+  dialog.visible = true;
+  dialog.title = "添加知识库下发记录";
+}
+const handleEntryList = async (row?: DatasetsPushRecordVO) => {
+  entryLoading.value = true;
+  dialog.visible = true;
+  dialog.title = '产品条目';
+  const datasetsId = row.datasetsId;
+  const recordId = row.id;
+  const res = await listProductByRidAndDid(recordId,datasetsId);
+  productList.value = res.data;
+  entryLoading.value = false;
+};
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: DatasetsPushRecordVO) => {
+  reset();
+  const _id = row?.id || ids.value[0]
+  const res = await getDatasetsPushRecord(_id);
+  Object.assign(form.value, res.data);
+  dialog.visible = true;
+  dialog.title = "修改知识库下发记录";
+}
+
+/** 提交按钮 */
+const submitForm = () => {
+  datasetsPushRecordFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateDatasetsPushRecord(form.value).finally(() => buttonLoading.value = false);
+      } else {
+        await addDatasetsPushRecord(form.value).finally(() => buttonLoading.value = false);
+      }
+      proxy?.$modal.msgSuccess("操作成功");
+      dialog.visible = false;
+      await getList();
+    }
+  });
+}
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: DatasetsPushRecordVO) => {
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除知识库下发记录编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
+  await delDatasetsPushRecord(_ids);
+  proxy?.$modal.msgSuccess("删除成功");
+  await getList();
+}
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download('device/datasetsPushRecord/export', {
+    ...queryParams.value
+  }, `datasetsPushRecord_${new Date().getTime()}.xlsx`)
+}
+
+onMounted(() => {
+  getList();
+});
+</script>