Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

chenguo 1 päivä sitten
vanhempi
commit
da446e38a0

+ 40 - 0
.env.prod-jnlzjk

@@ -0,0 +1,40 @@
+# 页面标题
+VUE_APP_TITLE =济南联志健康互联网医院管理系统
+# 首页菜单标题
+VUE_APP_TITLE_INDEX =济南联志健康互联网医院
+# 公司名称
+VUE_APP_COMPANY_NAME =济南联志健康
+# ICP备案号
+VUE_APP_ICP_RECORD =渝ICP备2024031984号-2
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/jnlzjk.png
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = jnlzjk-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = jnlzjk-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://jnlzjktcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://jnlzjkobs.ylrztop.com
+
+# 开发环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 1 - 1
.env.prod-myhk

@@ -1,7 +1,7 @@
 # 页面标题
 VUE_APP_TITLE =木易华康互联网医院管理系统
 # 首页菜单标题
-VUE_APP_TITLE_INDEX =木易华康互联网医院
+VUE_APP_TITLE_INDEX =康复e站
 # 公司名称
 VUE_APP_COMPANY_NAME =福州市木易华康医药有限公司
 # ICP备案号

+ 40 - 0
.env.prod-nmgyt

@@ -0,0 +1,40 @@
+# 页面标题
+VUE_APP_TITLE =内蒙古一贴医药
+# 首页菜单标题
+VUE_APP_TITLE_INDEX =内蒙古一贴医药
+# 公司名称
+VUE_APP_COMPANY_NAME =内蒙古好药师蒙一堂大药房有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =蒙ICP备2023002294号
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/nmgyt.jpg
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = nmgyt-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = nmgyt-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://nmgyttcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://nmgytobs.ylrztop.com
+
+# 开发环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 2
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 2 - 0
package.json

@@ -13,6 +13,7 @@
     "build:prod-jzzx": "vue-cli-service build --mode prod-jzzx",
     "build:prod-hcl": "vue-cli-service build --mode prod-hcl",
     "build:prod-myhk": "vue-cli-service build --mode prod-myhk",
+    "build:prod-nmgyt": "vue-cli-service build --mode prod-nmgyt",
     "build:prod-sxjz": "vue-cli-service build --mode prod-sxjz",
     "build:prod-xfk": "vue-cli-service build --mode prod-xfk",
     "build:prod-jnmy": "vue-cli-service build --mode prod-jnmy",
@@ -32,6 +33,7 @@
     "build:prod-cqxzt": "vue-cli-service build --mode prod-cqxzt",
     "build:prod-bjyjb": "vue-cli-service build --mode prod-bjyjb",
     "build:prod-bjczwh": "vue-cli-service build --mode prod-bjczwh",
+    "build:prod-jnlzjk": "vue-cli-service build --mode prod-jnlzjk",
     "build:prod-fby": "vue-cli-service build --mode prod-fby",
     "build:prod-zkzh": "vue-cli-service build --mode prod-zkzh",
     "build:prod-syysy": "vue-cli-service build --mode prod-syysy",

+ 7 - 0
src/api/course/coursePlaySourceConfig.js

@@ -37,3 +37,10 @@ export function del(id) {
     method: 'delete'
   })
 }
+
+export function listAll() {
+  return request({
+    url: '/course/playSourceConfig/listAll',
+    method: 'get'
+  })
+}

+ 70 - 0
src/api/fastGpt/FastGptExtUserTag.js

