jiangping
2025-04-15 f8c827392607967121c5f9a57894645f18ad5953
代码初始化
已添加7个文件
已删除1个文件
已修改42个文件
7345 ■■■■■ 文件已修改
admin/.env 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.production 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.staging 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.test 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCategoryDcaProblemWindow.vue 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCategoryWindow.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaMemberWindow.vue 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWorkorderDetailDbhWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWorkorderDetailDcaWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWorkorderDetailSheWindow.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/Header.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/user/OperaUserWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/main.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/categoryDbhLocaltion.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/categoryDbhType.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/categoryDcaLocaltion.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/categoryDcaProblem.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/categorySheLocaltion.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/categorySheType.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/company.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/companyMember.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/workorderDbh.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/workorderDca.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/workorderDcaChild.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/workorderShe.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/system/user.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/vue.config.js 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/api/business/WorkorderController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Workorder.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/vo/WorkorderAllDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/ManagersServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application-dev.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application-pro.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application-test.yml 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application.yml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/logback-spring.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
startsh/DBbackup.sh 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
startsh/Navicat备份文件20250415170810.nb3 补丁 | 查看 | 原始文档 | blame | 历史
startsh/admin_start.sh 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
startsh/lianhelihua数据库备份.sql 6781 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
startsh/启动脚本和日志处理脚本说明.txt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env
@@ -7,7 +7,7 @@
VUE_APP_ROUTER_MODE = 'hash'
# é¡¹ç›®ä¸Šä¸‹æ–‡è·¯å¾„
VUE_APP_CONTEXT_PATH = '/'
VUE_APP_CONTEXT_PATH = '/lianhelihua_admin'
# æŽ¥å£å‰ç¼€
VUE_APP_API_PREFIX = '/api'
VUE_APP_API_PREFIX = '/lianhelihua_interface'
admin/.env.development
@@ -1,2 +1,3 @@
# å¼€å‘环境配置
NODE_ENV = 'development'
VUE_APP_API_URL  = 'http://localhost:10010'
admin/.env.production
@@ -3,3 +3,5 @@
# å…³é—­DEBUG
VUE_APP_DEBUG = 'off'
VUE_APP_API_URL  = 'https://dmtest.ahapp.net/lianhelihua_interface'
admin/.env.staging
ÎļþÒÑɾ³ý
admin/.env.test
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
# ç”Ÿäº§çŽ¯å¢ƒé…ç½®
NODE_ENV = 'production'
# å…³é—­DEBUG
VUE_APP_DEBUG = 'off'
VUE_APP_API_URL  = 'https://dmtest.ahapp.net/lianhelihua_interface'
admin/package.json
@@ -4,8 +4,9 @@
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "serve:test": "vue-cli-service serve --mode test",
    "build:test": "vue-cli-service build --mode test",
    "build": "vue-cli-service build",
    "build:staging": "vue-cli-service build --mode staging",
    "lint": "vue-cli-service lint",
    "fix": "eslint --ext .js,.vue src --fix"
  },
admin/src/components/business/OperaCategoryDcaProblemWindow.vue
@@ -10,12 +10,23 @@
        <el-input v-model="form.name" placeholder="请输入名称" v-trim/>
      </el-form-item>
      <el-form-item label="选择父级" prop="parentId">
        <el-cascader  v-model="form.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
        <treeselect
            v-model="form.parentId"
            placeholder="请选择"
            :options="categorys"
            :normalizer="normalizeOptions"
            :default-expand-level="1"
            noChildrenText="没有子选项"
            noOptionsText="没有可选项"
            noResultsText="没有匹配的结果"
            @select="node => treeHandleSelect(node)"
        />
<!--        <el-cascader  v-model="form.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
                      clearable filterable :props="categoryprops"  >
          <template slot-scope="{ node, data }">
            <span>{{ data.name }}</span> <!-- è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 -->
            <span>{{ data.name }}</span> &lt;!&ndash; è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 &ndash;&gt;
          </template>
        </el-cascader>
        </el-cascader>-->
      </el-form-item>
      <el-form-item label="排序码" prop="sortnum">
        <el-input v-model="form.sortnum" placeholder="请输入排序码(升序)" v-trim/>
@@ -66,6 +77,23 @@
    })
  },
  methods: {
    normalizeOptions (node) {
      if (node.childList && !node.childList.length) {
        // åŽ»æŽ‰children=[]的children属性
        delete node.childList
      }
      return {
        id: node.id,
        label: node.name,
        children: node.childList
      }
    },
    treeHandleSelect (node) {
      if (this.form.id != null && node.id && this.form.id === node.id) {
        this.$tip.error('对不起,父级不能设置为自身!')
        this.form.parentId = null
      }
    },
    handleChangeCategory (value) {
      this.form.parentId = null
      if (this.form.categoryList && this.form.categoryList.length >= 1) {
@@ -94,10 +122,9 @@
      }
      return data
    },
    open (title, target, categorys, categoryType, parentIdPath) {
    open (title, target, categorys, categoryType, parentId) {
      this.title = title
      this.categorys = categorys || []
      this.categorys = this.getTreeData(this.categorys)
      this.categorys = JSON.parse(JSON.stringify(categorys||[]));
      console.log(this.categorys)
      this.visible = true
      this.form = {
@@ -107,7 +134,7 @@
        categoryList: [],
        sortnum: null,
        remark: '',
        parentId: null
        parentId: parentId
      }
      this.form.type = categoryType
      // æ–°å»º
@@ -116,8 +143,8 @@
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
          this.form.categoryList = []
          if (parentIdPath && parentIdPath != null) {
          // this.form.categoryList = []
          /*if (parentIdPath && parentIdPath != null) {
            var array = parentIdPath.split('/')
            array.forEach(item => {
              if (item && item != null && item !== '') {
@@ -125,7 +152,7 @@
              }
            })
            that.handleChangeCategory()
          }
          }*/
        })
        return
      }
@@ -134,7 +161,7 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.categoryList = []
        /*this.form.categoryList = []
        if (target.parentId && target.idParentPath) {
          var array = target.idParentPath.split('/')
          array.forEach(item => {
@@ -142,7 +169,7 @@
              that.form.categoryList.push(parseInt(item))
            }
          })
        }
        }*/
      })
    }
  }
admin/src/components/business/OperaCategoryWindow.vue
@@ -10,12 +10,21 @@
        <el-input v-model="form.name" placeholder="请输入名称" v-trim/>
      </el-form-item>
      <el-form-item label="选择父级" prop="parentId">
        <el-cascader  v-model="form.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
