ZHANGTENG\张腾 1 week ago
parent
commit
67d79800a2
22 changed files with 550 additions and 252 deletions
  1. +7
    -2
      src/components/Template/HandleFormItem.vue
  2. +150
    -84
      src/components/Template/StepComponents/ZLSubPackage.vue
  3. +5
    -1
      src/components/Template/StepComponents/ry/bdzl.vue
  4. +7
    -5
      src/components/Template/StepComponents/ry/tpjydd.vue
  5. +13
    -6
      src/components/Template/StepComponents/ry/tpjysd.vue
  6. +12
    -7
      src/components/Template/StepFormPackage.vue
  7. +19
    -2
      src/components/Template/mixins/formPackageMixins.js
  8. +33
    -1
      src/components/Template/mixins/stepMixins.js
  9. +1
    -0
      src/lang/en/system/role.js
  10. +1
    -0
      src/lang/zh/system/role.js
  11. +83
    -41
      src/utils/tpph.js
  12. +130
    -50
      src/views/business/comps/common/JcgjList.vue
  13. +10
    -11
      src/views/business/comps/template/comps/sp/comps/LadderConfig.vue
  14. +1
    -1
      src/views/business/comps/template/dialog/SelectInstrumentDialog.vue
  15. +1
    -1
      src/views/business/comps/template/dialog/SelectMixReagentDialog.vue
  16. +9
    -3
      src/views/business/comps/template/dialog/SubPackageDialog.vue
  17. +1
    -1
      src/views/business/comps/template/mixins/templateMixin.js
  18. +27
    -24
      src/views/business/study/comp/tbbd/Fh.vue
  19. +2
    -2
      src/views/login.vue
  20. +4
    -4
      src/views/system/dept/index.vue
  21. +26
    -4
      src/views/system/role/index.vue
  22. +8
    -2
      src/views/system/user/index.vue

+ 7
- 2
src/components/Template/HandleFormItem.vue View File