@@ -0,0 +1,70 @@
+import request from '@/utils/request'
+
+// 查询处理新客标签列表
+export function listFastGptExtUserTag(query) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询处理新客标签详细
+export function getFastGptExtUserTag(id) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag/' + id,
+    method: 'get'
+  })
+}
+
+// 新增处理新客标签
+export function addFastGptExtUserTag(data) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改处理新客标签
+export function updateFastGptExtUserTag(data) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除处理新客标签
+export function delFastGptExtUserTag(id) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出处理新客标签
+export function exportFastGptExtUserTag(query) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function addFastGptTagByCorpId(data) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag/addFastGptTagByCorpId',
+    method: 'post',
+    data: data
+  })
+}
+
+export function getMyQwUserList(query) {
+  return request({
+    url: '/fastGpt/FastGptExtUserTag/getMyQwUserList',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/his/hfpayConfig.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询汇付多支付配置列表
+export function listHfpayConfig(query) {
+  return request({
+    url: '/his/hfpayConfig/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询汇付多支付配置详细
+export function getHfpayConfig(id) {
+  return request({
+    url: '/his/hfpayConfig/' + id,
+    method: 'get'
+  })
+}
+
+// 新增汇付多支付配置
+export function addHfpayConfig(data) {
+  return request({
+    url: '/his/hfpayConfig',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改汇付多支付配置
+export function updateHfpayConfig(data) {
+  return request({
+    url: '/his/hfpayConfig',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除汇付多支付配置
+export function delHfpayConfig(id) {
+  return request({
+    url: '/his/hfpayConfig/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出汇付多支付配置
+export function exportHfpayConfig(query) {
+  return request({
+    url: '/his/hfpayConfig/export',
+    method: 'get',
+    params: query
+  })
+}

+ 9 - 0
src/api/qw/externalContact.js

@@ -51,3 +51,12 @@ export function exportExternalContact(query) {
     params: query
   })
 }
+
+// 导出企业微信客户unionId
+export function exportUnionId(query) {
+  return request({
+    url: '/qw/externalContact/exportUnionId',
+    method: 'get',
+    params: query
+  })
+}

+ 8 - 0
src/api/qw/tagGroup.js

@@ -16,6 +16,14 @@ export function allListTagGroup(query) {
   })
 }
 
+export function getAllListTagGroup(query) {
+  return request({
+    url: '/qw/tagGroup/getAllList',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询企微客户标签组详细
 export function getTagGroup(id) {
   return request({

BIN
src/assets/logo/jnlzjk.png


BIN
src/assets/logo/nmgyt.jpg


+ 2 - 2
src/views/components/his/userPatietDetails.vue

@@ -305,7 +305,7 @@ export default {
     /** 查询病人列表 */
     getList() {
       this.loading = true;
-      listPatientList(this.queryParams).then(response => {
+      listPatient(this.queryParams).then(response => {
         this.patientList = response.rows;
         this.total = response.total;
         this.loading = false;
@@ -314,7 +314,7 @@ export default {
     getPatList(id){
       this.loading = true;
       this.queryParams.userId=id;
-      listPatientList(this.queryParams).then(response => {
+      listPatient(this.queryParams).then(response => {
         this.patientList = response.rows;
         this.total = response.total;
         this.loading = false;

+ 5 - 2
src/views/course/videoResource/index.vue

@@ -1688,11 +1688,14 @@ export default {
       this.uploadQueue.push(tempVideo);
       this.videoList.unshift(tempVideo);
 
-      // 获取视频时长
+       // 获取视频时长
       const video = document.createElement('video');
       video.preload = 'metadata';
       video.onloadedmetadata = () => {
-        tempVideo.duration = Math.round(video.duration);
+        const index = this.videoList.findIndex(item => item.tempId === tempVideo.tempId);
+        if (index !== -1) {
+          tempVideo.duration = Math.round(video.duration);
+        }
       };
       video.src = URL.createObjectURL(file);
 

+ 567 - 0
src/views/fastGpt/fastGptExtUserTag/index.vue

@@ -0,0 +1,567 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="企微账号" prop="corpId">
+        <el-select v-model="queryParams.corpId" placeholder="企微账号" clearable size="small"
+                   @change="updateQwuser()">
+          <el-option
+            v-for="dict in myQwUserList"
+            :key="dict.corpId"
+            :label="dict.corpName"
+            :value="dict.corpId"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="标签id" prop="tagId">
+        <el-input
+          v-model="queryParams.tagId"
+          placeholder="请输入标签id"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['FastGptExtUserTag:FastGptExtUserTag:add']"
+        >新增</el-button>
+      </el-col>
+<!--      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['FastGptExtUserTag:FastGptExtUserTag:edit']"
+        >修改</el-button>
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['FastGptExtUserTag:FastGptExtUserTag:remove']"
+        >删除</el-button>
+      </el-col>
+<!--      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['FastGptExtUserTag:FastGptExtUserTag:export']"
+        >导出</el-button>
+      </el-col>-->
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="FastGptExtUserTagList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="企业名称" align="center" prop="corpId">
+        <template slot-scope="scope">
+          {{ getCorpNameById(scope.row.corpId) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="标签名称" align="center" prop="tagName">
+        <template slot-scope="scope">
+          {{ getTagNameById(scope.row.tagId) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="标签id" align="center" prop="tagId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+<!--          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['FastGptExtUserTag:FastGptExtUserTag:edit']"
+          >修改</el-button>-->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['FastGptExtUserTag:FastGptExtUserTag:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改处理新客标签对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="标签id" prop="tagId">
+          <el-input v-model="form.tagId" placeholder="请输入标签id" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog title="批量添加标签" :visible.sync="tagOpen" width="800px" append-to-body>
+      <div>搜索标签:
+        <el-input v-model="tagChange.tagName" placeholder="请输入标签名称" clearable size="small" style="width: 200px;margin-right: 10px" />
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleSearchTags(tagChange.tagName)">搜索</el-button>
+        <el-button type="primary" icon="el-icon-plus" size="mini" @click="cancelSearchTags">重置</el-button>
+      </div>
+      <el-form ref="form" :model="addTagFormByWatch"  label-width="80px">
+        <div v-for="item in tagGroupList" :key="item.id" >
+          <div style="font-size: 20px;margin-top: 20px;margin-bottom: 20px;">
+            <span class="name-background">{{ item.name }}</span>
+          </div>
+          <!-- 添加外层滚动容器 -->
+          <div class="scroll-wrapper">
+            <div class="tag-container">
+              <a
+                v-for="tagItem in item.tag"
+                class="tag-box"
+                @click="tagSelection(tagItem)"
+                :class="{ 'tag-selected': tagItem.isSelected }"
+              >
+                {{ tagItem.name }}
+              </a>
+            </div>
+          </div>
+        </div>
+      </el-form>
+      <pagination
+        v-show="tagTotal>0"
+        :total="tagTotal"
+        :page.sync="queryTagParams.pageNum"
+        :limit.sync="queryTagParams.pageSize"
+        @pagination="updateQwuser"
+      />
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="addTagSubmitForm()">确 定</el-button>
+        <el-button @click="addTagCancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listFastGptExtUserTag,addFastGptTagByCorpId,getMyQwUserList, getFastGptExtUserTag, delFastGptExtUserTag, addFastGptExtUserTag, updateFastGptExtUserTag, exportFastGptExtUserTag } from "@/api/fastGpt/FastGptExtUserTag";
+import {allListTagGroup, getAllListTagGroup} from "@/api/qw/tagGroup";
+import {searchTags} from "@/api/qw/tag";
+export default {
+  name: "FastGptExtUserTag",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 处理新客标签表格数据
+      FastGptExtUserTagList: [],
+      myQwUserList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      tagOpen: false,
+      queryTagParams: {
+        pageNum: 1,
+        pageSize: 5,
+        total: 0,
+        name: null,
+        tagName: null,
+        corpId: null,
+      },
+      //标签弹窗选择
+      tagChange: {
+        open: false,
+        index: null,
+      },
+      addTagFormByWatch: {
+        tagIds: [],
+        corpId: null,
+      },
+      tagGroupList: [],
+      showTagGroupList: [],
+      tagTotal: 0,
+
+
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        tagId: null,
+        tagIds: [],
+        tagName: null,
+        corpId: null,
+      },
+
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {}
+    };
+  },
+  created() {
+    getMyQwUserList().then(response => {
+      this.myQwUserList = response.data;
+      // 如果myQwUserList不为空,默认选中第一个
+      if (this.myQwUserList && this.myQwUserList.length > 0) {
+        this.queryParams.corpId = this.myQwUserList[0].corpId;
+        // 重新加载列表以显示选中企业的数据
+        this.getList();
+      }
+    });
+  },
+  methods: {
+    /** 查询处理新客标签列表 */
+    getList() {
+      this.loading = true;
+      listFastGptExtUserTag(this.queryParams).then(response => {
+        this.FastGptExtUserTagList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+
+    addTagCancel() {
+      this.addTagFormByWatch = {
+        tagIds: [],
+        corpId: null,
+      };
+      this.tagOpen = false;
+      // 清除标签选择状态
+      this.clearTagSelections();
+    },
+    handleSearchTags(name) {
+
+      if (!name) {
+        return this.$message.error("请输入要搜索的标签")
+      }
+
+      this.queryTagParams.name = name;
+      this.queryTagParams.corpId = this.queryParams.corpId;
+
+      searchTags(this.queryTagParams).then(response => {
+        this.tagGroupList = response.rows;
+      });
+
+
+    },
+    tagSelection(row) {
+      row.isSelected = !row.isSelected;
+      this.$forceUpdate();
+    },
+    cancelSearchTags() {
+      this.resetSearchQueryTag()
+    },
+    resetSearchQueryTag() {
+
+      this.queryTagParams = {
+        pageNum: 1,
+        pageSize: 5,
+        total: 0,
+        name: null,
+      };
+    },
+    updateQwuser() {
+      this.getList();
+      this.queryTagParams.corpId = this.queryParams.corpId
+      allListTagGroup(this.queryTagParams).then(response => {
+        this.tagGroupList = response.rows;
+        this.tagTotal = response.total;
+      });
+      getAllListTagGroup(this.queryTagParams).then(response => {
+        this.showTagGroupList = response.rows;
+      });
+    },
+    addTagSubmitForm() {
+
+      for (let i = 0; i < this.tagGroupList.length; i++) {
+        for (let x = 0; x < this.tagGroupList[i].tag.length; x++) {
+          if (this.tagGroupList[i].tag[x].isSelected == true) {
+            this.addTagFormByWatch.tagIds.push(this.tagGroupList[i].tag[x].tagId)
+          }
+        }
+      }
+      if (this.addTagFormByWatch.tagIds == [] || this.addTagFormByWatch.tagIds == null || this.addTagFormByWatch.tagIds == "") {
+        return this.$message('请选择标签');
+      }
+
+      if (this.queryParams.corpId == [] || this.queryParams.corpId == null || this.queryParams.corpId == "") {
+        return this.$message('请选择企微账号');
+      }
+
+
+      let loadingRock = this.$loading({
+        lock: true,
+        text: '正在执行中请稍后~~请不要刷新页面!!',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+      this.addTagFormByWatch.corpId =  this.queryParams.corpId;
+
+      addFastGptTagByCorpId(this.addTagFormByWatch).then(response => {
+        this.tagOpen = false;
+        loadingRock.close();
+        this.addTagFormByWatch = {
+          tagIds: [],
+          corpId: null,
+        };
+        this.getList()
+      }).finally(res => {
+        loadingRock.close();
+      });
+      // 清除标签选择状态
+      this.clearTagSelections();
+
+    },
+    // 清除所有标签的选中状态
+    clearTagSelections() {
+      for (let i = 0; i < this.tagGroupList.length; i++) {
+        for (let x = 0; x < this.tagGroupList[i].tag.length; x++) {
+          this.tagGroupList[i].tag[x].isSelected = false;
+        }
+      }
+      this.$forceUpdate();
+    },
+    /** 根据tagId获取tagName */
+    getTagNameById(tagId) {
+      // 在tagList中查找匹配的标签
+      for (let i = 0; i < this.showTagGroupList.length; i++) {
+        for (let x = 0; x < this.showTagGroupList[i].tag.length; x++) {
+          if (this.showTagGroupList[i].tag[x].tagId === tagId) {
+           return this.showTagGroupList[i].tag[x].name;
+          }
+        }
+      }
+      // 如果找不到匹配的标签,返回空字符串
+      return '';
+    },
+
+    // 取消按钮
+    cancel() {
+      //this.open = false;
+      this.tagOpen = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        tagId: null,
+        corpId: null,
+        createTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      if (this.queryParams.corpId == [] || this.queryParams.corpId == null || this.queryParams.corpId == "") {
+        return this.$message('请选择企微账号');
+      }
+      // 清除标签选择状态
+      this.clearTagSelections();
+      this.tagOpen = true;
+      this.title = "添加新客标签";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getFastGptExtUserTag(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改处理新客标签";
+      });
+    },
+    getCorpNameById(corpId) {
+      if (!corpId) return '';
+      const corp = this.myQwUserList.find(item => item.corpId === corpId);
+      return corp ? corp.corpName : corpId;
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateFastGptExtUserTag(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addFastGptExtUserTag(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除处理新客标签编号为"' + ids + '"的数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delFastGptExtUserTag(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有处理新客标签数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        this.exportLoading = true;
+        return exportFastGptExtUserTag(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {
+      });
+    }
+  }
+};
+</script>
+<style scoped>
+/* CSS 样式 */
+.tag-container {
+  display: flex;
+  flex-wrap: wrap; /* 超出宽度时自动换行 */
+  gap: 8px; /* 设置标签之间的间距 */
+}
+
+.name-background {
+  display: inline-block;
+  background-color: #abece6; /* 背景颜色 */
+  padding: 4px 8px; /* 调整内边距,让背景包裹文字 */
+  border-radius: 4px; /* 可选:设置圆角 */
+}
+
+/* CSS 样式 */
+.tag-container {
+  display: flex;
+  flex-wrap: wrap; /* 超出宽度时自动换行 */
+  gap: 8px; /* 设置标签之间的间距 */
+}
+
+.name-background {
+  display: inline-block;
+  background-color: #abece6; /* 背景颜色 */
+  padding: 4px 8px; /* 调整内边距,让背景包裹文字 */
+  border-radius: 4px; /* 可选:设置圆角 */
+}
+
+.tag-box {
+  padding: 8px 12px;
+  border: 1px solid #989797;
+  border-radius: 4px;
+  cursor: pointer;
+  display: inline-block;
+}
+
+.tag-selected {
+  background-color: #00bc98;
+  color: #fff;
+  border-color: #00bc98;
+}
+
+.el-tag + .el-tag {
+  margin-left: 10px;
+}
+
+
+.button-new-tag {
+  margin-left: 10px;
+  height: 32px;
+  line-height: 30px;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+
+.input-new-tag {
+  width: 90px;
+  margin-left: 10px;
+  vertical-align: bottom;
+}
+
+/* 新增的滚动容器样式(不影响原有样式) */
+.scroll-wrapper {
+  max-height: 130px; /* 大约三行的高度 */
+  overflow-y: auto; /* 垂直滚动 */
+  padding-right: 5px; /* 为滚动条留出空间 */
+}
+
+/* 美化滚动条(可选) */
+.scroll-wrapper::-webkit-scrollbar {
+  width: 6px;
+}
+
+.scroll-wrapper::-webkit-scrollbar-thumb {
+  background: rgba(0, 0, 0, 0.2);
+  border-radius: 3px;
+}
+</style>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 403 - 373
src/views/his/company/index.vue


+ 326 - 0
src/views/his/hfpayConfig/index.vue

@@ -0,0 +1,326 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="85px">
+      <el-form-item label="appId" prop="appId">
+        <el-input
+          v-model="queryParams.appId"
+          placeholder="请输入appId"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="汇付产品号" prop="hfProductId">
+        <el-input
+          v-model="queryParams.hfProductId"
+          placeholder="请输入汇付产品号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @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="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['his:hfpayConfig:add']"
+        >新增</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['his:hfpayConfig:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['his:hfpayConfig:remove']"
+        >删除</el-button>
+      </el-col> -->
+      <!-- <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['his:hfpayConfig:export']"
+        >导出</el-button>
+      </el-col> -->
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="hfpayConfigList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="appId" align="center" prop="appId" />
+      <el-table-column label="汇付产品号" align="center" prop="hfProductId" />
+      <el-table-column label="系统号" align="center" prop="hfSysId" />
+      <el-table-column label="商户号" align="center" prop="huifuId" />
+      <el-table-column label="支付回调地址" align="center" :show-overflow-tooltip="true" prop="hfPayNotifyUrl" />
+      <el-table-column label="大额支付回调地址" align="center" :show-overflow-tooltip="true" prop="hfPayOnlineNotifyUrl" />
+      <el-table-column label="退款回调地址" align="center" :show-overflow-tooltip="true" prop="hfRefundNotifyUrl" />
+      <el-table-column label="大额退款回调地址" align="center" :show-overflow-tooltip="true" prop="hfOnlineRefundNotifyUrl" />
+      <el-table-column label="商户私钥" align="center" :show-overflow-tooltip="true" prop="hfRsaPrivateKey" />
+      <el-table-column label="汇付公钥" align="center" :show-overflow-tooltip="true" prop="hfRsaPublicKey" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['his:hfpayConfig:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['his:hfpayConfig:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改汇付多支付配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="125px">
+        <el-form-item label="appId" prop="appId">
+          <el-input v-model="form.appId" placeholder="请输入appId" />
+        </el-form-item>
+        <el-form-item label="汇付产品号" prop="hfProductId">
+          <el-input v-model="form.hfProductId" placeholder="请输入汇付产品号" />
+        </el-form-item>
+        <el-form-item label="系统号" prop="hfSysId">
+          <el-input v-model="form.hfSysId" placeholder="请输入系统号" />
+        </el-form-item>
+        <el-form-item label="商户号" prop="huifuId">
+          <el-input v-model="form.huifuId" placeholder="请输入商户号" />
+        </el-form-item>
+        <el-form-item label="支付回调地址" prop="hfPayNotifyUrl">
+          <el-input v-model="form.hfPayNotifyUrl" placeholder="请输入支付回调地址" />
+        </el-form-item>
+        <el-form-item label="大额支付回调地址" prop="hfPayOnlineNotifyUrl">
+          <el-input v-model="form.hfPayOnlineNotifyUrl" placeholder="请输入大额支付回调地址" />
+        </el-form-item>
+        <el-form-item label="退款回调地址" prop="hfRefundNotifyUrl">
+          <el-input v-model="form.hfRefundNotifyUrl" placeholder="请输入退款回调地址" />
+        </el-form-item>
+        <el-form-item label="大额退款回调地址" prop="hfOnlineRefundNotifyUrl">
+          <el-input v-model="form.hfOnlineRefundNotifyUrl" placeholder="请输入大额退款回调地址" />
+        </el-form-item>
+        <el-form-item label="商户私钥" prop="hfRsaPrivateKey">
+          <el-input v-model="form.hfRsaPrivateKey" type="textarea" placeholder="请输入商户私钥" />
+        </el-form-item>
+        <el-form-item label="汇付公钥" prop="hfRsaPublicKey">
+          <el-input v-model="form.hfRsaPublicKey" type="textarea" placeholder="请输入汇付公钥" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listHfpayConfig, getHfpayConfig, delHfpayConfig, addHfpayConfig, updateHfpayConfig, exportHfpayConfig } from "@/api/his/hfpayConfig";
+
+export default {
+  name: "HfpayConfig",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 汇付多支付配置表格数据
+      hfpayConfigList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        appId: null,
+        hfProductId: null,
+        hfSysId: null,
+        huifuId: null,
+        hfPayNotifyUrl: null,
+        hfPayOnlineNotifyUrl: null,
+        hfRefundNotifyUrl: null,
+        hfOnlineRefundNotifyUrl: null,
+        hfRsaPrivateKey: null,
+        hfRsaPublicKey: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询汇付多支付配置列表 */
+    getList() {
+      this.loading = true;
+      listHfpayConfig(this.queryParams).then(response => {
+        this.hfpayConfigList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        appId: null,
+        hfProductId: null,
+        hfSysId: null,
+        huifuId: null,
+        hfPayNotifyUrl: null,
+        hfPayOnlineNotifyUrl: null,
+        hfRefundNotifyUrl: null,
+        hfOnlineRefundNotifyUrl: null,
+        hfRsaPrivateKey: null,
+        hfRsaPublicKey: null,
+        createTime: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加汇付多支付配置";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getHfpayConfig(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改汇付多支付配置";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateHfpayConfig(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addHfpayConfig(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除汇付多支付配置编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delHfpayConfig(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有汇付多支付配置数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportHfpayConfig(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>

+ 2 - 1
src/views/his/storeOrder/order1.vue

@@ -1386,7 +1386,7 @@ export default {
           this.executeCreateErpOrder();
         });
       }
-      
+      this.getList();
     },
 
     async executSetErpOrder() {
@@ -1685,6 +1685,7 @@ export default {
         } else {
           this.$message.error(response.msg || '保存失败');
         }
+        this.getList();
       }).catch(() => {
         this.$message.error('保存失败');
       });

+ 2 - 2
src/views/his/user/indexProject.vue

@@ -64,7 +64,7 @@
       <el-form-item label="所属销售" prop="companyUserNickName">
 
         <el-select
-          v-model="queryParams.companyUserNickName"
+          v-model="queryParams.companyUserId"
           placeholder="请选择所属销售"
           clearable
           filterable
@@ -74,7 +74,7 @@
             v-for="item in companyQueryUserOptions"
             :key="item.userId"
             :label="item.nickName"
-            :value="item.nickName">
+            :value="item.userId">
           </el-option>
         </el-select>
       </el-form-item>

+ 2 - 2
src/views/his/user/userDetails.vue

@@ -1,9 +1,9 @@
 <template>
   <div>
     <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
-      <div style="padding: 20px; background-color: #fff;">
+      <!-- <div style="padding: 20px; background-color: #fff;">
         会员详情
-      </div>
+      </div> -->
     </div>
     <template>
       <el-tabs v-model="activeName"  :tab-position="tabPosition" style="height: 200px;margin: 40px">

+ 36 - 2
src/views/qw/externalContact/index.vue

@@ -222,6 +222,17 @@
           v-hasPermi="['qw:externalContact:export']"
         >导出</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportUnionidLoading"
+          @click="handleExportUnionId"
+          v-hasPermi="['qw:externalContact:export']"
+        >导出unionid</el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -402,7 +413,7 @@
 </template>
 
 <script>
-import { listExternalContact, getExternalContact, delExternalContact, addExternalContact, updateExternalContact, exportExternalContact } from "@/api/qw/externalContact";
+import { listExternalContact, getExternalContact, delExternalContact, addExternalContact, updateExternalContact, exportExternalContact, exportUnionId } from "@/api/qw/externalContact";
 import {getCompanyList} from "@/api/company/company";
 import {getAllUserlist} from "@/api/company/companyUser";
 import {getQwUserInfo} from "@/api/qw/qwUser";
@@ -420,6 +431,7 @@ export default {
       loading: false,
       // 导出遮罩层
       exportLoading: false,
+      exportUnionidLoading: false,
       //等级状态
       ratingUpFall: [],
       // 性别字典
@@ -908,7 +920,29 @@ export default {
           this.download(response.msg);
           this.exportLoading = false;
         }).catch(() => {});
-    }
+    },
+    /** 导出Unionid按钮操作 */
+    handleExportUnionId() {
+      //验证是否选择企业
+      if(!this.queryParams.companyId){
+        return this.$message.warning({
+          message: "请先选择企业!",
+          duration: 3000
+        })
+      }
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有企业微信客户unionid数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportUnionidLoading = true;
+          return exportUnionId(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportUnionidLoading = false;
+        }).catch(() => {});
+    },
   }
 };
 </script>

+ 6 - 3
src/views/qw/qwCompany/index.vue

@@ -174,9 +174,12 @@
         <el-form-item label="应用回调地接" prop="notifyUrl" >
           <el-input v-model="form.notifyUrl" placeholder="请输入应用回调地接" :readonly="true"/>
         </el-form-item>
-		<el-form-item label="应用id" prop="serverAgentId" >
-		  <el-input v-model="form.serverAgentId" placeholder="请输入serverAgentId" />
-		</el-form-item>
+        <el-form-item label="应用id" prop="serverAgentId" >
+          <el-input v-model="form.serverAgentId" placeholder="请输入serverAgentId" />
+        </el-form-item>
+        <el-form-item label="小程序id" prop="miniAppId" >
+          <el-input v-model="form.miniAppId" placeholder="请输入小程序id" />
+        </el-form-item>
         <el-form-item label="企业可信IP" >
           <div>42.194.245.189;119.29.195.254;129.204.130.233;43.138.187.210;129.204.76.229;159.75.239.132119.29.249.66;122.152.230.82</div>
         </el-form-item>

+ 3 - 0
src/views/qw/sopTemp/index.vue

@@ -595,6 +595,9 @@ export default {
           this.title = "修改";
         }
         this.form = response.data;
+        if(response.data.project){
+          this.form.project = String(response.data.project)
+        }
         this.open = true;
       });
     },

+ 405 - 1
src/views/system/config/config.vue

@@ -178,6 +178,9 @@
             <el-form-item label="会员自动续费协议" prop="vipAutomaticService">
               <editor v-model="form3.vipAutomaticService" :min-height="292"/>
             </el-form-item>
+            <el-form-item label="用户注销协议" prop="vipAutomaticService">
+              <editor v-model="form3.userRemoveService" :min-height="292"/>
+            </el-form-item>
 
             <div class="footer">
               <el-button type="primary" @click="submitForm3">提  交</el-button>
@@ -1635,6 +1638,318 @@
         </div>
       </el-form>
     </el-tab-pane>
+
+    <el-tab-pane label="健康指标配置" name="his.healthIndexConfig">
+      
+        <el-form ref="form26" :model="form26" label-width="200px">
+          <!-- 红色提示 严格按照对应格式参数填写,指标参数只能是数字和特殊符号,数值保留一位小数,特殊符号只能有 < > ≥ ≤ ~ 不能有空格 -->
+          <el-card class="box-card">
+            <div slot="header" class="clearfix">
+              <span style="color: red;">请严格按照对应格式参数填写,指标参数只能是数字和特殊符号,数值保留一位小数,特殊符号只能有 &lt; &gt; ≥ ≤ ~ 不能有空格</span>
+            </div>
+          </el-card>
+
+
+          
+          <!-- 血糖指标 -->
+        <el-card class="box-card" style="margin-bottom: 20px;">
+          <div slot="header" class="clearfix">
+            <span>血糖指标 (mmol/L)</span>
+          </div>
+          
+          <el-form-item label="空腹血糖正常值">
+            <el-input v-model="form26.bloodGlucose.fasting.normal" placeholder="例如: 3.9-6.1">
+              <template slot="append">mmol/L</template>
+            </el-input>
+          </el-form-item>
+          
+          <el-form-item label="餐后1小时血糖正常值">
+            <el-input v-model="form26.bloodGlucose.post1Hour.normal" placeholder="例如: 6.7-9.0">
+              <template slot="append">mmol/L</template>
+            </el-input>
+          </el-form-item>
+          
+          <el-form-item label="餐后2小时血糖正常值">
+            <el-input v-model="form26.bloodGlucose.post2Hour.normal" placeholder="例如: ≤7.8">
+              <template slot="append">mmol/L</template>
+            </el-input>
+          </el-form-item>
+          
+          <el-form-item label="血糖异常程度配置">
+            <el-table :data="form26.bloodGlucose.severity" style="width: 100%;">
+              <el-table-column prop="level" label="严重程度" width="120">
+                <template slot-scope="scope">
+                  <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                            scope.row.level === 'mild' ? 'warning' : 'danger'">
+                    {{ scope.row.level === 'normal' ? '正常' : 
+                      scope.row.level === 'mild' ? '轻微' : '严重' }}
+                  </el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column prop="range" label="数值范围">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.range" placeholder="例如: <3.9 or 6.1-7.8"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="description" label="描述">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.description" placeholder="例如: 低血糖风险"></el-input>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-form-item>
+        </el-card>
+        
+        <!-- 血压指标 -->
+        <el-card class="box-card" style="margin-bottom: 20px;">
+          <div slot="header" class="clearfix">
+            <span>血压指标 (mmHg)</span>
+          </div>
+          
+
+          
+          <el-form-item label="血压异常程度配置">
+            <el-table :data="form26.bloodPressure.severity" style="width: 100%;">
+              <el-table-column prop="level" label="严重程度" width="120">
+                <template slot-scope="scope">
+                  <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                            scope.row.level === 'mild' ? 'warning' : 'danger'">
+                    {{ scope.row.level === 'normal' ? '正常' : 
+                      scope.row.level === 'mild' ? '轻微' : '严重' }}
+                  </el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column prop="type" label="血压类型" width="120">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.type === 'systolic' ? '收缩压' : '舒张压' }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="range" label="数值范围">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.range" placeholder="例如: <90 or 120-139"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="description" label="描述">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.description" placeholder="例如: 正常高值"></el-input>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-form-item>
+        </el-card>
+
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>尿酸指标 (μmol/L)</span>
+          </div>
+
+          <el-form-item label="性别分类配置">
+            <el-tabs v-model="form26.uricAcid.activeGender">
+              <el-tab-pane label="男性" name="male">
+                <el-table :data="form26.uricAcid.male" style="width: 100%;">
+                  <el-table-column prop="level" label="风险等级" width="120">
+                    <template slot-scope="scope">
+                      <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                                scope.row.level === 'mild' ? 'warning' : 'danger'">
+                        {{ scope.row.level === 'normal' ? '正常' : 
+                          scope.row.level === 'mild' ? '不良' : '高风险' }}
+                      </el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="range" label="数值范围">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.range" placeholder="例如: <420"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="description" label="描述">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.description" placeholder="例如: 正常范围"></el-input>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+              
+              <el-tab-pane label="女性" name="female">
+                <el-table :data="form26.uricAcid.female" style="width: 100%;">
+                  <el-table-column prop="level" label="风险等级" width="120">
+                    <template slot-scope="scope">
+                      <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                                scope.row.level === 'mild' ? 'warning' : 'danger'">
+                        {{ scope.row.level === 'normal' ? '正常' : 
+                          scope.row.level === 'mild' ? '不良' : '高风险' }}
+                      </el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="range" label="数值范围">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.range" placeholder="例如: <360"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="description" label="描述">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.description" placeholder="例如: 正常范围"></el-input>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+            </el-tabs>
+          </el-form-item>
+        </el-card>
+
+        <!-- Add BMI指标 card after the uric acid card -->
+        <el-card class="box-card" style="margin-bottom: 20px;">
+          <div slot="header" class="clearfix">
+            <span>BMI指标 (kg/m²)</span>
+          </div>
+
+          <el-form-item label="BMI异常程度配置">
+            <el-table :data="form26.bmi.severity" style="width: 100%;">
+              <el-table-column prop="level" label="严重程度" width="120">
+                <template slot-scope="scope">
+                  <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                            scope.row.level === 'mild' ? 'warning' : 'danger'">
+                    {{ scope.row.level === 'normal' ? '正常' : 
+                      scope.row.level === 'mild' ? '偏瘦' : '偏胖' }}
+                  </el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column prop="range" label="数值范围">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.range" placeholder="例如: 18.5-23.9"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="description" label="描述">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.description" placeholder="例如: 正常范围"></el-input>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-form-item>
+        </el-card>
+
+
+        <!-- 腰围指标 -->
+        <el-card class="box-card" style="margin-bottom: 20px;">
+          <div slot="header" class="clearfix">
+            <span>腰围指标 (cm)</span>
+          </div>
+
+          <el-form-item label="性别分类配置">
+            <el-tabs v-model="form26.waist.activeGender">
+              <el-tab-pane label="男性" name="male">
+                <el-table :data="form26.waist.male" style="width: 100%;">
+                  <el-table-column prop="level" label="风险等级" width="120">
+                    <template slot-scope="scope">
+                      <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                                scope.row.level === 'mild' ? 'warning' : 'danger'">
+                        {{ scope.row.level === 'normal' ? '正常' : 
+                          scope.row.level === 'mild' ? '偏小' : '偏大' }}
+                      </el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="range" label="数值范围">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.range" placeholder="例如: <90"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="description" label="描述">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.description" placeholder="例如: 正常范围"></el-input>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+              
+              <el-tab-pane label="女性" name="female">
+                <el-table :data="form26.waist.female" style="width: 100%;">
+                  <el-table-column prop="level" label="风险等级" width="120">
+                    <template slot-scope="scope">
+                      <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                                scope.row.level === 'mild' ? 'warning' : 'danger'">
+                        {{ scope.row.level === 'normal' ? '正常' : 
+                          scope.row.level === 'mild' ? '偏小' : '偏大' }}
+                      </el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="range" label="数值范围">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.range" placeholder="例如: <80"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="description" label="描述">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.description" placeholder="例如: 正常范围"></el-input>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+            </el-tabs>
+          </el-form-item>
+        </el-card>
+
+        <el-card class="box-card" style="margin-bottom: 20px;">
+          <div slot="header" class="clearfix">
+            <span>臀围指标 (cm)</span>
+          </div>
+
+          <el-form-item label="性别分类配置">
+            <el-tabs v-model="form26.hip.activeGender">
+              <el-tab-pane label="男性" name="male">
+                <el-table :data="form26.hip.male" style="width: 100%;">
+                  <el-table-column prop="level" label="风险等级" width="120">
+                    <template slot-scope="scope">
+                      <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                                scope.row.level === 'mild' ? 'warning' : 'danger'">
+                        {{ scope.row.level === 'normal' ? '正常' : 
+                          scope.row.level === 'mild' ? '偏小' : '偏大' }}
+                      </el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="range" label="数值范围">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.range" placeholder="例如: 90-100"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="description" label="描述">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.description" placeholder="例如: 正常范围"></el-input>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+              
+              <el-tab-pane label="女性" name="female">
+                <el-table :data="form26.hip.female" style="width: 100%;">
+                  <el-table-column prop="level" label="风险等级" width="120">
+                    <template slot-scope="scope">
+                      <el-tag :type="scope.row.level === 'normal' ? 'success' : 
+                                scope.row.level === 'mild' ? 'warning' : 'danger'">
+                        {{ scope.row.level === 'normal' ? '正常' : 
+                          scope.row.level === 'mild' ? '偏小' : '偏大' }}
+                      </el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="range" label="数值范围">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.range" placeholder="例如: 85-95"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="description" label="描述">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.description" placeholder="例如: 正常范围"></el-input>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+            </el-tabs>
+          </el-form-item>
+        </el-card>
+        
+        <div class="footer">
+          <el-button type="primary" @click="submitForm26">提交</el-button>
+        </div>
+      </el-form>
+    </el-tab-pane>
     </el-tabs>
 
 
@@ -1758,6 +2073,75 @@ export default {
       },
       form25:{
       },
+      form26: {
+        bloodGlucose: {
+          fasting: { normal: "" },
+          post1Hour: { normal: "" },
+          post2Hour: { normal: "" },
+          severity: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ]
+        },
+        bloodPressure: {
+          protection: { systolic: "", diastolic: "" },
+          severity: [
+            { level: "normal", type: "systolic", range: "", description: "" },
+            { level: "mild", type: "systolic", range: "", description: "" },
+            { level: "severe", type: "systolic", range: "", description: "" },
+            { level: "normal", type: "diastolic", range: "", description: "" },
+            { level: "mild", type: "diastolic", range: "", description: "" },
+            { level: "severe", type: "diastolic", range: "", description: "" }
+          ]
+        },
+        uricAcid: {
+          activeGender: "male",
+          male: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ],
+          female: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ]
+        },
+        bmi: {
+          severity: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ]
+        },
+        waist: {
+          activeGender: "male",
+          male: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ],
+          female: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ]
+        },
+        hip: {
+          activeGender: "male",
+          male: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ],
+          female: [
+            { level: "normal", range: "", description: "" },
+            { level: "mild", range: "", description: "" },
+            { level: "severe", range: "", description: "" }
+          ]
+        }
+      },
       photoArr:[],
       couponList:[],
       inquirySubTypeOptions:[],
@@ -1812,7 +2196,8 @@ export default {
         dLevelMax: [{ required: true, message: '请输入D级最大值', trigger: 'blur' }],
       },
       rules21:{},
-      rules25:{}
+      rules25:{},
+      rules26: {},
     };
   },
   created() {
@@ -2144,6 +2529,9 @@ export default {
           if(key=="his.login"){
             this.form22 =JSON.parse(response.data.configValue);
           }
+          if (key === "his.healthIndexConfig") {
+            this.form26 =JSON.parse(response.data.configValue);
+          }
           else if(key=="store.concept"){
             this.configId=response.data.configId;
             this.configKey=response.data.configKey;
@@ -2249,6 +2637,7 @@ export default {
       }
     });
   },
+  
   submitForm10(){
     var param={configId:this.configId,configValue:JSON.stringify(this.form10)}
     updateConfigByKey(param).then(response => {
@@ -2377,6 +2766,21 @@ export default {
         }
       });
     },
+    submitForm26() {
+      const param = {
+        configId:this.configId,
+        configKey:this.configKey,
+        configValue: JSON.stringify(this.form26)
+      };
+      
+      updateConfigByKey(param).then(response => {
+        if (response.code === 200) {
+          this.msgSuccess("健康指标配置保存成功");
+        } else {
+          this.msgError("保存失败");
+        }
+      });
+    },
     submitForm24(){
       this.$refs["form24"].validate(valid => {
         if (valid) {

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä