4
0
Selaa lähdekoodia

微生物样本源

shihang 6 vuotta sitten
vanhempi
commit
5510435085
23 muutettua tiedostoa jossa 1626 lisäystä ja 223 poistoa
  1. 72 1
      src/dashoo.cn/backend/api/business/samplessource/samplessource.go
  2. 8 7
      src/dashoo.cn/backend/api/controllers/base.go
  3. 181 17
      src/dashoo.cn/backend/api/controllers/biobank/samplessource.go
  4. 2 2
      src/dashoo.cn/frontend_web/nuxt.config.js
  5. 1 1
      src/dashoo.cn/frontend_web/src/components/samples/chooseanimal.vue
  6. 132 0
      src/dashoo.cn/frontend_web/src/components/samples/choosemicro.vue
  7. 14 12
      src/dashoo.cn/frontend_web/src/components/samples/preoperation.vue
  8. 507 0
      src/dashoo.cn/frontend_web/src/pages/biobank/source/_opera/operationc.vue
  9. 3 3
      src/dashoo.cn/frontend_web/src/pages/biobank/source/_opera/sourcedetail.vue
  10. 342 0
      src/dashoo.cn/frontend_web/src/pages/biobank/source/_opera/sourcemicinfo.vue
  11. 14 6
      src/dashoo.cn/frontend_web/src/pages/biobank/source/animal.vue
  12. 86 65
      src/dashoo.cn/frontend_web/src/pages/biobank/source/micro.vue
  13. 22 3
      src/dashoo.cn/frontend_web/src/pages/equipment/_opera/manage.vue
  14. 52 28
      src/dashoo.cn/frontend_web/src/pages/equipment/_opera/operation.vue
  15. 11 4
      src/dashoo.cn/frontend_web/src/pages/samples/archived/_opera/detailed.vue
  16. 100 54
      src/dashoo.cn/frontend_web/src/pages/samples/archived/index.vue
  17. 11 4
      src/dashoo.cn/frontend_web/src/pages/samples/prerecorded/_opera/detailed.vue
  18. 24 4
      src/dashoo.cn/frontend_web/src/pages/samples/prerecorded/_opera/operation.vue
  19. 8 2
      src/dashoo.cn/frontend_web/src/pages/samples/prerecorded/index.vue
  20. 11 4
      src/dashoo.cn/frontend_web/src/pages/samples/stored/_opera/detailed.vue
  21. 7 1
      src/dashoo.cn/frontend_web/src/pages/samples/stored/index.vue
  22. 11 4
      src/dashoo.cn/frontend_web/src/pages/samples/waitingstore/_opera/detailed.vue
  23. 7 1
      src/dashoo.cn/frontend_web/src/pages/samples/waitingstore/index.vue

+ 72 - 1
src/dashoo.cn/backend/api/business/samplessource/samplessource.go

@@ -102,7 +102,7 @@ type DonorsInfo struct {
 	Birthday_int       int64     `xorm:"-"` //生日int格式
 }
 
