瀏覽代碼

风险预测代码生成

wukai 8 月之前
父節點
當前提交
a181efe9c0

+ 44 - 0
src/api/biz/msConfig.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询首页指标配置列表
+export function listMsConfig(query) {
+    return request({
+        url: '/biz/msConfig/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询首页指标配置详细
+export function getMsConfig(imId) {
+    return request({
+        url: '/biz/msConfig/' + imId,
+        method: 'get'
+    })
+}
+
+// 新增首页指标配置
+export function addMsConfig(data) {
+    return request({
+        url: '/biz/msConfig',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改首页指标配置
+export function updateMsConfig(data) {
+    return request({
+        url: '/biz/msConfig',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除首页指标配置
+export function delMsConfig(imId) {
+    return request({
+        url: '/biz/msConfig/' + imId,
+        method: 'delete'
+    })
+}

+ 44 - 0
src/api/risk/analysis.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询风险分析结果列表
+export function listAnalysis(query) {
+    return request({
+        url: '/risk/analysis/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询风险分析结果详细
+export function getAnalysis(resultId) {
+    return request({
+        url: '/risk/analysis/' + resultId,
+        method: 'get'
+    })
+}
+
+// 新增风险分析结果
+export function addAnalysis(data) {
+    return request({
+        url: '/risk/analysis',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改风险分析结果
+export function updateAnalysis(data) {
+    return request({
+        url: '/risk/analysis',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除风险分析结果
+export function delAnalysis(resultId) {
+    return request({
+        url: '/risk/analysis/' + resultId,
+        method: 'delete'
+    })
+}

+ 44 - 0
src/api/risk/config.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询风险管理指标配置列表
+export function listConfig(query) {
+    return request({
+        url: '/risk/config/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询风险管理指标配置详细
+export function getConfig(hcId) {
+    return request({
+        url: '/risk/config/' + hcId,
+        method: 'get'
+    })
+}
+
+// 新增风险管理指标配置
+export function addConfig(data) {
+    return request({
+        url: '/risk/config',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改风险管理指标配置
+export function updateConfig(data) {
+    return request({
+        url: '/risk/config',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除风险管理指标配置
+export function delConfig(hcId) {
+    return request({
+        url: '/risk/config/' + hcId,
+        method: 'delete'
+    })
+}

+ 44 - 0
src/api/risk/model.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询风险管理列表
+export function listModel(query) {
+    return request({
+        url: '/risk/model/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询风险管理详细
+export function getModel(riskId) {
+    return request({
+        url: '/risk/model/' + riskId,
+        method: 'get'
+    })
+}
+
+// 新增风险管理
+export function addModel(data) {
+    return request({
+        url: '/risk/model',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改风险管理
+export function updateModel(data) {
+    return request({
+        url: '/risk/model',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除风险管理
+export function delModel(riskId) {
+    return request({
+        url: '/risk/model/' + riskId,
+        method: 'delete'
+    })
+}

+ 44 - 0
src/api/risk/obj.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询风险管理对象列表
+export function listObj(query) {
+    return request({
+        url: '/risk/obj/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询风险管理对象详细
+export function getObj(riskObjId) {
+    return request({
+        url: '/risk/obj/' + riskObjId,
+        method: 'get'
+    })
+}
+
+// 新增风险管理对象
+export function addObj(data) {
+    return request({
+        url: '/risk/obj',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改风险管理对象
+export function updateObj(data) {
+    return request({
+        url: '/risk/obj',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除风险管理对象
+export function delObj(riskObjId) {
+    return request({
+        url: '/risk/obj/' + riskObjId,
+        method: 'delete'
+    })
+}

+ 341 - 0
src/views/biz/msConfig/index.vue

@@ -0,0 +1,341 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="指标ID" prop="metricsId">
+        <el-input
+          v-model="queryParams.metricsId"
+          placeholder="请输入指标ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="指标名称" prop="metricsName">
+        <el-input
+          v-model="queryParams.metricsName"
+          placeholder="请输入指标名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="对象ID" prop="objId">
+        <el-input
+          v-model="queryParams.objId"
+          placeholder="请输入对象ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="对象名称" prop="objName">
+        <el-input
+          v-model="queryParams.objName"
+          placeholder="请输入对象名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="ID" prop="objMetricsId">
+        <el-input
+          v-model="queryParams.objMetricsId"
+          placeholder="请输入ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建人" prop="createBy">
+        <el-input
+          v-model="queryParams.createBy"
+          placeholder="请输入创建人"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime">
+        <el-date-picker clearable
+          v-model="queryParams.createTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择创建时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="更新人" prop="updateBy">
+        <el-input
+          v-model="queryParams.updateBy"
+          placeholder="请输入更新人"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="更新时间" prop="updateTime">
+        <el-date-picker clearable
+          v-model="queryParams.updateTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择更新时间">
+        </el-date-picker>
+      </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['biz:msConfig:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:msConfig:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:msConfig:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['biz:msConfig:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="msConfigList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="首页指标ID" align="center" prop="imId" />
+      <el-table-column label="指标ID" align="center" prop="metricsId" />
+      <el-table-column label="指标名称" align="center" prop="metricsName" />
+      <el-table-column label="对象ID" align="center" prop="objId" />
+      <el-table-column label="对象名称" align="center" prop="objName" />
+      <el-table-column label="ID" align="center" prop="objMetricsId" />
+      <el-table-column label="创建人" align="center" prop="createBy" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="更新人" align="center" prop="updateBy" />
+      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['biz:msConfig:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['biz:msConfig:remove']">删除</el-button>
+        </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"
+    />
+
+    <!-- 添加或修改首页指标配置对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="msConfigRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="指标ID" prop="metricsId">
+          <el-input v-model="form.metricsId" placeholder="请输入指标ID" />
+        </el-form-item>
+        <el-form-item label="指标名称" prop="metricsName">
+          <el-input v-model="form.metricsName" placeholder="请输入指标名称" />
+        </el-form-item>
+        <el-form-item label="对象ID" prop="objId">
+          <el-input v-model="form.objId" placeholder="请输入对象ID" />
+        </el-form-item>
+        <el-form-item label="对象名称" prop="objName">
+          <el-input v-model="form.objName" placeholder="请输入对象名称" />
+        </el-form-item>
+        <el-form-item label="ID" prop="objMetricsId">
+          <el-input v-model="form.objMetricsId" placeholder="请输入ID" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="MsConfig">
+    import { listMsConfig, getMsConfig, delMsConfig, addMsConfig, updateMsConfig } from "@/api/biz/msConfig";
+
+    const { proxy } = getCurrentInstance();
+
+const msConfigList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    metricsId: null,
+    metricsName: null,
+    objId: null,
+    objName: null,
+    objMetricsId: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询首页指标配置列表 */
+function getList() {
+  loading.value = true;
+  listMsConfig(queryParams.value).then(response => {
+    msConfigList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    imId: null,
+    metricsId: null,
+    metricsName: null,
+    objId: null,
+    objName: null,
+    objMetricsId: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  };
+  proxy.resetForm("msConfigRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.imId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加首页指标配置";
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _imId = row.imId || ids.value
+  getMsConfig(_imId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改首页指标配置";
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["msConfigRef"].validate(valid => {
+    if (valid) {
+      if (form.value.imId != null) {
+        updateMsConfig(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addMsConfig(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _imIds = row.imId || ids.value;
+  proxy.$modal.confirm('是否确认删除首页指标配置编号为"' + _imIds + '"的数据项?').then(function() {
+    return delMsConfig(_imIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('biz/msConfig/export', {
+    ...queryParams.value
+  }, `msConfig_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>

+ 406 - 0
src/views/risk/analysis/index.vue

@@ -0,0 +1,406 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="分析ID" prop="riskId">
+        <el-input
+          v-model="queryParams.riskId"
+          placeholder="请输入分析ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分析结果" prop="result">
+        <el-input
+          v-model="queryParams.result"
+          placeholder="请输入分析结果"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="均值比较" prop="avgValue">
+        <el-input
+          v-model="queryParams.avgValue"
+          placeholder="请输入均值比较"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="正态检测" prop="normalValid">
+        <el-input
+          v-model="queryParams.normalValid"
+          placeholder="请输入正态检测"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="方差齐性检测" prop="varianceValid">
+        <el-input
+          v-model="queryParams.varianceValid"
+          placeholder="请输入方差齐性检测"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="置信水平" prop="confidenceLevel">
+        <el-input
+          v-model="queryParams.confidenceLevel"
+          placeholder="请输入置信水平"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="p值" prop="pValue">
+        <el-input
+          v-model="queryParams.pValue"
+          placeholder="请输入p值"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分析时间" prop="analyseTime">
+        <el-date-picker clearable
+          v-model="queryParams.analyseTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择分析时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="图片地址" prop="imgPath">
+        <el-input
+          v-model="queryParams.imgPath"
+          placeholder="请输入图片地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建人" prop="createBy">
+        <el-input
+          v-model="queryParams.createBy"
+          placeholder="请输入创建人"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime">
+        <el-date-picker clearable
+          v-model="queryParams.createTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择创建时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="更新人" prop="updateBy">
+        <el-input
+          v-model="queryParams.updateBy"
+          placeholder="请输入更新人"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="更新时间" prop="updateTime">
+        <el-date-picker clearable
+          v-model="queryParams.updateTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择更新时间">
+        </el-date-picker>
+      </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['risk:analysis:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['risk:analysis:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['risk:analysis:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['risk:analysis:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="analysisList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="风险预测ID;" align="center" prop="resultId" />
+      <el-table-column label="分析ID" align="center" prop="riskId" />
+      <el-table-column label="分析结果" align="center" prop="result" />
+      <el-table-column label="均值比较" align="center" prop="avgValue" />
+      <el-table-column label="正态检测" align="center" prop="normalValid" />
+      <el-table-column label="方差齐性检测" align="center" prop="varianceValid" />
+      <el-table-column label="置信水平" align="center" prop="confidenceLevel" />
+      <el-table-column label="p值" align="center" prop="pValue" />
+      <el-table-column label="分析时间" align="center" prop="analyseTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.analyseTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="图片地址" align="center" prop="imgPath" />
+      <el-table-column label="创建人" align="center" prop="createBy" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="更新人" align="center" prop="updateBy" />
+      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['risk:analysis:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['risk:analysis:remove']">删除</el-button>
+        </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"
+    />
+
+    <!-- 添加或修改风险分析结果对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="analysisRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="分析ID" prop="riskId">
+          <el-input v-model="form.riskId" placeholder="请输入分析ID" />
+        </el-form-item>
+        <el-form-item label="分析结果" prop="result">
+          <el-input v-model="form.result" placeholder="请输入分析结果" />
+        </el-form-item>
+        <el-form-item label="均值比较" prop="avgValue">
+          <el-input v-model="form.avgValue" placeholder="请输入均值比较" />
+        </el-form-item>
+        <el-form-item label="正态检测" prop="normalValid">
+          <el-input v-model="form.normalValid" placeholder="请输入正态检测" />
+        </el-form-item>
+        <el-form-item label="方差齐性检测" prop="varianceValid">
+          <el-input v-model="form.varianceValid" placeholder="请输入方差齐性检测" />
+        </el-form-item>
+        <el-form-item label="置信水平" prop="confidenceLevel">
+          <el-input v-model="form.confidenceLevel" placeholder="请输入置信水平" />
+        </el-form-item>
+        <el-form-item label="p值" prop="pValue">
+          <el-input v-model="form.pValue" placeholder="请输入p值" />
+        </el-form-item>
+        <el-form-item label="分析时间" prop="analyseTime">
+          <el-date-picker clearable
+            v-model="form.analyseTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择分析时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="图片地址" prop="imgPath">
+          <el-input v-model="form.imgPath" placeholder="请输入图片地址" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Analysis">
+    import { listAnalysis, getAnalysis, delAnalysis, addAnalysis, updateAnalysis } from "@/api/risk/analysis";
+
+    const { proxy } = getCurrentInstance();
+
+const analysisList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    riskId: null,
+    result: null,
+    avgValue: null,
+    normalValid: null,
+    varianceValid: null,
+    confidenceLevel: null,
+    pValue: null,
+    analyseTime: null,
+    imgPath: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询风险分析结果列表 */
+function getList() {
+  loading.value = true;
+  listAnalysis(queryParams.value).then(response => {
+    analysisList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    resultId: null,
+    riskId: null,
+    result: null,
+    avgValue: null,
+    normalValid: null,
+    varianceValid: null,
+    confidenceLevel: null,
+    pValue: null,
+    analyseTime: null,
+    imgPath: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  };
+  proxy.resetForm("analysisRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.resultId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加风险分析结果";
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _resultId = row.resultId || ids.value
+  getAnalysis(_resultId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改风险分析结果";
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["analysisRef"].validate(valid => {
+    if (valid) {
+      if (form.value.resultId != null) {
+        updateAnalysis(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addAnalysis(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _resultIds = row.resultId || ids.value;
+  proxy.$modal.confirm('是否确认删除风险分析结果编号为"' + _resultIds + '"的数据项?').then(function() {
+    return delAnalysis(_resultIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('risk/analysis/export', {
+    ...queryParams.value
+  }, `analysis_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>

+ 330 - 0
src/views/risk/config/index.vue

@@ -0,0 +1,330 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="指标ID" prop="metricsId">
+        <el-input
+          v-model="queryParams.metricsId"
+          placeholder="请输入指标ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="指标名称;" prop="metricsName">
+        <el-input
+          v-model="queryParams.metricsName"
+          placeholder="请输入指标名称;"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="显示名称" prop="viewName">
+        <el-input
+          v-model="queryParams.viewName"
+          placeholder="请输入显示名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="排序依据" prop="rankingBased">
+        <el-input
+          v-model="queryParams.rankingBased"
+          placeholder="请输入排序依据"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建人" prop="createBy">
+        <el-input
+          v-model="queryParams.createBy"
+          placeholder="请输入创建人"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime">
+        <el-date-picker clearable
+          v-model="queryParams.createTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择创建时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="更新人" prop="updateBy">
+        <el-input
+          v-model="queryParams.updateBy"
+          placeholder="请输入更新人"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="更新时间" prop="updateTime">
+        <el-date-picker clearable
+          v-model="queryParams.updateTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择更新时间">
+        </el-date-picker>
+      </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['risk:config:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['risk:config:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['risk:config:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['risk:config:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="配置ID;" align="center" prop="hcId" />
+      <el-table-column label="指标ID" align="center" prop="metricsId" />
+      <el-table-column label="指标名称;" align="center" prop="metricsName" />
+      <el-table-column label="显示名称" align="center" prop="viewName" />
+      <el-table-column label="配置类型" align="center" prop="configType" />
+      <el-table-column label="排序依据" align="center" prop="rankingBased" />
+      <el-table-column label="创建人" align="center" prop="createBy" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="更新人" align="center" prop="updateBy" />
+      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['risk:config:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['risk:config:remove']">删除</el-button>
+        </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"
+    />
+
+    <!-- 添加或修改风险管理指标配置对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="configRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="指标ID" prop="metricsId">
+          <el-input v-model="form.metricsId" placeholder="请输入指标ID" />
+        </el-form-item>
+        <el-form-item label="指标名称;" prop="metricsName">
+          <el-input v-model="form.metricsName" placeholder="请输入指标名称;" />
+        </el-form-item>
+        <el-form-item label="显示名称" prop="viewName">
+          <el-input v-model="form.viewName" placeholder="请输入显示名称" />
+        </el-form-item>
+        <el-form-item label="排序依据" prop="rankingBased">
+          <el-input v-model="form.rankingBased" placeholder="请输入排序依据" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Config">
+    import { listConfig, getConfig, delConfig, addConfig, updateConfig } from "@/api/risk/config";
+
+    const { proxy } = getCurrentInstance();
+
+const configList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    metricsId: null,
+    metricsName: null,
+    viewName: null,
+    configType: null,
+    rankingBased: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询风险管理指标配置列表 */
+function getList() {
+  loading.value = true;
+  listConfig(queryParams.value).then(response => {
+    configList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    hcId: null,
+    metricsId: null,
+    metricsName: null,
+    viewName: null,
+    configType: null,
+    rankingBased: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  };
+  proxy.resetForm("configRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.hcId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加风险管理指标配置";
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _hcId = row.hcId || ids.value
+  getConfig(_hcId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改风险管理指标配置";
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["configRef"].validate(valid => {
+    if (valid) {
+      if (form.value.hcId != null) {
+        updateConfig(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addConfig(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _hcIds = row.hcId || ids.value;
+  proxy.$modal.confirm('是否确认删除风险管理指标配置编号为"' + _hcIds + '"的数据项?').then(function() {
+    return delConfig(_hcIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('risk/config/export', {
+    ...queryParams.value
+  }, `config_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>

+ 413 - 0
src/views/risk/model/index.vue

@@ -0,0 +1,413 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="指标ID" prop="metricsId">
+        <el-input
+            v-model="queryParams.metricsId"
+            placeholder="请输入指标ID"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="指标名称;" prop="metricsName">
+        <el-input
+            v-model="queryParams.metricsName"
+            placeholder="请输入指标名称;"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="选择对象类型" prop="objType">
+        <el-select v-model="queryParams.objType" placeholder="请选择选择对象类型" clearable>
+          <el-option
+              v-for="dict in select_obj"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="指标方向" prop="upDown">
+        <el-input
+            v-model="queryParams.upDown"
+            placeholder="请输入指标方向"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="置信水平" prop="confidenceLevel">
+        <el-input
+            v-model="queryParams.confidenceLevel"
+            placeholder="请输入置信水平"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="分析类型" prop="riskType">
+        <el-select v-model="queryParams.riskType" placeholder="请选择分析类型" clearable>
+          <el-option
+              v-for="dict in risk_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否定时分析" prop="timeSwitch">
+        <el-select v-model="queryParams.timeSwitch" placeholder="请选择是否定时分析" clearable>
+          <el-option
+              v-for="dict in sys_yes_no"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="创建人" prop="createBy">
+        <el-input
+            v-model="queryParams.createBy"
+            placeholder="请输入创建人"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime">
+        <el-date-picker clearable
+                        v-model="queryParams.createTime"
+                        type="date"
+                        value-format="YYYY-MM-DD"
+                        placeholder="请选择创建时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="更新人" prop="updateBy">
+        <el-input
+            v-model="queryParams.updateBy"
+            placeholder="请输入更新人"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="更新时间" prop="updateTime">
+        <el-date-picker clearable
+                        v-model="queryParams.updateTime"
+                        type="date"
+                        value-format="YYYY-MM-DD"
+                        placeholder="请选择更新时间">
+        </el-date-picker>
+      </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+            type="primary"
+            plain
+            icon="Plus"
+            @click="handleAdd"
+            v-hasPermi="['risk:model:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="success"
+            plain
+            icon="Edit"
+            :disabled="single"
+            @click="handleUpdate"
+            v-hasPermi="['risk:model:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            :disabled="multiple"
+            @click="handleDelete"
+            v-hasPermi="['risk:model:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            v-hasPermi="['risk:model:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="modelList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="风险预测ID;" align="center" prop="riskId" />
+      <el-table-column label="指标ID" align="center" prop="metricsId" />
+      <el-table-column label="指标名称;" align="center" prop="metricsName" />
+      <el-table-column label="选择对象类型" align="center" prop="objType">
+        <template #default="scope">
+          <dict-tag :options="select_obj" :value="scope.row.objType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="指标方向" align="center" prop="upDown">
+        <template #default="scope">
+          <dict-tag :options="risk_up" :value="scope.row.upDown"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="置信水平" align="center" prop="confidenceLevel" />
+      <el-table-column label="分析类型" align="center" prop="riskType">
+        <template #default="scope">
+          <dict-tag :options="risk_type" :value="scope.row.riskType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="是否定时分析" align="center" prop="timeSwitch">
+        <template #default="scope">
+          <dict-tag :options="sys_yes_no" :value="scope.row.timeSwitch"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建人" align="center" prop="createBy" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="更新人" align="center" prop="updateBy" />
+      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{mi}:{s}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['risk:model:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['risk:model:remove']">删除</el-button>
+        </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"
+    />
+
+    <!-- 添加或修改风险管理对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="modelRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="指标ID" prop="metricsId">
+          <el-input v-model="form.metricsId" placeholder="请输入指标ID" />
+        </el-form-item>
+        <el-form-item label="指标名称;" prop="metricsName">
+          <el-input v-model="form.metricsName" placeholder="请输入指标名称;" />
+        </el-form-item>
+        <el-form-item label="选择对象类型" prop="objType">
+          <el-select v-model="form.objType" placeholder="请选择选择对象类型">
+            <el-option
+                v-for="dict in select_obj"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="指标方向" prop="upDown">
+          <el-input v-model="form.upDown" placeholder="请输入指标方向" />
+        </el-form-item>
+        <el-form-item label="置信水平" prop="confidenceLevel">
+          <el-input v-model="form.confidenceLevel" placeholder="请输入置信水平" />
+        </el-form-item>
+        <el-form-item label="分析类型" prop="riskType">
+          <el-select v-model="form.riskType" placeholder="请选择分析类型">
+            <el-option
+                v-for="dict in risk_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否定时分析" prop="timeSwitch">
+          <el-select v-model="form.timeSwitch" placeholder="请选择是否定时分析">
+            <el-option
+                v-for="dict in sys_yes_no"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Model">
+import { listModel, getModel, delModel, addModel, updateModel } from "@/api/risk/model";
+
+const { proxy } = getCurrentInstance();
+const { risk_type, sys_yes_no, select_obj } = proxy.useDict('risk_type', 'sys_yes_no', 'select_obj');
+
+const modelList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    metricsId: null,
+    metricsName: null,
+    objType: null,
+    upDown: null,
+    confidenceLevel: null,
+    riskType: null,
+    timeSwitch: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询风险管理列表 */
+function getList() {
+  loading.value = true;
+  listModel(queryParams.value).then(response => {
+    modelList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    riskId: null,
+    metricsId: null,
+    metricsName: null,
+    objType: null,
+    upDown: null,
+    confidenceLevel: null,
+    riskType: null,
+    timeSwitch: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null,
+    remark: null
+  };
+  proxy.resetForm("modelRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.riskId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加风险管理";
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _riskId = row.riskId || ids.value
+  getModel(_riskId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改风险管理";
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["modelRef"].validate(valid => {
+    if (valid) {
+      if (form.value.riskId != null) {
+        updateModel(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addModel(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _riskIds = row.riskId || ids.value;
+  proxy.$modal.confirm('是否确认删除风险管理编号为"' + _riskIds + '"的数据项?').then(function() {
+    return delModel(_riskIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('risk/model/export', {
+    ...queryParams.value
+  }, `model_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>

+ 241 - 0
src/views/risk/obj/index.vue

@@ -0,0 +1,241 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="风险ID" prop="riskId">
+        <el-input
+          v-model="queryParams.riskId"
+          placeholder="请输入风险ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="对象ID" prop="objId">
+        <el-input
+          v-model="queryParams.objId"
+          placeholder="请输入对象ID"
+          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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['risk:obj:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['risk:obj:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['risk:obj:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['risk:obj:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="objList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="风险对象ID" align="center" prop="riskObjId" />
+      <el-table-column label="风险ID" align="center" prop="riskId" />
+      <el-table-column label="对象ID" align="center" prop="objId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['risk:obj:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['risk:obj:remove']">删除</el-button>
+        </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"
+    />
+
+    <!-- 添加或修改风险管理对象对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="objRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="风险ID" prop="riskId">
+          <el-input v-model="form.riskId" placeholder="请输入风险ID" />
+        </el-form-item>
+        <el-form-item label="对象ID" prop="objId">
+          <el-input v-model="form.objId" placeholder="请输入对象ID" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Obj">
+    import { listObj, getObj, delObj, addObj, updateObj } from "@/api/risk/obj";
+
+    const { proxy } = getCurrentInstance();
+
+const objList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    riskId: null,
+    objId: null
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询风险管理对象列表 */
+function getList() {
+  loading.value = true;
+  listObj(queryParams.value).then(response => {
+    objList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    riskObjId: null,
+    riskId: null,
+    objId: null
+  };
+  proxy.resetForm("objRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.riskObjId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加风险管理对象";
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _riskObjId = row.riskObjId || ids.value
+  getObj(_riskObjId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改风险管理对象";
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["objRef"].validate(valid => {
+    if (valid) {
+      if (form.value.riskObjId != null) {
+        updateObj(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addObj(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _riskObjIds = row.riskObjId || ids.value;
+  proxy.$modal.confirm('是否确认删除风险管理对象编号为"' + _riskObjIds + '"的数据项?').then(function() {
+    return delObj(_riskObjIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('risk/obj/export', {
+    ...queryParams.value
+  }, `obj_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>

+ 2 - 2
vite.config.js

@@ -10,7 +10,7 @@ export default defineConfig(({ mode, command }) => {
     // 部署生产环境和开发环境下的URL。
     // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
     // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
-    base: VITE_APP_ENV === 'production' ? '/' : '/',
+    base: VITE_APP_ENV === 'production' ? '/pxf-jy' : '/',
     plugins: createVitePlugins(env, command === 'build'),
     resolve: {
       // https://cn.vitejs.dev/config/#resolve-alias
@@ -31,7 +31,7 @@ export default defineConfig(({ mode, command }) => {
       proxy: {
         // https://cn.vitejs.dev/config/#server-proxy
         '/dev-api': {
-          target: 'http://localhost:8080',
+          target: 'http://localhost:9527',
           changeOrigin: true,
           rewrite: (p) => p.replace(/^\/dev-api/, '')
         }