jiangping
2025-05-27 3d6a8e384d31432a23f5a8c1a3135a58cbe617b5
提交一把
已添加2个文件
已修改12个文件
446 ■■■■ 文件已修改
company/src/components/business/OperaKnowledgeWindow.vue 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaSettleClaimsCheckWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaSettleClaimsWindow.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaSolutionsBaseWindow.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/caseProgress.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/tagLibrary.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/previewArea.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/onlineReporting.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/knowledge.vue 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/riskReminder.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/settleClaims.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
log/web/error.2025-05-27.0.log 补丁 | 查看 | 原始文档 | blame | 历史
log/web/info.2025-05-27.0.log 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/LabelsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaKnowledgeWindow.vue
@@ -15,21 +15,41 @@
                    <el-select v-model="form.labelsArr" style="width: 100%;" @change="changeLabel" multiple placeholder="请选择">
                        <el-option
                            v-for="item in cateList"
                            :key="item.id"
                            :key="item.name"
                            :label="item.name"
                            :value="item.id">
                            :value="item.name">
                        </el-option>
                    </el-select>
                    <el-button size="medium" style="margin-left: 15px;" @click="$refs.tagLibrary.open('标签库')">标签库</el-button>
                </div>
            </el-form-item>
            <el-form-item label="地区" prop="area">
          <el-form-item label="省份" prop="provinceId">
            <el-select   v-model="form.provinceId"   filterable @change="changeProvince" placeholder="请选择">
              <el-option
                  v-for="item in areas"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="城市" prop="cityId">
            <el-select  v-model="form.cityId"  clearablefilterable   placeholder="请选择">
              <el-option
                  v-for="item in citys"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
<!--            <el-form-item label="地区" prop="area">
                <el-cascader
                    v-model="form.area"
                    :options="area"
                    @change="changeArea"
                    :props="{ label: 'name', children: 'childAreasList', value: 'id' }" />
            </el-form-item>
            </el-form-item>-->
            <el-form-item label="年份" prop="yearInfo">
                <el-date-picker
                    v-model="form.yearInfo"
@@ -70,10 +90,21 @@
                    area: [],
                    labelsArr: []
                },
      areas: [],
      citys: [],
                // éªŒè¯è§„则
                rules: {
                    title: [
                        { required: true, message: '请输入内容', trigger: 'blur' }
        ],
        yearInfo: [
          { required: true, message: '请选择年份', trigger: 'blur' }
        ],
        labelsArr: [
          { required: true, message: '请选择表情', trigger: 'blur' }
        ],
        provinceId: [
          { required: true, message: '请选择省份', trigger: 'blur' }
                    ],
                    link: [
                        { required: true, message: '请输入内容', trigger: 'blur' }
@@ -88,7 +119,6 @@
                api: '/business/knowledge',
                'field.id': 'id'
            })
        },
        methods: {
            changeLabel(e) {
@@ -103,9 +133,18 @@
                    this.form.cityId = e[1]
                }
            },
    changeProvince (e) {
      this.citys = []
      this.form.cityId=null
      this.areas.forEach(item => {
        if (item.id === this.form.provinceId) {
          this.citys = item.childAreasList || []
        }
      })
    },
            open (title, target) {
                this.getLabel()
                this.getCityTree()
      this.getCityTreeList()
                this.title = title
                this.visible = true
                // æ–°å»º
@@ -122,7 +161,7 @@
                        this.form[key] = target[key]
                    }
                    if (this.form.labels) {
                        this.form.labelsArr = this.form.labels.split(',').map(item => Number(item))
          this.form.labelsArr = this.form.labels.split(',')
                    }
                    if (this.form.provinceId && this.form.cityId) {
                        this.form.area = [this.form.provinceId, this.form.cityId]
@@ -134,9 +173,12 @@
            async getLabel() {
                this.cateList = await list()
            },
    async getCityTreeList () {
      this.areas = await findTreeList({})
    },
            async getCityTree() {
                this.area = await findTreeList({})
                this.setSecondLevelChildrenToNullPrecise(this.area);
      this.setSecondLevelChildrenToNullPrecise(this.area)
                this.area.forEach(item => {
                    if (item.childAreasList.length === 0) {
                        item.childAreasList = null
@@ -144,21 +186,21 @@
                })
            },
            setSecondLevelChildrenToNullPrecise(data, level = 1) {
                if (!data || !data.length) return;
      if (!data || !data.length) return
                data.forEach(item => {
                    if (item.childAreasList && item.childAreasList.length) {
                        if (level === 1) {
                            // è¿™æ˜¯ç¬¬ä¸€çº§èŠ‚ç‚¹ï¼Œå¤„ç†å…¶å­èŠ‚ç‚¹ï¼ˆç¬¬äºŒçº§ï¼‰
                            item.childAreasList.forEach(child => {
                                child.childAreasList = null;
                            });
              child.childAreasList = null
            })
                        } else {
                            // ç»§ç»­é€’归处理更深层级
                            this.setSecondLevelChildrenToNullPrecise(item.childAreasList, level + 1);
            this.setSecondLevelChildrenToNullPrecise(item.childAreasList, level + 1)
                        }
                    }
                });
      })
            }
        }
    }
company/src/components/business/OperaSettleClaimsCheckWindow.vue
@@ -296,7 +296,7 @@
</script>
<style>
    .v-modal {
        z-index: 2000 !important;
      //  z-index: 2000 !important;
    }
</style>
<style lang="scss" scoped>
company/src/components/business/OperaSettleClaimsWindow.vue
@@ -22,7 +22,7 @@
            <div class="box_dk" v-if="[13].includes(info.status)">
                <div class="box_dk_title">
                    <i class="el-icon-success"></i>
                    <span>已打款</span>
                    <span style="font-weight: bold">已打款</span>
                </div>
                <div class="box_dk_list">
                    <div class="box_dk_list_row">
@@ -161,7 +161,7 @@
                    <div class="box_desc_title">
                        <span class="box_desc_title_val">报案详情</span>
                        <div class="box_desc_title_zt" v-if="info.statusName">{{info.statusName}}</div>
                        <div class="box_desc_title_tips" v-if="info.isRisk === 1">
                        <div class="box_desc_title_tips" @click="$refs.riskCaseReminder.open('风险案件提醒', info.riskContent)" v-if="info.isRisk === 1">
                            <i class="el-icon-warning"></i>
                            <span>风险案件</span>
                        </div>
@@ -183,7 +183,7 @@
                            <el-button type="primary" @click="register" v-if="[1,2].includes(info.status)">立案</el-button>
                            <el-button type="primary" @click="$refs.acceptance.open('案件受理', info.id)" v-if="[3,5].includes(info.status)">受理</el-button>
                            <el-button type="primary" @click="addRemark" v-if="![0,1,2,4,13,14].includes(info.status)">备注</el-button>
                            <el-button type="primary" @click="addReport(1)" v-if="[3].includes(info.status) && info.reportNumStatus === 0">添加报案号</el-button>
                            <el-button type="primary" @click="addReport(1)" v-if="[3,7,9].includes(info.status) && info.reportNumStatus === 0">添加报案号</el-button>
                            <el-button type="primary" @click="addReport(2)" v-if="[9].includes(info.status) && info.reportNumStatus === 1">编辑报案号</el-button>
                            <el-button type="primary" @click="$refs.adjustment.open('理算', info.id, 1)" v-if="[9].includes(info.status)">理算</el-button>
                            <el-button type="primary" @click="$refs.adjustment.open('重新理算', info.id, 1)" v-if="[10].includes(info.status)">重新理算</el-button>
@@ -193,7 +193,7 @@
                            <el-button type="primary" @click="supplementaryMaterials" v-if="[9].includes(info.status)">补充材料</el-button>
                            <el-button type="primary" @click="$refs.additionMaterial_ba.open('添加材料', info.id)" v-if="[9,10].includes(info.status)">添加材料</el-button>
                        </template>
                        <el-button icon="el-icon-refresh-left" type="primary" circle @click="$refs.caseProgress.open('案件进度', info.settleClaimsLogList)" v-if="![0,13,14].includes(info.status)"></el-button>
                        <el-button icon="el-icon-refresh-left" type="primary" title="查看案件进度" circle @click="$refs.caseProgress.open('案件进度', info.settleClaimsLogList)" v-if="![0].includes(info.status)"></el-button>
                    </div>
                </div>
                <div class="box_desc_list">
@@ -215,13 +215,13 @@
                    <div class="box_desc_list_zw"></div>
                </div>
            </div>
            <div class="box_fx" v-if="info.isRisk === 1">
            <div class="box_fx" v-if="info.isRisk === 1 && showIsRisk ===true ">
                <div class="box_fx_left">
                    <i class="el-icon-warning"></i>
                    <span class="box_fx_left_a">注意,该案件有{{info.riskContent.length}}条风险信息</span>
                    <span class="box_fx_left_b" @click="$refs.riskCaseReminder.open('风险案件提醒', info.riskContent)">查看详情</span>
                </div>
                <i class="el-icon-close" @click="info.isRisk = 0"></i>
                <i class="el-icon-close" @click="closeRiskTip"></i>
            </div>
            <div class="box_desc">
                <div class="box_desc_head">
@@ -240,7 +240,7 @@
                        å‡ºé™©äººå§“名:{{info.memberName}}
                    </div>
                    <div class="box_desc_list_row">
                        å‡ºé™©äººèº«ä»½è¯å·ï¼š{{info.memberIdcard}}
                        å‡ºé™©äººèº«ä»½è¯å·ï¼š{{info.idcardNo}}
                    </div>
                    <div style="width: 33%; height: 0;"></div>
                </div>
@@ -281,7 +281,10 @@
                        äº‹æ•…类型:{{returnType(info.type)}}
                    </div>
                    <div class="box_desc_list_row">
                        æ˜¯å¦æœ‰åŒ»ç–—保险:{{returnName(info.medicalInsurance)}}
                        æ˜¯å¦ä¼¤æ®‹ï¼š{{returnName(info.hurtType)}}
                    </div>
                    <div class="box_desc_list_row">
                        æ˜¯å¦æœ‰åŒ»ä¿ï¼š{{returnName(info.medicalInsurance)}}
                    </div>
                    <div class="box_desc_list_row">
                        å°±è¯Šç±»åž‹ï¼š{{returnInHospital(info.inHospital)}}
@@ -392,7 +395,8 @@
    addRemark,
    saveSupplementDescribe,
    updCaseType,
    confirmFee } from '@/api/business/settleRisk'
  confirmFee
} from '@/api/business/settleRisk'
import RiskCaseReminder from '@/components/business/riskCaseReminder'
import CaseProgress from '@/components/business/caseProgress'
import Acceptance from '@/components/business/acceptance'
@@ -411,7 +415,8 @@
  data () {
    return {
        info: null,
        id: null
      id: null,
      showIsRisk: true
    }
  },
  computed: {
@@ -429,6 +434,9 @@
          this.id = id
          this.getDetail()
      },
    closeRiskTip(){
      this.showIsRisk= false
    },
      setCaseType(e) {
          updCaseType({ id: this.id, caseType: e })
            .then(res => {
@@ -439,125 +447,155 @@
          this.$prompt('补充说明', '补充材料', {
              confirmButtonText: '提交',
              cancelButtonText: '取消',
        inputType: 'textarea',
              inputPattern: /^(?:.|\n)+$/,
              inputErrorMessage: '补充说明不能为空!',
              beforeClose: (action, instance, done) => {
                  if (action === 'confirm') {
                      instance.confirmButtonLoading = true;
            instance.confirmButtonLoading = true
                      saveSupplementDescribe({ id: this.id, describe: instance.inputValue })
                .then((res) => {
                  done()
                })
                .catch((data) => {
                  this.$message.error(data.message)
                })
                          .finally(() => {
                              done();
                              instance.confirmButtonLoading = false;
                  instance.confirmButtonLoading = false
                          })
                  } else {
                      done();
            done()
                  }
              }
          }).then(({ value }) => {
              this.getDetail()
          }).catch(() => {
          });
      })
      },
      addRemark() {
          this.$prompt('备注', '添加备注', {
              confirmButtonText: '添加',
              cancelButtonText: '取消',
        inputType: 'textarea',
              inputPattern: /^(?:.|\n)+$/,
              inputErrorMessage: '备注不能为空!',
              beforeClose: (action, instance, done) => {
                  if (action === 'confirm') {
                      instance.confirmButtonLoading = true;
            instance.confirmButtonLoading = true
                      addRemark({ id: this.id, describe: instance.inputValue })
                .then((res) => {
                  done()
                })
                .catch((data) => {
                  this.$message.error(data.message)
                })
                          .finally(() => {
                              done();
                              instance.confirmButtonLoading = false;
                  instance.confirmButtonLoading = false
                          })
                  } else {
                      done();
            done()
                  }
              }
          }).then(({ value }) => {
              this.getDetail()
          }).catch(() => {
          });
      })
      },
      addReport(type) {
          this.$prompt(`报案号`, `${type === 1 ? '添加报案号' : '编辑报案号'}`, {
      this.$prompt('报案号', `${type === 1 ? '添加报案号' : '编辑报案号'}`, {
              confirmButtonText: '添加',
              cancelButtonText: '取消',
              inputPattern: /^(?:.|\n)+$/,
              inputErrorMessage: '报案号不能为空!',
              beforeClose: (action, instance, done) => {
                  if (action === 'confirm') {
                      instance.confirmButtonLoading = true;
            instance.confirmButtonLoading = true
                      addReportNum({ id: this.id, reportNum: instance.inputValue })
              .then((res) => {
                done()
              })
              .catch((data) => {
                this.$message.error(data.message)
              })
                        .finally(() => {
                            done();
                            instance.confirmButtonLoading = false;
                instance.confirmButtonLoading = false
                        })
                  } else {
                      done();
            done()
                  }
              }
          }).then(({ value }) => {
              this.getDetail()
          }).catch(() => {
          });
      })
      },
      register() {
          this.$prompt('立案说明', '立案', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
        inputType: 'textarea',
              beforeClose: (action, instance, done) => {
                  if (action === 'confirm') {
                      instance.confirmButtonLoading = true;
            instance.confirmButtonLoading = true
                      register({ id: this.id, describe: instance.inputValue, registerStatus: 3 })
                .then((res) => {
                  done()
                })
                .catch((data) => {
                  this.$message.error(data.message)
                })
                          .finally(() => {
                              done();
                              instance.confirmButtonLoading = false;
                  instance.confirmButtonLoading = false
                          })
                  } else {
                      done();
            done()
                  }
              }
          }).then(({ value }) => {
              this.getDetail()
          }).catch(() => {
          });
      })
      },
      returnCase() {
          this.$prompt('退回说明', '退回', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
        inputType: 'textarea',
              inputPattern: /^(?:.|\n)+$/,
              inputErrorMessage: '退回说明不能为空!',
              beforeClose: (action, instance, done) => {
                  if (action === 'confirm') {
                      instance.confirmButtonLoading = true;
            instance.confirmButtonLoading = true
                      register({ id: this.id, describe: instance.inputValue, registerStatus: 4 })
                .then((res) => {
                  done()
                })
                .catch((data) => {
                  this.$message.error(data.message)
                })
                          .finally(() => {
                              done();
                              instance.confirmButtonLoading = false;
                  instance.confirmButtonLoading = false
                          })
                  } else {
                      done();
            done()
                  }
              }
          }).then(({ value }) => {
              this.getDetail()
          }).catch(() => {
          });
      })
      },
      getDetail() {
          findById(this.id)
              .then(res => {
                  res.riskContent = JSON.parse(res.riskContent)
                  this.info = res
          this.info.showIsRisk = true
                  this.visible = true
              })
      },