<!--        <el-cascader  v-model="form.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
                      clearable filterable :props="categoryprops"  >
          <template slot-scope="{ node, data }">
            <span>{{ data.name }}</span> <!-- è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 -->
            <span>{{ data.name }}</span> &lt;!&ndash; è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 &ndash;&gt;
          </template>
        </el-cascader>
        </el-cascader>-->
        <treeselect
            v-model="form.parentId"
            placeholder="请选择"
            :options="categorys"
            :normalizer="normalizeOptions"
            :default-expand-level="1"
            noChildrenText="没有子选项"
            noOptionsText="没有可选项"
            noResultsText="没有匹配的结果" />
      </el-form-item>
      <el-form-item label="排序码" prop="sortnum">
        <el-input v-model="form.sortnum" type="number" placeholder="请输入排序码(升序)" v-trim/>
@@ -66,6 +75,17 @@
    })
  },
  methods: {
    normalizeOptions (node) {
      if (node.childList && !node.childList.length) {
        // åŽ»æŽ‰children=[]的children属性
        delete node.childList
      }
      return {
        id: node.id,
        label: node.name,
        children: node.childList
      }
    },
    handleChangeCategory (value) {
      this.form.parentId = null
      if (this.form.categoryList && this.form.categoryList.length >= 1) {
@@ -89,10 +109,10 @@
      }
      return data
    },
    open (title, target, categorys, categoryType, parentIdPath) {
    open (title, target, categorys, categoryType, parentId) {
      this.title = title
      this.categorys = categorys || []
      this.categorys = this.getTreeData(this.categorys)
      this.categorys = JSON.parse(JSON.stringify(categorys||[]));
      // this.categorys = this.getTreeData(this.categorys)
      console.log(this.categorys)
      this.visible = true
      this.form = {
@@ -102,7 +122,7 @@
        remark: '',
        categoryList: [],
        sortnum: null,
        parentId: null
        parentId: parentId
      }
      this.form.type = categoryType
      // æ–°å»º
@@ -112,7 +132,7 @@
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
          this.form.categoryList = []
          if (parentIdPath && parentIdPath != null) {
          /* if (parentIdPath && parentIdPath != null) {
            var array = parentIdPath.split('/')
            array.forEach(item => {
              if (item && item != null && item !== '') {
@@ -120,7 +140,7 @@
              }
            })
            that.handleChangeCategory()
          }
          } */
        })
        return
      }
@@ -129,7 +149,7 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.categoryList = []
        /* this.form.categoryList = []
        if (target.parentId && target.idParentPath) {
          var array = target.idParentPath.split('/')
          array.forEach(item => {
@@ -137,7 +157,7 @@
              that.form.categoryList.push(parseInt(item))
            }
          })
        }
        } */
      })
    }
  }
admin/src/components/business/OperaMemberWindow.vue
@@ -6,41 +6,8 @@
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="创建人编码" prop="creator">
        <el-input v-model="form.creator" placeholder="请输入创建人编码" v-trim/>
      </el-form-item>
      <el-form-item label="创建时间" prop="createDate">
        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="请输入创建时间"></el-date-picker>
      </el-form-item>
      <el-form-item label="更新人编码" prop="editor">
        <el-input v-model="form.editor" placeholder="请输入更新人编码" v-trim/>
      </el-form-item>
      <el-form-item label="更新时间" prop="editDate">
        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="请输入更新时间"></el-date-picker>
      </el-form-item>
      <el-form-item label="是否删除0否 1是" prop="isdeleted">
        <el-input v-model="form.isdeleted" placeholder="请输入是否删除0否 1是" v-trim/>
      </el-form-item>
      <el-form-item label="姓名" prop="name">
        <el-input v-model="form.name" placeholder="请输入姓名" v-trim/>
      </el-form-item>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="form.remark" placeholder="请输入备注" v-trim/>
      </el-form-item>
      <el-form-item label="状态 0正常 1禁用" prop="status">
        <el-input v-model="form.status" placeholder="请输入状态 0正常 1禁用" v-trim/>
      </el-form-item>
      <el-form-item label="排序码" prop="sortnum">
        <el-input v-model="form.sortnum" placeholder="请输入排序码" v-trim/>
      </el-form-item>
      <el-form-item label="头像" prop="imgurl">
        <el-input v-model="form.imgurl" placeholder="请输入头像" v-trim/>
      </el-form-item>
      <el-form-item label="类型" prop="type">
        <el-input v-model="form.type" placeholder="请输入类型" v-trim/>
      </el-form-item>
      <el-form-item label="所属组织编码(关联company)" prop="companyId">
        <el-input v-model="form.companyId" placeholder="请输入所属组织编码(关联company)" v-trim/>
      </el-form-item>
      <el-form-item label="手机号" prop="phone">
        <el-input v-model="form.phone" placeholder="请输入手机号" v-trim/>
@@ -48,23 +15,15 @@
      <el-form-item label="邮箱" prop="email">
        <el-input v-model="form.email" placeholder="请输入邮箱" v-trim/>
      </el-form-item>
      <el-form-item label="性别 0男 1女 2位置" prop="sex">
        <el-input v-model="form.sex" placeholder="请输入性别 0男 1女 2位置" v-trim/>
      <el-form-item label="性别" prop="sex">
        <el-radio-group v-model="form.sex">
          <el-radio :value="1" :label="1">男</el-radio>
          <el-radio :value="2" :label="2">女</el-radio>
          <el-radio :value="0" :label="0">未知</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="工号" prop="code">
        <el-input v-model="form.code" placeholder="请输入工号" v-trim/>
      </el-form-item>
      <el-form-item label="企微标识" prop="qwId">
        <el-input v-model="form.qwId" placeholder="请输入企微标识" v-trim/>
      </el-form-item>
      <el-form-item label="证件号" prop="idcard">
        <el-input v-model="form.idcard" placeholder="请输入证件号" v-trim/>
      </el-form-item>
      <el-form-item label="最近上线时间" prop="lastLoginDate">
        <el-date-picker v-model="form.lastLoginDate" value-format="yyyy-MM-dd" placeholder="请输入最近上线时间"></el-date-picker>
      </el-form-item>
      <el-form-item label="登录次数" prop="loginCount">
        <el-input v-model="form.loginCount" placeholder="请输入登录次数" v-trim/>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="form.remark" placeholder="请输入备注" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