@ -343,6 +343,7 @@ export default {
}] }]
}, },
allowedTypes: ["zip","rar","doc","docx","pdf","jpg"], allowedTypes: ["zip","rar","doc","docx","pdf","jpg"],
signData: null,//
} }
}, },
watch: { watch: {
@ -699,6 +700,7 @@ export default {
} }
}, },
onEditSignSave(data) { onEditSignSave(data) {
this.signData = data;
// //
if (this.pendingUploadFile) { if (this.pendingUploadFile) {
// //
@ -1286,8 +1288,8 @@ export default {
const oldAttList = JSON.parse(recordOldVlaue || "[]"); const oldAttList = JSON.parse(recordOldVlaue || "[]");
recordValue = attList.map(item => item.name).join(";"); recordValue = attList.map(item => item.name).join(";");
recordOldVlaue = oldAttList.map(item => item.name).join(";"); recordOldVlaue = oldAttList.map(item => item.name).join(";");
oldUrl = oldAttList.map(item => item.url).join(";");
url = attList.map(item => item.url).join(";");
oldUrl = oldAttList.map(item => item.url).join("|");
url = attList.map(item => item.url).join("|");
} }
const record = { const record = {
@ -1304,6 +1306,9 @@ export default {
if (data) { if (data) {
record.reason = data.remark record.reason = data.remark
} }
if(this.type === "attachment" && this.signData){
record.reason = this.signData.remark;
}
const params = { const params = {
type: "fieldChanged", type: "fieldChanged",

+ 150
- 84
src/components/Template/StepComponents/ZLSubPackage.vue View File

@ -5,30 +5,41 @@
<div class="zl-header-container"> <div class="zl-header-container">
<div class="header-item" v-for="item in subConfig" :key="item.key"> <div class="header-item" v-for="item in subConfig" :key="item.key">
<div class="header-title">{{ item.label }}</div> <div class="header-title">{{ item.label }}</div>
<HandleFormItem fieldItemLabel = "质量分装" :fieldKey = 'prefixKey+stepIndex + item.fieldKey'
:item="item" :error="formErrors[item.key]"
:type="item.type"
@blur = "(e)=>onCommonBlur(e,item.key)"
<HandleFormItem fieldItemLabel="质量分装" :fieldKey='prefixKey + stepIndex + item.fieldKey' :item="item"
:error="formErrors[item.key]" :type="item.type" @blur="(e) => onCommonBlur(e, item.key)"
v-model="formData[item.key]" /> v-model="formData[item.key]" />
<span class="ml-5">{{ item.unit }}</span> <span class="ml-5">{{ item.unit }}</span>
<el-button class="ml-5" type="primary" v-if="item.key == 'fzsl' && templateFillType == 'preFill'"
:disabled="!formData[item.key]" plain @click="onConfirm(item.key)">确定</el-button>
</div> </div>
<div class="header-item"> <div class="header-item">
<div class="header-title">分装单位</div> <div class="header-title">分装单位</div>
<div class="unit-select"> <div class="unit-select">
<HandleFormItem :fieldKey = "prefixKey+stepIndex + 'dw'" :item="unitItem" type="select" :error="formErrors.dw"
@blur="(e) => onCommonBlur(e, 'dw')" v-model="formData.dw" />
<HandleFormItem :fieldKey="prefixKey + stepIndex + 'dw'" :item="unitItem" type="select"
:error="formErrors.dw" @blur="(e) => onCommonBlur(e, 'dw')" v-model="formData.dw" />
</div> </div>
</div> </div>
<div class="header-item"> <div class="header-item">
<div class="header-title">预设每份容量</div> <div class="header-title">预设每份容量</div>
<div class="unit-select">
<HandleFormItem :fieldKey="prefixKey+stepIndex + formData.mybh + '_mfbzl'" type="inputNumber"
<div class="unit-select">
<HandleFormItem :fieldKey="prefixKey + stepIndex + '_mfbzl'" type="inputNumber"
:error="formErrors.mfbzl" :isFieldsRecord="false" :item="preInputNumberItem" :error="formErrors.mfbzl" :isFieldsRecord="false" :item="preInputNumberItem"
v-model="formData.mfbzl" /> v-model="formData.mfbzl" />
</div> </div>
<el-button v-if = "templateFillType == 'preFill'" class="ml-10" type="primary" plain @click="onAverage">平均分配</el-button>
<el-button v-if = "templateFillType == 'preFill'" type="primary" plain @click="onReset">重置</el-button>
<el-button v-if="templateFillType == 'preFill'" class="ml-10" type="primary" plain
@click="onAverage">平均分配</el-button>
<el-button v-if="templateFillType == 'preFill'" type="primary" plain @click="onReset">重置</el-button>
</div>
<div class="header-item">
<div class="header-title">电子天平</div>
<div class="unit-select">
<HandleFormItem :fieldKey="prefixKey + stepIndex + '_dztp'" type="yq"
@onRegentSubmit="(data) => onRegentSubmit(data, 'dztp')" :error="formErrors.dztp"
:item="yqItem" v-model="formData.dztp" />
</div>
</div>
<div class="header-item">
</div> </div>
<div class="header-item"> <div class="header-item">
<div class="header-title">分装编号</div> <div class="header-title">分装编号</div>
@ -38,20 +49,29 @@
<div class="zl-header-container"> <div class="zl-header-container">
<div v-for="(item, index) in fzList" class="list-item" :key="index"> <div v-for="(item, index) in fzList" class="list-item" :key="index">
<div class="list-label" v-if="item.subCode">{{ formData.mybh }}-set{{ item.subCode }}</div> <div class="list-label" v-if="item.subCode">{{ formData.mybh }}-set{{ item.subCode }}</div>
<HandleFormItem fieldItemLabel = "质量分装" :fieldKey = "prefixKey+stepIndex + 'clfz_set'+index+'_prenum'" :item="preInputNumberItem"
:error="hasError(index, 'prenum')"
:disabled="true"
type="inputNumber" @blur="onBlurFzNum(index,'prenum')" v-model="item.prenum" />
<HandleFormItem fieldItemLabel = "质量分装" :fieldKey = "prefixKey+stepIndex + 'clfz_set'+index+'_actnum'" class="ml-5" :item="inputNumberItem"
:error="hasError(index, 'actnum')"
type="inputNumber" @blur="onBlurFzNum(index,'actnum')" v-model="item.actnum" />
<el-button class="ml-5" v-if="templateFillType == 'actFill'" type="primary" plain @click="onGetValue(item)">获取值</el-button>
<el-button class="ml-5" v-if="templateFillType == 'actFill'" type="primary" plain @click="onPrint(item)">打印</el-button>
<HandleFormItem fieldItemLabel="质量分装"
:fieldKey="prefixKey + stepIndex + 'clfz_set' + index + '_prenum'"
:item="preInputNumberItem" :error="hasError(index, 'prenum')" :disabled="true"
type="inputNumber" @blur="onBlurFzNum(index, 'prenum')" v-model="item.prenum" />
<HandleFormItem fieldItemLabel="质量分装"
:fieldKey="prefixKey + stepIndex + 'clfz_set' + index + '_actnum'" class="ml-5"
:item="inputNumberItem" :error="hasError(index, 'actnum')" type="inputNumber"
:ref = "prefixKey + stepIndex + '_actnum'+index"
@blur="onBlurFzNum(index, 'actnum')" v-model="item.actnum" />
<HandleFormItem
:fieldKey="prefixKey + stepIndex + 'clfz_set' + index + '_hqz'" class="ml-5"
:item="getButtonItem()" @clickButton="(e,v,d) => onGetValue(d, item,index)" type="button" v-model="item.hqz" />
<!-- <el-button class="ml-5" v-if="templateFillType == 'actFill'" type="primary" plain
@click="onGetValue(item)">获取值</el-button> -->
<el-button class="ml-5" v-if="templateFillType == 'actFill'" type="primary" plain
@click="onPrint(item)">打印</el-button>
</div> </div>
</div> </div>
<div class="sure-button-row"> <div class="sure-button-row">
<el-button v-if="templateFillType == 'actFill'" class="ml-5" type="primary" @click="onSure">确定</el-button>
<el-button v-if="templateFillType == 'actFill'" class="ml-5" type="primary"
@click="onSure">确定</el-button>
</div> </div>
</div> </div>
</div> </div>
@ -62,7 +82,8 @@
import HandleFormItem from '@/components/Template/HandleFormItem.vue'; import HandleFormItem from '@/components/Template/HandleFormItem.vue';
import { EventBus } from '@/utils/eventBus'; import { EventBus } from '@/utils/eventBus';
import { getLatestSn } from '@/api/template'; import { getLatestSn } from '@/api/template';
import { isValueEmpty,justUpdateFilledFormData } from '@/utils/index.js';
import { isValueEmpty, justUpdateFilledFormData } from '@/utils/index.js';
import { getBalance } from '@/utils/tpph.js';
export default { export default {
inject: ['templateFillType'], inject: ['templateFillType'],
dicts: [ dicts: [
@ -87,6 +108,10 @@ export default {
}, },
data() { data() {
return { return {
yqItem: {
type: "yq",
fillType: "actFill",
},
inputItem: { inputItem: {
type: "input", type: "input",
fillType: "actFill", fillType: "actFill",
@ -99,7 +124,8 @@ export default {
inputNumberItem: { inputNumberItem: {
type: "inputNumber", type: "inputNumber",
fillType: "actFill", fillType: "actFill",
label:"实际称量"
label: "实际称量",
disabled: true,
}, },
preInputNumberItem: { preInputNumberItem: {
type: "inputNumber", type: "inputNumber",
@ -109,24 +135,27 @@ export default {
mybh: "",// mybh: "",//
fzsl: "",// fzsl: "",//
dw: "",// dw: "",//
dztp: "",//
dztpInfo: {},//
}, },
fzList: [],// fzList: [],//
// //
formErrors: { formErrors: {
fzsl: false, fzsl: false,
dw: false, dw: false,
dztp: false,
}, },
fzListErrors: [], // fzListErrors: [], //
uuid:"",//id
uuid: "",//id
} }
}, },
watch: { watch: {
subData:{
subData: {
handler(newVal) { handler(newVal) {
if(newVal.formData){
if (newVal.formData) {
this.formData = newVal.formData; this.formData = newVal.formData;
} }
if(newVal.fzList){
if (newVal.fzList) {
this.fzList = newVal.fzList; this.fzList = newVal.fzList;
} }
}, },
@ -156,25 +185,25 @@ export default {
options: this.dict.type.business_zldw options: this.dict.type.business_zldw
} }
}, },
subConfig(){
return[
subConfig() {
return [
{ {
fieldKey:"clfz_mybh",
key:"mybh",
label:"包装编号",
type:"input",
fieldKey: "clfz_mybh",
key: "mybh",
label: "包装编号",
type: "input",
disabled: true, disabled: true,
fillType: "actFill", fillType: "actFill",
}, },
{ {
fieldKey:"clfz_fzsl",
key:"fzsl",
label:"分装数量",
type:"inputNumber",
fieldKey: "clfz_fzsl",
key: "fzsl",
label: "分装数量",
type: "inputNumber",
fillType: "preFill", fillType: "preFill",
precision: 0, precision: 0,
maxlength: 3, maxlength: 3,
unit:"份",
unit: "份",
}, },
// {// // {//
// fieldKey:"clfz_dw1", // fieldKey:"clfz_dw1",
@ -184,22 +213,22 @@ export default {
}, },
}, },
methods: { methods: {
onSure(){
onSure() {
this.$emit("onSubPackageSubmit"); this.$emit("onSubPackageSubmit");
}, },
onPrint(item){
console.log(item,"打印");
onPrint(item) {
console.log(item, "打印");
}, },
updateFormData(data){
this.formData = {...this.formData,...data};
if(data.mybh){
updateFormData(data) {
this.formData = { ...this.formData, ...data };
if (data.mybh) {
this.updateCode(data.mybh); this.updateCode(data.mybh);
} }
}, },
// //
async updateCode(mybh){
async updateCode(mybh) {
const { fzList } = this; const { fzList } = this;
if(isValueEmpty(mybh) || isValueEmpty(fzList)){
if (isValueEmpty(mybh) || isValueEmpty(fzList)) {
return; return;
} }
const result = await getLatestSn({ const result = await getLatestSn({
@ -207,7 +236,7 @@ export default {
count: fzList.length, count: fzList.length,
type: 2, type: 2,
}) })
if(result.code === 200){
if (result.code === 200) {
const codes = result.data; const codes = result.data;
// //
for (let i = 0; i < fzList.length; i++) { for (let i = 0; i < fzList.length; i++) {
@ -221,24 +250,24 @@ export default {
getButtonItem() { getButtonItem() {
return { return {
fillType: "actFill", fillType: "actFill",
buttonName:"获取值",
key:"hqz",
buttonName: "获取值",
key: "hqz",
} }
}, },
// //
getPrintButtonItem() { getPrintButtonItem() {
return { return {
fillType: "actFill", fillType: "actFill",
buttonName:"打印",
key:"print",
buttonName: "打印",
key: "print",
} }
}, },
// //
getSureButtonItem() { getSureButtonItem() {
return { return {
fillType: "actFill", fillType: "actFill",
buttonName:"确定",
key:"sure",
buttonName: "确定",
key: "sure",
} }
}, },
close() { close() {
@ -276,12 +305,25 @@ export default {
let isValid = true; let isValid = true;
// //
const baseFieldConfigs = this.subConfig;
const baseFieldConfigs = JSON.parse(JSON.stringify(this.subConfig));
baseFieldConfigs.push(
{
key: "dztp",
label: "电子天平",
type: "yq",
fillType: "actFill",
},
{
key: "dw",
label: "分装单位",
fillType: "preFill",
}
)
// //
baseFieldConfigs.forEach(config => { baseFieldConfigs.forEach(config => {
if (config.fillType === this.templateFillType) { if (config.fillType === this.templateFillType) {
if (isValueEmpty(this.formData[config.key]) && !config.disabled) {
if (isValueEmpty(this.formData[config.key])) {
this.formErrors[config.key] = true; this.formErrors[config.key] = true;
isValid = false; isValid = false;
} }
@ -319,7 +361,7 @@ export default {
} }
} }
} }
return {valid: isValid,error:"质量分装数据没填完"};
return { valid: isValid, error: "质量分装数据没填完" };
}, },
resetErrors() { resetErrors() {
// //
@ -339,29 +381,48 @@ export default {
// //
this.fzList = []; this.fzList = [];
this.fzListErrors = []; this.fzListErrors = [];
for (let i = 0; i < e; i++) {
this.fzList.push({
prenum: "",
actnum: "",
subCode: "",
});
}
for (let i = 0; i < e; i++) {
this.fzList.push({
prenum: "",
actnum: "",
subCode: "",
});
}
justUpdateFilledFormData() justUpdateFilledFormData()
},
onRegentSubmit(data, field) {
const { selectedId } = data;
this.formData[field] = selectedId;
this.formData.dztpInfo = data.row;
},
async onGetValue(signData, item, index) {
const { dztp,dztpInfo,dw } = this.formData;
if (isValueEmpty(dztp)) {
this.$message.error("请选择电子天平");
return;
}
const oldItem = JSON.parse(JSON.stringify(item));
const result = await getBalance({yq:dztpInfo,dw});
if(result.success){
item.actnum = result.value;
this.fzList = [...this.fzList];
this.$refs[this.prefixKey + this.stepIndex + '_actnum'+index][0].handleUpdateRecord(signData,{
oldValue: oldItem.actnum,
inputValue: result.value
})
}else{
this.$message.error(result.message || "获取值失败");
}
}, },
onGetValue(item) {
item.actnum = 123;
console.log(item,"获取值")
this.fzList = [...this.fzList]
},
onCommonBlur(e,field) {
onCommonBlur(e, field) {
if (this.formData[field]) { if (this.formData[field]) {
this.formErrors[field] = false; this.formErrors[field] = false;
} }
if(field === 'fzsl'){
this.onBlurFzsl(e);
}
},
onConfirm(field) {
this.onBlurFzsl(this.formData[field]);
}, },
onBlurFzNum(index, field) { onBlurFzNum(index, field) {
if (this.fzList[index]) { if (this.fzList[index]) {
@ -397,9 +458,9 @@ export default {
!(item.rowIndex === index && item.field === field) !(item.rowIndex === index && item.field === field)
); );
}, },
hasError(index, field) { hasError(index, field) {
const o = this.fzListErrors.find((item)=>{
const o = this.fzListErrors.find((item) => {
// item // item
if (!item || typeof item !== 'object') { if (!item || typeof item !== 'object') {
return false; // nullundefined return false; // nullundefined
@ -422,18 +483,21 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.zl-container{
.zl-container {
// width: 1100px; // width: 1100px;
} }
.dialog-content { .dialog-content {
// padding: 20px; // padding: 20px;
} }
.ml-5{
.ml-5 {
margin-left: 5px; margin-left: 5px;
} }
.unit-select { .unit-select {
// width: 100px; // width: 100px;
flex:1;
flex: 1;
} }
.content-item { .content-item {
@ -443,7 +507,7 @@ export default {
.zl-header-container { .zl-header-container {
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-columns: repeat(2, 1fr);
grid-gap: 20px; grid-gap: 20px;
margin-top: 10px; margin-top: 10px;
} }
@ -485,7 +549,8 @@ export default {
margin-right: 5px; margin-right: 5px;
// width: 200px; // width: 200px;
} }
.sure-button-row{
.sure-button-row {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@ -493,7 +558,8 @@ export default {
position: relative; position: relative;
padding: 20px; padding: 20px;
} }
.absolute{
.absolute {
position: absolute; position: absolute;
}
}
</style> </style>

+ 5
- 1
src/components/Template/StepComponents/ry/bdzl.vue View File

@ -1,6 +1,6 @@
<!-- 标定(质量) --> <!-- 标定(质量) -->
<template> <template>
<StepFormPackage :fieldItemLabel = "fieldItemLabel" ref = "stepFormPackageRef" :prefixKey="stepIndex+'_'+'ry_bdzl'" @resetRecord = "resetRecord" :form-config="formConfig" :formData = "formData" />
<StepFormPackage @clickButton="onHandleClickButton" @beforeSaveRecord="onBeforeSaveRecord" :fieldItemLabel = "fieldItemLabel" ref = "stepFormPackageRef" :prefixKey="stepIndex+'_'+'ry_bdzl'" @resetRecord = "resetRecord" :form-config="formConfig" :formData = "formData" />
</template> </template>
<script> <script>
@ -52,6 +52,10 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
}, },
button1:{ button1:{
type:"button", type:"button",
dataSource:"tp",//
yqCode:"yq",//
fillField:"sjbdtj",//
dwField:"bdtjdw",//
buttonName:"获取值", buttonName:"获取值",
}, },
text5:{ text5:{

+ 7
- 5
src/components/Template/StepComponents/ry/tpjydd.vue View File

@ -3,6 +3,7 @@
<StepFormPackage :fieldItemLabel = "fieldItemLabel" <StepFormPackage :fieldItemLabel = "fieldItemLabel"
ref = "stepFormPackageRef" :prefixKey="stepIndex+'_'+'ry_tpjydd'" @resetRecord = "resetRecord" ref = "stepFormPackageRef" :prefixKey="stepIndex+'_'+'ry_tpjydd'" @resetRecord = "resetRecord"
@clickButton="handleClickButton" @clickButton="handleClickButton"
@beforeSaveRecord="onBeforeSaveRecord"
:form-config="formConfig" :formData = "formData" /> :form-config="formConfig" :formData = "formData" />
</template> </template>
@ -38,6 +39,9 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
}, },
button1:{ button1:{
type:"button", type:"button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"pz",//
buttonName:"获取值", buttonName:"获取值",
}, },
text3:{ text3:{
@ -85,6 +89,9 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
}, },
button2:{ button2:{
type:"button", type:"button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"fmz",//
buttonName:"获取值", buttonName:"获取值",
}, },
text7:{ text7:{
@ -117,11 +124,6 @@ import stepMixins from '@/components/Template/mixins/stepMixins.js';
}] }]
} }
}, },
methods: {
handleClickButton(key){
console.log(key)
}
}
} }
</script> </script>

+ 13
- 6
src/components/Template/StepComponents/ry/tpjysd.vue View File

@ -1,7 +1,7 @@
<!-- 天平校验(双点) --> <!-- 天平校验(双点) -->
<template> <template>
<StepFormPackage :fieldItemLabel="fieldItemLabel" ref="stepFormPackageRef" :prefixKey="stepIndex + '_' + 'ry_tpjysd'" <StepFormPackage :fieldItemLabel="fieldItemLabel" ref="stepFormPackageRef" :prefixKey="stepIndex + '_' + 'ry_tpjysd'"
@resetRecord="resetRecord" @clickButton="handleClickButton" :form-config="formConfig" :formData="formData" />
@resetRecord="resetRecord" @clickButton="onHandleClickButton" @beforeSaveRecord="onBeforeSaveRecord" :form-config="formConfig" :formData="formData" />
</template> </template>
<script> <script>
@ -45,6 +45,9 @@ export default {
}, },
dfmbutton1: { dfmbutton1: {
type: "button", type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"dfmpz",//
buttonName: "获取值", buttonName: "获取值",
}, },
dfmtext3: { dfmtext3: {
@ -92,6 +95,9 @@ export default {
}, },
dfmbutton2: { dfmbutton2: {
type: "button", type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"dfmfmz",//
buttonName: "获取值", buttonName: "获取值",
}, },
dfmtext7: { dfmtext7: {
@ -136,6 +142,9 @@ export default {
}, },
button1: { button1: {
type: "button", type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"pz",//
buttonName: "获取值", buttonName: "获取值",
}, },
text3: { text3: {
@ -183,6 +192,9 @@ export default {
}, },
button2: { button2: {
type: "button", type: "button",
dataSource:"tp",//
yqCode:"ddsys",//
fillField:"fmz",//
buttonName: "获取值", buttonName: "获取值",
}, },
text7: { text7: {
@ -217,11 +229,6 @@ export default {
] ]
} }
}, },
methods: {
handleClickButton(key) {
console.log(key)
}
}
} }
</script> </script>

+ 12
- 7
src/components/Template/StepFormPackage.vue View File

@ -5,35 +5,37 @@
<template v-if="sItem.type === 'input'"> <template v-if="sItem.type === 'input'">
<HandleFormItem class="step-row" :field-item-label="fieldItemLabel" @blur="onBlur(key, $event)" <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" @blur="onBlur(key, $event)"
:item="sItem" v-model="formFields[key]" :field-key="prefixKey+'_' + key" :item="sItem" v-model="formFields[key]" :field-key="prefixKey+'_' + key"
:ref="key"
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
:orange-bg="orangeBgFields[key]" /> :orange-bg="orangeBgFields[key]" />
</template> </template>
<template v-else-if="sItem.type === 'inputNumber'"> <template v-else-if="sItem.type === 'inputNumber'">
<HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key" <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key"
type="inputNumber" @blur="onBlur(key, $event)" :item="sItem"
type="inputNumber" @blur="onBlur(key, $event)" :item="sItem" :ref="key"
@input="onInputNumberChange(key, $event)" v-model="formFields[key]" @copy="onCopy(sItem, key)" @input="onInputNumberChange(key, $event)" v-model="formFields[key]" @copy="onCopy(sItem, key)"
:error="errors[key]" @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" /> :error="errors[key]" @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" />
</template> </template>
<template v-else-if="sItem.type === 'select'"> <template v-else-if="sItem.type === 'select'">
<HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key" <HandleFormItem class="step-row" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key"
type="select" @blur="onBlur(key, $event)" :item="sItem" v-model="formFields[key]" type="select" @blur="onBlur(key, $event)" :item="sItem" v-model="formFields[key]"
@change="onSelectChange(key, $event, sItem.type)"
@change="onSelectChange(key, $event, sItem.type)" :ref="key"
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
:orange-bg="orangeBgFields[key]" /> :orange-bg="orangeBgFields[key]" />
</template> </template>
<template v-else-if="sItem.type === 'checkbox' || sItem.type === 'radio'"> <template v-else-if="sItem.type === 'checkbox' || sItem.type === 'radio'">
<HandleFormItem :class="sItem.type === 'checkbox' ? 'step-row' : ''" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key" <HandleFormItem :class="sItem.type === 'checkbox' ? 'step-row' : ''" :field-item-label="fieldItemLabel" :field-key="prefixKey+'_' + key"
:type="sItem.type" :item="sItem" v-model="formFields[key]" :type="sItem.type" :item="sItem" v-model="formFields[key]"
@change="onSelectChange(key, $event, sItem.type)"
@change="onSelectChange(key, $event, sItem.type)" :ref="key"
@copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false" @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
:orange-bg="orangeBgFields[key]" /> :orange-bg="orangeBgFields[key]" />
</template> </template>
<template v-else-if="sItem.type === 'button'"> <template v-else-if="sItem.type === 'button'">
<HandleFormItem <HandleFormItem
type="button" type="button"
@beforeSaveRecord="(data, callback)=>onBeforeSaveRecord(data, callback,sItem)"
:field-key="prefixKey+'_' + key" :field-key="prefixKey+'_' + key"
:item="getButtonItem(sItem)" :item="getButtonItem(sItem)"
@clickButton="(e)=>handleClickButton(e,item,key)" />
@clickButton="(e,v,data)=>handleClickButton(e,item,key,data)" />
</template> </template>
<!-- 仪器instrumentsj(药剂) gsp(供试品) mix药剂/供试品/给药制剂 --> <!-- 仪器instrumentsj(药剂) gsp(供试品) mix药剂/供试品/给药制剂 -->
<template v-else-if="isRegent(sItem)"> <template v-else-if="isRegent(sItem)">
@ -146,11 +148,14 @@ export default {
// /// // ///
onRegentSubmit(data,key,item){ onRegentSubmit(data,key,item){
this.updateFormData(key,data.selectedId); this.updateFormData(key,data.selectedId);
console.log(data.selectedId,key,"data.selectedId")
console.log(data.selectedId,key,item,"data.selectedId")
if(data.selectType){ if(data.selectType){
this.allFieldsConfig[key].sjSelectType = data.selectType; this.allFieldsConfig[key].sjSelectType = data.selectType;
} }
this.formFields[`selectInfo_${key}`] = data.selectInfo; this.formFields[`selectInfo_${key}`] = data.selectInfo;
if(data.type === "yq"){
this.formFields[`yqInfo_${key}`] = data.row;
}
this.$emit("onRegentSubmit", {selectInfo:data,key,config:item}); this.$emit("onRegentSubmit", {selectInfo:data,key,config:item});
}, },
getRegentItem(item,fieldCode="type"){ getRegentItem(item,fieldCode="type"){
@ -262,7 +267,7 @@ export default {
} }
}, },
// //
handleClickButton(e,item,key){
handleClickButton(e,item,key,data){
const {buttonName = ""} = e; const {buttonName = ""} = e;
const {config} = item; const {config} = item;
if(buttonName === '开始' && config.hasOwnProperty("startDate")){ if(buttonName === '开始' && config.hasOwnProperty("startDate")){
@ -270,7 +275,7 @@ export default {
}else if(buttonName === '结束' && config.hasOwnProperty("endDate")){ }else if(buttonName === '结束' && config.hasOwnProperty("endDate")){
this.updateFormData("endDate",moment().format('YYYY-MM-DD HH:mm')) this.updateFormData("endDate",moment().format('YYYY-MM-DD HH:mm'))
} }
this.$emit("clickButton",e,item,key)
this.$emit("clickButton",e,item,key,data)
}, },
// //
getButtonItem(sItem) { getButtonItem(sItem) {

+ 19
- 2
src/components/Template/mixins/formPackageMixins.js View File

@ -20,7 +20,6 @@ export default {
deep: true, // 深度监听,以便检测嵌套对象变化 deep: true, // 深度监听,以便检测嵌套对象变化
handler(v) { handler(v) {
if (v) { if (v) {
console.log(v, 'fieldItemLabel')
} }
} }
}, },
@ -79,6 +78,9 @@ export default {
onRegentSubmit(data, inputValue, key, item) { onRegentSubmit(data, inputValue, key, item) {
this.updateFormData(key, inputValue) this.updateFormData(key, inputValue)
this.formFields[`selectInfo_${key}`] = data.selectInfo; this.formFields[`selectInfo_${key}`] = data.selectInfo;
if(data.type === "yq"){
this.formFields[`yqInfo_${key}`] = data.row;
}
this.$emit('onRegentSubmit', { this.$emit('onRegentSubmit', {
selectInfo: data, selectInfo: data,
inputValue, inputValue,
@ -394,11 +396,14 @@ export default {
}) })
// 处理selectInfo_开头的字段,步骤表单需要保留selectInfo_开头的字段 // 处理selectInfo_开头的字段,步骤表单需要保留selectInfo_开头的字段
// 优先使用this.formFields中以selectInfo_开头的字段 // 优先使用this.formFields中以selectInfo_开头的字段
let selectInfoKeys = []
let selectInfoKeys = [],yqInfoKeys = [];
if (this.formFields) { if (this.formFields) {
selectInfoKeys = Object.keys(this.formFields).filter((key) => selectInfoKeys = Object.keys(this.formFields).filter((key) =>
key.startsWith('selectInfo_') key.startsWith('selectInfo_')
) )
yqInfoKeys = Object.keys(this.formFields).filter((key) =>
key.startsWith('yqInfo_')
)
} }
// 如果this.formFields中没有,则使用formData中的 // 如果this.formFields中没有,则使用formData中的
if (selectInfoKeys.length === 0 && formData) { if (selectInfoKeys.length === 0 && formData) {
@ -406,9 +411,17 @@ export default {
key.startsWith('selectInfo_') key.startsWith('selectInfo_')
) )
} }
if (yqInfoKeys.length === 0 && formData) {
yqInfoKeys = Object.keys(formData).filter((key) =>
key.startsWith('yqInfo_')
)
}
selectInfoKeys.forEach((key) => { selectInfoKeys.forEach((key) => {
result[key] = this.formFields[key] || formData[key] || '' result[key] = this.formFields[key] || formData[key] || ''
}) })
yqInfoKeys.forEach((key) => {
result[key] = this.formFields[key] || formData[key] || ''
})
// 更新表单字段 // 更新表单字段
this.formFields = { ...result } this.formFields = { ...result }
this.allFieldsConfig = config this.allFieldsConfig = config
@ -615,6 +628,7 @@ export default {
errors: errors errors: errors
} }
}, },
// 校验表单数据
getFormData() { getFormData() {
// 同时执行数据校验和子组件校验 // 同时执行数据校验和子组件校验
const validateResult = this.validateFormData() const validateResult = this.validateFormData()
@ -647,6 +661,9 @@ export default {
getFormDataByKey(key) { getFormDataByKey(key) {
return this.formFields[key] return this.formFields[key]
}, },
onBeforeSaveRecord(data, callback, item){
this.$emit('beforeSaveRecord', {data, callback,item})
},
onBlur(key, val) { onBlur(key, val) {
// compareTo 功能:当fillType==="actFill"时,判断当前值是否与compareTo字段的值一样,如果不一样则将当前input框的背景色标记成橙色 // compareTo 功能:当fillType==="actFill"时,判断当前值是否与compareTo字段的值一样,如果不一样则将当前input框的背景色标记成橙色
this.onValueChangeCompareTo(key, val) this.onValueChangeCompareTo(key, val)

+ 33
- 1
src/components/Template/mixins/stepMixins.js View File

@ -1,6 +1,7 @@
import { getuuid, justUpdateFilledFormData } from '@/utils/index.js' import { getuuid, justUpdateFilledFormData } from '@/utils/index.js'
import { EventBus } from '@/utils/eventBus' import { EventBus } from '@/utils/eventBus'
import { getLatestSn, getLatestSnArr } from '@/api/template' import { getLatestSn, getLatestSnArr } from '@/api/template'
import { getBalance } from '@/utils/tpph.js';
export default { export default {
inject: { inject: {
templateFillType: { default: 'preFill' }, templateFillType: { default: 'preFill' },
@ -150,8 +151,23 @@ export default {
this.justUpdateFilledFormData(); this.justUpdateFilledFormData();
} }
}, },
onBeforeSaveRecord(params) {
const { callback, item } = params
const { buttonName } = item;
if (buttonName === '获取值') {
const { dataSource, yqCode } = item;
if (dataSource === "tp") {//电子天平
const stepFormData = this.getFilledFormData()
const yq = stepFormData[yqCode] || "";
if (!yq) {
callback.prevent("请选择电子天平")
}
}
}
},
// 点击按钮 // 点击按钮
onHandleClickButton(e, item, key) {
async onHandleClickButton(e, item, key,signData) {
const { const {
buttonName = '', buttonName = '',
myCodeFields = [], myCodeFields = [],
@ -201,6 +217,22 @@ export default {
maxVolumeUnit, maxVolumeUnit,
uuid: this.uuid, uuid: this.uuid,
}) })
} else if (buttonName === '获取值') {
const { dataSource, dwField = "", fillField, yqCode } = e;
if (dataSource === "tp") {//电子天平
const stepFormData = this.getFilledFormData()
const yqInfo = stepFormData[`yqInfo_${yqCode}`] || {};
const dw = stepFormData[dwField] || "";
const result = await getBalance({ yq: yqInfo, dw });
if (result.success) {
const value = dw?result.value:`${result.value}${result.unit}`
this.$refs.stepFormPackageRef.updateFormData(fillField, value,{isUpdateRecord:true,signData})
} else {
this.$message.error(result.message || "获取值失败");
}
}
} }
}, },

+ 1
- 0
src/lang/en/system/role.js View File

@ -4,6 +4,7 @@ export default {
status: 'Status', status: 'Status',
remark: 'Role Description', remark: 'Role Description',
permit: 'Permit', permit: 'Permit',
exporPermit: 'Export Permit',
statusEnable: 'Enabled', statusEnable: 'Enabled',
statusDisable: 'Disabled', statusDisable: 'Disabled',

+ 1
- 0
src/lang/zh/system/role.js View File

@ -4,6 +4,7 @@ export default {
status: '状态', status: '状态',
remark: '备注', remark: '备注',
permit: '权限', permit: '权限',
exporPermit: '导出权限',
statusEnable: '启用', statusEnable: '启用',
statusDisable: '禁用', statusDisable: '禁用',

+ 83
- 41
src/utils/tpph.js View File

@ -4,17 +4,32 @@
import axios from 'axios' import axios from 'axios'
import { Message } from 'element-ui' import { Message } from 'element-ui'
export async function getBalance(
cmd,
format,
comPort,
baudRate,
byteSize,
parity
) {
let val = {}
let url = `http://localhost/tpphurl/api/v1/balance/value?cmd=12&format=hex&comPort=COM1&baudRate=9600&byteSize=8&parity=N`
// let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/balance/value?cmd=${cmd}&format=${format}&comPort=${comPort}&baudRate=${baudRate}&byteSize=${byteSize}&parity=${parity}`
export async function getBalance(obj) {
alert('入参:' + JSON.stringify(obj))
debugger
return {
success: true,
originalValue: '1000',
originalUnit: 'g',
value: convertUnit('1000', 'g', obj.dw || 'g'),
unit: obj.dw || 'g',
message: ''
}
let yq = obj.yq
let dw = obj.dw
let val = {
success: false,
originalValue: '',
originalUnit: '',
value: '',
unit: '',
message: '未获取到天平数据'
}
// let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/balance/value?cmd=12&format=hex&comPort=COM1&baudRate=9600&byteSize=8&parity=N`
let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/balance/value?cmd=${yq.cmdHex}&format=hex&comPort=${yq.serialPort}&baudRate=${yq.baudRate}&byteSize=${yq.byteSize}&parity=${yq.parity}`
await axios await axios
.get( .get(
url, url,
@ -26,26 +41,37 @@ export async function getBalance(
} }
) )
.then((res) => { .then((res) => {
// alert('127.0.0.1返回:' + JSON.stringify(res))
if (res.status !== 200) { if (res.status !== 200) {
Message.error('获取天平失败') Message.error('获取天平失败')
return
}
let data = res.data
if (data.code !== 200) {
Message.error(data.msg || '获取天平数据失败')
return
val.message = '获取天平失败'
} else {
let data = res.data
if (data.code !== 200) {
Message.error(data.msg || '获取天平数据失败')
val.message = data.msg || '获取天平数据失败'
} else {
val = parseBalanceData(data.data, dw)
// alert('parseBalanceData返回:' + JSON.stringify(val))
debugger
}
} }
val = parseBalanceData(data.data)
debugger
}) })
debugger debugger
return await val return await val
} }
export async function getPh(cmd, format, comPort, baudRate, byteSize, parity) {
let val = {}
let url = `http://localhost/tpphurl/api/v1/ph/value?cmd=12&format=hex&comPort=COM1&baudRate=9600&byteSize=8&parity=N`
// let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/ph/value?cmd=${cmd}&format=${format}&comPort=${comPort}&baudRate=${baudRate}&byteSize=${byteSize}&parity=${parity}`
export async function getPh(obj) {
return {
success: true,
value: '900',
message: ''
}
let yq = obj.yq
let val = { success: false, value: '', message: '未获取到PH数据' }
// let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/ph/value?cmd=12&format=hex&comPort=COM1&baudRate=9600&byteSize=8&parity=N`
let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/ph/value?cmd=${yq.cmdHex}&format=hex&comPort=${yq.serialPort}&baudRate=${yq.baudRate}&byteSize=${yq.byteSize}&parity=${yq.parity}`
await axios await axios
.get( .get(
url, url,
@ -60,28 +86,30 @@ export async function getPh(cmd, format, comPort, baudRate, byteSize, parity) {
debugger debugger
if (res.status !== 200) { if (res.status !== 200) {
Message.error('获取PH失败') Message.error('获取PH失败')
return
}
let data = res.data
if (data.code !== 200) {
Message.error(data.msg || '获取PH数据失败')
return
val.message = '获取PH失败'
} else {
let data = res.data
if (data.code !== 200) {
Message.error(data.msg || '获取PH数据失败')
val.message = data.msg || '获取PH数据失败'
} else {
val = extractPHValue(data.data)
debugger
}
} }
val = parseBalanceData(data.data)
debugger
}) })
debugger debugger
return await val return await val
} }
export function parseBalanceData(rawData, targetUnit = 'g', precision) {
export function parseBalanceData(rawData, unit, precision) {
// 初始化返回结果,固定字段结构 // 初始化返回结果,固定字段结构
const result = { const result = {
success: false, success: false,
value: '',
originalValue: '', originalValue: '',
originalUnit: '', originalUnit: '',
targetUnit: targetUnit.toLowerCase(),
value: '',
unit: '',
message: '' message: ''
} }
@ -145,6 +173,7 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) {
// 赋值到结果对象 // 赋值到结果对象
result.originalValue = originalValue result.originalValue = originalValue
result.originalUnit = originalUnit result.originalUnit = originalUnit
result.unit = unit || originalUnit
result.message = `【解析成功】匹配到${matchedFormat.desc},提取数值:${originalValue},单位:${originalUnit}` result.message = `【解析成功】匹配到${matchedFormat.desc},提取数值:${originalValue},单位:${originalUnit}`
// 7. 数值有效性校验 // 7. 数值有效性校验
@ -155,10 +184,8 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) {
} }
// 8. 单位换算核心逻辑 // 8. 单位换算核心逻辑
const unitToGram = { g: 1, kg: 1000 }
const originalCoeff = unitToGram[result.originalUnit] || 1
const targetCoeff = unitToGram[result.targetUnit] || 1
let convertedValue = (num * originalCoeff) / targetCoeff
let convertedValue =
result.unit === originalUnit ? num : convertUnit(num, originalUnit, unit)
// 9. 数值格式化:保留原始精度(仅当传入precision时,按指定位数截取,不四舍五入) // 9. 数值格式化:保留原始精度(仅当传入precision时,按指定位数截取,不四舍五入)
if (typeof precision === 'number' && precision >= 0) { if (typeof precision === 'number' && precision >= 0) {
@ -180,10 +207,10 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) {
// 11. 优化提示信息 // 11. 优化提示信息
const baseMsg = result.message.replace('【解析成功】', '【成功】') const baseMsg = result.message.replace('【解析成功】', '【成功】')
if (result.originalUnit === result.targetUnit) {
result.message = `${baseMsg} → 最终值:${result.value} ${result.targetUnit}`
if (result.originalUnit === result.unit) {
result.message = `${baseMsg} → 最终值:${result.value} ${result.unit}`
} else { } else {
result.message = `${baseMsg} → 换算至${result.targetUnit}${result.value} ${result.targetUnit}`
result.message = `${baseMsg} → 换算至${result.unit}${result.value} ${result.unit}`
} }
} catch (error) { } catch (error) {
result.message = `【系统错误】解析换算失败:${error.message}` result.message = `【系统错误】解析换算失败:${error.message}`
@ -193,6 +220,21 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) {
return result return result
} }
export function convertUnit(num, originalUnit, targetUnit) {
// 8. 单位换算核心逻辑
const unitToGram = {
pg: 1,
ug: 1000,
ng: 1000000,
mg: 1000000000,
g: 1000000000000,
kg: 1000000000000000
}
const originalCoeff = unitToGram[originalUnit] || 1
const targetCoeff = unitToGram[targetUnit] || 1
return (num * originalCoeff) / targetCoeff
}
export function extractPHValue(rawData) { export function extractPHValue(rawData) {
const result = { const result = {
success: false, success: false,

+ 130
- 50
src/views/business/comps/common/JcgjList.vue View File

@ -1,11 +1,12 @@
<template> <template>
<div class="jcgjList"> <div class="jcgjList">
<div class="jcgjList-keywords" v-if="!readonly"> <div class="jcgjList-keywords" v-if="!readonly">
<el-input v-model="queryParams.jcmc" clearable :placeholder="$t('form.placeholderInput')" @keyup.enter.native="handleQuery">
<el-input v-model="queryParams.jcmc" clearable :placeholder="$t('form.placeholderInput')"
@keyup.enter.native="handleQuery">
<el-button slot="append" icon="el-icon-search" @click="handleQuery"></el-button> <el-button slot="append" icon="el-icon-search" @click="handleQuery"></el-button>
</el-input> </el-input>
</div> </div>
<div class="jcgjList-jcgjlx" v-if="!readonly">
<div class="jcgjList-jcgjlx" v-if="!readonly">
<el-radio-group v-model="queryParams.jcgjlx" @change="handleQuery"> <el-radio-group v-model="queryParams.jcgjlx" @change="handleQuery">
<el-radio-button :label="-1">{{ $t('page.business.study.study.qb') }}</el-radio-button> <el-radio-button :label="-1">{{ $t('page.business.study.study.qb') }}</el-radio-button>
<el-radio-button :label="1" v-if="showLc">{{ $t('page.business.study.study.lc') }}</el-radio-button> <el-radio-button :label="1" v-if="showLc">{{ $t('page.business.study.study.lc') }}</el-radio-button>
@ -18,35 +19,54 @@
</div> </div>
<div class="jcgjList-content "> <div class="jcgjList-content ">
<el-timeline style="margin-left: -30px;"> <el-timeline style="margin-left: -30px;">
<el-timeline-item placement="top" v-for="(item, index) in list" :key="index" :color="item.color">
<div class="jcgjList-title no-break">
<div class="jcgjList-jcmc" :style="'color:' + item.color">{{ $i18n.locale === 'zh_CN'?item.jcmc:item.jcmcEn }}</div>
<div>{{ item.createTime }}</div>
</div>
<div class="jcglList-jcnr no-break">
<template v-if="$i18n.locale === 'zh_CN'">
<div v-for="(pitem, pindex) in item.jcnrList" :key="pindex">
{{ pitem.name }}{{ pitem.value }}
<el-timeline-item placement="top" v-for="(item, index) in list" :key="index" :color="item.color">
<div class="jcgjList-title no-break">
<div class="jcgjList-jcmc" :style="'color:' + item.color">{{ $i18n.locale === 'zh_CN' ? item.jcmc : item.jcmcEn
}}</div>
<div>{{ item.createTime }}</div>
</div>
<div class="jcglList-jcnr no-break" >
<template v-if="$i18n.locale === 'zh_CN'">
<div v-for="(pitem, pindex) in item.jcnrList" :key="pindex">
<span v-if="pitem.name != 'url' && pitem.name != 'oldUrl'">
{{ pitem.name }}
<template v-if="pitem.value && pitem.value != ''">
<span v-for="(ppitem, ppindex) in pitem.value.split(';')" :key="ppindex"
>
<a v-if="openFile(ppindex, pitem, item)!=''" :href="openFile(ppindex, pitem, item)" target="_black" style="cursor: pointer;text-decoration: underline;color:#1890ff;margin-right: 5px;">{{ ppitem }}</a>
<span v-else >{{ ppitem }};</span>
</span>
</template>
</span>
</div>
</template>
<template v-else>
<div v-for="(pitem, pindex) in item.jcnrListEn" :key="pindex">
<span v-if="pitem.name != 'url' && pitem.name != 'oldUrl'">
{{ pitem.name }}
<template v-if="pitem.value && pitem.value != ''">
<span v-for="(ppitem, ppindex) in pitem.value.split(';')" :key="ppindex"
>
<a v-if="openFileEn(ppindex, pitem, item)!=''" :href="openFileEn(ppindex, pitem, item)" target="_black" style="cursor: pointer;text-decoration: underline;color:#1890ff;margin-right: 5px;">{{ ppitem }}</a>
<span v-else >{{ ppitem }};</span>
</span>
</template>
</span>
</div>
</template>
<div v-if="item.remark && item.remark !== ''">
{{ $t('form.remark') }}{{ item.remark }}
</div> </div>
</template>
<template v-else>
<div v-for="(pitem, pindex) in item.jcnrListEn" :key="pindex">
{{ pitem.name }}{{ pitem.value }}
<div v-if="item.qmrId && item.qmrId > 0">
{{ $t('form.qmyy') }}{{ $i18n.locale === 'zh_CN' ? item.jcmc : item.jcmcEn }}
</div>
<div v-if="item.qmrId && item.qmrId > 0">
<!-- {{$t('form.signer')}}{{ $i18n.locale === 'zh_CN'?item.qmrMc:item.qmrMcEn }} -->
{{ $t('form.signer') }}{{ item.qmrMc }}
</div> </div>
</template>
<div v-if="item.remark&&item.remark!==''">
{{$t('form.remark')}}{{ item.remark }}
</div>
<div v-if="item.qmrId&&item.qmrId>0">
{{$t('form.qmyy')}}{{ $i18n.locale === 'zh_CN'?item.jcmc:item.jcmcEn }}
</div>
<div v-if="item.qmrId&&item.qmrId>0">
<!-- {{$t('form.signer')}}{{ $i18n.locale === 'zh_CN'?item.qmrMc:item.qmrMcEn }} -->
{{$t('form.signer')}}{{ item.qmrMc }}
</div> </div>
</div>
</el-timeline-item>
</el-timeline>
</el-timeline-item>
</el-timeline>
</div> </div>
</div> </div>
</template> </template>
@ -55,35 +75,35 @@
export default { export default {
name: "JcgjList", name: "JcgjList",
components: {}, components: {},
props:{
showRy:{
type:Boolean,
default:false
props: {
showRy: {
type: Boolean,
default: false
}, },
showXg:{
type:Boolean,
default:false
showXg: {
type: Boolean,
default: false
}, },
showLc:{
type:Boolean,
default:true
showLc: {
type: Boolean,
default: true
}, },
showBj:{
type:Boolean,
default:true
showBj: {
type: Boolean,
default: true
}, },
showBcsm:{
type:Boolean,
default:false
showBcsm: {
type: Boolean,
default: false
}, },
// //
showLj: { showLj: {
type:Boolean,
default:false
type: Boolean,
default: false
}, },
readonly: { readonly: {
type:Boolean,
default:false
type: Boolean,
default: false
}, },
}, },
data() { data() {
@ -96,11 +116,71 @@ export default {
}; };
}, },
mounted() { mounted() {
this.list=[]
this.list = []
}, },
methods: { methods: {
openFileEn(ppindex, pitem, item) {
let result=''
if (pitem.name == 'Old Value') {
let _oldUrl = ""
for (var i = 0; i < item.jcnrList.length; i++) {
if (item.jcnrList[i].name == 'oldUrl') {
_oldUrl = item.jcnrList[i].value
break;
}
}
if (_oldUrl && _oldUrl != '') {
let oldUrl = _oldUrl.split(";")
result=process.env.VUE_APP_FILE_DOMAIN +oldUrl[ppindex]
}
}
if (pitem.name == 'New Value') {
let _url = ""
for (var i = 0; i < item.jcnrList.length; i++) {
if (item.jcnrList[i].name == 'url') {
_url = item.jcnrList[i].value
break;
}
}
if (_url && _url != '') {
let url = _url.split(";")
result=process.env.VUE_APP_FILE_DOMAIN +url[ppindex];
}
}
return result;
},
openFile(ppindex, pitem, item) {
let result=''
if (pitem.name == '原值') {
let _oldUrl = ""
for (var i = 0; i < item.jcnrList.length; i++) {
if (item.jcnrList[i].name == 'oldUrl') {
_oldUrl = item.jcnrList[i].value
break;
}
}
if (_oldUrl && _oldUrl != '') {
let oldUrl = _oldUrl.split(";")
result=process.env.VUE_APP_FILE_DOMAIN +oldUrl[ppindex]
}
}
if (pitem.name == '新值') {
let _url = ""
for (var i = 0; i < item.jcnrList.length; i++) {
if (item.jcnrList[i].name == 'url') {
_url = item.jcnrList[i].value
break;
}
}
if (_url && _url != '') {
let url = _url.split(";")
result=process.env.VUE_APP_FILE_DOMAIN +url[ppindex];
}
}
return result;
},
handleQuery() { handleQuery() {
this.$emit('handleQuery',this.queryParams)
this.$emit('handleQuery', this.queryParams)
}, },
init(val) { init(val) {
let that = this let that = this

+ 10
- 11
src/views/business/comps/template/comps/sp/comps/LadderConfig.vue View File

@ -54,6 +54,7 @@ export default {
TableOpertaion, TableOpertaion,
BaseInfoFormPackage, BaseInfoFormPackage,
}, },
inject:["templateData"],
name: "LadderConfig", name: "LadderConfig",
mixins: [templateMixin], mixins: [templateMixin],
props: { props: {
@ -342,9 +343,9 @@ export default {
const { rowData } = val; const { rowData } = val;
let postData = { let postData = {
bh: rowData.targetSolutionCode + rowData.subTargetSolutionCode, bh: rowData.targetSolutionCode + rowData.subTargetSolutionCode,
studySubjectId: this.currentFormData.studySubjectId,
studyId: this.currentFormData.studyId,
studyFormId: this.currentFormData.id,
studySubjectId: this.templateData.studySubjectId,
studyId: this.templateData.studyId,
studyFormId: this.templateData.id,
} }
this.startConfigRequest(postData); this.startConfigRequest(postData);
}, },
@ -358,9 +359,9 @@ export default {
bh: rowData.targetSolutionCode + rowData.subTargetSolutionCode, bh: rowData.targetSolutionCode + rowData.subTargetSolutionCode,
nd: rowData.actSolutionConcentration,// nd: rowData.actSolutionConcentration,//
nddw: headerSelectFields.actSolutionConcentrationUnit, nddw: headerSelectFields.actSolutionConcentrationUnit,
studySubjectId: this.currentFormData.studySubjectId,
studyId: this.currentFormData.studyId,
studyFormId: this.currentFormData.id,
studySubjectId: this.templateData.studySubjectId,
studyId: this.templateData.studyId,
studyFormId: this.templateData.id,
kc: total, kc: total,
kcdw: unit, kcdw: unit,
} }
@ -379,14 +380,12 @@ export default {
} }
}) })
let postData = { let postData = {
studyId: this.currentFormData.studyId,
studyFormId: this.currentFormData.id,
studyId: this.templateData.studyId,
studyFormId: this.templateData.id,
bh: mybh, bh: mybh,
nd: rowData.actSolutionConcentration || 0, nd: rowData.actSolutionConcentration || 0,
nddw: headerSelectFields.actSolutionConcentrationUnit, nddw: headerSelectFields.actSolutionConcentrationUnit,
studySubjectId: this.currentFormData.studySubjectId,
studyId: this.currentFormData.studyId,
studyFormId: this.currentFormData.id,
studySubjectId: this.templateData.studySubjectId,
list: list list: list
} }
this.subPackageRequest(postData); this.subPackageRequest(postData);

+ 1
- 1
src/views/business/comps/template/dialog/SelectInstrumentDialog.vue View File

@ -121,7 +121,7 @@ export default {
jzrq: row.jzrq, jzrq: row.jzrq,
} }
// eventBus // eventBus
EventBus.$emit("onInstrumentSubmit",{selectInfo,uuid:this.uuid,selectedId:this.selectedId,row});
EventBus.$emit("onInstrumentSubmit",{selectInfo,uuid:this.uuid,selectedId:this.selectedId,row,type:"yq"});
this.visible = false; this.visible = false;
}, },
handleSelect(code,row) { handleSelect(code,row) {

+ 1
- 1
src/views/business/comps/template/dialog/SelectMixReagentDialog.vue View File

@ -13,7 +13,7 @@
<!-- 只有步骤才会又这个选项 --> <!-- 只有步骤才会又这个选项 -->
<!-- xb+xj也会 --> <!-- xb+xj也会 -->
<div v-if="sourceFrom === 'step' || selectType==='9' || selectType==='11'" class="other-reagent">
<div v-if="sourceFrom === 'step' || selectType==='1' || selectType==='3' || selectType==='7' || selectType==='9' || selectType==='11'" class="other-reagent">
<el-checkbox v-model="otherChecked" @change="handleOtherChange">其他</el-checkbox> <el-checkbox v-model="otherChecked" @change="handleOtherChange">其他</el-checkbox>
<el-input class="other-reagent-input" v-model="otherReagent"></el-input> <el-input class="other-reagent-input" v-model="otherReagent"></el-input>
</div> </div>

+ 9
- 3
src/views/business/comps/template/dialog/SubPackageDialog.vue View File

@ -1,5 +1,5 @@
<template> <template>
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" title="分装(分装后的编号可用于下一步关联选择)" append-to-body
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" title="分装" append-to-body
:visible.sync="visible" @close="close" width="1100px"> :visible.sync="visible" @close="close" width="1100px">
<div class="dialog-content"> <div class="dialog-content">
<div class="header-container"> <div class="header-container">
@ -12,9 +12,12 @@
</div> </div>
<div class="header-item"> <div class="header-item">
<div class="header-title">分装数量</div> <div class="header-title">分装数量</div>
<HandleFormItem :isFieldsRecord="false" :fieldKey="formData.mybh +id+ '_fzsl'" @blur="onBlurFzsl"
<div class="item-center">
<HandleFormItem :isFieldsRecord="false" :fieldKey="formData.mybh +id+ '_fzsl'"
:item="integerInputNumberItem" type="inputNumber" :error="formErrors.fzsl" :item="integerInputNumberItem" type="inputNumber" :error="formErrors.fzsl"
v-model="formData.fzsl" /> v-model="formData.fzsl" />
<el-button class="ml-5" type="primary" :disabled="!formData.fzsl" plain @click="onBlurFzsl(formData.fzsl)">确定</el-button>
</div>
</div> </div>
</div> </div>
<div class="content-container"> <div class="content-container">
@ -480,7 +483,10 @@ export default {
border-radius: 4px; border-radius: 4px;
padding: 20px; padding: 20px;
} }
.item-center{
display: flex;
align-items: center;
}
.header-title { .header-title {
margin-bottom: 10px; margin-bottom: 10px;
} }

+ 1
- 1
src/views/business/comps/template/mixins/templateMixin.js View File

@ -294,7 +294,7 @@ export default {
//试剂弹窗确认前 //试剂弹窗确认前
onBeforeReagentSubmit(data) { onBeforeReagentSubmit(data) {
const { selectData, callback, key, formFields } = data const { selectData, callback, key, formFields } = data
const { subTargetStartSolution, targetStartSolution } = formFields
const { subTargetStartSolution = "", targetStartSolution = "" } = formFields
const { nd } = selectData.row const { nd } = selectData.row
const sjndArr = nd.split('/') const sjndArr = nd.split('/')
const ytndArr = targetStartSolution.split('/') const ytndArr = targetStartSolution.split('/')

+ 27
- 24
src/views/business/study/comp/tbbd/Fh.vue View File

@ -48,18 +48,17 @@
<div class="line"></div> <div class="line"></div>
<div class="subtitle"> {{ $t('page.business.study.studyFormFill.jcgj') }}</div> <div class="subtitle"> {{ $t('page.business.study.studyFormFill.jcgj') }}</div>
</div> </div>
<JcgjList ref="jcgjList" @handleQuery="getJjcgjList" :showXg="true"/>
<JcgjList ref="jcgjList" @handleQuery="getJjcgjList" :showXg="true" />
<pagination v-show="jcgjTotal > 0" small layout="prev, pager, next" :total="jcgjTotal" <pagination v-show="jcgjTotal > 0" small layout="prev, pager, next" :total="jcgjTotal"
@pagination="getJjcgjList" :page.sync="queryParamsJcgj.pageNum"
:limit.sync="queryParamsJcgj.pageSize"/>
@pagination="getJjcgjList" :page.sync="queryParamsJcgj.pageNum" :limit.sync="queryParamsJcgj.pageSize" />
</div> </div>
</div> </div>
</div> </div>
<el-dialog :title="$t(openTitle)" :visible.sync="openApprove" width="500px" append-to-body <el-dialog :title="$t(openTitle)" :visible.sync="openApprove" width="500px" append-to-body
:close-on-click-modal="false"> :close-on-click-modal="false">
<el-form ref="formApprove" :model="formApprove" :rules="rulesApprove" label-width="120px" v-if="openApprove"> <el-form ref="formApprove" :model="formApprove" :rules="rulesApprove" label-width="120px" v-if="openApprove">
<div class="sbzdtcma"> <input type="text"> <input type="password" > </div>
<div class="sbzdtcma"> <input type="text"> <input type="password"> </div>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item :label="$t('form.qmyy')" prop="qmyy"> <el-form-item :label="$t('form.qmyy')" prop="qmyy">
@ -97,8 +96,8 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item :label="$t('form.password')" prop="qmrmm"> <el-form-item :label="$t('form.password')" prop="qmrmm">
<el-input type="password" @contextmenu.native.prevent @copy.native.prevent @cut.native.prevent show-password v-model="formApprove.qmrmm" maxlength="20"
:placeholder="$t('form.placeholderInput')" />
<el-input type="password" @contextmenu.native.prevent @copy.native.prevent @cut.native.prevent
show-password v-model="formApprove.qmrmm" maxlength="20" :placeholder="$t('form.placeholderInput')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -191,8 +190,8 @@ export default {
}, },
getJjcgjList(val) { getJjcgjList(val) {
this.$modal.loading() this.$modal.loading()
if(val){
this.queryParamsJcgj=_.merge({}, this.queryParamsJcgj, val)
if (val) {
this.queryParamsJcgj = _.merge({}, this.queryParamsJcgj, val)
} }
studyFormFill_jcgj(this.queryParamsJcgj).then(response => { studyFormFill_jcgj(this.queryParamsJcgj).then(response => {
this.jcgjList = response.rows this.jcgjList = response.rows
@ -234,22 +233,26 @@ export default {
}) })
}, },
async showApprove(qmyy) { async showApprove(qmyy) {
let content = await this.$refs.templateTable.getFormData()
if (content) {
this.openApprove = true
this.resetApprove()
this.formApprove.id = this.form.id
this.formApprove.bdnr = JSON.stringify(content)
this.formApprove.qmyy = qmyy
if (qmyy == '复核通过') {
this.openTitle = 'page.business.study.studyFormFill.fhtg'
this.formApprove.qmyyMc = this.$t('page.business.study.studyFormFill.fhtg')
} else if (qmyy == '复核拒绝') {
this.openTitle = 'page.business.study.studyFormFill.fhjj'
this.formApprove.qmyyMc = this.$t('page.business.study.studyFormFill.fhjj')
} else if (qmyy == '通过') {
this.openTitle = 'page.business.study.studyFormFill.tongguo'
this.formApprove.qmyyMc = this.$t('page.business.study.studyFormFill.mfhtg')
if ((qmyy == '通过'||qmyy == '复核通过')&&!this.$refs.templateTable.isReply()) {
this.$modal.msgError("还有疑问项未回复");
} else {
let content = await this.$refs.templateTable.getFormData()
if (content) {
this.openApprove = true
this.resetApprove()
this.formApprove.id = this.form.id
this.formApprove.bdnr = JSON.stringify(content)
this.formApprove.qmyy = qmyy
if (qmyy == '复核通过') {
this.openTitle = 'page.business.study.studyFormFill.fhtg'
this.formApprove.qmyyMc = this.$t('page.business.study.studyFormFill.fhtg')
} else if (qmyy == '复核拒绝') {
this.openTitle = 'page.business.study.studyFormFill.fhjj'
this.formApprove.qmyyMc = this.$t('page.business.study.studyFormFill.fhjj')
} else if (qmyy == '通过') {
this.openTitle = 'page.business.study.studyFormFill.tongguo'
this.formApprove.qmyyMc = this.$t('page.business.study.studyFormFill.mfhtg')
}
} }
} }
}, },

+ 2
- 2
src/views/login.vue View File

@ -150,9 +150,9 @@ export default {
}; };
}, },
async testGetTpph() { async testGetTpph() {
let x = await getBalance()
let x = await getBalance({yq:{},dw:'kg'})
debugger debugger
let y = await getPh()
let y = await getPh({yq:{}})
debugger debugger
}, },
handleLogin() { handleLogin() {

+ 4
- 4
src/views/system/dept/index.vue View File

@ -59,8 +59,8 @@
<el-table-column prop="deptName" :label="$t('page.system.dept.name')"></el-table-column> <el-table-column prop="deptName" :label="$t('page.system.dept.name')"></el-table-column>
<el-table-column prop="abbr" :label="$t('page.system.dept.abbr')"></el-table-column> <el-table-column prop="abbr" :label="$t('page.system.dept.abbr')"></el-table-column>
<el-table-column prop="jc" label="简称" width="150" v-if="id==1 || id==2"></el-table-column>
<el-table-column prop="showInSubject" label="是否在学科显示" width="200" v-if="id==1 || id==2">
<el-table-column prop="jc" label="简称" width="150" v-if="id==2"></el-table-column>
<el-table-column prop="showInSubject" label="是否在学科显示" width="200" v-if="id==2">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.showInSubject===1"></span> <span v-if="scope.row.showInSubject===1"></span>
<span v-if="scope.row.showInSubject===10"></span> <span v-if="scope.row.showInSubject===10"></span>
@ -145,12 +145,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="id==1 || id==2">
<el-col :span="24" v-if="id==2">
<el-form-item label="简称:" prop="jc"> <el-form-item label="简称:" prop="jc">
<el-input v-model="form.jc" :placeholder="$t('form.placeholderInput')" :readonly="readonly" /> <el-input v-model="form.jc" :placeholder="$t('form.placeholderInput')" :readonly="readonly" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="id==1 || id==2">
<el-col :span="24" v-if="id==2">
<el-form-item label="是否在学科显示" prop="showInSubject"> <el-form-item label="是否在学科显示" prop="showInSubject">
<el-radio-group v-model="form.showInSubject" :disabled="readonly"> <el-radio-group v-model="form.showInSubject" :disabled="readonly">
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>

+ 26
- 4
src/views/system/role/index.vue View File

@ -10,7 +10,7 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="$t('page.system.role.key')+':'" prop="roleKey">
<el-form-item :label="$t('page.system.role.key')+':'" prop="roleKey" v-if="id==2">
<el-input <el-input
v-model="queryParams.roleKey" v-model="queryParams.roleKey"
:placeholder="$t('form.placeholderInput')" :placeholder="$t('form.placeholderInput')"
@ -68,6 +68,17 @@
v-hasPermi="['system:role:export']" v-hasPermi="['system:role:export']"
>{{$t('form.export')}}</el-button> >{{$t('form.export')}}</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
@click="handleExportPermit"
v-hasPermi="['system:role:export']"
>{{$t('page.system.role.exporPermit')}}</el-button>
</el-col>
<!-- <el-col :span="1.5"> <!-- <el-col :span="1.5">
<el-button <el-button
type="success" type="success"
@ -98,7 +109,7 @@
<!-- <el-table-column type="selection" width="55" align="center" /> --> <!-- <el-table-column type="selection" width="55" align="center" /> -->
<!-- <el-table-column label="角色编号" prop="roleId" width="120" /> --> <!-- <el-table-column label="角色编号" prop="roleId" width="120" /> -->
<el-table-column :label="$t('page.system.role.name')" prop="roleName" :show-overflow-tooltip="true" width="250" /> <el-table-column :label="$t('page.system.role.name')" prop="roleName" :show-overflow-tooltip="true" width="250" />
<el-table-column :label="$t('page.system.role.key')" prop="roleKey" :show-overflow-tooltip="true" width="250" />
<el-table-column :label="$t('page.system.role.key')" prop="roleKey" :show-overflow-tooltip="true" width="250" v-if="id==2" />
<el-table-column :label="$t('page.system.role.remark')" prop="remark" :show-overflow-tooltip="true" /> <el-table-column :label="$t('page.system.role.remark')" prop="remark" :show-overflow-tooltip="true" />
<!-- <el-table-column label="显示顺序" prop="roleSort" width="100" /> --> <!-- <el-table-column label="显示顺序" prop="roleSort" width="100" /> -->
<el-table-column :label="$t('page.system.role.status')" prop="status" :show-overflow-tooltip="true" width="150"> <el-table-column :label="$t('page.system.role.status')" prop="status" :show-overflow-tooltip="true" width="150">
@ -204,7 +215,7 @@
<el-form-item :label="$t('page.system.role.name')+':'" prop="roleName"> <el-form-item :label="$t('page.system.role.name')+':'" prop="roleName">
<el-input v-model="form.roleName" :placeholder="$t('form.placeholderInput')" :readonly="readonly" /> <el-input v-model="form.roleName" :placeholder="$t('form.placeholderInput')" :readonly="readonly" />
</el-form-item> </el-form-item>
<el-form-item prop="roleKey">
<el-form-item prop="roleKey" v-if="id==2">
<span slot="label"> <span slot="label">
<!-- <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top"> <!-- <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
<i class="el-icon-question"></i> <i class="el-icon-question"></i>
@ -315,6 +326,7 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex'
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect,allocatedUserList,authUserSetAll } from "@/api/system/role" import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect,allocatedUserList,authUserSetAll } from "@/api/system/role"
import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu" import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"
import Sign from '@/views/business/study/comp/sign.vue' import Sign from '@/views/business/study/comp/sign.vue'
@ -323,6 +335,11 @@ export default {
name: "Role", name: "Role",
dicts: ['sys_normal_disable'], dicts: ['sys_normal_disable'],
components:{Sign}, components:{Sign},
computed: {
...mapGetters([
'id'
]),
},
data() { data() {
return { return {
// //
@ -735,7 +752,12 @@ export default {
...this.queryParams ...this.queryParams
}, `role_${new Date().getTime()}.xlsx`) }, `role_${new Date().getTime()}.xlsx`)
}, },
handleExportPermit() {
this.saveSimpleLog({name:'',nameEn:'',jcmc:'角色权限导出',jcmcEn:'Role Permit Export'})
this.download('system/role/exportMenu', {
...this.queryParams
}, `rolePermit_${new Date().getTime()}.xlsx`)
},
transfer(row){ transfer(row){
allocatedUserList({roleId:row.roleId}).then(response => { allocatedUserList({roleId:row.roleId}).then(response => {
let list = [] let list = []

+ 8
- 2
src/views/system/user/index.vue View File

@ -119,8 +119,8 @@
v-hasPermi="['system:user:roleChange']" v-hasPermi="['system:user:roleChange']"
>{{$t('page.system.user.history')}}</el-button> >{{$t('page.system.user.history')}}</el-button>
<el-button type="text" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">删除</el-button>
<el-dropdown @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
<el-button v-if="id==2" type="text" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">删除</el-button>
<el-dropdown v-if="id==2" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
<el-button type="text" icon="el-icon-d-arrow-right">更多</el-button> <el-button type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleResetPwd" icon="el-icon-key" v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item> <el-dropdown-item command="handleResetPwd" icon="el-icon-key" v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item>
@ -291,6 +291,7 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex'
import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect,roleChangeList,checkExist } from "@/api/system/user" import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect,roleChangeList,checkExist } from "@/api/system/user"
import { getToken } from "@/utils/auth" import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect" import Treeselect from "@riophae/vue-treeselect"
@ -303,6 +304,11 @@ export default {
name: "User", name: "User",
dicts: ['sys_normal_disable', 'sys_user_sex'], dicts: ['sys_normal_disable', 'sys_user_sex'],
components: { Treeselect, Splitpanes, Pane,Sign }, components: { Treeselect, Splitpanes, Pane,Sign },
computed: {
...mapGetters([
'id'
]),
},
data() { data() {
return { return {
// //

Loading…
Cancel
Save