@@ -574,7 +612,7 @@
                  })
          }).catch(() => {
          });
      })
      },
      returnInHospital(type) {
          switch (type) {
@@ -590,6 +628,10 @@
                  return '是'
              case 1:
                  return '否'
      case 2:
        return '待确定'
      default:
        return ''
          }
      },
      returnType(type) {
@@ -616,14 +658,15 @@
                  })
          }).catch(() => {
          });
      },
      })
    }
  }
}
</script>
<style lang="scss" scoped>
    .box {
        //margin-left: 30px;
        width: 100%;
        .box_tui {
            width: 100%;
@@ -987,6 +1030,7 @@
            .box_desc_head {
                width: 100%;
                display: flex;
                font-weight: bold;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 26px;
@@ -1017,6 +1061,7 @@
                        margin-right: 20px;
                    }
                    .box_desc_title_tips {
                      cursor: pointer;
                        width: 84px;
                        height: 25px;
                        border-radius: 15px;
company/src/components/business/OperaSolutionsBaseWindow.vue
@@ -101,6 +101,8 @@
                    <el-button type="primary" @click="impor">导入工种</el-button>
                    <el-button type="text" @click="exprot">导入模版xls</el-button>
                </div>
              <el-form-item label="已添加工种" prop="worktypeIdList">
                <u-table
                    :data="form.worktypeIdList"
                    border
@@ -125,6 +127,7 @@
                        </template>
                    </u-table-column>
                </u-table>
              </el-form-item>
            </div>
            <el-form-item label="风险设置" prop="risk">
                <div class="tx">
@@ -151,8 +154,8 @@
                        </div>
                        <div class="tx_item_content">
                            <span>规则设置:允许出险时间在保单生效前</span>
                            <el-input-number style="margin: 0 15px;" v-model="form.riskNewUserTime" :min="1"></el-input-number>
                            <el-select v-model="form.riskNewUserUnit" style="width: 100px; margin-right: 15px;" placeholder="请选择">
                            <el-input-number style="margin: 0 15px;" :disabled="form.riskNewUserStatus === 0"   v-model="form.riskNewUserTime" :min="1"></el-input-number>
                            <el-select v-model="form.riskNewUserUnit"  :disabled="form.riskNewUserStatus === 0"  style="width: 100px; margin-right: 15px;" placeholder="请选择">
                                <el-option label="小时" :value="1"></el-option>
                                <el-option label="天" :value="2"></el-option>
                            </el-select>
@@ -283,6 +286,9 @@
          correctWarnTime: [
            { required: true, message: '请输入批改提醒时间' }
          ],
          worktypeIdList: [
            { required: true, message: '请完善工种信息' }
          ],
          canAdd: [
            { required: true, validator: canAddFun }
          ]
company/src/components/business/caseProgress.vue
@@ -3,7 +3,7 @@
        :title="title"
        width="50%"
        :withFooter="false"
        :visible.sync="visible"
        :visible.sync="visible"是否
        :confirm-working="isWorking"
    >
        <el-timeline reverse>
@@ -11,7 +11,7 @@
                <div style="display: flex; flex-direction: column;">
                    <span class="a">{{item.title}}</span>
                    <span class="b">{{item.creatorName}} {{item.companyName || '平台理赔员'}} {{item.createDate }}</span>
                    <span class="c">说明:{{item.content}}</span>
                    <span class="c" v-if="index>0">说明:{{item.content}}</span>
                </div>
            </el-timeline-item>
        </el-timeline>
company/src/components/business/tagLibrary.vue
@@ -22,6 +22,9 @@
                </div>
            </div>
        </div>
      <template v-slot:footer>
        <el-button @click="close">返回</el-button>
      </template>
    </GlobalWindow>
</template>
@@ -57,18 +60,31 @@
            // æ·»åŠ æ ‡ç­¾
            async add() {
                if (!this.value) return this.$message.warning('请先输入内容')
                let res = await createLabels({ name: this.value })
                await this.getData()
       createLabels({ name: this.value })
        .then(() => {
          this.$message.success('添加成功')
          this.$emit('success')
          this.getData()
                this.$emit('refresh')
                this.value = ''
                this.$message.success('添加成功')
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
            },
            // åˆ é™¤
            async dele(id) {
                let res = await labelsDeleteById(id)
                await this.getData()
                this.$emit('refresh')
     labelsDeleteById(id)
        .then(() => {
                this.$message.success('删除成功')
          this.$emit('success')
          this.getData()
          this.$emit('refresh')
          this.value = ''
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
            }
        }
    }
company/src/components/common/previewArea.vue
@@ -1,10 +1,12 @@
<template>
<template   :append-to-body="true">
    <div class="box_item_list_row_l">
        <div class="desc_data_list_item" v-for="(item, index) in list" :key="index">
            <div class="desc_data_list_item_img" v-if="item.type === 0">
                <el-image
                    style="width: 100%; height: 100%"
                    style="width: 100%; height: 100%;"
                    :src="item.fileurlFull"
                    :preview-teleported="true"
                    :append-to-body="true"
                    :preview-src-list="[item.fileurlFull]">
                </el-image>
            </div>
@@ -37,8 +39,13 @@
        }
    }
</script>
<style>
.el-image-viewer__wrapper{
   z-index: 9999 !important;
}
</style>
<style lang="scss" scoped>
    .box_item_list_row_l {
        width: 100%;
        display: flex;
company/src/components/enterprise/onlineReporting.vue
@@ -517,9 +517,13 @@
                    ],
                    informantPhone: [
                        { required: true, message: '不能为空' }
                    ],
        ]
                },
                pickerOptions: {},
      pickerOptions: {
        disabledDate(time) {
          return time.getTime() > Date.now(); // ç¦ç”¨æœªæ¥çš„æ—¥æœŸ
        }
      },
                area: [],
                user: [],
                solutionList: []
@@ -559,9 +563,11 @@
                                                item.active = true
                                                this.pickerOptions = {
                                                    disabledDate(time) {
                                                        return time.getTime() < new Date(item.parentStartTime).getTime() || time.getTime() > new Date(item.parentEndTime).getTime()
                          var start = new Date(item.startTime)
                          var end = new Date(item.endTime)
                          return ( time.getTime() < start.getTime() ||  time.getTime()>end.getTime())
                                                    }
                                                };
                      }
                                            } else {
                                                item.active = false
                                            }
