shihang 6 jaren geleden
bovenliggende
commit
03df13bea4

+ 174 - 11
src/dashoo.cn/backend/api/business/samplessource/samplessourceService.go

@@ -12,6 +12,7 @@ import (
 	"strconv"
 
 	"dashoo.cn/backend/api/business/codecsequence"
+	"dashoo.cn/backend/api/business/extend"
 	. "dashoo.cn/backend/api/mydb"
 	"dashoo.cn/utils"
 	. "dashoo.cn/utils/db"
@@ -171,17 +172,6 @@ func (s *SamplesSourceService) InsertExcelAnimal(excelpath, tablename, accode, c
 	return err, warn1
 }
 
-//数据写入数据库
-func (s *SamplesSourceService) AddLine(tablename, fieldName, fieldValue, innerno string) error {
-	sql := "insert into " + tablename + "(" + fieldName + ") values(" + fieldValue + ")"
-	fmt.Println(sql)
-	_, err := s.DBE.Exec(sql)
-
-	s.AddCodes(tablename, innerno)
-
-	return err
-}
-
 func (s *SamplesSourceService) AddCodes(tablename, innerno string) error {
 	var model AnimalInfo
 	where := "InnerNo = '" + innerno + "'"
@@ -221,3 +211,176 @@ func (s *SamplesSourceService) AddCodes(tablename, innerno string) error {
 		return err
 	}
 }
+
+//数据写入数据库
+func (s *SamplesSourceService) AddLine(tablename, fieldName, fieldValue, innerno string) error {
+	sql := "insert into " + tablename + "(" + fieldName + ") values(" + fieldValue + ")"
+	fmt.Println(sql)
+	_, err := s.DBE.Exec(sql)
+	s.AddCodes(tablename, innerno)
+	return err
+}
+
+//样本源导入--人
+func (s *SamplesSourceService) InsertExcelSource(excelpath, tablename, accode, createby string, createuserid int) (err error, warn string) {
+	svcdnote := extend.GetExtendService(utils.DBE)
+	notecount := svcdnote.GetNoteCount(accode) //获取扩展项目count
+	wherenote := " AccCode='" + accode + "'"
+	notelist := svcdnote.GetDNoteItemList(wherenote) //获取扩展项目List
+	flag := 0
+	dir, _ := os.Getwd()
+	excelpath = dir + excelpath
+	xlFile, _ := xlsx.OpenFile(excelpath)
+	var warn1 string
+	for sheetindex, sheet := range xlFile.Sheets { //循环页数
+		sheetrows := len(xlFile.Sheets[sheetindex].Rows)
+		for rowindex, row := range sheet.Rows { //循环行数
+			notefieldstr := ""
+			notevaluestr := ""
+			if rowindex == 0 {
+				continue
+			}
+			if row.Cells == nil || len(row.Cells) < 2 { //少于两列退出姓名不能为空
+				break
+			}
+			basestation := new(DonorsInfo)
+			for cellindex, cell := range row.Cells { //循环列数
+				if cellindex == 1 && len(cell.String()) == 0 { //姓名不能为空
+					flag = 1
+					break
+				}
+				if cell.String() != "" {
+					if cellindex == 0 {
+						basestation.IdCard = cell.String()
+					} else if cellindex == 1 {
+						basestation.Name = cell.String()
+						basestation.Sex = 2
+					} else if cellindex == 2 {
+						basestation.Telephone = cell.String()
+					} else if cellindex == 3 {
+						if cell.String() == "女" {
+							basestation.Sex = 1
+						} else if cell.String() == "男" {
+							basestation.Sex = 0
+						} else {
+							basestation.Sex = 2
+						}
+					} else if cellindex == 4 {
+						if cell.String() == "已婚" {
+							basestation.MaritalStatus = 1
+						} else if cell.String() == "未婚" {
+							basestation.MaritalStatus = 0
+						} else {
+							basestation.MaritalStatus = 2
+						}
+					} else if cellindex == 5 {
+						aa, _ := utils.StrTo(cell.Value).Float64()
+						basestation.Birthday = xlsx.TimeFromExcelTime(aa, false)
+					} else if cellindex == 6 {
+						basestation.Age, _ = utils.StrTo(cell.String()).Int()
+					} else if cellindex == 7 {
+						basestation.Mobile = cell.String()
+					} else if cellindex == 8 {
+						basestation.Email = cell.String()
+					} else if cellindex == 9 {
+						basestation.Nation = cell.String()
+					} else if cellindex == 10 {
+						basestation.Duty = cell.String()
+					} else if cellindex == 11 {
+						basestation.CompanyName = cell.String()
+					} else if cellindex == 12 {
+						basestation.ComeFrom = cell.String()
+					} else if cellindex == 13 {
+						basestation.HomeAddress = cell.String()
+					} else if cellindex == 14 {
+						basestation.AdmissionNumber = cell.String()
+					} else if cellindex == 15 {
+						basestation.PathologicalNum = cell.String()
+					} else if cellindex == 16 {
+						basestation.ClinicalDiagnosis = cell.String()
+					} else if cellindex == 17 {
+						basestation.Department = cell.String()
+					} else if cellindex == 18 {
+						aa, _ := utils.StrTo(cell.Value).Float64()
+						basestation.DiagnosticTime = xlsx.TimeFromExcelTime(aa, false)
+					} else if cellindex == 19 {
+						basestation.ClinicNum = cell.String()
+					} else if cellindex == 20 {
+						basestation.CheckPoint = cell.String()
+					} else if cellindex == 21 {
+						basestation.IllnessName = cell.String()
+					} else if cellindex == 22 {
+						basestation.InnerNo = cell.String()
+					} else if cellindex > 22 && cellindex < 23+notecount {
+						for i := 1; i < notecount+1; i++ {
+							if cellindex == 22+i {
+								notefieldstr = notefieldstr + "," + notelist[i-1].FieldName //扩展字段 因为cellindex可能小于21
+								notevaluestr = notevaluestr + ",'" + cell.String() + "'"    //扩展名称
+							}
+						}
+					}
+				}
+			}
+			if flag == 1 {
+				flag = 0
+				continue
+			}
+
+			basestation.IsInformed = 0
+			basestation.XPublicState = 0
+			basestation.AccCode = accode
+			basestation.CreateOn = time.Now()
+			basestation.CreateBy = createby
+			basestation.CreateUserId = createuserid
+
+			whereposition := " (IdCard = '" + basestation.IdCard + "' and Name ='" + basestation.Name + "') "
+			whereposition = whereposition + " or (Name='" + basestation.Name + "' and Telephone ='" + basestation.Telephone + "')"
+			have := s.QueryDonorshas(tablename, whereposition)
+			if have {
+				continue
+			}
+			sqlfield := "AccCode,IdCard,Name,Sex,CompanyName,Duty,Birthday,Age,Mobile,Telephone,Email,"
+			sqlfield = sqlfield + "Nation,ComeFrom,HomeAddress,MaritalStatus,XISNum,AdmissionNumber,"
+			sqlfield = sqlfield + "IsInformed,PathologicalNum,ClinicalDiagnosis,ClinicNum,CheckNum,CheckPoint,"
+			sqlfield = sqlfield + "IllnessName,XPublicState,CreateUserId,CreateBy,Department,DiagnosticTime,CreateOn,ModifiedOn,InnerNo"
+			sqlfield = sqlfield + notefieldstr
+
+			sqlvalue := "'" + basestation.AccCode + "','" + basestation.IdCard + "','" + basestation.Name + "'," + utils.ToStr(basestation.Sex) + ",'" + basestation.CompanyName + "',"
+			sqlvalue = sqlvalue + "'" + basestation.Duty + "','" + basestation.Birthday.Format("2006-1-2 15:4:5") + "'," + utils.ToStr(basestation.Age) + ",'" + basestation.Mobile + "','" + basestation.Telephone + "',"
+			sqlvalue = sqlvalue + "'" + basestation.Email + "','" + basestation.Nation + "','" + basestation.ComeFrom + "','" + basestation.HomeAddress + "'," + utils.ToStr(basestation.MaritalStatus) + ","
+			sqlvalue = sqlvalue + "'" + basestation.XISNum + "','" + basestation.AdmissionNumber + "'," + utils.ToStr(basestation.IsInformed) + ",'" + basestation.PathologicalNum + "','" + basestation.ClinicalDiagnosis + "',"
+			sqlvalue = sqlvalue + "'" + basestation.ClinicNum + "'," + utils.ToStr(basestation.CheckNum) + ",'" + basestation.CheckPoint + "','" + basestation.IllnessName + "'," + utils.ToStr(basestation.XPublicState) + ","
+			sqlvalue = sqlvalue + "" + utils.ToStr(basestation.CreateUserId) + ",'" + basestation.CreateBy + "','" + basestation.Department + "','" + basestation.DiagnosticTime.Format("2006-1-2 15:4:5") + "',now(),now(),'" + basestation.InnerNo + "'"
+			sqlvalue = sqlvalue + notevaluestr
+			s.AddSourceLine(tablename, sqlfield, sqlvalue)
+
+			if rowindex == (sheetrows) {
+				s.AddSourceLine(tablename, sqlfield, sqlvalue)
+			}
+		}
+	}
+	return err, warn1
+}
+
+func (s *SamplesSourceService) AddSourceLine(tablename, fieldName, fieldValue string) error {
+	sql := "insert into " + tablename + "(" + fieldName + ") values(" + fieldValue + ")"
+	fmt.Println(sql)
+	_, err := s.DBE.Exec(sql)
+	return err
+}
+
+//判断是否存在此样本来源
+func (s *SamplesSourceService) QueryDonorshas(tablename, where string) bool {
+	var num MyInt_Id
+	sql := "select Id from " + tablename
+	if where != "" {
+		sql = sql + " where " + where + " limit 1 "
+	}
+	s.DBE.Sql(sql).Get(&num)
+	total := num.Id
+	if total > 0 {
+		return true
+	} else {
+		return false
+	}
+}

+ 24 - 1
src/dashoo.cn/backend/api/controllers/biobank/samplessource.go

@@ -1404,7 +1404,7 @@ func (this *SamplesSourceController) DaySaveXlsxExport(name string, title []stri
 	sheet.Cols[17].Width = 20
 }
 
-// @Title 导入模板
+// @Title 导入模板--BEE
 // @Description 下载导入模板
 // @Success	200	{object} controllers.Request
 // @router /exceltosave [put]
@@ -1426,3 +1426,26 @@ func (this *SamplesSourceController) SaveExcelPost() {
 	this.ServeJSON()
 	return
 }
+
+// @Title 导入模板
+// @Description 下载导入模板
+// @Success	200	{object} controllers.Request
+// @router /exceltosource [put]
+func (this *SamplesSourceController) SaveExcelSource() {
+	path := this.GetString("path")
+	svc := samplessource.GetSamplesSourceService(utils.DBE)
+	uid, _ := utils.StrTo(this.User.Id).Int()
+	err, warn1 := svc.InsertExcelSource(path, this.User.AccCode+DonorstbName, this.User.AccCode, this.User.Realname, uid)
+	var errinfo ErrorInfo
+	if warn1 == "" {
+		errinfo.Message = "样本来源数据导入成功!"
+		errinfo.Code = 0
+	}
+	if err != nil {
+		errinfo.Message = "样本来源数据导入失败!"
+		errinfo.Code = -1
+	}
+	this.Data["json"] = &errinfo
+	this.ServeJSON()
+	return
+}

+ 2 - 0
src/dashoo.cn/backend/api/controllers/casbin/role.go

@@ -2,6 +2,7 @@ package casbin
 
 import (
 	"encoding/json"
+	//	"fmt"
 	"strconv"
 	"strings"
 
@@ -268,6 +269,7 @@ func (this *RoleController) SaveequpiPower() {
 		this.ServeJSON()
 	}
 	selectedids := strings.Split(this.GetString("selectedids"), ",")
+
 	utils.RBAC.RemoveFilteredNamedGroupingPolicy("g5", 0, "rid_"+roleid, utils.DOMAIN)
 	if this.GetString("selectedids") != "" {
 		for j := 0; j < len(selectedids); j++ {

+ 4 - 2
src/dashoo.cn/frontend_animal/nuxt.config.js

@@ -160,7 +160,8 @@ module.exports = {
 
   axios: {
     // baseURL: '//localhost:9081/api/' // 本机开发使用
-    baseURL: '//47.92.238.200:9081/api/' // BioBank on ALi发布使用
+    baseURL: '//192.168.0.192:9081/api/' // 蜜蜂所使用
+    // baseURL: '//47.92.238.200:9081/api/' // BioBank on ALi发布使用
     // baseURL: '//188.188.30.89:9081/api/' //临沂使用
     // baseURL: '//api09.labsop.cn/api/'
     // baseURL: '//192.168.0.211:10091/api/' // 花生所系统
@@ -175,8 +176,9 @@ module.exports = {
   env: {
     appclient: 'biobank', //因顿LIMS:lims,样本库:biobank,细胞制备:cellbank,样本搜索判断,登录跳转判断
 
-    imgserverhost: 'http://47.92.238.200:9081', // BioBank服务地址,图片上传文件
+    //imgserverhost: 'http://47.92.238.200:9081', // BioBank服务地址,图片上传文件
     // imgserverhost: 'http://localhost:9081', // BioBank服务地址,图片上传文件
+    imgserverhost: 'http://192.168.0.192:9081', // 蜜蜂所服务地址,图片上传文件
     upfilehost: 'http://weed1.labsop.cn:9333/dir/assign', // 附件上传
 
     //imgserverhost: 'http://188.188.30.89:9081', // 临沂服务地址,图片上传文件

+ 0 - 2
src/dashoo.cn/frontend_animal/src/pages/biobank/sampleRK/_opera/operation.vue

@@ -465,10 +465,8 @@
       // 获取容器列表
       getEquiplist() {
         let _this = this
-        // request
         _this.$axios.get('/equipment/elist', {})
           .then(res => {
-            // response
             for (var i = 0; i < res.data.items.length / 2; i++) {
               _this.equipmentList.push({
                 label: res.data.items[2 * i],

+ 2 - 2
src/dashoo.cn/frontend_animal/src/pages/biobank/source/animal.vue

@@ -13,8 +13,8 @@
           <router-link :to="'/biobank/source/addsource/operationb'">
             <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;">添加</el-button>
           </router-link>
-          <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;"
-            @click="importVisible = true">导入</el-button>
+          <!-- <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;"
+            @click="importVisible = true">导入</el-button> -->
         </span>
         <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
           <el-form-item label="样本源名称">

+ 43 - 45
src/dashoo.cn/frontend_animal/src/pages/system/userrole.vue

@@ -10,7 +10,8 @@
           <el-breadcrumb-item :to="{ path: '/system/userrole' }">角色管理</el-breadcrumb-item>
         </el-breadcrumb>
         <span style="float: right;">
-          <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;" @click="opendialog(null)">添加</el-button>
+          <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;" @click="opendialog(null)">添加
+          </el-button>
         </span>
         <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
           <el-form-item label="角色名">
@@ -29,16 +30,18 @@
       <el-table :data="list" bordertooltip-effect="dark" border height="calc(100vh - 230px)" style="width: 100%;">
         <el-table-column label="操作" width="140px" align="center">
           <template slot-scope="scope">
-            <el-button size="small" @click="opendialog(scope.row)" type="text" icon="el-icon-edit" title="编辑"></el-button>
-            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除" @click="deleteroledata(scope.row)"></el-button>
+            <el-button size="small" @click="opendialog(scope.row)" type="text" icon="el-icon-edit" title="编辑">
+            </el-button>
+            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除"
+              @click="deleteroledata(scope.row)"></el-button>
             <el-button size="small" type="text" style="margin-left:3px" title="用户列表" @click="showUserList(scope.row)"><i
                 class="icon icon-user"></i></el-button>
             <el-button size="small" type="text" style="margin-left:3px" title="菜单权限" @click="setpower(scope.row)"><i
                 class="icon icon-file-text"></i></el-button>
             <el-button size="small" type="text" style="margin-left:3px" title="操作权限" @click="getItemPower(scope.row)"><i
                 class="icon icon-lock"></i></el-button>
-            <el-button size="small" type="text" style="margin-left:3px" title="容器权限" @click="setequipmentpower(scope.row)"
-              v-if="appclient != 'lims'"><i class="icon icon-cog"></i></el-button>
+            <el-button size="small" type="text" style="margin-left:3px" title="容器权限"
+              @click="setequipmentpower(scope.row)" v-if="appclient != 'lims'"><i class="icon icon-cog"></i></el-button>
           </template>
         </el-table-column>
         <el-table-column prop="Realname" align="center" label="角色名" show-overflow-tooltip></el-table-column>
@@ -50,7 +53,8 @@
         </el-table-column>
       </el-table>
       <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
-        :page-sizes="[10, 15, 20, 25]" :page-size="size" layout="total, sizes, prev, pager, next, jumper" :total="currentItemCount">
+        :page-sizes="[10, 15, 20, 25]" :page-size="size" layout="total, sizes, prev, pager, next, jumper"
+        :total="currentItemCount">
       </el-pagination>
     </el-card>
 
@@ -72,13 +76,16 @@
 
     <!-- 用户列表 -->
     <el-dialog title="包含用户列表" :visible.sync="userDialogVisible">
-      <el-button type="primary" size="mini" style="float: right; margin-top: -10px;margin-left :5px" @click="deleteuserdataall()">删除所有关联用户</el-button>
-      <el-button type="primary" size="mini" style="float: right; margin-top: -10px" @click="roleadduser()">添加</el-button>
+      <el-button type="primary" size="mini" style="float: right; margin-top: -10px;margin-left :5px"
+        @click="deleteuserdataall()">删除所有关联用户</el-button>
+      <el-button type="primary" size="mini" style="float: right; margin-top: -10px" @click="roleadduser()">添加
+      </el-button>
       <br />
       <el-table :data="userList" border>
         <el-table-column label="操作" width="70" align="center">
           <template slot-scope="scope">
-            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除" @click="deleteuserdata(scope.row)"></el-button>
+            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除"
+              @click="deleteuserdata(scope.row)"></el-button>
           </template>
         </el-table-column>
         <el-table-column prop="Username" align="center" label="账号" show-overflow-tooltip></el-table-column>
@@ -87,8 +94,9 @@
         <el-table-column prop="Telephone" align="center" label="手机" show-overflow-tooltip></el-table-column>
         <el-table-column label="座机" align="center" prop="Mobile" show-overflow-tooltip></el-table-column>
       </el-table>
-      <el-pagination @size-change="handleUserSizeChange" @current-change="handleUserCurrentChange" :current-page="currentUserPage"
-        :page-sizes="[10, 15, 20, 25]" :page-size="size" layout="total, sizes, prev, pager, next, jumper" :total="currentUserItemCount">
+      <el-pagination @size-change="handleUserSizeChange" @current-change="handleUserCurrentChange"
+        :current-page="currentUserPage" :page-sizes="[10, 15, 20, 25]" :page-size="size"
+        layout="total, sizes, prev, pager, next, jumper" :total="currentUserItemCount">
       </el-pagination>
       <div slot="footer" class="dialog-footer">
         <el-button @click="userDialogVisible = false">取 消</el-button>
@@ -101,8 +109,8 @@
         <el-row>
           <el-col :span="24">
             <el-form-item label="用户">
-              <el-select ref="selectOfficer" multiple filterable default-first-option v-model="OfficerList" placeholder="请选择"
-                style="width: 100%">
+              <el-select ref="selectOfficer" multiple filterable default-first-option v-model="OfficerList"
+                placeholder="请选择" style="width: 100%">
                 <el-option v-for="item in selectuserlist" :key="item.Id" :label="item.Realname" :value="item.Id">
                 </el-option>
               </el-select>
@@ -119,7 +127,8 @@
 
     <!-- 菜单权限 -->
     <el-dialog :title="powerdialogtitle" :visible.sync="powerdialogVisible">
-      <el-tree style="border: 0" show-checkbox node-key="id" :data="modulepowerdata" :props="modulepowerProps" ref="modulepowertree">
+      <el-tree style="border: 0" show-checkbox node-key="id" :data="modulepowerdata" :props="modulepowerProps"
+        ref="modulepowertree">
       </el-tree>
       <div slot="footer" class="dialog-footer">
         <el-button @click="powerdialogVisible = false">取 消</el-button>
@@ -129,11 +138,12 @@
 
     <!-- 容器权限 -->
     <el-dialog title="容器权限" :visible.sync="powerequipmentdialogVisible">
-      <el-checkbox :indeterminate="isequpicheckall" v-model="equipCheckAll" @change="handleCheckAllChange">全选</el-checkbox>
+      <el-checkbox :indeterminate="isequpicheckall" v-model="equipCheckAll" @change="handleCheckAllChange">全选
+      </el-checkbox>
       <div style="margin-top:10px;" class="rowequippower">
         <el-checkbox-group v-model="selectedequip">
-          <el-checkbox v-for="item in equipalllist" :key="item.Id" @change="handlecheckedequpichange" :label="item.Id"
-            :value="item.Id"> {{item.Name}}</el-checkbox>
+          <el-checkbox v-for="item in equipalllist" :key="item.Id" @change="handlecheckedequpichange"
+            :label="item.label" :value="item.value"> {{item.label}}</el-checkbox>
         </el-checkbox-group>
       </div>
       <div slot="footer" class="dialog-footer">
@@ -144,7 +154,8 @@
 
     <!-- 操作权限 -->
     <el-dialog title="操作权限" :visible.sync="operationPowerDialogVisible">
-      <el-tree style="border: 0" show-checkbox node-key="id" :data="operationPowerData" :props="modulepowerProps" ref="operationPowerTree">
+      <el-tree style="border: 0" show-checkbox node-key="id" :data="operationPowerData" :props="modulepowerProps"
+        ref="operationPowerTree">
       </el-tree>
       <div slot="footer" class="dialog-footer">
         <el-button @click="operationPowerDialogVisible = false">取 消</el-button>
@@ -233,20 +244,17 @@
     },
     created() {
       this.appclient = process.env.appclient
-      // initial data
       this.initData()
       this.getallequipmentlist()
     },
     methods: {
       initData() {
         let _this = this
-        // paginate
         const params = {
           _currentPage: this.currentPage,
           _size: this.size,
           keyword: this.searchform.name
         }
-        // request
         this.$axios.get('role/list', {
             params
           })
@@ -397,7 +405,6 @@
         let _this = this
         _this.$axios.put('role/savepower?id=' + _this.operationid + '&moduleids=' + orgids, {})
           .then(res => {
-            // response
             if (res.data.code === 0) {
               _this.$message({
                 type: 'success',
@@ -423,7 +430,6 @@
         _this.operationid = val.Id
         _this.$axios.get('role/getItemPower?id=' + _this.operationid, null)
           .then(res => {
-            // response
             _this.operationPowerData = window.toolfun_gettreejson(res.data.Operation, 'id', 'pId', 'id,name,scope')
             let selectmodels = []
             if (res.data.Selecteoperation) {
@@ -446,7 +452,6 @@
         let _this = this
         _this.$axios.put('role/saveOperationPower?id=' + this.operationid + '&operids=' + orgids, {})
           .then(res => {
-            // response
             if (res.data.code === 0) {
               _this.$message({
                 type: 'success',
@@ -468,12 +473,16 @@
       //容器权限
       getallequipmentlist() {
         let _this = this
-        _this.$axios.get('/equipment/equipalllist', {})
+        _this.$axios.get('/equipment/elist', {})
           .then(res => {
-            _this.equipalllist = res.data.items
+            for (var i = 0; i < res.data.items.length / 2; i++) {
+              _this.equipalllist.push({
+                label: res.data.items[2 * i],
+                value: res.data.items[2 * i + 1]
+              })
+            }
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
       },
@@ -485,24 +494,24 @@
           .then(res => {
             var arr = res.data.split(",");
             for (let i = 0; i < arr.length; i++) {
-              if (parseInt(arr[i]) > 0) {
-                _this.selectedequip.push(parseInt(arr[i]))
+              if (arr[i] != '') {
+                _this.selectedequip.push(arr[i])
               }
+              // if (parseInt(arr[i]) > 0) {
+              //   _this.selectedequip.push(parseInt(arr[i]))
+              // }
             }
             _this.handlecheckedequpichange()
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
         _this.powerequipmentdialogVisible = true
       },
       saveequiptmentpower() {
         let _this = this
-        // request
         this.$axios.put('/role/saveequpipower?id=' + this.operationid + '&selectedids=' + this.selectedequip, {})
           .then(res => {
-            // response
             if (res.data.code === 0) {
               _this.$message({
                 type: 'success',
@@ -519,7 +528,6 @@
             }
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
       },
@@ -532,22 +540,18 @@
       },
       initUserList(rid) {
         let _this = this
-        // paginate
         const params = {
           _currentPage: this.currentUserPage,
           _size: this.userSize
         }
-        // request
         this.$axios.get('role/getusersforrole/' + rid, {
             params
           })
           .then(res => {
-            // response
             _this.userList = res.data.items
             _this.currentUserItemCount = res.data.currentItemCount
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
       },
@@ -560,13 +564,11 @@
         let _this = this
         this.$axios.get('users/list', {})
           .then(res => {
-            // response
             _this.partuserlist = res.data.items
             console.log(this.partuserlist, '====')
             this.userlistfilter()
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
       },
@@ -586,10 +588,8 @@
         }
         let useridlist = tempOfficers.join(',');
         let useridliststring = useridlist.toString()
-        // request
         this.$axios.put('role/setuserrole/' + useridliststring + '_' + this.selectRoleId, {})
           .then(res => {
-            // response
             if (res.data.code === 0) {
               _this.$message({
                 type: 'success',
@@ -606,7 +606,6 @@
             }
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
 
@@ -643,7 +642,6 @@
         }).then(() => {
           _this.$axios.delete('role/deleteuser/' + val.Id + '_' + this.selectRoleId, null)
             .then(res => {
-              // response
               if (res.data.code === 0) {
                 _this.$message({
                   type: 'success',
@@ -670,7 +668,6 @@
         }).then(() => {
           _this.$axios.delete('role/deletealluser/' + this.selectRoleId + '', null)
             .then(res => {
-              // response
               if (res.data.code === 0) {
                 _this.$message({
                   type: 'success',
@@ -702,12 +699,13 @@
         this.selectedequip = []
         if (val) {
           for (let i = 0; i < this.equipalllist.length; i++) {
-            this.selectedequip.push(this.equipalllist[i].Id)
+            this.selectedequip.push(this.equipalllist[i].label)
           }
         }
         this.isequpicheckall = false
       },
       handlecheckedequpichange() {
+        console.log("wwwwwwwwwwwww", this.selectedequip)
         let checkedCount = this.selectedequip.length
         this.equipCheckAll = checkedCount === this.equipalllist.length
         this.isequpicheckall = checkedCount > 0 && checkedCount < this.equipalllist.length

+ 3 - 2
src/dashoo.cn/frontend_animal/src/static/js/printUtilities.js

@@ -162,8 +162,9 @@ function PrintReport(repID, param) {
   param = base64encode(param);
   param = param.replace("+", "%2B");
   var href = "bmisrep://rep=" + repID + "&param=" + param;
-  // var url = "localhost:9081"
-  var url = "47.92.238.200:9081"
+  //var url = "localhost:9081"
+  var url = "192.168.0.192:9081" //蜜蜂所
+ //  var url = "47.92.238.200:9081"
   href = href + "&host=" + url;
 
   if (typeof preview == "undefined") {

+ 2 - 23
src/dashoo.cn/frontend_web/src/pages/biobank/source/_opera/operation.vue

@@ -156,7 +156,7 @@
               <el-tab-pane :label="groupname" :name="groupname" :key="groupname" v-for="groupname in groupnameList">
                 <el-card class="box-card infocard">
                   <el-row>
-                    <template v-for="(item, index) in animalextends">
+                    <template v-for="(item, index) in userextends">
                       <el-col :span="(item.FieldType === '3')? 24:8" :key="index" v-if="item.GroupName === groupname">
                         <el-form-item :label="item.Name">
                           <el-input v-model="item.FieldDefault" v-if="item.FieldType === '1'"
@@ -171,7 +171,7 @@
                           <el-input v-model="item.FieldDefault" v-if="item.FieldType === '3'"
                             :placeholder="'请输入'+item.Name" type="textarea" :rows=3 auto-complete="off"></el-input>
 
-                          <el-date-picker v-model="item.FieldDefault" v-if="item.FieldType === '4'" type="datetime"
+                          <el-date-picker v-model="item.FieldDefault" v-if="item.FieldType === '4'" type="date"
                             style="width:100%" placeholder="请选择日期"></el-date-picker>
 
                           <el-button plain v-model="item.FieldDefault" v-if="item.FieldType === '5'" type="primary"
@@ -185,27 +185,6 @@
                 </el-card>
               </el-tab-pane>
             </el-tabs>
-            <!-- <el-card class="box-card infocard">
-              <div slot="header">
-                <i class="icon icon-paragraph-justify"></i> 扩展信息
-              </div>
-              <div class="four fields" style="margin-top:25px;">
-                <el-row>
-                  <el-col :span="(item.FieldType === '3')? 24:8" v-for="item in userextends" :key="item">
-                    <el-form-item :label="item.Name">
-                      <el-select v-if="item.FieldType === '2'" clearable v-model="item.FieldDefault" :placeholder="'请选择'+item.Name"
-                        style="width:100%">
-                        <el-option :label="v" :value="v" :key="v" v-for=" v in item.FieldContent.split(',')"></el-option>
-                      </el-select>
-                      <el-input v-if="item.FieldType === '1'" v-model="item.FieldDefault" :placeholder="'请输入'+item.Name"
-                        auto-complete="off"></el-input>
-                      <el-input v-if="item.FieldType === '3'" v-model="item.FieldDefault" :placeholder="'请输入'+item.Name"
-                        type="textarea" :rows=3 auto-complete="off"></el-input>
-                    </el-form-item>
-                  </el-col>
-                </el-row>
-              </div>
-            </el-card> -->
           </el-form>
         </el-tab-pane>
         <el-tab-pane label="检验信息" name="checking">

+ 80 - 6
src/dashoo.cn/frontend_web/src/pages/biobank/source/index.vue

@@ -15,6 +15,8 @@
           <router-link :to="'/biobank/source/addsource/operation'">
             <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;">添加</el-button>
           </router-link>
+          <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;"
+            @click="importVisible = true">导入</el-button>
         </span>
         <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
           <el-form-item label="姓名">
@@ -118,6 +120,18 @@
         <el-button size="mini" type="primary" @click="seachdata">查 询</el-button>
       </span>
     </el-dialog>
+
+    <el-dialog title="样本批量导入" :visible.sync="importVisible">
+      <el-upload :action="filehost + '/api/uploads/exportanimal'" :show-file-list="false" :data="importfileparam"
+        :on-success="handleexportfileSuccess" :before-upload="beforeexportfileUpload">
+        <el-button size="mini" type="primary">点击上传导入文件</el-button> <span>{{importmsg}}</span>
+        <div slot="tip" class="el-upload__tip">只能上传由导入模板录入的xlsx文件,其中模板中带星号(*)的为必填项,不填写将会被忽略</div>
+      </el-upload>
+      <div slot="footer">
+        <el-button type="primary" @click="importData()" size="mini">确定</el-button>
+        <el-button @click="importVisible = false" size="mini">取消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -134,6 +148,11 @@
     name: 'samplessource',
     data() {
       return {
+        filehost: '',
+        importfileparam: {}, // 导入文件参数
+        importfilepath: '', //导入文件路径
+        importVisible: false, // 导入对话框
+        importmsg: '未选择文件', // 导入文件
         dialogVisible: false,
         searchform: {
           idcard: '',
@@ -163,12 +182,13 @@
       this.initdata()
       this.filehost = process.env.imgserverhost
       this.acc = this.authUser.Profile.AccCode
-      //this.getuserlist()
+      this.importfileparam = {
+        accode: this.authUser.Profile.AccCode
+      }
     },
     methods: {
       initdata() {
         let _this = this
-        // paginate
         const params = {
           _currentPage: this.currentPage,
           _size: this.size,
@@ -176,7 +196,6 @@
           Prop: this.Column.Prop
         }
         Object.assign(params, this.searchform)
-        // request
         if (this.searchform.starttime) { // 如果有开始时间拼接到参数数组
           let startparams = {
             starttimeint: this.searchform.starttime.getTime()
@@ -197,7 +216,6 @@
             _this.currentItemCount = res.data.currentItemCount
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
       },
@@ -210,7 +228,6 @@
         }).then(() => {
           _this.$axios.delete("samplessource/deldonors/" + val.Id + '?IdCard=' + val.IdCard, null)
             .then(res => {
-              // response
               if (res.data.code === 0) {
                 _this.$message({
                   type: 'success',
@@ -261,11 +278,68 @@
         this.Column.Prop = column.prop
         this.initdata()
       },
+      //导入蜜蜂样本来源
+      importData() {
+        let _this = this
+        console.log("11111111111111111",_this.importfilepath)
+        if (_this.importfilepath === '') {
+          _this.$message({
+            type: 'warning',
+            message: '请先上传导入文件!'
+          })
+          return
+        }
+        _this.$axios.put('/samplessource/exceltosource?path=' + this.importfilepath, {})
+          .then(res => {
+            if (res.data.code === 0) {
+              _this.$message({
+                type: 'success',
+                message: res.data.message
+              })
+              _this.importVisible = false
+              _this.importfilepath = ''
+              _this.importmsg = '未选择文件'
+              // 更新界面
+              _this.initData()
+            } else {
+              _this.$message({
+                type: 'warning',
+                message: res.data.message
+              })
+            }
+          })
+          .catch(err => {
+            console.error(err)
+          })
+      },
+      beforeexportfileUpload(file) {
+        console.log("dsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsds",this.filehost)
+        let i = file.name.lastIndexOf('.')
+        let typename = ''
+        if (i > -1) {
+          typename = file.name.substring(i)
+        }
+        let istype = (typename === '.xlsx')
+        let isLt50k = file.size / 1024 / 1024 / 2 < 1
+        if (!istype) {
+          this.$message.error('上传导入文件只能是 xlsx 格式!')
+          return false
+        }
+        if (!isLt50k) {
+          this.$message.error('上传导入文件大小不能超过 2M!')
+          return false
+        }
+        this.importmsg = '上传文件:' + file.name
+        return true
+      },
+      handleexportfileSuccess(res, file) {
+        console.log("dsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsds",this.filehost)
+        this.importfilepath = res
+      },
       getuserlist() {
         let _this = this
         _this.$axios.get('users/list', {})
           .then(res => {
-            // response
             _this.userlist = res.data.items
             _this.userlist.unshift({
               'Id': _this.authUser.Profile.Id,

+ 1 - 42
src/dashoo.cn/frontend_web/src/pages/samples/prerecorded/_opera/prerecordedadd.vue

@@ -196,7 +196,7 @@
           </el-table>
           <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
             :current-page="currentpage" :page-sizes="[10, 15, 20]" :page-size="size"
-            layout="total, sizes, prev, pager, next, jumper" :total="currentItemCount">
+            layout="total, sizes, prev, pager, next, jumper" :total="currentItemCount"></el-pagination>
         </el-card>
 
         <el-row :gutter="20">
@@ -234,47 +234,6 @@
             </el-card>
           </el-tab-pane>
         </el-tabs>
-        <!-- <el-card class="box-card donorsggextendcard" style="margin-top: 10px" v-show="publickzlist.length > 0">
-          <div slot="header">
-            <i class="icon icon-paragraph-justify"></i> 样本公共扩展
-          </div>
-          <div>
-            <div class="four fields" style="margin-top:25px;">
-              <el-row>
-                <el-col :span="8" v-for="item in publickzlist">
-                  <el-form-item :label="item.Name">
-                    <el-select v-if="item.FieldType === '2'" clearable v-model="item.FieldDefault" :placeholder="'请选择'+item.Name"
-                      style="width:100%">
-                      <el-option :label="v" :value="v" v-for=" v in item.FieldContent.split(',')"></el-option>
-                    </el-select>
-                    <el-input v-else v-model="item.FieldDefault" :placeholder="'请输入'+item.Name" auto-complete="off"></el-input>
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </div>
-          </div>
-        </el-card> -->
-
-        <!-- <el-card class="box-card donorsggextendcard" style="margin-top:10px;" v-show="typetykzlist.length > 0">
-          <div slot="header">
-            <i class="icon icon-paragraph-justify"></i> 样本特有扩展
-          </div>
-          <div>
-            <div class="four fields" style="margin-top:25px;">
-              <el-row>
-                <el-col :span="8" v-for="item in typetykzlist">
-                  <el-form-item :label="item.Name">
-                    <el-select v-if="item.FieldType === '2'" clearable v-model="item.FieldDefault" :placeholder="'请选择'+item.Name"
-                      style="width:100%">
-                      <el-option :label="v" :value="v" v-for=" v in item.FieldContent.split(',')"></el-option>
-                    </el-select>
-                    <el-input v-else v-model="item.FieldDefault" :placeholder="'请输入'+item.Name" auto-complete="off"></el-input>
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </div>
-          </div>
-        </el-card> -->
       </el-form>
     </el-card>
     <el-dialog title="样本分装详情" :visible.sync="transportdialog" top="5vh" width="50%">

+ 1 - 5
src/dashoo.cn/frontend_web/src/pages/samples/stored/index.vue

@@ -640,7 +640,6 @@
             columnwidth: 200
           })
         }
-        // paginate
         let params = {
           _currentPage: this.currentPage,
           _size: this.size,
@@ -676,18 +675,15 @@
           params = Object.assign(params, params3)
         }
         store.set('samplestoredseach', params)
-        // request
+     
         this.$axios.get('/sampleinput/list', {
             params
           })
           .then(res => {
-            // response
             _this.list = res.data.items
-            // toggle loading
             _this.currentItemCount = res.data.currentItemCount
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
       },

+ 38 - 26
src/dashoo.cn/frontend_web/src/pages/system/userrole.vue

@@ -10,7 +10,8 @@
           <el-breadcrumb-item :to="{ path: '/system/userrole' }">角色管理</el-breadcrumb-item>
         </el-breadcrumb>
         <span style="float: right;">
-          <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;" @click="opendialog(null)">添加</el-button>
+          <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;" @click="opendialog(null)">添加
+          </el-button>
         </span>
         <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
           <el-form-item label="角色名">
@@ -29,16 +30,18 @@
       <el-table :data="list" bordertooltip-effect="dark" border height="calc(100vh - 230px)" style="width: 100%;">
         <el-table-column label="操作" width="140px" align="center">
           <template slot-scope="scope">
-            <el-button size="small" @click="opendialog(scope.row)" type="text" icon="el-icon-edit" title="编辑"></el-button>
-            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除" @click="deleteroledata(scope.row)"></el-button>
+            <el-button size="small" @click="opendialog(scope.row)" type="text" icon="el-icon-edit" title="编辑">
+            </el-button>
+            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除"
+              @click="deleteroledata(scope.row)"></el-button>
             <el-button size="small" type="text" style="margin-left:3px" title="用户列表" @click="showUserList(scope.row)"><i
                 class="icon icon-user"></i></el-button>
             <el-button size="small" type="text" style="margin-left:3px" title="菜单权限" @click="setpower(scope.row)"><i
                 class="icon icon-file-text"></i></el-button>
             <el-button size="small" type="text" style="margin-left:3px" title="操作权限" @click="getItemPower(scope.row)"><i
                 class="icon icon-lock"></i></el-button>
-            <el-button size="small" type="text" style="margin-left:3px" title="容器权限" @click="setequipmentpower(scope.row)"
-              v-if="appclient != 'lims'"><i class="icon icon-cog"></i></el-button>
+            <el-button size="small" type="text" style="margin-left:3px" title="容器权限"
+              @click="setequipmentpower(scope.row)" v-if="appclient != 'lims'"><i class="icon icon-cog"></i></el-button>
           </template>
         </el-table-column>
         <el-table-column prop="Realname" align="center" label="角色名" show-overflow-tooltip></el-table-column>
@@ -50,7 +53,8 @@
         </el-table-column>
       </el-table>
       <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
-        :page-sizes="[10, 15, 20, 25]" :page-size="size" layout="total, sizes, prev, pager, next, jumper" :total="currentItemCount">
+        :page-sizes="[10, 15, 20, 25]" :page-size="size" layout="total, sizes, prev, pager, next, jumper"
+        :total="currentItemCount">
       </el-pagination>
     </el-card>
 
@@ -72,13 +76,16 @@
 
     <!-- 用户列表 -->
     <el-dialog title="包含用户列表" :visible.sync="userDialogVisible">
-      <el-button type="primary" size="mini" style="float: right; margin-top: -10px;margin-left :5px" @click="deleteuserdataall()">删除所有关联用户</el-button>
-      <el-button type="primary" size="mini" style="float: right; margin-top: -10px" @click="roleadduser()">添加</el-button>
+      <el-button type="primary" size="mini" style="float: right; margin-top: -10px;margin-left :5px"
+        @click="deleteuserdataall()">删除所有关联用户</el-button>
+      <el-button type="primary" size="mini" style="float: right; margin-top: -10px" @click="roleadduser()">添加
+      </el-button>
       <br />
       <el-table :data="userList" border>
         <el-table-column label="操作" width="70" align="center">
           <template slot-scope="scope">
-            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除" @click="deleteuserdata(scope.row)"></el-button>
+            <el-button size="small" type="text" style="margin-left:3px" icon="el-icon-delete" title="删除"
+              @click="deleteuserdata(scope.row)"></el-button>
           </template>
         </el-table-column>
         <el-table-column prop="Username" align="center" label="账号" show-overflow-tooltip></el-table-column>
@@ -87,8 +94,9 @@
         <el-table-column prop="Telephone" align="center" label="手机" show-overflow-tooltip></el-table-column>
         <el-table-column label="座机" align="center" prop="Mobile" show-overflow-tooltip></el-table-column>
       </el-table>
-      <el-pagination @size-change="handleUserSizeChange" @current-change="handleUserCurrentChange" :current-page="currentUserPage"
-        :page-sizes="[10, 15, 20, 25]" :page-size="size" layout="total, sizes, prev, pager, next, jumper" :total="currentUserItemCount">
+      <el-pagination @size-change="handleUserSizeChange" @current-change="handleUserCurrentChange"
+        :current-page="currentUserPage" :page-sizes="[10, 15, 20, 25]" :page-size="size"
+        layout="total, sizes, prev, pager, next, jumper" :total="currentUserItemCount">
       </el-pagination>
       <div slot="footer" class="dialog-footer">
         <el-button @click="userDialogVisible = false">取 消</el-button>
@@ -101,8 +109,8 @@
         <el-row>
           <el-col :span="24">
             <el-form-item label="用户">
-              <el-select ref="selectOfficer" multiple filterable default-first-option v-model="OfficerList" placeholder="请选择"
-                style="width: 100%">
+              <el-select ref="selectOfficer" multiple filterable default-first-option v-model="OfficerList"
+                placeholder="请选择" style="width: 100%">
                 <el-option v-for="item in selectuserlist" :key="item.Id" :label="item.Realname" :value="item.Id">
                 </el-option>
               </el-select>
@@ -119,7 +127,8 @@
 
     <!-- 菜单权限 -->
     <el-dialog :title="powerdialogtitle" :visible.sync="powerdialogVisible">
-      <el-tree style="border: 0" show-checkbox node-key="id" :data="modulepowerdata" :props="modulepowerProps" ref="modulepowertree">
+      <el-tree style="border: 0" show-checkbox node-key="id" :data="modulepowerdata" :props="modulepowerProps"
+        ref="modulepowertree">
       </el-tree>
       <div slot="footer" class="dialog-footer">
         <el-button @click="powerdialogVisible = false">取 消</el-button>
@@ -129,11 +138,12 @@
 
     <!-- 容器权限 -->
     <el-dialog title="容器权限" :visible.sync="powerequipmentdialogVisible">
-      <el-checkbox :indeterminate="isequpicheckall" v-model="equipCheckAll" @change="handleCheckAllChange">全选</el-checkbox>
+      <el-checkbox :indeterminate="isequpicheckall" v-model="equipCheckAll" @change="handleCheckAllChange">全选
+      </el-checkbox>
       <div style="margin-top:10px;" class="rowequippower">
         <el-checkbox-group v-model="selectedequip">
-          <el-checkbox v-for="item in equipalllist" :key="item.Id" @change="handlecheckedequpichange" :label="item.Id"
-            :value="item.Id"> {{item.Name}}</el-checkbox>
+          <el-checkbox v-for="item in equipalllist" :key="item.Id" @change="handlecheckedequpichange"
+            :label="item.label" :value="item.value"> {{item.label}}</el-checkbox>
         </el-checkbox-group>
       </div>
       <div slot="footer" class="dialog-footer">
@@ -144,7 +154,8 @@
 
     <!-- 操作权限 -->
     <el-dialog title="操作权限" :visible.sync="operationPowerDialogVisible">
-      <el-tree style="border: 0" show-checkbox node-key="id" :data="operationPowerData" :props="modulepowerProps" ref="operationPowerTree">
+      <el-tree style="border: 0" show-checkbox node-key="id" :data="operationPowerData" :props="modulepowerProps"
+        ref="operationPowerTree">
       </el-tree>
       <div slot="footer" class="dialog-footer">
         <el-button @click="operationPowerDialogVisible = false">取 消</el-button>
@@ -468,12 +479,16 @@
       //容器权限
       getallequipmentlist() {
         let _this = this
-        _this.$axios.get('/equipment/equipalllist', {})
+        _this.$axios.get('/equipment/elist', {})
           .then(res => {
-            _this.equipalllist = res.data.items
+            for (var i = 0; i < res.data.items.length / 2; i++) {
+              _this.equipalllist.push({
+                label: res.data.items[2 * i],
+                value: res.data.items[2 * i + 1]
+              })
+            }
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
       },
@@ -485,14 +500,11 @@
           .then(res => {
             var arr = res.data.split(",");
             for (let i = 0; i < arr.length; i++) {
-              if (parseInt(arr[i]) > 0) {
-                _this.selectedequip.push(parseInt(arr[i]))
-              }
+              _this.selectedequip.push(arr[i])
             }
             _this.handlecheckedequpichange()
           })
           .catch(err => {
-            // handle error
             console.error(err)
           })
         _this.powerequipmentdialogVisible = true
@@ -702,7 +714,7 @@
         this.selectedequip = []
         if (val) {
           for (let i = 0; i < this.equipalllist.length; i++) {
-            this.selectedequip.push(this.equipalllist[i].Id)
+            this.selectedequip.push(this.equipalllist[i].label)
           }
         }
         this.isequpicheckall = false