@@ -82,26 +41,11 @@
      // è¡¨å•数据
      form: {
        id: null,
        creator: '',
        createDate: '',
        editor: '',
        editDate: '',
        isdeleted: '',
        name: '',
        remark: '',
        status: '',
        sortnum: '',
        imgurl: '',
        type: '',
        companyId: '',
        phone: '',
        email: '',
        sex: '',
        code: '',
        qwId: '',
        idcard: '',
        lastLoginDate: '',
        loginCount: ''
        sex: null ,
        remark: ''
      },
      // éªŒè¯è§„则
      rules: {
admin/src/components/business/OperaWorkorderDetailDbhWindow.vue
@@ -17,7 +17,7 @@
            <div class="h1">{{ cateList[type] }}</div>
            <div class="time">提交时间:{{ info.createDate }}</div>
          </div>
          <div class="right"  :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
          <div class="right"  :style="(info.status ==0 ||info.status ==1 || info.status ==2)?'min-width: 90px':''"  :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
        </div>
        <div class="info">
          <div class="title">工单信息</div>
admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue
@@ -17,7 +17,7 @@
            <div class="h1">不符合项:{{ info.problemTitle }}</div>
            <div class="time">提交时间:{{ info.createDate }}</div>
          </div>
          <div class="right"  :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
          <div class="right"  :style="(info.status ==0 ||info.status ==1 || info.status ==2)?'min-width: 90px':''" :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
        </div>
        <div class="info">
          <div class="title">工单信息</div>
@@ -43,7 +43,7 @@
              <div class="value">{{ info.submitDate }}</div>
            </div>
            <div class="item">
              <div class="label">发生时间</div>
              <div class="label">发现时间</div>
              <div class="value">{{ info.happenTime}}</div>
            </div>
            <div class="item">
@@ -233,11 +233,12 @@
  display: flex;
  height: 100%;
  overflow: hidden;
  .modal_content {
    flex: 1;
    padding: 0px 30px;
    border-radius: 8px;
    overflow: hidden;
    overflow: auto;
    height: 100%;
    .title {
@@ -320,6 +321,7 @@
      }
      .scs {
        min-width: 90px;
        background-color: #00BA67;
      }
admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
@@ -37,7 +37,7 @@
              <div class="value">{{ info.submitDate }}</div>
            </div>
            <div class="item">
              <div class="label">发生时间</div>
              <div class="label">发现时间</div>
              <div class="value">{{ info.happenTime}}</div>
            </div>
            <div class="item">
admin/src/components/business/OperaWorkorderDetailSheWindow.vue
@@ -17,7 +17,7 @@
            <div class="h1">{{ cateList[type] }}</div>
            <div class="time">提交时间:{{ info.createDate }}</div>
          </div>
          <div class="right"  :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
          <div class="right"  :style="(info.status ==0 ||info.status ==1 || info.status ==2)?'min-width: 90px':''"   :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
        </div>
        <div class="info">
          <div class="title">工单信息</div>
@@ -43,6 +43,10 @@
            <div class="item">
              <div class="label">发生地点</div>
              <div class="value">{{ info.locationName }}</div>
            </div>
            <div class="item">
              <div class="label">发现时间</div>
              <div class="value">{{ info.happenTime }}</div>
            </div>
            <div class="item">
              <div class="label">具体位置</div>
@@ -144,7 +148,7 @@
            <div v-if="item.approveType == 1" class="childList">
              <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id">
                <img v-if="item1.faceImg != null && item1.faceImg != ''" :src="item1.faceImg" class="avatar" alt="" />
                <img v-if="item1.faceImg == null || item1.faceImg == ''" src="@/assets/avatar/man.png" class="avatar"
                <img v-if="item1.faceImg == null || item1.faceImg == ''" src="../../assets/avatar/man.png" class="avatar"
                     alt="" />
                <span> {{ item1.memberName }}</span>
              </div>
admin/src/components/common/Header.vue
@@ -9,7 +9,7 @@
      <div class="user">
        <el-dropdown trigger="click">
          <span class="el-dropdown-link" style="color: white">
            <img v-if="userInfo != null" :src="userInfo.avatar == null ? '@/assets/images/avatar/man.png' : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i>
            <img v-if="userInfo != null" :src="userInfo.avatar == null ? '@/assets/avatar/man.png' : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i>
          </span>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item @click.native="changePwd">修改密码</el-dropdown-item>
admin/src/components/system/user/OperaUserWindow.vue
@@ -21,8 +21,8 @@
      </el-form-item>
      <el-form-item label="头像" prop="avatar" required>
        <el-radio-group v-model="form.avatar" class="form-item-avatar">
          <el-radio label="/avatar/man.png" border><img src="/avatar/man.png" alt=""></el-radio>
          <el-radio label="/avatar/woman.png" border><img src="/avatar/woman.png" alt=""></el-radio>
          <el-radio label="avatar/man.png" border><img src="@/assets/avatar/man.png" alt=""></el-radio>
          <el-radio label="avatar/woman.png" border><img src="@/assets/avatar/woman.png" alt=""></el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item v-if="form.id == null" label="初始密码" prop="password" required>
admin/src/main.js
@@ -10,7 +10,9 @@
import plugins from './plugins'
import { mapState, mapMutations } from 'vuex'
import { fetchMenuTree } from './api/system/menu'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
Vue.component('treeselect', Treeselect)
Vue.config.productionTip = false
Vue.use(ElementUI, {
  size: 'small'
admin/src/views/business/categoryDbhLocaltion.vue
@@ -26,7 +26,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar"  v-if="containPermissions(['business:category:create', 'business:category:delete' ])" >
        <li><el-button type="primary"
                       @click="$refs.operaCategoryWindow.open('新建DCA事件位置信息', null,categoryList ,searchForm.type,searchForm.parentIdPath)" icon="el-icon-plus"
                       @click="$refs.operaCategoryWindow.open('新建DCA事件位置信息', null,categoryList ,searchForm.type,searchForm.parentId)" icon="el-icon-plus"
                       v-permissions="['business:category:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch(true,getfindTreePage)" icon="el-icon-delete" v-permissions="['business:category:delete']">批量删除</el-button></li>
      </ul>
@@ -37,7 +37,7 @@
        <el-table-column prop="namePath" label="完整路径" min-width="150px"></el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column>
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="280">
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作"  fixed="right" min-width="120">
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.operaCategoryWindow.open('编辑DCA事件位置信息', row, categoryList,searchForm.type)"  v-permissions="['business:category:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-delete" @click="deleteById(row,true, getfindTreePage)" style="color: red"  v-permissions="['business:category:delete']">删除</el-button>
admin/src/views/business/categoryDbhType.vue
@@ -26,7 +26,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar"  v-if="containPermissions(['business:category:create', 'business:category:delete' ])" >
        <li><el-button type="primary"
                       @click="$refs.operaCategoryWindow.open('新建跌绊滑风险类型', null,categoryList ,searchForm.type,searchForm.parentIdPath)" icon="el-icon-plus"
                       @click="$refs.operaCategoryWindow.open('新建跌绊滑风险类型', null,categoryList ,searchForm.type,searchForm.parentId)" icon="el-icon-plus"
                       v-permissions="['business:category:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch(true,getfindTreePage)" icon="el-icon-delete" v-permissions="['business:category:delete']">批量删除</el-button></li>
      </ul>
@@ -37,7 +37,7 @@
        <el-table-column prop="namePath" label="完整路径" min-width="150px"></el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column>
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="280">
        <el-table-column fixed="right" v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="150">
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.operaCategoryWindow.open('编辑跌绊滑风险类型', row, categoryList,searchForm.type)"  v-permissions="['business:category:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-delete" @click="deleteById(row,true, getfindTreePage)" style="color: red"  v-permissions="['business:category:delete']">删除</el-button>
admin/src/views/business/categoryDcaLocaltion.vue
@@ -26,7 +26,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar"  v-if="containPermissions(['business:category:create', 'business:category:delete' ])" >
        <li><el-button type="primary"
                       @click="$refs.operaCategoryWindow.open('新建DCA事件位置信息', null,categoryList ,searchForm.type,searchForm.parentIdPath)" icon="el-icon-plus"
                       @click="$refs.operaCategoryWindow.open('新建DCA事件位置信息', null,categoryList ,searchForm.type,searchForm.parentId)" icon="el-icon-plus"
                       v-permissions="['business:category:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch(true,getfindTreePage)" icon="el-icon-delete" v-permissions="['business:category:delete']">批量删除</el-button></li>
      </ul>
@@ -37,7 +37,7 @@
        <el-table-column prop="namePath" label="完整路径" min-width="150px"></el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column>
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="280">
        <el-table-column fixed="right" v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="120">
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.operaCategoryWindow.open('编辑DCA事件位置信息', row, categoryList,searchForm.type)"  v-permissions="['business:category:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-delete" @click="deleteById(row,true, getfindTreePage)" style="color: red"  v-permissions="['business:category:delete']">删除</el-button>
admin/src/views/business/categoryDcaProblem.vue
@@ -26,7 +26,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar"  v-if="containPermissions(['business:category:create', 'business:category:delete' ])" >
        <li><el-button type="primary"
                       @click="$refs.operaCategoryWindow.open('新建DCA主题和观察项', null,categoryList ,4,searchForm.parentIdPath)" icon="el-icon-plus"
                       @click="$refs.operaCategoryWindow.open('新建DCA主题和观察项', null,categoryList ,4,searchForm.parentId)" icon="el-icon-plus"
                       v-permissions="['business:category:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch(true,getfindTreePage)" icon="el-icon-delete" v-permissions="['business:category:delete']">批量删除</el-button></li>
      </ul>
admin/src/views/business/categorySheLocaltion.vue
@@ -26,7 +26,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar"  v-if="containPermissions(['business:category:create', 'business:category:delete' ])" >
        <li><el-button type="primary"
                       @click="$refs.operaCategoryWindow.open('新建SHE事件发生地点', null,categoryList ,searchForm.type,searchForm.parentIdPath)" icon="el-icon-plus"
                       @click="$refs.operaCategoryWindow.open('新建SHE事件发生地点', null,categoryList ,searchForm.type,searchForm.parentId)" icon="el-icon-plus"
                       v-permissions="['business:category:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch(true,getfindTreePage)" icon="el-icon-delete" v-permissions="['business:category:delete']">批量删除</el-button></li>
      </ul>
@@ -37,7 +37,7 @@
        <el-table-column prop="namePath" label="完整路径" min-width="150px"></el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column>
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="280">
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作"   fixed="right"min-width="120">
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.operaCategoryWindow.open('编辑SHE事件发生地点', row, categoryList,searchForm.type)"  v-permissions="['business:category:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-delete" @click="deleteById(row,true, getfindTreePage)" style="color: red"  v-permissions="['business:category:delete']">删除</el-button>
admin/src/views/business/categorySheType.vue
@@ -26,7 +26,7 @@
    <template v-slot:table-wrap>
      <ul class="toolbar"  v-if="containPermissions(['business:category:create', 'business:category:delete' ])" >
        <li><el-button type="primary"
                       @click="$refs.operaCategoryWindow.open('新建伤害类型', null,categoryList ,searchForm.type,searchForm.parentIdPath)" icon="el-icon-plus"
                       @click="$refs.operaCategoryWindow.open('新建伤害类型', null,categoryList ,searchForm.type,searchForm.parentId)" icon="el-icon-plus"
                       v-permissions="['business:category:create']">新建</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch(true,getfindTreePage)" icon="el-icon-delete" v-permissions="['business:category:delete']">批量删除</el-button></li>
      </ul>
@@ -37,7 +37,7 @@
        <el-table-column prop="namePath" label="完整路径" min-width="150px"></el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column>
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="280">
        <el-table-column fixed="right" v-if="containPermissions(['business:category:update', 'business:category:delete' ])" label="操作" min-width="120">
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.operaCategoryWindow.open('编辑伤害风险信息', row, categoryList,searchForm.type)"  v-permissions="['business:category:update']">编辑</el-button>
            <el-button type="text" icon="el-icon-delete" @click="deleteById(row,true, getfindTreePage)" style="color: red"  v-permissions="['business:category:delete']">删除</el-button>
@@ -127,7 +127,7 @@
          newItem.children = newItem.childList
        }
        if (item.children && item.children.length === 0) {
          this.$delete(newItem, 'children')
          // this.$delete(newItem, 'children')
        } else {
          newItem.children = this.getCategoryTree(newItem.children)
        }
admin/src/views/business/company.vue
@@ -7,7 +7,6 @@
      <el-table :height="tableHeightNew" v-loading="isWorking.search" :data="list" stripe
                :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }" row-key="id"
                @selection-change="handleSelectionChange" default-expand-all>
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="name" label="组织名称" min-width="100px"></el-table-column>
        <el-table-column prop="namePath" label="组织路径" min-width="100px"></el-table-column>
        <el-table-column prop="qwId" label="企业微信标识" min-width="100px"></el-table-column>
admin/src/views/business/companyMember.vue
@@ -31,7 +31,9 @@
        </li>
      </ul>
      <el-table :height="tableHeightNew"  v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
<!--        <el-table-column prop="index" label="序号" width="55" fixed="left">
          <template slot-scope="scope">{{ scope.$index+1}}</template>
        </el-table-column>-->
        <el-table-column fixed="left" prop="name" label="姓名" min-width="80px">
          <template slot-scope="{row}">
            <span>{{ row.name }}</span>
@@ -42,7 +44,7 @@
          <template slot-scope="{row}">
            <span v-if="row.sex == '1'">男</span>
            <span v-else-if="row.sex == '2' ">女</span>
            <span v-else>女</span>
            <span v-else>-</span>
          </template>
        </el-table-column>
        <el-table-column prop="email" label="邮箱" min-width="100px"></el-table-column>
@@ -56,9 +58,15 @@
        </el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column>
        <el-table-column fixed="right"   v-if="containPermissions(['business:member:update'])" label="操作" min-width="100">
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaMemberWindow.open('编辑员工信息', row)"  v-permissions="['business:member:update']">编辑</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
      </pagination>
      <OperaMemberWindow ref="OperaMemberWindow" @success="handlePageChange" />
    </template>
  </TableLayout1>
</template>
@@ -68,12 +76,13 @@
import TableLayout1 from '@/layouts/TableLayout1'
import Pagination from '@/components/common/Pagination'
import Tree from '@/components/common/Tree'
import OperaMemberWindow from '@/components/business/OperaMemberWindow'
import { treeList } from '@/api/business/company'
import { memberSync} from '@/api/business/member'
export default {
  name: 'internalMember',
  extends: BaseTable,
  components: { TableLayout1, Pagination, Tree },
  components: { TableLayout1, Pagination, Tree,OperaMemberWindow },
  data() {
    return {
      TreeList: [],
admin/src/views/business/workorderDbh.vue
@@ -3,13 +3,25 @@
    <!-- æœç´¢è¡¨å• -->
    <div slot="search-form">
      <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
        <el-form-item label="风险类型" prop="typeId">
          <el-cascader  v-model="searchForm.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
        <el-form-item label="风险类型" prop="typeIdPath">
<!--          <el-cascader  v-model="searchForm.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
                        clearable filterable :props="categoryprops"  >
            <template slot-scope="{ node, data }">
              <span>{{ data.name }}</span> <!-- è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 -->
              <span>{{ data.name }}</span> &lt;!&ndash; è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 &ndash;&gt;
            </template>
          </el-cascader>
          </el-cascader>-->
          <treeselect
              style="width: 150px"
              v-model="searchForm.typeIdPath"
              placeholder="伤害类型"
              clearable
              :options="categorys"
              :normalizer="normalizeOptions"
              :default-expand-level="1"
              @input="search"
              noChildrenText="没有子选项"
              noOptionsText="没有可选项"
              noResultsText="没有匹配的结果" />
        </el-form-item>
        <el-form-item label="上报人员" prop="memberName">
          <el-input v-model="searchForm.memberName" clearable placeholder="人员姓名或手机号" @keypress.enter.native="search"></el-input>
@@ -50,6 +62,7 @@
        </el-table-column>
        <el-table-column prop="submitDate" label="上报时间" min-width="150px"></el-table-column>
        <el-table-column prop="happenTime" label="发现时间" min-width="150px"></el-table-column>
        <el-table-column prop="locationName" label="发生地点" min-width="100px"></el-table-column>
        <el-table-column prop="riskInfo" label="风险描述" min-width="100px"></el-table-column>
        <el-table-column prop="memberName" label="上报人员" min-width="100px">
          <template slot-scope="{row}">
@@ -101,7 +114,8 @@
        memberName: '',
        memberCompanyId: '',
        localtionId: '',
        typeId: '',
        typeId: null,
        typeIdPath: null,
        code: '',
        categoryList: []
      },
@@ -125,6 +139,17 @@
    this.search()
  },
  methods: {
    normalizeOptions(node) {
      if (node.childList && !node.childList.length) {
        // åŽ»æŽ‰children=[]的children属性
        delete node.childList;
      }
      return {
        id: node.idPath,
        label: node.name,
        children: node.childList,
      };
    },
    handleChangeCategory (value) {
      if (this.searchForm.categoryList && this.searchForm.categoryList.length >= 1) {
        this.searchForm.typeId = this.searchForm.categoryList[this.searchForm.categoryList.length - 1]
admin/src/views/business/workorderDca.vue
@@ -53,13 +53,14 @@
        <el-table-column prop="locationName" label="位置" min-width="150px"></el-table-column>
        <el-table-column prop="submitDate" label="上报时间" min-width="150px"></el-table-column>
        <el-table-column prop="happenTime" label="发现时间" min-width="150px"></el-table-column>
        <el-table-column prop="memberName" label="上报人员" min-width="100px">
        <el-table-column prop="memberNames" label="通知人" min-width="150px"></el-table-column>
        <el-table-column prop="memberName" label="上报人员" min-width="150px">
          <template slot-scope="{row}">
            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
            <span v-else >{{row.memberName}} </span>
          </template>
        </el-table-column>
        <el-table-column prop="companyName" label="所属部门" min-width="100px"></el-table-column>
        <el-table-column prop="companyName" label="所属部门" min-width="150px"></el-table-column>
        <el-table-column prop="createDate" label="创建时间" min-width="150px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:workorder:update', 'business:workorder:delete'])"
@@ -103,7 +104,7 @@
        memberName: '',
        memberCompanyId: '',
        localtionId: '',
        typeId: '',
        typeId: null,
        code: '',
        categoryList: []
      },
admin/src/views/business/workorderDcaChild.vue
@@ -11,7 +11,9 @@
              :label="item.name"
              :value="item.id">
          </el-option>
          </el-select>-
          </el-select> -
        </el-form-item>
        <el-form-item label="" prop="categoryId">
          <el-select v-model="searchForm.categoryId" @change="search" style="width: 120px">
          <el-option  clearable filterable
              v-for="item in categorys1"
@@ -50,9 +52,14 @@
            <span style="color: #2E68EC;cursor: pointer" @click="$refs.operaWorkorderWindow.open('DCA事件工单详情', row)" >{{ row.code || '-'}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="typeName" label="观察主题" min-width="150px"></el-table-column>
        <el-table-column prop="categoryName" label="二级观察主题" min-width="150px"></el-table-column>
        <el-table-column prop="problemTitle" label="不符合项" min-width="150px"></el-table-column>
        <el-table-column prop="typeName" label="观察主题" min-width="100px">
          <template slot-scope="{row}"> {{row.typeName}}/{{row.categoryName}}
          </template>
        </el-table-column>
<!--
        <el-table-column prop="categoryName" label="二级主题" min-width="100px"></el-table-column>
-->
        <el-table-column prop="problemTitle" label="不符合项" min-width="250px"></el-table-column>
        <el-table-column prop="status" label="状态" min-width="100px">
          <template slot-scope="{row}">
            <span :class="'statusInfo'+row.status" v-if="row.status ==0">待处理</span>
@@ -63,13 +70,13 @@
        <el-table-column prop="locationName" label="位置" min-width="150px"></el-table-column>
        <el-table-column prop="submitDate" label="上报时间" min-width="150px"></el-table-column>
        <el-table-column prop="happenTime" label="发现时间" min-width="150px"></el-table-column>
        <el-table-column prop="memberName" label="上报人员" min-width="100px">
        <el-table-column prop="memberName" label="上报人员" min-width="150px">
          <template slot-scope="{row}">
            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
            <span v-if="row.memberPhone" >{{row.memberName}}/{{row.memberPhone }}</span>
            <span v-else >{{row.memberName}} </span>
          </template>
        </el-table-column>
        <el-table-column prop="companyName" label="所属部门" min-width="100px"></el-table-column>
        <el-table-column prop="companyName" label="所属部门" min-width="150px"></el-table-column>
        <el-table-column prop="createDate" label="创建时间" min-width="150px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:workorder:update', 'business:workorder:delete'])"
admin/src/views/business/workorderShe.vue
@@ -3,13 +3,25 @@
    <!-- æœç´¢è¡¨å• -->
    <div slot="search-form">
      <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
        <el-form-item label="伤害类型" prop="typeId">
          <el-cascader  v-model="searchForm.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
        <el-form-item label="伤害类型" prop="typeIdPath">
<!--          <el-cascader  v-model="searchForm.categoryList" :options="categorys" @change="handleChangeCategory" :show-all-levels="false"
                        clearable filterable :props="categoryprops"  >
            <template slot-scope="{ node, data }">
              <span>{{ data.name }}</span> <!-- è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 -->
              <span>{{ data.name }}</span> &lt;!&ndash; è‡ªå®šä¹‰æ˜¾ç¤ºå†…容 &ndash;&gt;
            </template>
          </el-cascader>
          </el-cascader>-->
          <treeselect
              style="width: 150px"
              v-model="searchForm.typeIdPath"
              placeholder="伤害类型"
              clearable
              :options="categorys"
              :normalizer="normalizeOptions"
              :default-expand-level="1"
              @input="search"
              noChildrenText="没有子选项"
              noOptionsText="没有可选项"
              noResultsText="没有匹配的结果" />
        </el-form-item>
        <el-form-item label="上报人员" prop="memberName">
          <el-input v-model="searchForm.memberName" clearable placeholder="人员姓名或手机号" @keypress.enter.native="search"></el-input>
@@ -56,6 +68,7 @@
            <span v-else>本人</span>
          </template>
        </el-table-column>
        <el-table-column prop="happenTime" label="发现时间" min-width="150px"></el-table-column>
        <el-table-column prop="locationName" label="发生地点" min-width="100px"></el-table-column>
        <el-table-column prop="remark" label="具体位置" min-width="100px"></el-table-column>
          <el-table-column prop="outJiuyi" label="就医情况" min-width="100px">
@@ -127,7 +140,8 @@
        memberName: '',
        memberCompanyId: '',
        localtionId: '',
        typeId: '',
        typeId: null,
        typeIdPath: null,
        code: '',
        categoryList: []
      },
@@ -151,6 +165,17 @@
    this.search()
  },
  methods: {
    normalizeOptions(node) {
      if (node.childList && !node.childList.length) {
        // åŽ»æŽ‰children=[]的children属性
        delete node.childList;
      }
      return {
        id: node.idPath,
        label: node.name,
        children: node.childList,
      };
    },
    handleChangeCategory (value) {
      if (this.searchForm.categoryList && this.searchForm.categoryList.length >= 1) {
        this.searchForm.typeId = this.searchForm.categoryList[this.searchForm.categoryList.length - 1]
admin/src/views/system/user.vue
@@ -34,7 +34,7 @@
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="avatar" label="头像" width="80px" class-name="table-column-avatar" fixed="left">
          <template slot-scope="{row}">
            <img :src="row.avatar == null ? '/static/avatar/man.png' : row.avatar">
            <img :src="row.avatar == null ? '/avatar/man.png' : row.avatar">
          </template>
        </el-table-column>
        <el-table-column prop="realname" label="姓名" min-width="100px" fixed="left"></el-table-column>
admin/vue.config.js
@@ -1,8 +1,13 @@
// è¯¦ç»†é…ç½®è¯·å‚考https://cli.vuejs.org/zh/config/#vue-config-js
const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length - 1)
// const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length - 1)
const path = require('path')
function resolve (dir) {
  return path.join(__dirname, dir)
}
module.exports = {
  publicPath: process.env.VUE_APP_CONTEXT_PATH,
  outputDir: outputDir === '/' ? 'dist' : outputDir,
  outputDir: 'lianhelihua_admin',
  assetsDir: 'static',
  lintOnSave: false,
  devServer: {
@@ -10,12 +15,19 @@
    port: 10086,
    proxy: {
      [process.env.VUE_APP_API_PREFIX]: {
        target: 'http://localhost:10010',
        target: process.env.VUE_APP_API_URL,
        changeOrigin: true,
        pathRewrite: {
          [`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
        }
      }
    }
  },
  configureWebpack: {
    resolve: {
      alias: {
        '@': resolve('src')
      }
    }
  }
}
server/src/main/java/com/doumee/api/business/WorkorderController.java
@@ -110,6 +110,11 @@
                        }
                    }
                    t.setMemberNames("本人");
                    if(Constants.equalsInteger(model.getMemberType(),Constants.ONE)){
                        t.setMemberNames("同事");
                    }else  if(Constants.equalsInteger(model.getIsHurted(),Constants.TWO)){
                        t.setMemberNames("供应商");
                    }
                    t.setMemberNames(t.getMemberNames()+"-"+StringUtils.defaultString(model.getMemberNames(),""));
                    list.add(t);
                }
server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -203,15 +203,18 @@
    @ApiModelProperty(value = "是否可转交按钮:0=否;1=是;", example = "0")
    @TableField(exist = false)
    private Integer passOnButton;
    @ApiModelProperty(value = "我的工单:0=否;1=是(查询使用)", example = "0")
    @TableField(exist = false)
    private Integer myWorkOrder;
    @ApiModelProperty(value = "分类编码路径", example = "0")
    @TableField(exist = false)
    private String typeIdPath;
    @ApiModelProperty(value = "我的工单(查询使用)",hidden = true)
    @TableField(exist = false)
    private String qwId;
    @ApiModelProperty(value = "不符合问题列表")
    @TableField(exist = false)
    private List<DCANoProblemDTO> dcaNoProblemDTOList;
server/src/main/java/com/doumee/dao/business/vo/WorkorderAllDto.java
@@ -64,7 +64,7 @@
    @ExcelColumn(name="风险描述",index =13,width = 6)
    private String problemTitle;
    @ApiModelProperty(value = "DCA问题描述")
    @ExcelColumn(name="DCA问题描述",index =13,width = 6)
    @ExcelColumn(name="DCA问题描述",index =13,width = 10)
    private String problemInfo;
    @ApiModelProperty(value = "位置地点路径名称")
    @ExcelColumn(name="位置地点路径名称",index =13,width = 6)
server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java
@@ -34,14 +34,14 @@
    @ApiModelProperty(value = "发现时间", example = "1")
    @ExcelColumn(name="发现时间",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
    private Date happenTime;
    @ApiModelProperty(value = "位置", example = "1")
    @ExcelColumn(name="位置",index =7 ,width = 6)
    @ApiModelProperty(value = "发生地点", example = "1")
    @ExcelColumn(name="发生地点",index =7 ,width = 6)
    private String locationName;
    @ApiModelProperty(value = "风险描述", example = "1")
    @ExcelColumn(name="riskInfo",index =11,width = 10)
    private String eventInfo;
    @ExcelColumn(name="风险描述",index =11,width = 10)
    private String riskInfo;
    @ApiModelProperty("提报人员名称")
    @ExcelColumn(name="上报员工",index =12,width = 4)
    @ExcelColumn(name="上报员工",index =12,width = 8)
    private String memberName;
    @ApiModelProperty("员工手机号")
    @ExcelColumn(name="员工手机号",index =13,width = 6)
server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java
@@ -23,10 +23,10 @@
    @ExcelColumn(name="工单号",index =2  ,width = 8)
    private String code;
    @ApiModelProperty("一级观察主题")
    @ExcelColumn(name="一级观察主题",index =3,width = 6)
    @ExcelColumn(name="一级观察主题",index =3,width = 10)
    private String typeName;
    @ApiModelProperty("二级观察主题")
    @ExcelColumn(name="二级观察主题",index =4,width = 6)
    @ExcelColumn(name="二级观察主题",index =4,width = 10)
    private String categoryName;
    @ApiModelProperty("不符合项")
    @ExcelColumn(name="不符合项",index =5,width = 10)
@@ -43,11 +43,11 @@
    @ApiModelProperty(value = "位置", example = "1")
    @ExcelColumn(name="位置",index =9 ,width = 6)
    private String locationName;
    @ApiModelProperty(value = "问题描述", example = "1")
    @ExcelColumn(name="问题描述",index =10,width = 4)
    @ApiModelProperty(value = "不符合原因", example = "1")
    @ExcelColumn(name="不符合原因",index =10,width = 10)
    private String eventInfo;
    @ApiModelProperty("提报人员名称")
    @ExcelColumn(name="上报员工",index =12,width = 4)
    @ExcelColumn(name="上报员工",index =12,width = 8)
    private String memberName;
    @ApiModelProperty("员工手机号")
    @ExcelColumn(name="员工手机号",index =13,width = 6)
@@ -55,8 +55,11 @@
    @ApiModelProperty("提报人员所属部门")
    @ExcelColumn(name="所属部门",index =14,width = 8)
    private String companyName;
    @ApiModelProperty(value = "通知人")
    @ExcelColumn(name="通知人",index =15 , width = 10)
    private String memberNames;
    @ApiModelProperty(value = "提交时间")
    @ExcelColumn(name="提交时间",index =15 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
    @ExcelColumn(name="提交时间",index =16 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
    private Date createDate;
server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java
@@ -37,8 +37,14 @@
    @ApiModelProperty(value = "不符合项数量", example = "1")
    @ExcelColumn(name="不符合项数量",index =8,width = 4)
    private Integer dcaNoNum;
    @ApiModelProperty(value = "位置", example = "1")
    @ExcelColumn(name="位置",index =9 ,width = 10)
    private String locationName;
    @ApiModelProperty("通知人")
    @ExcelColumn(name="通知人",index =10,width = 8)
    private String memberNames;
    @ApiModelProperty("提报人员名称")
    @ExcelColumn(name="上报员工",index =12,width = 4)
    @ExcelColumn(name="上报员工",index =12,width = 8)
    private String memberName;
    @ApiModelProperty("员工手机号")
    @ExcelColumn(name="员工手机号",index =13,width = 6)
server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java
@@ -53,14 +53,13 @@
    @ExcelColumn(name="就医情况",index =9,width = 8)
    private String jiuyiInfo;
    @ApiModelProperty(value = "是否和工作相关", example = "1")
    @ExcelColumn(name="是否和工作相关",index =10,width = 4, valueMapping = "0=否;1=是;")
    @ExcelColumn(name="是否和工作相关",index =10,width = 8, valueMapping = "0=否;1=是;")
    private Integer workRelated;
    @ApiModelProperty(value = "事件说明", example = "1")
    @ExcelColumn(name="事件说明",index =11,width = 10)
    private String eventInfo;
    @ApiModelProperty("提报人员名称")
    @ExcelColumn(name="上报员工",index =12,width = 4)
    @ExcelColumn(name="上报员工",index =12,width = 8)
    private String memberName;
    @ApiModelProperty("员工手机号")
    @ExcelColumn(name="员工手机号",index =13,width = 6)
@@ -68,9 +67,11 @@
    @ApiModelProperty("提报人员所属部门")
    @ExcelColumn(name="所属部门",index =14,width = 8)
    private String companyName;
    @ApiModelProperty(value = "发现时间")
    @ExcelColumn(name="发现时间",index =15 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
    private Date happenTime;
    @ApiModelProperty(value = "提交时间")
    @ExcelColumn(name="提交时间",index =15 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
    @ExcelColumn(name="提交时间",index =16 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
    private Date createDate;
server/src/main/java/com/doumee/service/business/impl/ManagersServiceImpl.java
@@ -153,7 +153,7 @@
                    .or().like(Member::getPhone,pageWrap.getKeyword())
                    .or().like(Member::getCompanyName,pageWrap .getKeyword()));
        }
        queryWrapper.orderByDesc(Managers::getEditDate);
        queryWrapper.orderByDesc(Managers::getCreateDate);
        return managersMapper.selectJoinList( Managers.class, queryWrapper);
    }
  
@@ -191,7 +191,7 @@
                    .or().like(Member::getPhone,pageWrap.getModel().getKeyword())
                    .or().like(Member::getCompanyName,pageWrap.getModel().getKeyword()));
        }
        queryWrapper.orderByDesc(Managers::getEditDate);
        queryWrapper.orderByDesc(Managers::getCreateDate);
        return PageData.from(managersMapper.selectJoinPage(page,Managers.class, queryWrapper));
    }
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -14,6 +14,7 @@
import com.doumee.dao.business.CompanyMapper;
import com.doumee.dao.business.CompanyMemberMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.CompanyMember;
import com.doumee.dao.business.model.Member;
@@ -84,7 +85,19 @@
    @Override
    public void updateById(Member member) {
        memberMapper.updateById(member);
        if( member.getId() == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                .eq(Member::getId,member.getId() )
                .set(Member::getSex,member.getSex() )
                .set(Member::getPhone,member.getPhone() )
                .set(Member::getRemark,member.getRemark() )
                .set(Member::getEmail,member.getEmail() )
                .set(Member::getEditDate,new Date())
                .set(Member::getEditor,user.getId())
        );
    }
    @Override
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -602,6 +602,7 @@
                .eq( pageWrap.getDcaYesNum() != null, Workorder::getDcaYesNum,  pageWrap.getDcaYesNum())
                .eq( pageWrap.getDcaNoNum() != null, Workorder::getDcaNoNum,  pageWrap.getDcaNoNum())
                .eq( pageWrap.getDcaRecordId() != null, Workorder::getDcaRecordId,  pageWrap.getDcaRecordId())
                .likeRight( pageWrap.getTypeIdPath() != null,"c3.id_path",  pageWrap.getTypeIdPath())
                .eq( pageWrap.getDcaCsIds() != null, Workorder::getDcaCsIds,  pageWrap.getDcaCsIds()) ;
        if ( pageWrap.getMemberName() != null) {
            queryWrapper.and( ms->ms.like(Member::getName, pageWrap.getMemberName())
server/src/main/resources/application-dev.yml
@@ -1,3 +1,6 @@
# WEB服务器配置
server:
  port: 10010
spring:
  # æ•°æ®æºé…ç½®
  datasource:
server/src/main/resources/application-pro.yml
@@ -1,3 +1,7 @@
# WEB服务器配置
server:
  port: 10010
spring:
  # æ•°æ®æºé…ç½®
  datasource:
server/src/main/resources/application-test.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
# WEB服务器配置
server:
  port: 10040
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/lianhelihua_sh?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: doumee
    password: rtjgfEr@&0c0m
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  redis:
    #    database: 0
    host: 127.0.0.1
    port: 6379
    password:
    timeout: 5000      # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
#  mail:
#    username: jiangping0849@outlook.com
#    password: mwzaislgioyhxnig
#    host: smtp-mail.outlook.com
#    port: 587
#    default-encoding: UTF-8
#    properties:
#      mail:
#        debug: true
#        smtp:
#          ssl:
#            socketFactory:
#              class: com.sun.mail.util.MailSSLSocketFactory
#              fallback: false
#          auth: true
#          starttls:
#            enable: true
#            required: true
  mail:
    host: smtp.exmail.qq.com
    username: jp@doumee.com
    password: 2Jz9HFW2U7vRnCRu
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
        starttls:
          enable: true
          required: true
debug_model: true
# Swagger配置
swagger:
  host:
  title: ${project.name}接口文档
  description: ${project.name}接口文档
  # å¯ç”¨Swagger,生产环境建议关闭
  enabled: true
  # å¯ç”¨swagger加密
  enable-encrypt: true
  # ç¦ç”¨swagger时的重定向地址
  redirect-uri: /
des_pwd: 123456SDFKDJF
knife4j:
  enable: true
  basic:
    enable: true
    username: admin
    password: 111111
server/src/main/resources/application.yml
@@ -7,10 +7,6 @@
  # æ¨¡å¼ï¼Œtesting测试模式
  mode: testing
# WEB服务器配置
server:
  port: 10010
spring:
  profiles:
    active: dev
@@ -66,12 +62,12 @@
# dao层的日志设置为debug,方便查看sql
logging:
  level:
    com.doumee.dao: DEBUG
    # JOB相关
    com.doumee.dao.system.SystemJobMapper: INFO
    com.doumee.dao.system.SystemJobListMapper: INFO
    com.doumee.dao.system.SystemJobSnippetMapper: INFO
    com.doumee.dao.system.SystemJobLogMapper: INFO
    com.doumee.dao.system.SystemJobMapper: ERROR
    com.doumee.dao.system.SystemJobListMapper: ERROR
    com.doumee.dao.system.SystemJobSnippetMapper: ERROR
    com.doumee.dao.system.SystemJobLogMapper: ERROR
    com.doumee.dao.business: DEBUG
auth:
  jwt:
    enabled: true   #是否开启JWT登录认证功能
server/src/main/resources/logback-spring.xml
@@ -5,7 +5,7 @@
            <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern>
        </layout>
    </appender>
    <property name="log.path" value="/usr/local/jars/logs/visitsAdmin"></property>
    <property name="log.path" value="/usr/local/jars/lianhelihua_sh/logs"></property>
    <property name="log.fileSize" value="100MB"></property>
    <property name="log.historyDays" value="7"></property>
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
startsh/DBbackup.sh
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
#!/bin/bash
/usr/local/mysql/bin/mysqldump -h127.0.0.1 -uroot -pAtwl@2024 lianhelihua > /usr/local/jars/dbbackup/lianhelihua_$(date +%Y%m%d).sql
# åˆ é™¤7天前的备份数据
find /usr/local/jars/dbbackup -name "lianhelihua_*.sql" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
startsh/Navicat±¸·ÝÎļþ20250415170810.nb3
Binary files differ
startsh/admin_start.sh
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
#!/bin/bash
killall java
/usr/local/nacos/nacos/bin/startup.sh -m standalone
nohup java -jar /usr/local/jars/lianhelihua_sh/lianhelihua.jar > /dev/null 2>&1 &
startsh/lianhelihuaÊý¾Ý¿â±¸·Ý.sql
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
startsh/Æô¶¯½Å±¾ºÍÈÕÖ¾´¦Àí½Å±¾ËµÃ÷.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
1、所有 *_start.sh脚本执行前,请手动停止对应java进程 ps -ef grep java æŸ¥è¯¢pid,执行 kill -9 pid