@@ -629,24 +635,24 @@
            },
            async getCityTree() {
                this.area = await findTreeList({})
                this.setSecondLevelChildrenToNullPrecise(this.area);
      this.setSecondLevelChildrenToNullPrecise(this.area)
            },
            setSecondLevelChildrenToNullPrecise(data, level = 1) {
                if (!data || !data.length) return;
      if (!data || !data.length) return
                data.forEach(item => {
                    if (item.childAreasList && item.childAreasList.length) {
                        if (level === 2) {
                            // è¿™æ˜¯ç¬¬ä¸€çº§èŠ‚ç‚¹ï¼Œå¤„ç†å…¶å­èŠ‚ç‚¹ï¼ˆç¬¬äºŒçº§ï¼‰
                            item.childAreasList.forEach(child => {
                                child.childAreasList = null;
                            });
              child.childAreasList = null
            })
                        } else {
                            // ç»§ç»­é€’归处理更深层级
                            this.setSecondLevelChildrenToNullPrecise(item.childAreasList, level + 1);
            this.setSecondLevelChildrenToNullPrecise(item.childAreasList, level + 1)
                        }
                    }
                });
      })
            },
            getUser() {
                findListByDTO({})
@@ -688,7 +694,7 @@
                }
            },
            getSolutions(id) {
                let row = this.user.filter(item => item.id === id)
      const row = this.user.filter(item => item.id === id)
                this.form.idcardNo = row[0].idcardNo
                findList({ memberId: id })
                    .then(res => {
@@ -697,24 +703,32 @@
                            item.active = false
                        })
                        this.solutionList = res
          this.changeSolution(null,0)
                    })
            },
            changeSolution(e, i) {
      this.pickerOptions = {}
      if(this.solutionList.length < i){
        return
      }
                this.solutionList.forEach((item, index) => {
                    item.active = i === index
                })
                let obj = this.solutionList.filter(item => item.active)[0]
      const obj = this.solutionList.filter(item => item.active)[0]
      this.pickerOptions = {
        disabledDate (time) {
          var start = new Date(obj.startTime)
          var end = new Date(obj.endTime)
          return ( time.getTime() < start.getTime() ||  time.getTime()>end.getTime())
        }
      }
                this.form.insuranceApplyId = obj.applyId
                this.form.solutionId = obj.solutionId
                this.form.worktypeId = obj.worktypeId
                this.form.duId = obj.duId
                this.form.applyDetailId = obj.id
                this.form.happenTime = ''
                this.pickerOptions = {
                    disabledDate(time) {
                        return time.getTime() < new Date(obj.parentStartTime).getTime() || time.getTime() > new Date(obj.parentEndTime).getTime()
                    }
                };
      this.form.happenTime = obj.startTime
      console.log(this.pickerOptions)
            },
            // æŸ¥çœ‹ä¿å•详情
            jumpSolutionDetail(id, solutionType) {
@@ -736,6 +750,8 @@
                            this.i = 2
                        }
                        this.$emit('success')
        }).catch(err => {
            this.$tip.apiFailed(err)
                    })
                    .finally(() => {
                        this.isWorking = false
company/src/views/business/knowledge.vue
@@ -2,14 +2,28 @@
    <TableLayout :permissions="['business:knowledge:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="标题/内容" prop="title">
                <el-input v-model="searchForm.title" placeholder="请输入标题内容" @keypress.enter.native="search"></el-input>
            <el-form-item label="标题" prop="title">
                <el-input v-model="searchForm.title" style="width: 120px"  clearable placeholder="请输入标题" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="省份编码" prop="provinceId">
                <el-input v-model="searchForm.provinceId" placeholder="请输入省份编码" @keypress.enter.native="search"></el-input>
          <el-form-item label="省份" prop="area">
            <el-select style="width: 120px"  v-model="searchForm.provinceId" clearable filterable @change="changeProvince" placeholder="请选择">
              <el-option
                  v-for="item in areas"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id">
              </el-option>
            </el-select>
            </el-form-item>
            <el-form-item label="城市编码" prop="cityId">
                <el-input v-model="searchForm.cityId" placeholder="请输入城市编码" @keypress.enter.native="search"></el-input>
          <el-form-item label="城市" prop="area">
            <el-select style="width: 120px" v-model="searchForm.cityId"  clearablefilterable @change="search" placeholder="请选择">
              <el-option
                  v-for="item in citys"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id">
              </el-option>
            </el-select>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
@@ -25,18 +39,17 @@
            </ul>
            <div class="list" v-loading="isWorking.search" v-if="tableData.list.length > 0">
                <div class="list-item" v-for="(item, index) in tableData.list" :key="index">
                    <div class="list-item-title">
                    <div class="list-item-title" @click="gourl(item.link)">
                        <span>{{item.title}}</span>
                        <i class="el-icon-arrow-right"></i>
                    </div>
                    <div class="list-item-cates" v-if="item.labelNames">
                        <div class="list-item-cates-row" v-for="(label, index) in item.labelNames.split(',')" :key="index">政策法规labels</div>
                        <div class="list-item-cates-row">{{label}}</div>
                    <div class="list-item-cates" v-if="item.labels">
                        <div class="list-item-cates-row" v-for="(label, index) in item.labels.split(',')" :key="index">  {{label}}</div>
                    </div>
                    <div class="list-item-footer">
                        <div class="left">
                            <div class="list-item-footer-row">适用地区:{{item.cityName ? item.cityName : item.provinceName}}</div>
                            <div class="list-item-footer-row">适用年份:{{item.yearInfo}}</div>
                            <div class="list-item-footer-row">适用年份:{{item.yearInfo}} å¹´</div>
                        </div>
                        <div class="right">
                            <el-button type="text" size="medium" style="margin-right: 15px; color: red;" @click="dele(item.id)">删除</el-button>
@@ -65,7 +78,7 @@
    import TableLayout from '@/layouts/TableLayout'
    import Pagination from '@/components/common/Pagination'
    import OperaKnowledgeWindow from '@/components/business/OperaKnowledgeWindow'
    import { deleteById } from '@/api/business/knowledge'
import {deleteById, findTreeList} from '@/api/business/knowledge'
    export default {
        name: 'Knowledge',
        extends: BaseTable,
@@ -77,7 +90,9 @@
                    provinceId: '',
                    cityId: '',
                    title: ''
                }
      },
      areas: [],
      citys: []
            }
        },
        created () {
@@ -88,20 +103,39 @@
                'field.main': 'id'
            })
            this.search()
    this.getCityTree()
        },
        methods: {
    changeProvince (e) {
      this.citys = []
      this.searchForm.cityId=null
      this.areas.forEach(item => {
        if (item.id === this.searchForm.provinceId) {
          this.citys = item.childAreasList || []
        }
      })
      this.search()
    },
    gourl (url) {
      if (url) {
        window.open(url)
      }
    },
            dele(id) {
                this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(async () => {
                    let res = await deleteById(id)
        const res = await deleteById(id)
                    this.search()
                    this.$message.success('删除成功')
                }).catch(() => {
                });
      })
    },
    async getCityTree () {
      this.areas = await findTreeList({})
            }
        }
    }