-type Microbial struct {
+type AnimalInfo struct {
 	Id                 int       `xorm:"<- not null pk autoincr INT(10)"`
 	AccCode            string    `xorm:"VARCHAR(10)"`
 	Genus              string    `xorm:"VARCHAR(50)"` //种属
@@ -173,6 +173,77 @@ type Microbial struct {
 	Birthday_int       int64     `xorm:"-"` //生日int格式
 }
 
+type MicrobialInfo struct {
+	Id                 int       `xorm:"<- not null pk autoincr INT(10)"`
+	AccCode            string    `xorm:"VARCHAR(10)"`
+	Genus              string    `xorm:"VARCHAR(50)"` //种类
+	InnerNo            string    `xorm:"VARCHAR(50)"` //内部编号
+	Name               string    `xorm:"VARCHAR(50)"` //名称
+	Amount             string    `xorm:"VARCHAR(50)"` //
+	Unit               string    `xorm:"VARCHAR(50)"` //单位
+	SourceType         string    `xorm:"VARCHAR(50)"` //采购来源方式
+	Weight             string    `xorm:"int(50)"`     //体重
+	CreateUserId       int       `xorm:"INT(10)"`
+	CreateBy           string    `xorm:"VARCHAR(255)"`
+	CreateOn           time.Time `xorm:"DATETIME created"`
+	ModifiedUserId     int       `xorm:"INT(10)"`
+	ModifiedBy         string    `xorm:"VARCHAR(255)"`
+	ModifiedOn         time.Time `xorm:"DATETIME updated"`
+	Remark             string    `xorm:"TEXT"` //备注
+	ZBack11            string    `xorm:"VARCHAR(256)"`
+	ZBack12            string    `xorm:"VARCHAR(256)"`
+	ZBack13            string    `xorm:"VARCHAR(256)"`
+	ZBack14            string    `xorm:"VARCHAR(256)"`
+	ZBack15            string    `xorm:"VARCHAR(256)"`
+	ZBack16            string    `xorm:"VARCHAR(256)"`
+	ZBack17            string    `xorm:"VARCHAR(256)"`
+	ZBack18            string    `xorm:"VARCHAR(256)"`
+	ZBack19            string    `xorm:"VARCHAR(256)"`
+	ZBack20            string    `xorm:"VARCHAR(256)"`
+	ZBack21            string    `xorm:"VARCHAR(256)"`
+	ZBack22            string    `xorm:"VARCHAR(256)"`
+	ZBack23            string    `xorm:"VARCHAR(256)"`
+	ZBack24            string    `xorm:"VARCHAR(256)"`
+	ZBack25            string    `xorm:"VARCHAR(256)"`
+	ZBack26            string    `xorm:"VARCHAR(256)"`
+	ZBack27            string    `xorm:"VARCHAR(256)"`
+	ZBack28            string    `xorm:"VARCHAR(256)"`
+	ZBack29            string    `xorm:"VARCHAR(256)"`
+	ZBack30            string    `xorm:"VARCHAR(256)"`
+	ZBack31            string    `xorm:"VARCHAR(256)"`
+	ZBack32            string    `xorm:"VARCHAR(256)"`
+	ZBack33            string    `xorm:"VARCHAR(256)"`
+	ZBack34            string    `xorm:"VARCHAR(256)"`
+	ZBack35            string    `xorm:"VARCHAR(256)"`
+	ZBack36            string    `xorm:"VARCHAR(256)"`
+	ZBack37            string    `xorm:"VARCHAR(256)"`
+	ZBack38            string    `xorm:"VARCHAR(256)"`
+	ZBack39            string    `xorm:"VARCHAR(256)"`
+	ZBack40            string    `xorm:"VARCHAR(256)"`
+	ZBack41            string    `xorm:"VARCHAR(256)"`
+	ZBack42            string    `xorm:"VARCHAR(256)"`
+	ZBack43            string    `xorm:"VARCHAR(256)"`
+	ZBack44            string    `xorm:"VARCHAR(256)"`
+	ZBack45            string    `xorm:"VARCHAR(256)"`
+	ZBack46            string    `xorm:"VARCHAR(256)"`
+	ZBack47            string    `xorm:"VARCHAR(256)"`
+	ZBack48            string    `xorm:"VARCHAR(256)"`
+	ZBack49            string    `xorm:"VARCHAR(256)"`
+	ZBack50            string    `xorm:"VARCHAR(256)"`
+	ZBack51            string    `xorm:"VARCHAR(256)"`
+	ZBack52            string    `xorm:"VARCHAR(256)"`
+	ZBack53            string    `xorm:"VARCHAR(256)"`
+	ZBack54            string    `xorm:"VARCHAR(256)"`
+	ZBack55            string    `xorm:"VARCHAR(256)"`
+	ZBack56            string    `xorm:"VARCHAR(256)"`
+	ZBack57            string    `xorm:"VARCHAR(256)"`
+	ZBack58            string    `xorm:"VARCHAR(256)"`
+	ZBack59            string    `xorm:"VARCHAR(256)"`
+	ZBack60            string    `xorm:"VARCHAR(256)"`
+	DiagnosticTime_int int64     `xorm:"-"` //诊断时间int格式
+	Birthday_int       int64     `xorm:"-"` //生日int格式
+}
+
 type DonorsInfoWithDetail struct {
 	Id              int
 	AccCode         string

+ 8 - 7
src/dashoo.cn/backend/api/controllers/base.go

@@ -76,6 +76,8 @@ var (
 	SalesAdmin                               string = "SalesAdmin" //分销商管理员
 	ProjectSourse                            string = "coldchain"
 	DonorstbName                             string = "DonorsInfo"
+	AnimaltbName                             string = "AnimalInfo"    //动物样本源信息表
+	MicrobialtbName                          string = "MicrobialInfo" //微生物表
 	DonorslogtbName                          string = "DonorsLog"
 	DonorsNoteItemName                       string = "DonorsNoteItem"
 	IsUpdating                               string = "false"
@@ -107,7 +109,6 @@ var (
 	MaterialCKHeadName                       string = "MaterialCKHead"            //出库管理主表
 	MaterialPDDetailName                     string = "MaterialPDDetail"          //盘点子表
 	MaterialPDHeadName                       string = "MaterialPDHead"            //盘点管理主表
-	MicrobialName                            string = "Microbial"                 //动物微生物表
 	CellBloodName                            string = "CellBlood"                 //采血表
 	TestTemplateName                         string = "TestTemplate"              //检测模板
 	PreparationTemplateName                  string = "PreparationTemplate"
@@ -218,12 +219,12 @@ var (
 	LimsReportSignName                       string = "LimsReportSign"              //报告签发
 	LimsReportHistoryName                    string = "LimsReportHistory"           //报告历史
 	LimsCustomerpositionName                 string = "LimsCustomerPosition"
-	LimsPressureLeakName                     string = "LimsPressureLeak"    //阻火器压力损失表
-	LimsSpecifyStandardName                  string = "LimsSpecifyStandard" //Lims规格型号标准
-	BaseUserName                             string = "Base_User"           //用户表
-	UserQualificationName                    string = "UserQualification"   //用户资质表
-	LimsInstrumentGroup                      string = "LimsInstrumentGroup" // 检测仪器关联
-	OilAuditSettingName                          string = "Base_OilAuditSetting" // 单位审批步骤自定义配置
+	LimsPressureLeakName                     string = "LimsPressureLeak"     //阻火器压力损失表
+	LimsSpecifyStandardName                  string = "LimsSpecifyStandard"  //Lims规格型号标准
+	BaseUserName                             string = "Base_User"            //用户表
+	UserQualificationName                    string = "UserQualification"    //用户资质表
+	LimsInstrumentGroup                      string = "LimsInstrumentGroup"  // 检测仪器关联
+	OilAuditSettingName                      string = "Base_OilAuditSetting" // 单位审批步骤自定义配置
 )
 
 //分页信息及数据

+ 181 - 17
src/dashoo.cn/backend/api/controllers/biobank/samplessource.go

@@ -655,10 +655,10 @@ func (this *SamplesSourceController) EditImage() {
 // @Title 获取动物样本来源列表
 // @Description get user by token
 // @Success 200 {object} models.Userblood
-// @router /samplesanimallist [get]
-func (this *SamplesSourceController) SamplesAnimalList() {
+// @router /animallist [get]
+func (this *SamplesSourceController) AnimalList() {
 	page := this.GetPageInfoForm()
-	var list []samplessource.Microbial
+	var list []samplessource.AnimalInfo
 	genus := this.GetString("Genus")
 	name := this.GetString("Name")
 	tive := this.GetString("Tive")
@@ -711,7 +711,7 @@ func (this *SamplesSourceController) InnerNoMakeSure() {
 	InnerNo := this.GetString("InnerNo")
 	svc := samplessource.GetSamplesSourceService(utils.DBE)
 	where := " InnerNo= '" + InnerNo + "'"
-	total := svc.GetInnerNo(this.User.AccCode+MicrobialName, where)
+	total := svc.GetInnerNo(this.User.AccCode+AnimaltbName, where)
 	var datainfo DataInfo
 	datainfo.Items = total
 	this.Data["json"] = &datainfo
@@ -722,14 +722,14 @@ func (this *SamplesSourceController) InnerNoMakeSure() {
 // @Success	200	{object}
 // @router /saveanimal [post]
 func (this *SamplesSourceController) SaveAnimal() {
-	var model samplessource.Microbial
+	var model samplessource.AnimalInfo
 	var jsonblob = this.Ctx.Input.RequestBody
 	json.Unmarshal(jsonblob, &model)
 	model.AccCode = this.User.AccCode
 	model.CreateBy = this.User.Realname
 	model.CreateUserId, _ = utils.StrTo(this.User.Id).Int()
 	svc := samplessource.GetSamplesSourceService(utils.DBE)
-	_, err := svc.InsertEntityBytbl(this.User.AccCode+MicrobialName, &model)
+	_, err := svc.InsertEntityBytbl(this.User.AccCode+AnimaltbName, &model)
 	var errinfo ErrorDataInfo
 	if err == nil {
 		errinfo.Message = "操作成功!"
@@ -745,16 +745,16 @@ func (this *SamplesSourceController) SaveAnimal() {
 	}
 }
 
-// @Title 获取客户基本信息
+// @Title 获取动物样本源基本信息
 // @Description get user by token
 // @Success 200 {object} models.Userblood
 // @router /getanimalinfo [get]
 func (this *SamplesSourceController) GetAnimalDetail() {
 	Id := this.GetString("Id")
-	var entity samplessource.Microbial
+	var entity samplessource.AnimalInfo
 	svc := samplessource.GetSamplesSourceService(utils.DBE)
 	where := " Id ='" + Id + "'"
-	svc.GetEntityByWhere(this.User.AccCode+MicrobialName, where, &entity)
+	svc.GetEntityByWhere(this.User.AccCode+AnimaltbName, where, &entity)
 	var datainfo DataInfo
 	datainfo.Items = entity
 	this.Data["json"] = &datainfo
@@ -776,10 +776,10 @@ func (this *SamplesSourceController) EditAnimal() {
 		this.ServeJSON()
 		return
 	}
-	var model samplessource.Microbial
+	var model samplessource.AnimalInfo
 	var jsonblob = this.Ctx.Input.RequestBody
 	json.Unmarshal(jsonblob, &model)
-	var entity samplessource.Microbial
+	var entity samplessource.AnimalInfo
 	model.ModifiedBy = this.User.Realname
 	model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
 	svc := samplessource.GetSamplesSourceService(utils.DBE)
@@ -789,9 +789,7 @@ func (this *SamplesSourceController) EditAnimal() {
 		cols = append(cols, zback[i].Id)
 	}
 	opdesc := "修改样本来源-" + model.Name
-	err := svc.UpdateDonorAndWriteLogBytbl(this.User.AccCode+MicrobialName, this.User.AccCode+DonorslogtbName, id, &model, &entity, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, model.Name)
-	//	opdesc := "修改样本来源-" + model.Name
-	//err := svc.UpdateSample(this.User.AccCode+MicrobialName, id, &model, cols)
+	err := svc.UpdateDonorAndWriteLogBytbl(this.User.AccCode+AnimaltbName, this.User.AccCode+DonorslogtbName, id, &model, &entity, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, model.Name)
 
 	if err == nil {
 		errinfo.Message = "操作成功!"
@@ -821,11 +819,177 @@ func (this *SamplesSourceController) DelBioInfo() {
 		this.ServeJSON()
 		return
 	}
-	var entity samplessource.Microbial
-	var entityempty samplessource.Microbial
+	var entity samplessource.AnimalInfo
+	var entityempty samplessource.AnimalInfo
+	opdesc := "删除生物样本源-" + id
+	svc := samplessource.GetSamplesSourceService(utils.DBE)
+	err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+AnimaltbName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "样本来源")
+	if err == nil {
+		errinfo.Message = "删除成功"
+		errinfo.Code = 0
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	} else {
+		errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error())
+		errinfo.Code = -1
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	}
+}
+
+// @Title 获取动物样本来源列表
+// @Description get user by token
+// @Success 200 {object} models.Userblood
+// @router /microbiallist [get]
+func (this *SamplesSourceController) MicrobialList() {
+	page := this.GetPageInfoForm()
+	var list []samplessource.MicrobialInfo
+	genus := this.GetString("genus")
+	name := this.GetString("name")
+	tive := this.GetString("tive")
+	innerno := this.GetString("innerno")
+	weight := this.GetString("weight")
+	svc := samplessource.GetSamplesSourceService(utils.DBE)
+	where := " 1=1"
+	orderby := "CreateOn"
+	asc := false
+	Order := this.GetString("Order")
+	Prop := this.GetString("Prop")
+	if Order != "" && Prop != "" {
+		orderby = Prop
+		if Order == "asc" {
+			asc = true
+		}
+	}
+	if genus != "" {
+		where = where + " and Genus = '" + genus + "'"
+	}
+	if name != "" {
+		where = where + " and Name like '%" + name + "%'"
+	}
+	if tive != "" {
+		where = where + " and Tive =" + tive + " "
+	}
+	if innerno != "" {
+		where = where + " and InnerNo = '" + innerno + "'"
+	}
+	if weight != "" {
+		where = where + " and Weight = '" + weight + "'"
+	}
+	total := svc.GetPagingEntitiesWithOrderBytbl(this.User.AccCode, page.CurrentPage, page.Size, orderby, asc, &list, where)
+	var datainfo DataInfo
+	datainfo.Items = list
+	datainfo.CurrentItemCount = total
+	this.Data["json"] = &datainfo
+	this.ServeJSON()
+}
+
+// @Title 新增微生物来源基本信息
+// @Success	200	{object}
+// @router /savemicro [post]
+func (this *SamplesSourceController) SaveMicro() {
+	var model samplessource.MicrobialInfo
+	var jsonblob = this.Ctx.Input.RequestBody
+	json.Unmarshal(jsonblob, &model)
+	model.AccCode = this.User.AccCode
+	model.CreateBy = this.User.Realname
+	model.CreateUserId, _ = utils.StrTo(this.User.Id).Int()
+	svc := samplessource.GetSamplesSourceService(utils.DBE)
+	_, err := svc.InsertEntityBytbl(this.User.AccCode+MicrobialtbName, &model)
+	var errinfo ErrorDataInfo
+	if err == nil {
+		errinfo.Message = "操作成功!"
+		errinfo.Code = 0
+		errinfo.Item = model.Id
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	} else {
+		errinfo.Message = "操作失败!" + utils.AlertProcess(err.Error())
+		errinfo.Code = -1
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	}
+}
+
+// @Title 获取微生物样本源基本信息
+// @Description get user by token
+// @Success 200 {object} models.Userblood
+// @router /getmicrobialinfo [get]
+func (this *SamplesSourceController) GetMicrobialDetail() {
+	Id := this.GetString("Id")
+	var entity samplessource.MicrobialInfo
+	svc := samplessource.GetSamplesSourceService(utils.DBE)
+	where := " Id ='" + Id + "'"
+	svc.GetEntityByWhere(this.User.AccCode+MicrobialtbName, where, &entity)
+	var datainfo DataInfo
+	datainfo.Items = entity
+	this.Data["json"] = &datainfo
+	this.ServeJSON()
+}
+
+// @Title 更新微生物基本信息
+// @Description 更新微生物基本信息
+// @Param	id	path	string	true		"需要修改的试管信息"
+// @Success	200	{object} controllers.Request
+// @router /editmicro/:id [put]
+func (this *SamplesSourceController) EditMicro() {
+	id := this.Ctx.Input.Param(":id")
+	var errinfo ErrorInfo
+	if id == "" {
+		errinfo.Message = "操作失败!请求信息不完整"
+		errinfo.Code = -2
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}
+	var model samplessource.MicrobialInfo
+	var jsonblob = this.Ctx.Input.RequestBody
+	json.Unmarshal(jsonblob, &model)
+	var entity samplessource.MicrobialInfo
+	model.ModifiedBy = this.User.Realname
+	model.ModifiedUserId, _ = utils.StrTo(this.User.Id).Int()
+	svc := samplessource.GetSamplesSourceService(utils.DBE)
+	var cols []string = []string{"Genus", "InnerNo", "Name", "Amount", "Unit", "SourceType", "Weight", "Remark", "ModifiedBy", "ModifiedUserId"}
+	zback := svc.QueryZBackList(this.User.AccCode)
+	for i := 0; i < (len(zback)); i++ {
+		cols = append(cols, zback[i].Id)
+	}
+	opdesc := "修改样本来源-" + model.Name
+	err := svc.UpdateDonorAndWriteLogBytbl(this.User.AccCode+MicrobialtbName, this.User.AccCode+DonorslogtbName, id, &model, &entity, cols, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, model.Name)
+
+	if err == nil {
+		errinfo.Message = "操作成功!"
+		errinfo.Code = 0
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	} else {
+		errinfo.Message = "操作失败!" + utils.AlertProcess(err.Error())
+		errinfo.Code = -1
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	}
+}
+
+// @Title 删除微生物样本来源信息
+// @Description
+// @Success 200 {object} ErrorInfo
+// @Failure 403 :id 为空
+// @router /delmicrobial/:id [delete]
+func (this *SamplesSourceController) DelMicrobial() {
+	id := this.Ctx.Input.Param(":id")
+	var errinfo ErrorInfo
+	if id == "" {
+		errinfo.Message = "操作失败!请求信息不完整"
+		errinfo.Code = -2
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}
+	var entity samplessource.MicrobialInfo
+	var entityempty samplessource.MicrobialInfo
 	opdesc := "删除生物样本源-" + id
 	svc := samplessource.GetSamplesSourceService(utils.DBE)
-	err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MicrobialName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "样本来源")
+	err := svc.DeleteOperationAndWriteLogBytbl(this.User.AccCode+MicrobialtbName, BaseOperationLogName, id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username, opdesc, this.User.AccCode, "样本来源")
 	if err == nil {
 		errinfo.Message = "删除成功"
 		errinfo.Code = 0

+ 2 - 2
src/dashoo.cn/frontend_web/nuxt.config.js

@@ -159,8 +159,8 @@ module.exports = {
   },
 
   axios: {
-    baseURL: '//localhost:9081/api/' // 本机开发使用
-    // baseURL: '//52.80.133.197:9081/api/' // BioBank on AWS发布使用
+    // baseURL: '//localhost:9081/api/' // 本机开发使用
+    baseURL: '//52.80.133.197:9081/api/' // BioBank on AWS发布使用
     // baseURL: '//188.188.30.89:9081/api/' //临沂使用
     // baseURL: '//api09.labsop.cn/api/'
     // baseURL: '//192.168.0.211:10091/api/' // 花生所系统

+ 1 - 1
src/dashoo.cn/frontend_web/src/components/samples/chooseanimal.vue

@@ -87,7 +87,7 @@
           _size: this.size,
           InnerNo: this.InnerNo
         }
-        this.$axios.get('/samplessource/samplesanimallist', {
+        this.$axios.get('/samplessource/animallist', {
             params
           })
           .then(res => {

+ 132 - 0
src/dashoo.cn/frontend_web/src/components/samples/choosemicro.vue

@@ -0,0 +1,132 @@
+<template>
+  <div>
+    <el-dialog title="选择样本来源" :visible.sync="visible" top="5vh" width="1000px">
+      <el-form label-width="90px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="内部编号">
+              <el-input v-model="InnerNo" placeholder="请输入内部编号" size="mini" style="width: 165px;" clearable></el-input>
+              <router-link :to="'/biobank/source/addsource/operationc'">
+                <el-button style="float: right; margin-left:8px; margin-top: 8px;" type="primary" size="mini">添加新来源</el-button>
+              </router-link>
+              <el-button style="float: right; margin-top: 8px;" type="primary" size="mini" @click="seachdata">查询</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <el-table :data="microbialList" :stripe="true">
+        <el-table-column label="操作" width="80">
+          <template slot-scope="scope">
+            <el-button size="small" @click="handleselect(scope.row)" type="text" title="选择">
+              <i class="icon icon-checkmark"></i> 选择</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="Name" sortable min-width="80" label="样本名称" align="center" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="Genus" sortable min-width="80" label="种类" align="center" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="InnerNo" sortable align="center" label="内部编号" min-width="90" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="Amount" sortable label="数量" align="center" show-overflow-tooltip min-width="60">
+        </el-table-column>
+        <el-table-column prop="SourceType" sortable label="来源" align="center" show-overflow-tooltip min-width="60">
+        </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">
+      </el-pagination>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    mapGetters
+  } from 'vuex'
+  export default {
+    name: 'ChooseMicroDialog',
+    props: {
+      visible: {
+        type: Boolean,
+        default: false
+      }
+    },
+    created() {
+      this.initData()
+    },
+    computed: {
+      ...mapGetters({
+        session: 'session'
+      })
+    },
+    watch: {
+      visible(val) {
+        this.selfVisible = val
+        if (this.visible) {
+          this.createoptions
+        }
+      },
+      selfVisible(val) {
+        this.$emit('update:visible', val)
+      }
+    },
+    data() {
+      return {
+        InnerNo: '',
+        microbialList: [],
+        currentPage: 1, // 分页
+        size: 10,
+        currentItemCount: 0,
+        selfVisible: this.visible // 避免vue双向绑定警告
+      }
+    },
+    methods: {
+      initData() {
+        let _this = this
+        // request
+        const params = {
+          _currentPage: this.currentPage,
+          _size: this.size,
+          InnerNo: this.InnerNo
+        }
+        this.$axios.get('/samplessource/microbiallist', {
+            params
+          })
+          .then(res => {
+            _this.microbialList = res.data.items
+            _this.currentItemCount = res.data.currentItemCount
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      seachdata() {
+        this.initData()
+      },
+      handleSizeChange(value) {
+        this.size = value
+        this.currentPage = 1
+        this.initData()
+      },
+      handleCurrentChange(value) {
+        this.currentPage = value
+        this.initData()
+      },
+      jssexhandle(val) {
+        if (val === '0') {
+          return '男'
+        } else if (val === '1') {
+          return '女'
+        }
+      },
+      handleselect(val) {
+        this.$emit('close', val)
+        this.selfVisible = false
+      }
+    }
+  }
+
+</script>
+
+<style>
+
+
+</style>

+ 14 - 12
src/dashoo.cn/frontend_web/src/components/samples/preoperation.vue

@@ -22,11 +22,11 @@
               <el-input v-model="form.number" placeholder="请输入样本编码"></el-input>
             </el-form-item>
             <el-form-item label="开始日期">
-              <el-date-picker style="width: 100%" v-model="form.startdate" type="date" :clearable="false" placeholder="请输入开始日期"
-                :picker-options="pickerOptions0">
+              <el-date-picker style="width: 100%" v-model="form.startdate" type="date" :clearable="false"
+                placeholder="请输入开始日期" :picker-options="pickerOptions0">
               </el-date-picker>
             </el-form-item>
-            <el-form-item label="组织器官" v-if="acc != 'sBBo4'">
+            <el-form-item label="组织器官" v-if="acc != '' || acc != 'ssqOy'">
               <el-cascader :options="cascade" style="width:100%" :props="sampleorganprops" change-on-select
                 :show-all-levels="false" v-model="selectedorgan" placeholder="请选择" @change="choose"></el-cascader>
             </el-form-item>
@@ -36,11 +36,11 @@
               <el-input v-model="form.name" placeholder="请输入名称"></el-input>
             </el-form-item>
             <el-form-item label="结束日期">
-              <el-date-picker style="width: 100%" v-model="form.enddate" type="date" :clearable="false" placeholder="请输入结束日期"
-                :picker-options="pickerOptions0">
+              <el-date-picker style="width: 100%" v-model="form.enddate" type="date" :clearable="false"
+                placeholder="请输入结束日期" :picker-options="pickerOptions0">
               </el-date-picker>
             </el-form-item>
-            <el-form-item label="取材部位" v-if="acc != 'sBBo4'">
+            <el-form-item label="取材部位" v-if="acc != '' || acc != 'ssqOy'">
               <el-select v-model="form.samplingsite" clearable style="width:100%" placeholder="请选择">
                 <el-option v-for="item in ssoption" :label="item.label" :value="item.value" :key="item.value">
                 </el-option>
@@ -53,12 +53,14 @@
         <el-pagination style="float: right;margin-top:0px;margin-bottom:2px" @current-change="handleCurrentChange"
           :current-page="currentPage" layout="prev, pager, next" :page-size="pagesize" :total="currentItemCount">
         </el-pagination>
-        <el-button style="float: right;margin:3px 15px 0 0;" type="primary" class="el-button--small" @click="seachdata">查询</el-button>
+        <el-button style="float: right;margin:3px 15px 0 0;" type="primary" class="el-button--small" @click="seachdata">
+          查询</el-button>
       </div>
       <el-table :data="sampleyulurulist" :stripe="true">
         <el-table-column label="操作" width="80">
           <template slot-scope="scope">
-            <el-button size="small" @click="handleselect(scope.row)" type="text" title="选择"><i class="icon icon-checkmark"></i>
+            <el-button size="small" @click="handleselect(scope.row)" type="text" title="选择"><i
+                class="icon icon-checkmark"></i>
               选择</el-button>
           </template>
         </el-table-column>
@@ -73,10 +75,10 @@
             {{scope.row.Capacity}} {{scope.row.Unit}}
           </template>
         </el-table-column>
-        <el-table-column v-if="acc != 'sBBo4'" prop="SamplingOrganName" label="组织器官" show-overflow-tooltip>
-        </el-table-column>
-        <el-table-column v-if="acc != 'sBBo4'" prop="SamplingSiteName" label="取材部位" show-overflow-tooltip>
-        </el-table-column>
+        <el-table-column v-if="acc != '' || acc != 'ssqOy'" prop="SamplingOrganName" label="组织器官"
+          show-overflow-tooltip></el-table-column>
+        <el-table-column v-if="acc != '' || acc != 'ssqOy'" prop="SamplingSiteName" label="取材部位"
+          show-overflow-tooltip></el-table-column>
         <el-table-column prop="SourceName" label="样本来源" show-overflow-tooltip>
         </el-table-column>
         <el-table-column prop="InnerCode" label="样本内码" show-overflow-tooltip>

+ 507 - 0
src/dashoo.cn/frontend_web/src/pages/biobank/source/_opera/operationc.vue

@@ -0,0 +1,507 @@
+<style>
+  .input-with-select .el-select .el-input {
+    width: 110px;
+  }
+
+  .input-with-select .el-input-group__append {
+    background-color: #fff;
+  }
+
+</style>
+
+<template>
+  <div>
+    <el-card>
+      <div slot="header" style="height: 20px;">
+        <span style="float: left;">
+          <i class="icon icon-table2"></i>
+        </span>
+        <el-breadcrumb class="heading" style="float: left; margin-left: 5px">
+          <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
+          <el-breadcrumb-item :to="{ path: '/biobank/source/micro' }">样本来源</el-breadcrumb-item>
+          <el-breadcrumb-item>{{pagetitle}}</el-breadcrumb-item>
+        </el-breadcrumb>
+        <span style="float: right;">
+          <el-button type="primary" style="margin-left: 8px" class="el-button--mini" @click="savedata">保存</el-button>
+          <el-button size="mini" type="primary" class="el-button--small" style="margin-left: 8px"
+            onclick="window.history.go(-1)">返回</el-button>
+        </span>
+      </div>
+      <el-form :model="microForm" :rules="samplesrules" label-width="130px" style="min-height: calc(100vh - 189px)"
+        ref="microForm">
+        <el-card class="box-card infocard addcustomorinfocard">
+          <div slot="header">
+            <legend style="color:#436EEE"></legend>
+            <i class="icon icon-paragraph-justify">基本信息</i>
+          </div>
+          <el-row :gutter="20" class="customordetailcss">
+            <el-col :span="8">
+              <el-form-item label="样本名称" prop="Name">
+                <el-input v-model="microForm.Name" placeholder="请输入样本名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="种类" prop="Genus">
+                <el-select ref="reftube" v-model="microForm.Genus" placeholder="请选择种类" style="width:100%">
+                  <el-option v-for="item in genuslist" :label="item.Value" :value="item.Value" :key="item.Key">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="内部编号" prop="InnerNo">
+                <el-input v-model="microForm.InnerNo" placeholder="请输入内部编号"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="来源">
+                <el-select ref="refplace" v-model="microForm.SourceType" style="width:100%" placeholder="请选择来源">
+                  <el-option label="采集" value="采集"></el-option>
+                  <el-option label="购买" value="购买"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="数量">
+                <el-input v-model="microForm.Amount" placeholder="请输入数量" style="width:100%"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="单位">
+                <el-select ref="refee" v-model="microForm.Unit" clearable style="width:100%" placeholder="请选择单位">
+                  <el-option v-for="item in sampeunitlist" :label="item.Value" :value="item.Value" :key="item.Value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="备注信息">
+                <el-input v-model="microForm.Remark" type="textarea" :rows=3 placeholder="请输入备注信息"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-card>
+
+        <el-row :gutter="20">
+          <el-col :span="24">&nbsp;</el-col>
+        </el-row>
+
+        <el-tabs tab-position="top" v-model="Tabs">
+          <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 microextends">
+                  <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'" :placeholder="'请输入'+item.Name"
+                        auto-complete="off"></el-input>
+
+                      <el-select v-model="item.FieldDefault" v-if="item.FieldType === '2'" clearable
+                        :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-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"
+                        style="width:100%" placeholder="请选择日期"></el-date-picker>
+
+                      <el-button plain v-model="item.FieldDefault" v-if="item.FieldType === '5'" type="primary"
+                        size="mini" class="el-button--small" style="margin-left: 8px" @click="getitem(item)">上传图片
+                      </el-button>
+                    </el-form-item>
+                  </el-col>
+                </template>
+
+              </el-row>
+            </el-card>
+          </el-tab-pane>
+        </el-tabs>
+      </el-form>
+    </el-card>
+    <el-dialog :title="ImageTitle" width="80%" :visible.sync="imageDialog">
+      <el-upload action="" :before-upload="beforeAvatarUpload" :on-preview="handlePictureCardPreview"
+        :http-request="uploadrequest" :on-success="handleAvatarSuccess" :on-remove="handleRemove"
+        :file-list="imagefilelist" list-type="picture">
+        <el-button size="small" type="primary">点击上传</el-button>
+        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件</div>
+      </el-upload>
+    </el-dialog>
+    <el-dialog :visible.sync="dialogVisible">
+      <img width="100%" :src="dialogImageUrl" alt="">
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    mapGetters
+  } from 'vuex'
+  import axios from 'axios'
+  import uploadajax from '../../../../assets/js/uploadajax.js'
+  export default {
+    name: 'samplessource',
+    computed: {
+      ...mapGetters({
+        authUser: 'authUser'
+      }),
+    },
+    data() {
+      return {
+        Tabs: '',
+        pagetitle: '', //界面标题
+        microForm: {
+          Id: '',
+          AccCode: '',
+          Genus: '',
+          InnerNo: '',
+          Name: '',
+          Amount: '',
+          Unit: '', // 单位(容量)
+          SourceType: '',
+          Weight: '',
+          Remark: '',
+        },
+        extendForm: {},
+        sampeunitlist: [],
+        genuslist: [],
+        samplesrules: {
+          InnerNo: [{
+            required: true,
+            message: '请输入内部编号',
+            trigger: 'blur'
+          }],
+          Name: [{
+            required: true,
+            message: '请输入名称',
+            trigger: 'blur'
+          }],
+          Genus: [{
+            required: true,
+            message: '请输入种属',
+            trigger: 'blur'
+          }],
+        },
+        groupnameList: [],
+        microextends: [], // 扩展字段
+        extendId: 0,
+        imageDialog: false,
+        ImageTitle: '',
+        imagefiles: '',
+        imagefilelist: [],
+        imagenewlist: '', //删除图片时使用
+        dialogImageUrl: '',
+        dialogVisible: false,
+        ID: '',
+        pid: 0,
+      }
+    },
+    created() {
+      let _this = this
+      this.pid = this.$route.params.opera
+      if (this.pid == 'addsource') {
+        this.pagetitle = '添加样本来源'
+        this.service_flag = 'addsource'
+      } else if (this.pid != '0') {
+        this.pagetitle = '编辑样本来源'
+        this.service_flag = 'editsource'
+        //this.getmicrobialinfo()
+      }
+      _this.getGroupName()
+      _this.getAnimalGenus()
+      _this.getsampetypeunit()
+    },
+    methods: {
+      savedata() {
+        if (this.pid == 'addsource' || this.pid <= '0') {
+          this.addbasic()
+        } else {
+          this.editbasic()
+        }
+      },
+      getmicrobialinfo() {
+        let _this = this // request
+        let params = {
+          Id: this.pid
+        }
+        _this.$axios.get('/samplessource/getmicrobialinfo', {
+            params
+          })
+          .then(res => {
+            _this.microForm = res.data.items
+            // 为扩展字段赋值
+            for (var i = 0; i < _this.microextends.length; i++) {
+              if (_this.microextends[i].FieldType == '4') {
+                _this.microextends[i].FieldDefault = new Date(res.data.items[_this.microextends[i].FieldName])
+              } else {
+                _this.microextends[i].FieldDefault = res.data.items[_this.microextends[i].FieldName]
+              }
+            }
+          }).catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      addbasic() {
+        this.$refs["microForm"].validate((valid) => {
+          if (valid) {
+            let _this = this
+            _this.microForm.Unit = _this.$refs.refee.selectedLabel
+            _this.microForm.SourceType = _this.$refs.refplace.selectedLabel
+            let params = _this.microForm
+            let jsonstr = ''
+            for (let i = 0; i < _this.microextends.length; i++) {
+              jsonstr += '"' + _this.microextends[i].FieldName + '" : "' + _this.microextends[i].FieldDefault +
+                '",'
+            }
+            jsonstr = '{' + jsonstr.substring(0, jsonstr.length - 1) + '}'
+            // 转换为json对象
+            let jsonobj = JSON.parse(jsonstr)
+            // 拼接两个对象
+            params = Object.assign(params, jsonobj)
+            _this.$axios.post('/samplessource/savemicro', params)
+              .then(res => {
+                // response
+                if (res.data.code === 0) {
+                  _this.$message({
+                    type: 'success',
+                    message: res.data.message
+                  })
+                  _this.microForm.Amount = ''
+                  _this.pid = res.data.item
+                  _this.imagefiles = ''
+                  _this.imagefilelist = []
+                  _this.getmicrobialinfo()
+                } else {
+                  _this.$message({
+                    type: 'warning',
+                    message: res.data.message
+                  })
+                }
+              })
+              .catch(err => {
+                // handle error
+                console.error(err)
+              })
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        })
+      },
+      editbasic() {
+        this.$refs["microForm"].validate((valid) => {
+          if (valid) {
+            let _this = this
+            _this.microForm.Unit = _this.$refs.refee.selectedLabel
+            let params = _this.microForm
+            let jsonstr = ''
+            for (let i = 0; i < _this.microextends.length; i++) {
+              jsonstr += '"' + _this.microextends[i].FieldName + '" : "' + _this.microextends[i].FieldDefault +
+                '",'
+            }
+            jsonstr = '{' + jsonstr.substring(0, jsonstr.length - 1) + '}'
+            // 转换为json对象
+            let jsonobj = JSON.parse(jsonstr)
+            // 拼接两个对象
+            params = Object.assign(params, jsonobj)
+            _this.$axios.put('/samplessource/editmicro/' + _this.pid, params)
+              .then(res => {
+                // response
+                if (res.data.code === 0) {
+                  _this.$message({
+                    type: 'success',
+                    message: res.data.message
+                  })
+                  _this.imagefiles = ''
+                  _this.imagefilelist = []
+                  _this.getmicrobialinfo()
+                } else {
+                  _this.$message({
+                    type: 'warning',
+                    message: res.data.message
+                  })
+                }
+              })
+              .catch(err => {
+                // handle error
+                console.error(err)
+              })
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        })
+      },
+      // 获取样本单位
+      getsampetypeunit() {
+        let _this = this
+        _this.$axios.get('/sampletype/sunitajax', {})
+          .then(res => {
+            _this.sampeunitlist = res.data
+          })
+      },
+      // 获取种属
+      getAnimalGenus() {
+        let _this = this
+        _this.$axios.get('/items/worditem?code=AnimalGenus', {})
+          .then(res => {
+            _this.genuslist = res.data
+          })
+      },
+      getGroupName() {
+        this.$axios.get('extends/listbyloginwithgroup', {})
+          .then(res => {
+            for (var i = 0; i < res.data.length; i++) {
+              if (res.data[i].GroupName != '') {
+                this.groupnameList.push(res.data[i].GroupName)
+              }
+            }
+            this.Tabs = this.groupnameList[0]
+            this.getextends()
+          })
+      },
+      //获取扩展字段列表
+      getextends() {
+        this.$axios.get('extends/listbylogin', {})
+          .then(res => {
+            // response
+            this.microextends = res.data
+            if (this.pid > '0') {
+              this.getmicrobialinfo()
+            }
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      //获取当前上传图片字段
+      getitem(val) {
+        this.imagefiles = ''
+        this.imagefilelist = []
+        this.ImageTitle = val.Name
+        //显示已存储图片
+        if (val.FieldDefault != '') {
+          let imagearr = []
+          imagearr = val.FieldDefault.split('|')
+          for (var i = 0; i < imagearr.length; i++) {
+            if (imagearr[i] !== '') {
+              this.imagefilelist.unshift({
+                'name': 'picture - ' + (i + 1),
+                'url': 'http://' + imagearr[i]
+              })
+            }
+          }
+          this.imagefiles = val.FieldDefault
+        }
+        this.imageDialog = true
+        this.extendId = val.Id
+      },
+      beforeAvatarUpload(file) {
+        const isJPG = (file.type.indexOf('image/') === 0)
+        const isLt2M = file.size / 1024 / 1024 < 10
+        if (!isJPG) {
+          this.$message.error('上传影像文件只能是 图片 格式!')
+          return false
+        }
+        if (!isLt2M) {
+          this.$message.error('上传影像图片大小不能超过 1MB!')
+          return false
+        }
+        return true
+      },
+      handlePictureCardPreview(file) {
+        this.dialogImageUrl = file.url;
+        this.dialogVisible = true;
+      },
+      uploadrequest(option) {
+        let _this = this
+        axios.post(process.env.upfilehost, {})
+          .then(function (res) {
+            if (res.data && res.data.fid && res.data.fid !== '') {
+              option.action = `http://${res.data.url}/${res.data.fid}`
+              _this.uploadimg = {
+                uid: option.file.uid,
+                url: res.data.publicUrl,
+                fid: res.data.fid
+              }
+              uploadajax(option)
+            } else {
+              _this.$message({
+                type: 'warning',
+                message: '未上传成功!请刷新界面重新上传!'
+              })
+            }
+          })
+          .catch(function (error) {
+            console.log(error)
+            _this.$message({
+              type: 'warning',
+              message: '未上传成功!请重新上传!'
+            })
+          })
+      },
+      handleAvatarSuccess(res, file) {
+        for (var i = 0; i < this.microextends.length; i++) {
+          if (this.microextends[i].Id == this.extendId) {
+            this.microextends[i].FieldDefault = this.microextends[i].FieldDefault +
+              `${this.uploadimg.url}/${this.uploadimg.fid}|`
+          }
+        }
+        this.imagefiles = ''
+      },
+      handleRemove(file, fileList) {
+        console.log(this.imagefilelist);
+        for (var i = 0; i < this.imagefilelist.length; i++) {
+          if (this.imagefilelist[i].uid != file.uid) {
+            this.imagenewlist = this.imagenewlist + this.imagefilelist[i].url.substring(7, 42) + `|`
+          }
+        }
+        for (var j = 0; j < this.microextends.length; j++) {
+          if (this.microextends[j].Id == this.extendId) {
+            this.microextends[j].FieldDefault = this.imagenewlist
+          }
+        }
+      },
+    },
+  }
+
+</script>
+
+<style lang="scss">
+  .infocard .el-card__header {
+    padding: 5px 10px;
+    font-size: 10px;
+  }
+
+  .addcustomorinfocard .el-button--mini {
+    padding: 2px
+  }
+
+  .customordetailcss .el-col-8 {
+    height: 58px;
+  }
+
+  .imagebox {
+    text-align: left;
+    padding-left: 50px;
+  }
+
+  .imagehouseimg {
+    width: 146px;
+    height: 146px;
+    display: flex;
+  }
+
+  .input-with-select .el-select .el-input {
+    width: 110px;
+  }
+
+  .input-with-select .el-input-group__append {
+    background-color: #fff;
+  }
+
+</style>

+ 3 - 3
src/dashoo.cn/frontend_web/src/pages/biobank/source/_opera/sourcedetail.vue

@@ -9,7 +9,7 @@
 
 <template>
   <div>
-    <el-card style="min-height: calc(100vh - 189px)">
+    <el-card style="min-height: calc(100vh - 92px)">
       <div slot="header" style="height: 20px;">
         <span style="float: left;">
           <i class="icon icon-table2"></i>
@@ -238,7 +238,7 @@
           })
       },
       getsampletotal() {
-        this.$axios.get('donors/getsampletotal/' + this.pid, {})
+        this.$axios.get('samplessource/getsampletotal/' + this.pid, {})
           .then(res => {
             // response
             this.sampletotal = res.data
@@ -253,7 +253,7 @@
           _currentPage: this.currentPage,
           _size: this.size
         }
-        this.$axios.get('donors/getdevicesamples/' + this.pid, {
+        this.$axios.get('samplessource/getdevicesamples/' + this.pid, {
             params
           })
           .then(res => {

+ 342 - 0
src/dashoo.cn/frontend_web/src/pages/biobank/source/_opera/sourcemicinfo.vue

@@ -0,0 +1,342 @@
+<style>
+  .input-with-select .el-select .el-input {
+    width: 110px;
+  }
+  .input-with-select .el-input-group__append {
+    background-color: #fff;
+  }
+</style>
+
+<template>
+  <div>
+    <el-card style="min-height: calc(100vh - 92px)">
+      <div slot="header" style="height: 20px;">
+        <span style="float: left;">
+          <i class="icon icon-table2"></i>
+        </span>
+        <el-breadcrumb class="heading" style="float: left; margin-left: 5px">
+          <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
+          <el-breadcrumb-item :to="{ path: '/biobank/source/micro' }">样本来源</el-breadcrumb-item>
+          <el-breadcrumb-item>详细信息</el-breadcrumb-item>
+        </el-breadcrumb>
+        <span style="float: right;">
+          <el-button size="mini" type="primary" class="el-button--small" style="margin-left: 8px" @click="goback">返回</el-button>
+        </span>
+      </div>
+
+      <el-card class="box-card donorsdetailmaincard">
+        <div slot="header">
+          <legend style="color:#436EEE"></legend>
+          <i class="icon icon-paragraph-justify"> </i> 基本信息
+        </div>
+        <div class="donorsdetailcardinfodiv">
+          <el-row>
+            <el-col :span="6">
+              <label>样本名称 : {{ animalForm.Name }}</label>
+            </el-col>
+            <el-col :span="6">
+              <label>种类 : {{ animalForm.Genus }}</label>
+            </el-col>
+            <el-col :span="6">
+              <label>内部编号 : {{ animalForm.InnerNo }}</label>
+            </el-col>
+            <el-col :span="6">
+              <label>样本来源 : {{ animalForm.SourceType }}</label>
+            </el-col>
+            <el-col :span="6">
+              <label>数量 : {{ animalForm.Amount }} </label>
+            </el-col>
+            <el-col :span="6">
+              <label>单位 :{{ animalForm.Unit }}</label>
+            </el-col>
+            <el-col :span="24">
+              <label>备注信息 :{{ animalForm.Remark }}</label>
+            </el-col>
+          </el-row>
+        </div>
+      </el-card>
+
+      <el-card class="box-card donorsdetailmaincard" v-for="groupname in groupnameList" :key="groupname" style="margin-top: 5px">
+        <div slot="header">
+          <i class="icon icon-paragraph-justify"> 扩展信息 / {{groupname}}</i>
+        </div>
+        <div class="donorsdetailkzinfodiv">
+          <el-row>
+            <template v-for="(item, index) in animalextends">
+              <el-col :span="6" :key="index" v-if="item.GroupName === groupname">
+                <label>{{item.Name}}:{{item.FieldDefault}}</label>
+              </el-col>
+            </template>
+          </el-row>
+        </div>
+      </el-card>
+
+      <el-card class="box-card donorsdetailmaincard">
+        <div slot="header">
+          <legend style="color:#436EEE"></legend>
+          <i class="icon icon-paragraph-justify"></i> 样本信息
+        </div>
+        <div class="donorsdetailcardinfodiv">
+          <el-row>
+            <el-col :span="6">
+              <label>总样本数 : {{sampletotal.allsamplesum}}</label>
+            </el-col>
+            <el-col :span="6">
+              <label>设备中样本:{{sampletotal.samplenum}}</label>
+            </el-col>
+            <el-col :span="6">
+              <label>预录入:{{sampletotal.sampleprenum}}</label>
+            </el-col>
+            <el-col :span="6">
+              <label>待复存:{{sampletotal.sampleunsavenum}}</label>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="6">
+              <label>已归档:{{sampletotal.samplefilesnum}}</label>
+            </el-col>
+          </el-row>
+          <div class="four fields" style="margin-top:10px;">
+            <div class="field">
+            </div>
+          </div>
+        </div>
+      </el-card>
+      <el-card class="box-card donorsdetailmaincard">
+        <div slot="header">
+          <legend style="color:#436EEE"></legend>
+          <i class="icon icon-paragraph-justify"></i> 设备中样本
+        </div>
+        <el-table :data="devicesamples" bordertooltip-effect="dark" style="width: 100%;margin-top:10px">
+          <el-table-column label="样本条码" width="200">
+            <template slot-scope="scope">
+              <router-link :to="'/samples/stored/'+scope.row.Id + '/detailed'">
+                {{scope.row.BarCode}}
+              </router-link>
+            </template>
+          </el-table-column>
+          <el-table-column prop="SampleCode" label="样本编码" width="120" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="Name" label="名称" width="120" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="SampleTypeName" label="样本类型" show-overflow-tooltip></el-table-column>
+          <el-table-column label="可用容量" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{scope.row.Capacity}} {{scope.row.Unit}}
+            </template>
+          </el-table-column>
+          <el-table-column prop="SamplingOrganName" label="组织器官" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="SamplingSiteName" label="取材部位" show-overflow-tooltip></el-table-column>
+          <el-table-column label="有效日期" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ jstimehandle(scope.row.ValidityDate+'') }}
+            </template>
+          </el-table-column>
+          <el-table-column label="接收日期" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{ jstimehandle(scope.row.ReceiveDate+'') }}
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="block">
+          <el-pagination @current-change="handleCurrentChange" layout="prev, pager, next" :page-size="size"
+            :current-page="currentPage" :total="currentItemCount">
+          </el-pagination>
+        </div>
+      </el-card>
+    </el-card>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'donorsdetail',
+    data() {
+      return {
+        pid: 0,
+        currentItemCount: 0, // 当前页显示数量
+        currentPage: 1, // 当前页
+        size: 10, // 每页显示数量
+        formsex: '1',
+        animalForm: {
+          Id: 0,
+          Genus: '',
+          InnerNo: '',
+          Name: '',
+          Amount: '',
+          Unit: '',
+          SourceType: '',
+          Weight: '',
+          Remark: ''
+        },
+        groupnameList: [],
+        animalextends: [], // 扩展字段
+        sampletotal: {}, // 样本统计
+        devicesamples: [], // 设备中样本
+        formLabelWidth: '120px'
+      }
+    },
+    created() {
+      this.createpage()
+    },
+    watch: {
+      '$route'(to, from) {
+        this.createpage()
+      }
+    },
+    methods: {
+      createpage() {
+        this.pid = this.$route.params.opera
+        this.getGroupName()
+        // this.getextends(pid)
+        this.getsampletotal()
+        this.getdevicesamples()
+      },
+      initData() {
+        let _this = this // request
+        let params = {
+          Id: this.pid
+        }
+        _this.$axios.get('/samplessource/getmicrobialinfo', {
+            params
+          })
+          .then(res => {
+            _this.animalForm = res.data.items
+            // 为扩展字段赋值
+            for (var i = 0; i < _this.animalextends.length; i++) {
+              if (_this.animalextends[i].FieldType == '4') {
+                _this.animalextends[i].FieldDefault = res.data.items[_this.animalextends[i].FieldName].substr(0, 24)
+              } else {
+                _this.animalextends[i].FieldDefault = res.data.items[_this.animalextends[i].FieldName]
+              }
+            }
+          }).catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      getGroupName() {
+        this.$axios.get('extends/listbyloginwithgroup', {})
+          .then(res => {
+            for (var i = 0; i < res.data.length; i++) {
+              if (res.data[i].GroupName != '') {
+                this.groupnameList.push(res.data[i].GroupName)
+              }
+            }
+            this.Tabs = this.groupnameList[0]
+            this.getextends()
+          })
+      },
+      getextends() {
+        this.$axios.get('extends/listbylogin', {})
+          .then(res => {
+            this.animalextends = res.data
+            this.initData()
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      getsampletotal() {
+        this.$axios.get('samplessource/getsampletotal/' + this.pid, {})
+          .then(res => {
+            // response
+            this.sampletotal = res.data
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      getdevicesamples() {
+        let params = {
+          _currentPage: this.currentPage,
+          _size: this.size
+        }
+        this.$axios.get('samplessource/getdevicesamples/' + this.pid, {
+            params
+          })
+          .then(res => {
+            this.devicesamples = res.data.items
+            this.currentItemCount = res.data.currentItemCount
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      handleCurrentChange(value) {
+        this.currentPage = value
+        this.getdevicesamples()
+      },
+      goback() {
+        if (this.$route.query.size) {
+          this.$router.push({
+            name: this.$route.query.pname,
+            query: {
+              size: this.$route.query.size,
+              currentPage: this.$route.query.currentPage
+            }
+          })
+        } else {
+          this.$router.go(-1)
+        }
+      },
+      jstimehandle(val) {
+        if (val === '') {
+          return '----'
+        } else if (val === '0001-01-01T08:00:00+08:00') {
+          return '----'
+        } else if (val === '5000-01-01T23:59:59+08:00') {
+          return '永久'
+        } else {
+          val = val.replace('T', ' ')
+          return val.substring(0, 19)
+        }
+      }
+    }
+  }
+
+</script>
+
+<style lang="scss">
+  .el-pagination {
+    margin: 1rem 0 2rem;
+    text-align: right;
+  }
+
+  .plab {
+    font-size: 13px;
+    color: #999;
+  }
+
+  .donorsdetailcardinfodiv {
+    margin: 8px 0 15px 0;
+  }
+
+  .donorsdetailcardinfodiv .el-row {
+    padding: 8px 5px 0 0;
+  }
+
+  .donorsdetailmaincard:not(:first-child) {
+    margin-top: 8px;
+  }
+
+  .donorsdetailmaincard .el-card__header {
+    padding: 5px 10px;
+    font-size: 10px;
+  }
+
+  .donorsdetailmaincard .el-card__body {
+    padding: 5px;
+    margin: -11px 0;
+  }
+
+  .donorsdetailkzinfodiv {
+    margin: 8px 0 15px 0;
+  }
+
+  .donorsdetailkzinfodiv .el-row .el-col.el-col-6 {
+    padding: 8px 5px 0 0;
+  }
+
+</style>

+ 14 - 6
src/dashoo.cn/frontend_web/src/pages/biobank/source/animal.vue

@@ -39,7 +39,8 @@
             <router-link :to="'/biobank/source/'+scope.row.Id+'/operationb'">
               <el-button type="text" title="编辑" size="small" icon="el-icon-edit"></el-button>
             </router-link>
-            <el-button size="small" type="text" icon="el-icon-delete" style="margin-left:3px;" title="删除" @click="delSamplesSource(scope.row)"></el-button>
+            <el-button size="small" type="text" icon="el-icon-delete" style="margin-left:3px;" title="删除"
+              @click="delSamplesSource(scope.row)"></el-button>
             <router-link :to="'/biobank/source/'+ scope.row.Id + '/sourcedetail'">
               <el-button size="small" title="详情" type="text" style="margin-left:3px;">
                 <i class="icon icon-eye"></i>
@@ -47,16 +48,23 @@
             </router-link>
           </template>
         </el-table-column>
-        <el-table-column prop="Name" sortable min-width="80" label="样本名称" align="center" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="Genus" sortable min-width="80" label="种属" align="center" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="InnerNo" sortable align="center" label="内部编号" min-width="90" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="Name" sortable min-width="80" label="样本名称" align="center" show-overflow-tooltip>
+        </el-table-column>
+        <el-table-column prop="Genus" sortable min-width="80" label="种属" align="center" show-overflow-tooltip>
+        </el-table-column>
+        <el-table-column prop="InnerNo" sortable align="center" label="内部编号" min-width="90" show-overflow-tooltip>
+        </el-table-column>
         <el-table-column prop="Amount" sortable label="数量" align="center" show-overflow-tooltip min-width="60">
+          <template slot-scope="scope">
+            <p>{{scope.row.Amount}} {{scope.row.Unit}}</p>
+          </template>
         </el-table-column>
         <el-table-column prop="SourceType" sortable label="来源" align="center" show-overflow-tooltip min-width="60">
         </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>
 
@@ -167,7 +175,7 @@
           Prop: this.Column.Prop
         }
         Object.assign(params, _this.searchform)
-        _this.$axios.get('/samplessource/samplesanimallist', {
+        _this.$axios.get('/samplessource/animallist', {
             params
           })
           .then(res => {

+ 86 - 65
src/dashoo.cn/frontend_web/src/pages/biobank/source/micro.vue

@@ -1,85 +1,98 @@
 <template>
   <div>
-    <el-breadcrumb class="heading">
-      <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/biobank/source' }">样本来源</el-breadcrumb-item>
-    </el-breadcrumb>
-    <el-card class="box-card">
-      <div slot="header">
-        <span>
-          <i class="icon icon-table2"></i> 微生物样本来源信息
+    <el-card class="box-card" style="height: calc(100vh - 92px);">
+      <div slot="header" style="height: 20px;">
+        <span style="float: left;">
+          <i class="icon icon-table2"></i>
         </span>
+        <el-breadcrumb class="heading" style="float: left; margin-left: 5px">
+          <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
+          <el-breadcrumb-item>样本来源</el-breadcrumb-item>
+        </el-breadcrumb>
         <span style="float: right;">
-          <router-link :to="'/biobank/source/addsource/operationb'">
-            <el-button type="primary" size="small">添加</el-button>
+          <router-link :to="'/biobank/source/addsource/operationc'">
+            <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;">添加</el-button>
           </router-link>
         </span>
+        <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
+          <el-form-item label="样本名称">
+            <el-input size="mini" v-model="searchform.name" style="width:100%" placeholder="请输入样本名称"></el-input>
+          </el-form-item>
+          <el-form-item label="内部编码">
+            <el-input size="mini" style="width: 165px;" v-model="searchform.innerno" placeholder="请输入内部编码"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-dropdown split-button type="primary" size="mini" @click="seachdata" @command="searchCommand">
+              查询
+              <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item command="search">高级查询</el-dropdown-item>
+                <el-dropdown-item command="clear">查询重置</el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </el-form-item>
+        </el-form>
       </div>
-      <el-collapse>
-        <el-collapse-item title="查询" name="1">
-          <el-form ref="form" label-width="90px">
-            <el-row :gutter="0">
-              <el-col :span="8">
-                <el-form-item label="种属">
-                  <el-input type=" " v-model="searchform.genus" placeholder="请输入种属"></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="内部编号">
-                  <el-input type=" " v-model="searchform.innerno" placeholder="请输入内部编号"></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="样本名称">
-                  <el-input type=" " v-model="searchform.name" placeholder="请输入样本名称"></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="阴阳性">
-                  <el-input type=" " v-model="searchform.tive" placeholder="请输入阴阳性"></el-input>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="体重">
-                 <el-input type=" " v-model="searchform.weight" placeholder="请输入体重"></el-input>
-                </el-form-item>
-              </el-col>
-            </el-row>
-            <el-row>
-              <el-col class="line" :span="24" style="background-color:lightgrey; line-height: 1px">&nbsp;</el-col>
-            </el-row>
-            <el-row :gutter="0" style="text-align:right;margin-top:10px;">
-              <el-button size="small" @click="seachdata" type="primary">查询</el-button>
-              <el-button type="primary" class="el-button--small" @click="clearSearch" style="margin-left:8px">重置</el-button>
-            </el-row>
-          </el-form>
-        </el-collapse-item>
-      </el-collapse>
-      <el-table :data="donorsList" border style="width: 100%" @sort-change="orderby">
+
+      <el-table :data="microbialList" border style="width: 100%" height="calc(100vh - 230px)" @sort-change="orderby">
         <el-table-column label="操作" width="80" align="center" fixed>
           <template slot-scope="scope">
-            <router-link :to="'/biobank/source/'+scope.row.Id+'/operationb'">
+            <router-link :to="'/biobank/source/'+scope.row.Id+'/operationc'">
               <el-button type="text" title="编辑" size="small" icon="el-icon-edit"></el-button>
             </router-link>
-            <el-button size="small" type="text" icon="el-icon-delete" style="margin-left:3px;" title="删除" @click="delSamplesSource(scope.row)"></el-button>
+            <el-button size="small" type="text" icon="el-icon-delete" style="margin-left:3px;" title="删除"
+              @click="delSamplesSource(scope.row)"></el-button>
           </template>
         </el-table-column>
-        <el-table-column prop="Genus" sortable min-width="80" label="种属" align="center" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="Name" sortable min-width="80" label="样本名称" align="center" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="InnerNo" sortable align="center" label="内部编号" min-width="90" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="Tive" sortable align="center" label="阴阳性" min-width="60" show-overflow-tooltip>
+        <el-table-column prop="Genus" sortable min-width="80" label="种类" align="center" show-overflow-tooltip>
+        </el-table-column>
+        <el-table-column prop="Name" sortable min-width="80" label="样本名称" align="center" show-overflow-tooltip>
+        </el-table-column>
+        <el-table-column prop="InnerNo" sortable align="center" label="内部编号" min-width="90" show-overflow-tooltip>
+        </el-table-column>
+        <el-table-column prop="Amount" sortable label="数量" align="center" show-overflow-tooltip min-width="60">
           <template slot-scope="scope">
-            <el-tag type="success" v-if="scope.row.Tive === 0">阴性</el-tag>
-            <el-tag v-if="scope.row.Tive === 1">阳性</el-tag>
+            <p>{{scope.row.Amount}}  {{scope.row.Unit}}</p>
           </template>
         </el-table-column>
-        <el-table-column prop="Weight" sortable label="体重" align="center" show-overflow-tooltip min-width="60">
+        <el-table-column prop="SourceType" sortable label="来源" align="center" show-overflow-tooltip min-width="60">
         </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>
+
+    <el-dialog title="高级查询" :visible.sync="dialogVisible" width="700px">
+      <el-form ref="advancedSearchForm" label-width="90px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="种类">
+              <el-input size="mini" v-model="searchform.genus" style="width:100%" placeholder="请输入种类"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="样本名称">
+              <el-input size="mini" v-model="searchform.name" style="width:100%" placeholder="请输入样本名称"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="内部编号">
+              <el-input size="mini" v-model="searchform.innerno" style="width:100%" placeholder="请输入内部编号"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="阴阳性">
+              <el-input size="mini" v-model="searchform.tive" style="width:100%" placeholder="请输入阴阳性"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="mini" @click="dialogVisible = false">取 消</el-button>
+        <el-button size="mini" type="primary" @click="seachdata">查 询</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -96,6 +109,7 @@
     name: 'samplessource',
     data() {
       return {
+        dialogVisible: false,
         searchform: {
           genus: '',
           name: '',
@@ -110,7 +124,7 @@
         currentItemCount: 0,
         currentPage: 1,
         size: 10,
-        donorsList: [],
+        microbialList: [],
         //列表排序
         Column: {
           Order: '',
@@ -134,11 +148,11 @@
           Prop: this.Column.Prop
         }
         Object.assign(params, _this.searchform)
-        _this.$axios.get('/samplessource/samplesanimallist', {
+        _this.$axios.get('/samplessource/microbiallist', {
             params
           })
           .then(res => {
-            _this.donorsList = res.data.items
+            _this.microbialList = res.data.items
             _this.currentItemCount = res.data.currentItemCount
           })
           .catch(err => {
@@ -153,7 +167,7 @@
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          _this.$axios.delete("samplessource/deldonors/" + val.Id + '?genus=' + val.genus, null)
+          _this.$axios.delete("samplessource/delmicrobial/" + val.Id + '?genus=' + val.genus, null)
             .then(res => {
               // response
               if (res.data.code === 0) {
@@ -204,6 +218,13 @@
         this.currentPage = 1
         this.initdata()
       },
+      searchCommand(command) {
+        if (command == 'search') {
+          this.dialogVisible = true
+        } else if (command == 'clear') {
+          this.clearSearch()
+        }
+      },
       clearSearch() {
         this.searchform.genus = ''
         this.searchform.weight = ''

+ 22 - 3
src/dashoo.cn/frontend_web/src/pages/equipment/_opera/manage.vue

@@ -201,14 +201,14 @@
                 @blur="blursamplecode" placeholder="样本编码"></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="8" v-if="acc != 'sBBo4'">
+          <el-col :span="8" v-if="acc != 'sBBo4' && acc != 'ssqOy'">
             <el-form-item label="组织器官">
               <el-cascader :options="organlist2" style="width:100%" :props="sampleorganprops" change-on-select
                 :show-all-levels="false" v-model="selectedorgan" placeholder="请选择组织器官" @change="chooseorgange"
                 :disabled="disabledsamplingorgan"></el-cascader>
             </el-form-item>
           </el-col>
-          <el-col :span="8" v-if="acc != 'sBBo4'">
+          <el-col :span="8" v-if="acc != 'sBBo4' && acc != 'ssqOy'">
             <el-form-item label="取材部位">
               <el-select v-model="sampleform.SamplingSite" clearable placeholder="取材部位" style="width:100%" :disabled="disabledsamplingsite">
                 <el-option v-for="item in samplequcailist" :label="item.label" :key="item" :value="item.value"></el-option>
@@ -254,7 +254,7 @@
               <el-input v-model="sampleform.InnerCode" placeholder="样本内码"></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="8" v-if="acc != 'sBBo4'">
+          <el-col :span="8" v-if="acc != 'sBBo4' && acc != 'ssqOy'">
             <el-form-item label="样本来源">
               <el-input v-model="sampleform.SourceName" placeholder="样本来源" style="width:68%" :disabled="true"></el-input>
               <el-button type="primary" :disabled="disabledsourcebutton || contains('1,2', batchitem)" style="width:30%;float:right"
@@ -268,6 +268,13 @@
                 @click="animalSourceVisible = true" class="btnbox">选择</el-button>
             </el-form-item>
           </el-col>
+          <el-col :span="8" v-if="acc == 'ssqOy'">
+            <el-form-item label="样本来源">
+              <el-input v-model="sampleform.SourceName" placeholder="样本来源" style="width:68%" :disabled="true"></el-input>
+              <el-button type="primary" :disabled="disabledsourcebutton || contains('1,2', batchitem)" style="width:30%;float:right"
+                @click="microSourceVisible = true" class="btnbox">选择</el-button>
+            </el-form-item>
+          </el-col>
           <el-col :span="16">
             <el-form-item label="备注">
               <el-input v-model="sampleform.Remark" type="textarea" :rows="1" placeholder="样本备注"></el-input>
@@ -453,6 +460,7 @@
     <preoperation-dialog @close="custompreoperaDialogCallback" :visible.sync="dialogFormVisible"></preoperation-dialog>
     <choose-source-dialog @close="customsampsourceDialogCallback" :visible.sync="dialogFormVisible2"></choose-source-dialog>
     <choose-animal-dialog @close="animalDialogCallback" :visible.sync="animalSourceVisible"></choose-animal-dialog>
+    <choose-micro-dialog @close="microDialogCallback" :visible.sync="microSourceVisible"></choose-micro-dialog>
     <recoverydialog @close="recoverydialogcallback" :sampleinfo="sampleinfodetail" :visible.sync="dialogfusuVisible"></recoverydialog>
     <packingdialog @close="recoverydialogcallback" :sampleinfo="sampleinfodetail" :visible.sync="dialogfenzhuangVisible"></packingdialog>
     <abstractdialog @close="recoverydialogcallback" :sampleinfo="sampleinfodetail" :visible.sync="dialogtiquVisible"></abstractdialog>
@@ -466,6 +474,7 @@
   import PreoperationDialog from '@/components/samples/preoperation'
   import ChooseSourceDialog from '@/components/samples/choosesource'
   import ChooseAnimalDialog from '@/components/samples/chooseanimal'
+  import ChooseMicroDialog from '@/components/samples/choosemicro'
   import recoverydialog from '@/components/samples/recoverydialog'
   import packingdialog from '@/components/samples/packingdialog'
   import abstractdialog from '@/components/samples/abstractdialog'
@@ -478,6 +487,7 @@
       PreoperationDialog,
       ChooseSourceDialog,
       ChooseAnimalDialog,
+      ChooseMicroDialog,
       recoverydialog,
       packingdialog,
       abstractdialog
@@ -671,6 +681,7 @@
         form2: {},
         dialogFormVisible2: false,
         animalSourceVisible: false,
+        microSourceVisible: false,
         formLabelWidth2: '120px',
         tableData2: [],
         tableColumnWidth2: '160',
@@ -1411,6 +1422,10 @@
               }
               _this.Tabs = _this.groupnameList[0]
               _this.getSpecialkz(v)
+              if(_this.acc =='sBBo4' || _this.acc == 'ssqOy'){
+                let sampletypestr = _this.sampleform.SampleTypestr
+                _this.getautobarcode(sampletypestr)
+              }  
             })
         }
       },
@@ -1658,6 +1673,10 @@
         this.sampleform.SourceId = val.Id
         this.sampleform.SourceName = val.Name
       },
+      microDialogCallback(val){
+        this.sampleform.SourceId = val.Id
+        this.sampleform.SourceName = val.Name
+      },
       getparentcodebytopcode (v) {
         let _this = this
         _this.$axios.get('/sampleorgan/getparentcodebytopcode/' + v, {})

+ 52 - 28
src/dashoo.cn/frontend_web/src/pages/equipment/_opera/operation.vue

@@ -1,20 +1,34 @@
+<style>
+  .input-with-select .el-select .el-input {
+    width: 110px;
+  }
+
+  .input-with-select .el-input-group__append {
+    background-color: #fff;
+  }
+
+</style>
+
 <template>
   <div>
-    <el-breadcrumb class="heading">
-      <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/equipment' }">容器管理</el-breadcrumb-item>
-      <el-breadcrumb-item>{{head}}</el-breadcrumb-item>
-    </el-breadcrumb>
-    <el-card class="box-card">
-      <div slot="header">
-        <span>
-          <i>新增容器</i>
-          <span style="float: right;">
-            <el-button type="primary" class="el-button--small" @click="savedata()">保存</el-button>
-            <el-button type="primary" class="el-button--small" @click="goback">返回</el-button>
-          </span>
+    <el-card style="min-height: calc(100vh - 92px);">
+      <div slot="header" style="height: 20px;">
+        <span style="float: left;">
+          <i class="icon icon-table2"></i>
+        </span>
+        <el-breadcrumb class="heading" style="float: left; margin-left: 5px">
+          <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
+          <el-breadcrumb-item :to="{ path: '/equipment' }">容器管理</el-breadcrumb-item>
+          <el-breadcrumb-item>{{head}}</el-breadcrumb-item>
+        </el-breadcrumb>
+        <span style="float: right;">
+          <el-button size="mini" type="primary" class="el-button--small" style="margin-left: 8px" @click="savedata()">保存
+          </el-button>
+          <el-button size="mini" type="primary" class="el-button--small" style="margin-left: 8px"
+            onclick="window.history.go(-1)">返回</el-button>
         </span>
       </div>
+
       <el-form ref="deviceform" :model="formmodel" :rules="rulesformmodel" label-width="130px">
         <el-row>
           <el-col :span="8">
@@ -22,9 +36,10 @@
               <el-input v-model="formmodel.Code"></el-input>
             </el-form-item>
             <el-form-item label="品牌" required>
-              <el-select :disabled="!isadd && (formmodel.DItem === 19 || formmodel.DItem === 20)" v-model="formmodel.Brand" placeholder="请选择品牌"
-                @change="selectDModel" style="width:100%">
-                <el-option v-for="item in brandoptions" :label="item.label" :value="item.value"  :key="item.value"></el-option>
+              <el-select :disabled="!isadd && (formmodel.DItem === 19 || formmodel.DItem === 20)"
+                v-model="formmodel.Brand" placeholder="请选择品牌" @change="selectDModel" style="width:100%">
+                <el-option v-for="item in brandoptions" :label="item.label" :value="item.value" :key="item.value">
+                </el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -34,9 +49,10 @@
               <el-input v-model="formmodel.Name"></el-input>
             </el-form-item>
             <el-form-item label="型号" required>
-              <el-select :disabled="!isadd && (formmodel.DItem === 19 || formmodel.DItem === 20)" v-model="formmodel.ModelVersion" placeholder="请选择型号"
-                @change="selectPhoto" style="width:100%">
-                <el-option v-for="item in modeloptions" :label="item.label" :value="item.value" :key="item.value"></el-option>
+              <el-select :disabled="!isadd && (formmodel.DItem === 19 || formmodel.DItem === 20)"
+                v-model="formmodel.ModelVersion" placeholder="请选择型号" @change="selectPhoto" style="width:100%">
+                <el-option v-for="item in modeloptions" :label="item.label" :value="item.value" :key="item.value">
+                </el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -50,7 +66,8 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="层数" required>
-              <el-input-number :disabled="haveshelf" controls-position="right" v-model="formmodel.RowNum" :min="1" style="width:100%"></el-input-number>
+              <el-input-number :disabled="haveshelf" controls-position="right" v-model="formmodel.RowNum" :min="1"
+                style="width:100%"></el-input-number>
             </el-form-item>
             <el-form-item label="高度" prop="Height">
               <el-input v-model="formmodel.Height"></el-input>
@@ -65,13 +82,15 @@
                   <el-checkbox v-for="v in sampelist" :label="v.value" :key="v">{{v.label}}</el-checkbox>
                 </el-checkbox-group>
               </div>
-              <el-checkbox :indeterminate="issampetypecheckedall" v-model="checkAll" @change="handleCheckAllChange" class="checkAll">全选</el-checkbox>
+              <el-checkbox :indeterminate="issampetypecheckedall" v-model="checkAll" @change="handleCheckAllChange"
+                class="checkAll">全选</el-checkbox>
             </el-form-item>
           </el-col>
 
           <el-col :span="8">
             <el-form-item label="每层冻存架个数" required>
-              <el-input-number :disabled="haveshelf" controls-position="right" v-model="formmodel.ColumnNum" :min="1" style="width:100%"></el-input-number>
+              <el-input-number :disabled="haveshelf" controls-position="right" v-model="formmodel.ColumnNum" :min="1"
+                style="width:100%"></el-input-number>
             </el-form-item>
             <el-form-item label="深度" prop="Depth">
               <el-input v-model="formmodel.Depth"></el-input>
@@ -95,21 +114,26 @@
               </el-date-picker>
             </el-form-item>
             <el-form-item label="温度采集器编号" prop="Tcode">
-              <el-select style="width:100%" v-model="formmodel.TCode" multiple filterable allow-create placeholder="请输入温度采集器编号">
-                <el-option v-for="item in formmodel.TCode" :label="item" :value="item"  :key="item">
+              <el-select style="width:100%" v-model="formmodel.TCode" multiple filterable allow-create
+                placeholder="请输入温度采集器编号">
+                <el-option v-for="item in formmodel.TCode" :label="item" :value="item" :key="item">
                 </el-option>
               </el-select>
             </el-form-item>
             <el-form-item label="添加冻存架" v-if="isadd && showdchdcj">
-              <el-input-number v-model="formmodel.shelf_x" controls-position="right" :min="0" style="width:41%"></el-input-number>
+              <el-input-number v-model="formmodel.shelf_x" controls-position="right" :min="0" style="width:41%">
+              </el-input-number>
-              <el-input-number v-model="formmodel.shelf_y" controls-position="right" :min="0" style="width:41%"></el-input-number>
+              <el-input-number v-model="formmodel.shelf_y" controls-position="right" :min="0" style="width:41%">
+              </el-input-number>
             </el-form-item>
             <el-form-item label="添加冻存盒" v-if="isadd && showdchdcj">
-              <el-input-number v-model="formmodel.box_x" controls-position="right" :min="0" style="width:41%"></el-input-number>
+              <el-input-number v-model="formmodel.box_x" controls-position="right" :min="0" style="width:41%">
+              </el-input-number>
-              <el-input-number v-model="formmodel.box_y" controls-position="right" :min="0" style="width:41%"></el-input-number>
+              <el-input-number v-model="formmodel.box_y" controls-position="right" :min="0" style="width:41%">
+              </el-input-number>
             </el-form-item>
           </el-col>

+ 11 - 4
src/dashoo.cn/frontend_web/src/pages/samples/archived/_opera/detailed.vue

@@ -52,10 +52,10 @@
             <el-col :span="6">
               <label>初始容量 :{{ sampleinfodetail.InitCapacity }} {{ sampleinfodetail.Unit }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <label>组织器官 : {{ sampleinfodetail.SamplingOrganName }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <label>取材部位 :{{ sampleinfodetail.SamplingSiteName }}</label>
             </el-col>
           </el-row>
@@ -77,7 +77,7 @@
             <el-col :span="6" v-if="acc !='srNA2'">
               <label>样本内码 :{{ sampleinfodetail.InnerCode }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc != 'sBBo4'">
+            <el-col :span="6" v-if="acc != 'sBBo4' && acc != 'ssqOy'">
               <label>样本来源 :
                 <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourceinfo'">
                   {{ sampleinfodetail.SourceName }}
@@ -91,7 +91,14 @@
                 </router-link>
               </label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc == 'ssqOy'">
+              <label>样本来源 :
+                <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourcemicinfo'">
+                  {{ sampleinfodetail.SourceName }}
+                </router-link>
+              </label>
+            </el-col>
+            <el-col :span="6" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <label>身份证号 :{{ sampleinfodetail.SourceIdCard }}</label>
             </el-col>
             <el-col :span="6">

+ 100 - 54
src/dashoo.cn/frontend_web/src/pages/samples/archived/index.vue

@@ -10,7 +10,8 @@
           <el-breadcrumb-item>已归档样本</el-breadcrumb-item>
         </el-breadcrumb>
         <span style="float: right;">
-          <el-dropdown split-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @command="handleExportsamplesCommand">
+          <el-dropdown split-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;"
+            @command="handleExportsamplesCommand">
             导出
             <el-dropdown-menu slot="dropdown">
               <el-dropdown-item style="color:black;" command="exportchosen">导出所选样本</el-dropdown-item>
@@ -18,9 +19,12 @@
               <el-dropdown-item style="color:black;" command="exportall">导出所有样本</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
-          <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @click="batchprint">打印</el-button>
-          <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @click="batchdelete">删除</el-button>
-          <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @click="columndialogVisible = true">显示列</el-button>
+          <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @click="batchprint">打印
+          </el-button>
+          <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @click="batchdelete">删除
+          </el-button>
+          <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;"
+            @click="columndialogVisible = true">显示列</el-button>
         </span>
         <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
           <el-form-item label="样本条码">
@@ -32,7 +36,8 @@
               <el-dropdown-menu slot="dropdown">
                 <el-dropdown-item command="search">高级查询</el-dropdown-item>
                 <el-dropdown-item command="clear">查询重置</el-dropdown-item>
-                <el-dropdown-item style="color:black;" v-for="item in searchTemplates" :key="item.Name" :command="item.Name">{{item.Name}}</el-dropdown-item>
+                <el-dropdown-item style="color:black;" v-for="item in searchTemplates" :key="item.Name"
+                  :command="item.Name">{{item.Name}}</el-dropdown-item>
                 <el-dropdown-item divided style="color:black;" command="编辑">自定义</el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
@@ -40,30 +45,41 @@
         </el-form>
       </div>
 
-      <el-table ref="multipleTable" :data="list" bordertooltip-effect="dark" border height="calc(100vh - 230px)" style="width: 100%;"
-        @selection-change="handleSelectionChange" @header-dragend="header_dragend">
+      <el-table ref="multipleTable" :data="list" bordertooltip-effect="dark" border height="calc(100vh - 230px)"
+        style="width: 100%;" @selection-change="handleSelectionChange" @header-dragend="header_dragend">
         <el-table-column type="selection" width="55"></el-table-column>
         <el-table-column label="操作" width="80" align="center" fixed>
           <template slot-scope="scope">
-            <el-button size="small" type="text" title="删除" icon="el-icon-delete" @click="deletedata(scope.row)"></el-button>
-            <router-link :to="'/samples/archived/'+scope.row.Id + '/detailed?pname=samples-archived&size='+size+'&currentPage='+currentPage">
+            <el-button size="small" type="text" title="删除" icon="el-icon-delete" @click="deletedata(scope.row)">
+            </el-button>
+            <router-link
+              :to="'/samples/archived/'+scope.row.Id + '/detailed?pname=samples-archived&size='+size+'&currentPage='+currentPage">
               <el-button type="text" size="small" title="详情" style="margin-left:3px;">
                 <i class="icon icon-eye"></i>
               </el-button>
             </router-link>
           </template>
         </el-table-column>
-        <el-table-column :label="item.name" :key="item.name" v-if="item.show" v-for="item in showcolumn" :width="item.columnwidth"
-          align="center" show-overflow-tooltip>
+        <el-table-column :label="item.name" :key="item.name" v-if="item.show" v-for="item in showcolumn"
+          :width="item.columnwidth" align="center" show-overflow-tooltip>
           <template slot-scope="scope">
-            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4'">
-              <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourceinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
+            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4' &&  acc != 'ssqOy'">
+              <router-link
+                :to="'/biobank/source/'+ scope.row.SourceId + '/sourceinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
                 :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
                 {{scope.row.SourceName}}
               </router-link>
             </template>
             <template v-else-if="item.filed === 'SourceName' && acc == 'sBBo4'">
-              <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourcedetail?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
+              <router-link
+                :to="'/biobank/source/'+ scope.row.SourceId + '/sourcedetail?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
+                :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
+                {{scope.row.SourceName}}
+              </router-link>
+            </template>
+            <template v-else-if="item.filed === 'SourceName' && acc == 'ssqOy'">
+              <router-link
+                :to="'/biobank/source/'+ scope.row.SourceId + '/sourcemicinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
                 :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
                 {{scope.row.SourceName}}
               </router-link>
@@ -83,7 +99,8 @@
         </el-table-column>
       </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">
+        :page-sizes="[10, 15, 20]" :page-size="size" layout="total, sizes, prev, pager, next, jumper"
+        :total="currentItemCount">
       </el-pagination>
     </el-card>
 
@@ -121,12 +138,14 @@
               <el-input v-model="Name" placeholder="请输入名称" size="mini" style="width:100%"></el-input>
             </el-form-item>
             <el-form-item label="组织器官">
-              <el-cascader :options="zuzhitreelist" :props="sampinputtreeprops" change-on-select :show-all-levels="false"
-                v-model="selectedzuzhi" @change="zuzhitreehandleChange" placeholder="请选择组织" size="mini" style="width:100%"></el-cascader>
+              <el-cascader :options="zuzhitreelist" :props="sampinputtreeprops" change-on-select
+                :show-all-levels="false" v-model="selectedzuzhi" @change="zuzhitreehandleChange" placeholder="请选择组织"
+                size="mini" style="width:100%"></el-cascader>
             </el-form-item>
             <el-form-item label="特有扩展">
               <el-select v-model="STNoteField" multiple placeholder="请选择" size="mini" style="width:100%">
-                <el-option v-for="item in typetykzlist" :label="item.Name" :value="item.FieldName" :key="item.FieldName"></el-option>
+                <el-option v-for="item in typetykzlist" :label="item.Name" :value="item.FieldName"
+                  :key="item.FieldName"></el-option>
               </el-select>
             </el-form-item>
             <!-- <el-form-item label="公共检索">
@@ -142,7 +161,8 @@
             </el-form-item>
             <el-form-item label="取材部位">
               <el-select v-model="SamplingSite" clearable placeholder="请选择" size="mini" style="width:100%">
-                <el-option v-for="item in samplesitenames" :label="item.Name" :value="item.Code" :key="item.Code"></el-option>
+                <el-option v-for="item in samplesitenames" :label="item.Name" :value="item.Code" :key="item.Code">
+                </el-option>
               </el-select>
             </el-form-item>
             <el-form-item label="特有检索">
@@ -161,7 +181,8 @@
     </el-dialog>
 
     <el-dialog title="选中显示列(拖拽可以实现排序)" :visible.sync="columndialogVisible" top="5vh">
-      <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" style="margin-left:15px;">全选</el-checkbox>
+      <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange"
+        style="margin-left:15px;">全选</el-checkbox>
       <div style="margin: 10px 0;"></div>
       <draggable v-model="showcolumn">
         <transition-group class="sampshowfiledsort_ul sampshowfiledsort_ul_tags" tag="ul">
@@ -193,9 +214,9 @@
       <el-row :gutter="0">
         <el-col :span="5">
           <div class="searchDialogLeftStyle">
-            <el-tag v-for="tag in searchTemplates" :id="tag.Name" :key="tag.Name" closable class="reporttag reportselect"
-              :onclick="'clickmodeltypetag(' + tag.Name + ')'" style="display:block;text-align:center;color:white;"
-              @close="removeSearchTab(tag.Name)">
+            <el-tag v-for="tag in searchTemplates" :id="tag.Name" :key="tag.Name" closable
+              class="reporttag reportselect" :onclick="'clickmodeltypetag(' + tag.Name + ')'"
+              style="display:block;text-align:center;color:white;" @close="removeSearchTab(tag.Name)">
               <i class="el-icon-caret-right" v-if="tag.Name == currentSearchTemplateName"></i>
               {{tag.Name}}
             </el-tag>
@@ -212,54 +233,76 @@
               </el-row>
               <el-row :gutter="1">
                 <el-col :span="5">
-                  <el-select v-model="searchField" @change="changeSearchField()" placeholder="请选择" style="margin-left:5px;margin-right:5px;">
-                    <el-option v-for="item in searchcolumn" :key="item.field" :label="item.name" :value="item.filed"></el-option>
+                  <el-select v-model="searchField" @change="changeSearchField()" placeholder="请选择"
+                    style="margin-left:5px;margin-right:5px;">
+                    <el-option v-for="item in searchcolumn" :key="item.field" :label="item.name" :value="item.filed">
+                    </el-option>
                   </el-select>
                 </el-col>
                 <el-col :span="8">
-                  <el-input v-if="searchField == 'BarCode'" v-model="searchValue.BarCode" placeholder="请输入样本条码" style="margin-left:5px;display:inline-block;"></el-input>
-                  <el-input v-else-if="searchField == 'SampleCode'" v-model="searchValue.SampleCode" placeholder="请输入样本编码"></el-input>
-                  <el-input v-else-if="searchField == 'SourceName'" v-model="searchValue.SourceName" placeholder="请输入身份证号或姓名"></el-input>
-                  <el-input v-else-if="searchField == 'InnerCode'" v-model="searchValue.InnerCode" placeholder="请输入样本内码"></el-input>
+                  <el-input v-if="searchField == 'BarCode'" v-model="searchValue.BarCode" placeholder="请输入样本条码"
+                    style="margin-left:5px;display:inline-block;"></el-input>
+                  <el-input v-else-if="searchField == 'SampleCode'" v-model="searchValue.SampleCode"
+                    placeholder="请输入样本编码"></el-input>
+                  <el-input v-else-if="searchField == 'SourceName'" v-model="searchValue.SourceName"
+                    placeholder="请输入身份证号或姓名"></el-input>
+                  <el-input v-else-if="searchField == 'InnerCode'" v-model="searchValue.InnerCode"
+                    placeholder="请输入样本内码"></el-input>
                   <el-input v-else-if="searchField == 'Name'" v-model="searchValue.Name" placeholder="请输入名称"></el-input>
-                  <el-input v-else-if="searchField == 'CreateBy'" v-model="searchValue.CreateBy" placeholder="请输入录入人"></el-input>
-                  <el-input v-else-if="searchField == 'GroupName'" v-model="searchValue.GroupName" placeholder="请输入所属分组"></el-input>
-                  <el-date-picker v-else-if="searchField == 'ReceiveDate'" v-model="searchValue.CreateOn" type="daterange"
-                    range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" style="width:100%"></el-date-picker>
-                  <el-cascader v-else-if="searchField == 'SamplingOrganName'" :options="zuzhitreelist" :props="sampinputtreeprops2"
-                    change-on-select :show-all-levels="false" v-model="searchValue.selectedzuzhi" @change="zuzhitreehandleChange2"
-                    placeholder="请选择组织" style="width:100%">
+                  <el-input v-else-if="searchField == 'CreateBy'" v-model="searchValue.CreateBy" placeholder="请输入录入人">
+                  </el-input>
+                  <el-input v-else-if="searchField == 'GroupName'" v-model="searchValue.GroupName"
+                    placeholder="请输入所属分组"></el-input>
+                  <el-date-picker v-else-if="searchField == 'ReceiveDate'" v-model="searchValue.CreateOn"
+                    type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+                    style="width:100%"></el-date-picker>
+                  <el-cascader v-else-if="searchField == 'SamplingOrganName'" :options="zuzhitreelist"
+                    :props="sampinputtreeprops2" change-on-select :show-all-levels="false"
+                    v-model="searchValue.selectedzuzhi" @change="zuzhitreehandleChange2" placeholder="请选择组织"
+                    style="width:100%">
                   </el-cascader>
                   <span v-else-if="searchField == 'SamplingSiteName'">
-                    <el-cascader :options="zuzhitreelist" :props="sampinputtreeprops" change-on-select :show-all-levels="false"
-                      v-model="selectedzuzhi2" @change="zuzhitreehandleChange2" placeholder="请选择组织" style="width:50%">
+                    <el-cascader :options="zuzhitreelist" :props="sampinputtreeprops" change-on-select
+                      :show-all-levels="false" v-model="selectedzuzhi2" @change="zuzhitreehandleChange2"
+                      placeholder="请选择组织" style="width:50%">
                     </el-cascader>
-                    <el-select v-model="searchValue.SamplingSite" clearable placeholder="请选择" style="width:45%;margin-left:5px;">
-                      <el-option v-for="item in samplesitenames2" :key="item.Code" :label="item.Name" :value="item.Name"></el-option>
+                    <el-select v-model="searchValue.SamplingSite" clearable placeholder="请选择"
+                      style="width:45%;margin-left:5px;">
+                      <el-option v-for="item in samplesitenames2" :key="item.Code" :label="item.Name"
+                        :value="item.Name"></el-option>
                     </el-select>
                   </span>
                   <el-select v-else-if="searchField == 'SampleTypeName'" v-model="searchValue.SampleType" clearable
                     placeholder="请选择" @change="selsampletypeChange" style="width:100%">
-                    <el-option v-for="item in sampletypes" :key="item.Id" :label="item.Name" :value="item.Name"></el-option>
+                    <el-option v-for="item in sampletypes" :key="item.Id" :label="item.Name" :value="item.Name">
+                    </el-option>
                   </el-select>
-                  <el-date-picker v-else-if="searchField == 'ValidityDate'" v-model="searchValue.Validity" type="daterange"
-                    range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" style="width:100%">
+                  <el-date-picker v-else-if="searchField == 'ValidityDate'" v-model="searchValue.Validity"
+                    type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+                    style="width:100%">
                   </el-date-picker>
-                  <el-input v-else-if="searchField == 'Capacity'" v-model="searchValue.Capacity" placeholder="请输入容量"></el-input>
-                  <el-input v-else-if="searchField == 'Location'" v-model="searchValue.Location" placeholder=" 请输入存储位置"></el-input>
-                  <el-input v-else v-model="searchValue.Extension" placeholder="" style="margin-left:5px;display:inline-block;"></el-input>
+                  <el-input v-else-if="searchField == 'Capacity'" v-model="searchValue.Capacity" placeholder="请输入容量">
+                  </el-input>
+                  <el-input v-else-if="searchField == 'Location'" v-model="searchValue.Location" placeholder=" 请输入存储位置">
+                  </el-input>
+                  <el-input v-else v-model="searchValue.Extension" placeholder=""
+                    style="margin-left:5px;display:inline-block;"></el-input>
                 </el-col>
                 <el-col :span="3">
                   <el-select v-model="orAnd" placeholder="请选择" style="margin-left:15px;">
-                    <el-option v-for="item in orAndData" :key="item.value" :label="item.name" :value="item.value"></el-option>
+                    <el-option v-for="item in orAndData" :key="item.value" :label="item.name" :value="item.value">
+                    </el-option>
                   </el-select>
                 </el-col>
                 <el-col :span="3">
-                  <el-button type="primary" size="middle" style="margin-left:5px;display:inline-block;" @click="addSearchField">添加</el-button>
+                  <el-button type="primary" size="middle" style="margin-left:5px;display:inline-block;"
+                    @click="addSearchField">添加</el-button>
                 </el-col>
                 <el-col :span="5">
-                  <el-button type="primary" size="middle" style="display:inline-block;" @click="saveAndSearchWithTemplate">查询</el-button>
-                  <el-button type="primary" size="middle" style="display:inline-block;" @click="saveSearchTemplate">保存</el-button>
+                  <el-button type="primary" size="middle" style="display:inline-block;"
+                    @click="saveAndSearchWithTemplate">查询</el-button>
+                  <el-button type="primary" size="middle" style="display:inline-block;" @click="saveSearchTemplate">保存
+                  </el-button>
                 </el-col>
               </el-row>
               <el-row style="margin-top:10px;">
@@ -651,7 +694,8 @@
               for (let i = 0; i < _this.publicsampletypes.length; i++) {
                 let matchindex = -1
                 for (let j = 0; j < _this.showcolumn.length; j++) {
-                  if (_this.showcolumn[j].filed === _this.publicsampletypes[i].FieldName && _this.showcolumn[j].kuoz) {
+                  if (_this.showcolumn[j].filed === _this.publicsampletypes[i].FieldName && _this.showcolumn[j]
+                    .kuoz) {
                     matchindex = j
                     break
                   }
@@ -689,7 +733,8 @@
                 }
               }
             }
-            if (store.get('samplearchivedseach').searchWithTemplate && store.get('samplearchivedseach').searchWithTemplate !==
+            if (store.get('samplearchivedseach').searchWithTemplate && store.get('samplearchivedseach')
+              .searchWithTemplate !==
               '') { //自定义查询
               this.handleSearchCommand(store.get('samplearchivedseach').searchWithTemplate)
             } else {
@@ -758,8 +803,9 @@
           let errorMsg = ''
           let count = 0
           for (var i = 0; i < _this.multipleSelection.length; i++) {
-            _this.$axios.delete('samplesfiles/' + _this.multipleSelection[i].Id + '?sampletype=' + _this.multipleSelection[
-                i].SampleType, null)
+            _this.$axios.delete('samplesfiles/' + _this.multipleSelection[i].Id + '?sampletype=' + _this
+                .multipleSelection[
+                  i].SampleType, null)
               .then(res => {
                 // response
                 if (res.data.code === 0) {

+ 11 - 4
src/dashoo.cn/frontend_web/src/pages/samples/prerecorded/_opera/detailed.vue

@@ -49,10 +49,10 @@
             <el-col :span="6">
               <label>初始容量 :{{ sampleinfodetail.InitCapacity }} {{ sampleinfodetail.Unit }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <label>组织器官 : {{ sampleinfodetail.SamplingOrganName }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <label>取材部位 :{{ sampleinfodetail.SamplingSiteName }}</label>
             </el-col>
             <el-col :span="6">
@@ -70,7 +70,7 @@
             <el-col :span="6" v-if="acc !='srNA2'">
               <label>样本内码 :{{ sampleinfodetail.InnerCode }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc != 'sBBo4'">
+            <el-col :span="6" v-if="acc != 'sBBo4' && acc != 'ssqOy'">
               <label>样本来源 :
                 <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourceinfo'">
                   {{ sampleinfodetail.SourceName }}
@@ -84,7 +84,14 @@
                 </router-link>
               </label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc == 'ssqOy'">
+              <label>样本来源 :
+                <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourcemicinfo'">
+                  {{ sampleinfodetail.SourceName }}
+                </router-link>
+              </label>
+            </el-col>
+            <el-col :span="6" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <label>身份证号 :{{ sampleinfodetail.SourceIdCard }}</label>
             </el-col>
             <el-col :span="6">

+ 24 - 4
src/dashoo.cn/frontend_web/src/pages/samples/prerecorded/_opera/operation.vue

@@ -47,13 +47,13 @@
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="组织器官" v-if="acc !='sBBo4'">
+            <el-form-item label="组织器官" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <el-cascader :options="organlist2" style="width:100%" :props="sampleorganprops" change-on-select
                 :show-all-levels="false" v-model="selectedorgan" placeholder="请选择" @change="chooseorgange" :disabled="disabledsamplingorgan"></el-cascader>
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="取材部位" v-if="acc !='sBBo4'">
+            <el-form-item label="取材部位" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <el-select v-model="sampleform.SamplingSite" placeholder="取材部位" clearable style="width:100%" :disabled="disabledsamplingsite">
                 <el-option v-for="item in samplequcailist" :label="item.label" :value="item.value" :key="item.value"></el-option>
               </el-select>
@@ -98,7 +98,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="样本来源" v-if="acc !='sBBo4'">
+            <el-form-item label="样本来源" v-if="acc !='sBBo4' && acc != 'ssqOy'">
               <el-input v-model="sampleform.SourceName" placeholder="样本来源" style="width:68%" disabled></el-input>
               <el-button type="primary" :disabled="disabledsourcebutton" style="width:30%" @click="dialogsamplesourceVisible = true"
                 class="btnbox">选择</el-button>
@@ -111,6 +111,13 @@
                 class="btnbox">选择</el-button>
             </el-form-item>
           </el-col>
+          <el-col :span="8">
+            <el-form-item label="样本来源" v-if="acc =='ssqOy'">
+              <el-input v-model="sampleform.SourceName" placeholder="样本来源" style="width:68%" disabled></el-input>
+              <el-button type="primary" :disabled="disabledanimalbutton" style="width:30%" @click="microSourceVisible = true"
+                class="btnbox">选择</el-button>
+            </el-form-item>
+          </el-col>
           <el-col :span="16">
             <el-form-item label="备注">
               <el-input v-model="sampleform.Remark" type="textarea" :rows="1" placeholder="样本备注"></el-input>
@@ -236,6 +243,7 @@
     </el-dialog>
     <choose-source-dialog @close="customsampsourceDialogCallback" :visible.sync="dialogsamplesourceVisible"></choose-source-dialog>
     <choose-animal-dialog @close="animalDialogCallback" :visible.sync="animalSourceVisible"></choose-animal-dialog>
+    <choose-micro-dialog @close="microDialogCallback" :visible.sync="microSourceVisible"></choose-micro-dialog>
   </div>
 </template>
 <script>
@@ -246,11 +254,13 @@
   import uploadajax from '../../../../assets/js/uploadajax.js'
   import ChooseSourceDialog from '../../../../components/samples/choosesource'
   import ChooseAnimalDialog from '../../../../components/samples/chooseanimal'
+  import ChooseMicroDialog from '../../../../components/samples/choosemicro'
   export default {
     name: 'samplespreinputadd',
     components: {
       ChooseSourceDialog,
-      ChooseAnimalDialog
+      ChooseAnimalDialog,
+      ChooseMicroDialog
     },
     computed: mapGetters({
       authUser: 'authUser'
@@ -398,6 +408,7 @@
 
         dialogsamplesourceVisible: false,
         animalSourceVisible: false,
+        microSourceVisible: false,
         //  选项的基础资料
         sampletypelist: [],
         sampeunitlist: [],
@@ -776,6 +787,10 @@
               }
               _this.Tabs = _this.groupnameList[0]
               _this.getSpecialkz(v)
+              if(_this.acc =='sBBo4' || _this.acc == 'ssqOy'){
+                let sampletypestr = _this.sampleform.SampleTypestr
+                _this.getautobarcode(sampletypestr)
+              }             
             })
         }
       },
@@ -826,6 +841,7 @@
             // response
             _this.sampleform.code_lastnum = res.data.num
             _this.sampleform.SampleCode = res.data.barcode
+            console.log("==================",_this.sampleform.SampleCode)
           })
       },
       getsametypetreelist() {
@@ -970,6 +986,10 @@
         this.sampleform.SourceId = val.Id
         this.sampleform.SourceName = val.Name
       },
+      microDialogCallback(val){
+        this.sampleform.SourceId = val.Id
+        this.sampleform.SourceName = val.Name
+      },
       getType() {
         let _this = this
         _this.$axios.get('/sampletype/list', {})

+ 8 - 2
src/dashoo.cn/frontend_web/src/pages/samples/prerecorded/index.vue

@@ -11,7 +11,7 @@
         </el-breadcrumb>
         <span style="float: right;">
           <router-link :to="'/samples/prerecorded/new/prerecordedadd'">
-            <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" v-if="acc !='sBBo4'">分装预录入</el-button>
+            <el-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" v-if="acc !='sBBo4' && acc !='ssqOy'">分装预录入</el-button>
           </router-link>
           <el-dropdown split-button type="primary" size="mini" style="margin-left:10px; margin-top: -4px;" @command="handleExportsamplesCommand">
             导出
@@ -71,7 +71,7 @@
         <el-table-column :label="item.name" :key="item.name" v-if="item.show" v-for="item in showcolumn" :width="item.columnwidth"
           align="center" show-overflow-tooltip>
           <template slot-scope="scope">
-            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4'">
+            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4' && acc !='ssqOy'">
               <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourceinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
                 :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
                 {{scope.row.SourceName}}
@@ -83,6 +83,12 @@
                 {{scope.row.SourceName}}
               </router-link>
             </template>
+            <template v-else-if="item.filed === 'SourceName' && acc === 'ssqOy'">
+              <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourcemicinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
+                :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
+                {{scope.row.SourceName}}
+              </router-link>
+            </template>
             <template v-else-if="item.filed === 'ValidityDate' || item.filed === 'ReceiveDate'">
               {{jstimehandle(scope.row[item.filed])}}
             </template>

+ 11 - 4
src/dashoo.cn/frontend_web/src/pages/samples/stored/_opera/detailed.vue

@@ -62,10 +62,10 @@
             <el-col :span="6">
               <label>初始容量 :{{ sampleinfodetail.InitCapacity }} {{ sampleinfodetail.Unit }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc !='ssqOy'">
               <label>组织器官 : {{ sampleinfodetail.SamplingOrganName }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc !='ssqOy'">
               <label>取材部位 :{{ sampleinfodetail.SamplingSiteName }}</label>
             </el-col>
           </el-row>
@@ -87,7 +87,7 @@
             <el-col :span="6" v-if="acc !='srNA2'">
               <label>样本内码 :{{ sampleinfodetail.InnerCode }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc != 'sBBo4'">
+            <el-col :span="6" v-if="acc != 'sBBo4' && acc !='ssqOy'">
               <label>样本来源 :
                 <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourceinfo'">
                   {{ sampleinfodetail.SourceName }}
@@ -101,7 +101,14 @@
                 </router-link>
               </label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc == 'ssqOy'">
+              <label>样本来源 :
+                <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourcemicinfo'">
+                  {{ sampleinfodetail.SourceName }}
+                </router-link>
+              </label>
+            </el-col>
+            <el-col :span="6" v-if="acc !='sBBo4' && acc !='ssqOy'">
               <label>身份证号 :{{ sampleinfodetail.SourceIdCard }}</label>
             </el-col>
             <el-col :span="6">

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

@@ -83,7 +83,7 @@
         <el-table-column :label="item.name" :key="item.name" v-if="item.show" v-for="item in showcolumn" :width="item.columnwidth"
           align="center" show-overflow-tooltip>
           <template slot-scope="scope">
-            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4'">
+            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4' && acc !='ssqOy'">
               <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourceinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
                 :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
                 {{scope.row.SourceName}}
@@ -95,6 +95,12 @@
                 {{scope.row.SourceName}}
               </router-link>
             </template>
+            <template v-else-if="item.filed === 'SourceName' && acc == 'ssqOy'">
+              <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourcemicinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
+                :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
+                {{scope.row.SourceName}}
+              </router-link>
+            </template>
             <template v-else-if="item.filed === 'ValidityDate' || item.filed === 'ReceiveDate'">
               {{jstimehandle(scope.row[item.filed])}}
             </template>

+ 11 - 4
src/dashoo.cn/frontend_web/src/pages/samples/waitingstore/_opera/detailed.vue

@@ -51,10 +51,10 @@
             <el-col :span="6">
               <label>初始容量 :{{ sampleinfodetail.InitCapacity }} {{ sampleinfodetail.Unit }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc !='ssqOy'">
               <label>组织器官 : {{ sampleinfodetail.SamplingOrganName }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc !='sBBo4' && acc !='ssqOy'">
               <label>取材部位 :{{ sampleinfodetail.SamplingSiteName }}</label>
             </el-col>
           </el-row>
@@ -76,7 +76,7 @@
             <el-col :span="6" v-if="acc !='srNA2'">
               <label>样本内码 :{{ sampleinfodetail.InnerCode }}</label>
             </el-col>
-            <el-col :span="6" v-if="acc != 'sBBo4'">
+            <el-col :span="6" v-if="acc != 'sBBo4' && acc !='ssqOy'">
               <label>样本来源 :
                 <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourceinfo'">
                   {{ sampleinfodetail.SourceName }}
@@ -90,7 +90,14 @@
                 </router-link>
               </label>
             </el-col>
-            <el-col :span="6" v-if="acc !='sBBo4'">
+            <el-col :span="6" v-if="acc == 'ssqOy'">
+              <label>样本来源 :
+                <router-link :to="'/biobank/source/'+sampleinfodetail.SourceId+'/sourcemicinfo'">
+                  {{ sampleinfodetail.SourceName }}
+                </router-link>
+              </label>
+            </el-col>
+            <el-col :span="6" v-if="acc !='sBBo4' && acc !='ssqOy'">
               <label>身份证号 :{{ sampleinfodetail.SourceIdCard }}</label>
             </el-col>
             <el-col :span="6">

+ 7 - 1
src/dashoo.cn/frontend_web/src/pages/samples/waitingstore/index.vue

@@ -67,7 +67,7 @@
         <el-table-column :label="item.name" :key="item.name" v-if="item.show" v-for="item in showcolumn" :width="item.columnwidth"
           align="center" show-overflow-tooltip>
           <template slot-scope="scope">
-            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4'">
+            <template v-if="item.filed === 'SourceName' && acc != 'sBBo4' && acc !='ssqOy'">
               <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourceinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
                 :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
                 {{scope.row.SourceName}}
@@ -79,6 +79,12 @@
                 {{scope.row.SourceName}}
               </router-link>
             </template>
+            <template v-else-if="item.filed === 'SourceName' && acc == 'ssqOy'">
+              <router-link :to="'/biobank/source/'+ scope.row.SourceId + '/sourcemicinfo?pname=samples-prerecorded&size='+size+'&currentPage='+currentPage"
+                :style="{color: scope.row.FamilyState === 0 ? 'blue' : 'red'}">
+                {{scope.row.SourceName}}
+              </router-link>
+            </template>
             <template v-else-if="item.filed === 'ValidityDate' || item.filed === 'ReceiveDate'">
               {{jstimehandle(scope.row[item.filed])}}
             </template>