company/src/views/business/riskReminder.vue
@@ -3,23 +3,23 @@
        <div class="tx_item">
            <div class="tx_item_head">
                <span>多次出险提醒</span>
                <el-switch active-value="1" inactive-value="0" v-model="form.riskTimesOpen"></el-switch>
                <el-switch :active-value="'1'" :inactive-value="'0'" v-model="form.riskTimesOpen"></el-switch>
            </div>
            <div class="tx_item_content">
                <span>规则设置:同一人一年内报案</span>
                <el-input-number style="margin: 0 15px;" v-model="form.riskTimesReportTimes" :min="0"></el-input-number>
                <el-input-number style="width: 100px; min-width: 100px;margin: 0 15px;"  :disabled="form.riskTimesOpen === '0'"  v-model="form.riskTimesReportTimes" :min="0"></el-input-number>
                <span>次及以上,进行提醒。</span>
            </div>
        </div>
        <div class="tx_item">
            <div class="tx_item_head">
                <span>疑似重复报案提醒</span>
                <el-switch active-value="1" inactive-value="0" v-model="form.riskRepeatReportOpen"></el-switch>
                <el-switch :active-value="'1'" :inactive-value="'0'" v-model="form.riskRepeatReportOpen"></el-switch>
            </div>
            <div class="tx_item_content">
                <span>规则设置:</span>
                <el-input-number style="margin: 0 15px;" v-model="form.riskRepeatReportTime" :min="0"></el-input-number>
                <el-select v-model="form.riskRepeatReportTimeUnit" style="width: 100px; margin-right: 15px;" placeholder="请选择">
                <el-input-number  style="width: 100px; min-width: 100px;margin: 0 15px;" v-model="form.riskRepeatReportTime" :disabled="form.riskRepeatReportOpen === '0'" :min="0"></el-input-number>
                <el-select v-model="form.riskRepeatReportTimeUnit" :disabled="form.riskRepeatReportOpen === '0'"  style="width: 90px; min-width: 90px; margin-right: 15px;" placeholder="请选择">
                    <el-option label="小时" value="1"></el-option>
                    <el-option label="天" value="2"></el-option>
                </el-select>
@@ -29,23 +29,23 @@
        <div class="tx_item">
            <div class="tx_item_head">
                <span>索赔次数过多提醒</span>
                <el-switch active-value="1" inactive-value="0" v-model="form.riskClaimTimesOpen"></el-switch>
                <el-switch :active-value="'1'" :inactive-value="'0'" v-model="form.riskClaimTimesOpen"></el-switch>
            </div>
            <div class="tx_item_content">
                <span>规则设置:同一个保单1年内索赔次数超过</span>
                <el-input-number style="margin: 0 15px;" v-model="form.riskClaimTimes" :min="0"></el-input-number>
                <el-input-number style="width: 100px; min-width: 100px;margin: 0 15px;" v-model="form.riskClaimTimes"  :disabled="form.riskClaimTimesOpen === '0'" :min="0"></el-input-number>
                <span>次,进行提醒。</span>
            </div>
        </div>
        <div class="tx_item">
            <div class="tx_item_head">
                <span>新员工出险提醒</span>
                <el-switch active-value="1" inactive-value="0" v-model="form.riskNewMemberOpen"></el-switch>
                <el-switch :active-value="'1'" :inactive-value="'0'" v-model="form.riskNewMemberOpen"></el-switch>
            </div>
            <div class="tx_item_content">
                <span>规则设置:保单生效的</span>
                <el-input-number style="margin: 0 15px;" v-model="form.riskNewMemberTime" :min="0"></el-input-number>
                <el-select v-model="form.riskNewMemberTimeUnit" style="width: 100px; margin-right: 15px;" placeholder="请选择">
                <el-input-number style="width: 100px; min-width: 100px;margin: 0 15px;" v-model="form.riskNewMemberTime" :disabled="form.riskNewMemberOpen === '0'" :min="0"></el-input-number>
                <el-select v-model="form.riskNewMemberTimeUnit" style="width: 90px; min-width: 90px; margin-right: 15px;"  :disabled="form.riskNewMemberOpen === '0'" placeholder="请选择">
                    <el-option label="小时" value="1"></el-option>
                    <el-option label="天" value="2"></el-option>
                </el-select>
@@ -55,11 +55,12 @@
        <div class="tx_item">
            <div class="tx_item_head">
                <span>敏感词设置</span>
                <el-switch active-value="1" inactive-value="0" v-model="form.riskSensitiveWordsOpen"></el-switch>
                <el-switch :active-value="'1'" :inactive-value="'0'" v-model="form.riskSensitiveWordsOpen"></el-switch>
            </div>
            <div class="tx_item_content">
                <span>规则设置:</span>
                <el-input
                    :disabled="form.riskSensitiveWordsOpen === '0'"
                    type="textarea"
                    :rows="5"
                    placeholder="每个敏感词请用“;”分隔,如骨折;高空;夜间;交通事故;搬运等其他字符"
@@ -76,7 +77,7 @@
<script>
    import { updRiskConfig, getRiskConfig } from '@/api/business/settleRisk'
    export default {
        name: "riskReminder",
  name: 'riskReminder',
        data() {
            return {
                form: {
@@ -101,10 +102,11 @@
        },
        methods: {
            async getRiskConfigs() {
                let res = await getRiskConfig()
      const res = await getRiskConfig()
                for (const key in this.form) {
                    this.form[key] = res[key]
                }
      console.log(this.form)
            },
            submit() {
                this.loading = true
@@ -138,6 +140,7 @@
        }
        .tx_item {
            width: 49%;
            //min-width: 500px;
            padding: 30px 20px;
            box-sizing: border-box;
            background-color: #ffffff;
company/src/views/business/settleClaims.vue
@@ -3,13 +3,13 @@
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="员工姓名" prop="memberName">
                <el-input v-model="searchForm.memberName" placeholder="请输入" @keypress.enter.native="search"></el-input>
                <el-input v-model="searchForm.memberName" clearable placeholder="请输入" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="身份证" prop="memberIdcardNo">
                <el-input v-model="searchForm.memberIdcardNo" placeholder="请输入" @keypress.enter.native="search"></el-input>
                <el-input v-model="searchForm.memberIdcardNo" clearable placeholder="请输入" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="报案单位" prop="companyId" v-if="userInfo.type === 0">
                <el-select v-model="searchForm.companyId" filterable placeholder="请选择" @change="search">
                <el-select v-model="searchForm.companyId" clearable filterable placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in companyList"
                        :key="item.id"
@@ -19,7 +19,7 @@
                </el-select>
            </el-form-item>
            <el-form-item label="保险方案" prop="baseSolutionId">
                <el-select v-model="searchForm.baseSolutionId" filterable placeholder="请选择" @change="search">
                <el-select v-model="searchForm.baseSolutionId"  clearable filterable placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in solutionList"
                        :key="item.baseId"
@@ -29,7 +29,7 @@
                </el-select>
            </el-form-item>
            <el-form-item label="案件状态" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择" @change="search">
                <el-select v-model="searchForm.status" clearable placeholder="请选择" @change="search">
                    <el-option label="暂存中" value="0"></el-option>
                    <el-option label="已报案" value="1"></el-option>
                    <el-option label="待立案" value="2"></el-option>
@@ -48,7 +48,7 @@
                </el-select>
            </el-form-item>
            <el-form-item label="派遣单位" prop="duName">
              <el-input v-model="searchForm.duName" placeholder="请输入" @keypress.enter.native="search"></el-input>
              <el-input v-model="searchForm.duName" placeholder="请输入" clearable @keypress.enter.native="search"></el-input>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
@@ -79,6 +79,9 @@
                <el-table-column prop="duName" label="派遣单位" min-width="100px"></el-table-column>
                <el-table-column prop="worktypeName" label="所属工种" min-width="100px"></el-table-column>
                <el-table-column prop="baoxianStartTime" label="保险生效起期" min-width="100px"></el-table-column>
                <el-table-column prop="isRisk" label="是否风险案件" min-width="100px">
                  <template slot-scope="{row}"> <span style="color: red" v-if="row.isRisk === 1">风险案件</span></template>
                </el-table-column>
                <el-table-column prop="createDate" label="报案时间" min-width="100px"></el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:settleclaims:update', 'business:settleclaims:delete'])"
log/web/error.2025-05-27.0.log
log/web/info.2025-05-27.0.log
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
2025-05-27 10:04:22.659 [main] INFO  com.doumee.CompanyApplication - Starting CompanyApplication on DESKTOP-77EHGKJ with PID 31268 (D:\code\idea2023\git\yunyibao\server\company\target\classes started by T14 in D:\code\idea2023\git\yunyibao)
2025-05-27 10:04:22.668 [main] INFO  com.doumee.CompanyApplication - The following profiles are active: dev
2025-05-27 10:04:26.676 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
2025-05-27 10:04:26.683 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2025-05-27 10:04:27.098 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 355ms. Found 0 Redis repository interfaces.
2025-05-27 10:04:29.000 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroCredentialsMatcher' of type [com.doumee.config.shiro.ShiroCredentialsMatcher] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.066 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'spring.redis-org.springframework.boot.autoconfigure.data.redis.RedisProperties' of type [org.springframework.boot.autoconfigure.data.redis.RedisProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.073 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration' of type [org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.453 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'lettuceClientResources' of type [io.lettuce.core.resource.DefaultClientResources] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.667 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'redisConnectionFactory' of type [org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.802 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'sessionRedisTemplate' of type [org.springframework.data.redis.core.RedisTemplate] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.802 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroCache' of type [com.doumee.config.shiro.ShiroCache] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.805 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroTokenManager' of type [com.doumee.config.shiro.ShiroTokenManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.806 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroSessionDAO' of type [com.doumee.config.shiro.ShiroSessionDAO] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.816 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroCacheManager' of type [com.doumee.config.shiro.ShiroCacheManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.884 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroRealm' of type [com.doumee.config.shiro.ShiroRealm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:29.886 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroConfig' of type [com.doumee.config.shiro.ShiroConfig$$EnhancerBySpringCGLIB$$49ba0da8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:31.470 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'sessionManager' of type [com.doumee.config.shiro.ShiroSessionManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:31.474 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'shiroCache' of type [com.doumee.config.shiro.ShiroCache] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:31.475 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:31.633 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2025-05-27 10:04:32.705 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 10031 (http)
2025-05-27 10:04:32.736 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-10031"]
2025-05-27 10:04:32.737 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
2025-05-27 10:04:32.738 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.31]
2025-05-27 10:04:33.139 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2025-05-27 10:04:33.139 [main] INFO  org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 10281 ms
2025-05-27 10:04:40.541 [main] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
2025-05-27 10:04:58.579 [main] INFO  o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2025-05-27 10:05:05.599 [main] WARN  s.d.s.r.operation.OperationImplicitParameterReader - Unable to interpret the implicit parameter configuration with dataType: Integer, dataTypeClass: class java.lang.Void
2025-05-27 10:05:07.134 [main] WARN  s.d.s.r.operation.OperationImplicitParameterReader - Unable to interpret the implicit parameter configuration with dataType: Integer, dataTypeClass: class java.lang.Void
2025-05-27 10:05:09.344 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-10031"]
2025-05-27 10:05:09.488 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 10031 (http) with context path ''
2025-05-27 10:05:09.518 [main] INFO  com.doumee.CompanyApplication - Started CompanyApplication in 49.121 seconds (JVM running for 56.066)
2025-05-27 10:06:37.703 [SpringContextShutdownHook] INFO  o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'
2025-05-27 10:06:37.730 [SpringContextShutdownHook] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
2025-05-27 10:06:37.737 [SpringContextShutdownHook] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
server/service/src/main/java/com/doumee/service/business/impl/LabelsServiceImpl.java
@@ -34,7 +34,6 @@
    @Autowired
    private LabelsMapper labelsMapper;
    @Override
    public Integer create(Labels labels) {
        LoginUserInfo user= (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();