From 48e43636ef6c0222c8d349ec59b5c0708d009ddf Mon Sep 17 00:00:00 2001 From: miaojiale <1123971748@qq.com> Date: Tue, 6 Dec 2022 17:35:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E8=A1=A8=E5=8D=95=EF=BC=8C?= =?UTF-8?q?=E4=BB=8D=E6=9C=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormComponents/CustomForm/FormContent.vue | 1 + .../CustomForm/FormItemSelf.vue | 69 +++++-- .../FormComponents/CustomForm/index.vue | 28 ++- .../audit-detail/components/publicDialog.vue | 15 +- .../audit-detail/components/screenReview.vue | 137 +++++++++++++ src/views/audit-detail/index.vue | 194 +++++++++++++++++- 6 files changed, 400 insertions(+), 44 deletions(-) create mode 100644 src/views/audit-detail/components/screenReview.vue diff --git a/src/components/FormComponents/CustomForm/FormContent.vue b/src/components/FormComponents/CustomForm/FormContent.vue index a890c40..e9cb4db 100644 --- a/src/components/FormComponents/CustomForm/FormContent.vue +++ b/src/components/FormComponents/CustomForm/FormContent.vue @@ -189,6 +189,7 @@ export default { }, // 切æ¢ä¸ç¬¦åˆç›æŸ¥æ¡ä»¶çš„æ˜¾ç¤º formChange() { + // å…¥é€‰ï¼ŒæŽ’é™¤æ ‡å‡† console.log(this.form) let arr = [ "is_one_year", diff --git a/src/components/FormComponents/CustomForm/FormItemSelf.vue b/src/components/FormComponents/CustomForm/FormItemSelf.vue index 060d4bd..f752939 100644 --- a/src/components/FormComponents/CustomForm/FormItemSelf.vue +++ b/src/components/FormComponents/CustomForm/FormItemSelf.vue @@ -9,7 +9,10 @@ :lg="item.width" :style="{ height: item.type === 'upload' ? '116px' : '53px' }" > - <div v-if="showIndex" class="formIndex"> + <div + v-if="showIndex" + :class="['formIndex', item.labelSuffix == '5' ? 'computeIndex' : '']" + > {{ item.labelSuffix || columnIndex + 1 }} </div> <!-- <el-form-item @@ -48,7 +51,7 @@ <el-input v-if="item.type === 'input'" v-model="form[item.prop]" - :class="item.toothBit ? 'toothBit' : ''" + :class="item.prop == 'other_sickness' ? 'needlong' : ''" :readonly="item.readonly" :disabled="item.disabled" :placeholder=" @@ -559,23 +562,6 @@ export default { } catch {} } }) - } else { - // let { birthday } = this.form - // if (birthday) { - // birthday = new Date(birthday.replace(/-/g, "/")) - // let d = new Date() - // let age = - // d.getFullYear() - - // birthday.getFullYear() - - // (d.getMonth() < birthday.getMonth() || - // (d.getMonth() == birthday.getMonth() && - // d.getDate() < birthday.getDate()) - // ? 1 - // : 0) - // console.log(age) - // if (age == 0) { - // } - // } } }, // 自定义方法规则 @@ -640,6 +626,7 @@ export default { const columns = this.columns || [] const group = this.group || [] const dyMap = {} // 显示数æ®é›†åˆ + dynamicshSet.forEach((dy) => { if (dyMap[dy.target]) { dyMap[dy.target].push(dy.value) @@ -657,7 +644,38 @@ export default { const values = dyMap[key] let display = false if (Array.isArray(val)) { - display = values.filter((v) => val.includes(v)).length > 0 + if ( + prop == "early_gastric_cancer" || + prop == "period_gastric_cancer" + ) { + let flag = false + if (this.form.early_gastric_cancer) { + this.form.early_gastric_cancer.length > 0 + ? (flag = true) + : (flag = false) + } + if (!flag) { + if (this.form.period_gastric_cancer) { + this.form.period_gastric_cancer.length > 0 + ? (flag = true) + : (flag = false) + } + } + console.log(targetItem) + display = flag + if (display) { + targetItem.rules[0] = { + required: true, + message: "è¯·ä¸Šä¼ ç—…ç†æŠ¥å‘Š", + } + } else { + if (targetItem.rules.length > 0) { + targetItem.rules[0].required = false + } + } + } else { + display = values.filter((v) => val.includes(v)).length > 0 + } } else { display = values.includes(val) } @@ -678,6 +696,14 @@ export default { this.$set(this.form, "$_hidden" + targetItem.prop, !display) }, 200) } else { + if (prop == "check_type" && Boolean(display)) { + targetItem.rules[0] = { + required: true, + message: "è¯·ä¸Šä¼ å†…é•œæŠ¥å‘Š", + } + } else if (prop == "check_type") { + targetItem.rules = [] + } this.$set(targetItem, "display", Boolean(display)) } }) @@ -849,4 +875,7 @@ export default { } } } +::v-deep .needlong { + width: 260px !important; +} </style> diff --git a/src/components/FormComponents/CustomForm/index.vue b/src/components/FormComponents/CustomForm/index.vue index 2b13f76..de96e74 100644 --- a/src/components/FormComponents/CustomForm/index.vue +++ b/src/components/FormComponents/CustomForm/index.vue @@ -49,7 +49,9 @@ > <template slot="title"> {{ g.label }} - <span v-if="g.label == 'äºŒã€æŽ’é™¤æ ‡å‡†'" class="noCol">{{errorText}}</span> + <span v-if="g.label == 'äºŒã€æŽ’é™¤æ ‡å‡†'" class="noCol">{{ + errorText + }}</span> </template> <form-content v-if="collapseNames.includes(g.prop)" @@ -85,7 +87,8 @@ size="large" :disabled="disabled" @click="handleConfirm" - >{{ options.submitText || "æäº¤" }}</el-button> + >{{ options.submitText || "æäº¤" }}</el-button + > </template> <template v-if="options.emptyBtn"> <el-button @@ -93,7 +96,8 @@ icon="el-icon-delete " size="large" @click="resetForm(true)" - >{{ options.emptyText || "清空" }}</el-button> + >{{ options.emptyText || "清空" }}</el-button + > </template> </template> <template v-if="nextTabBtnShow"> @@ -103,7 +107,8 @@ icon="el-icon-caret-right" size="large" @click="nextTab" - >{{ options.nextTabText || "下一页" }}</el-button> + >{{ options.nextTabText || "下一页" }}</el-button + > </el-form> </template> </div> @@ -180,7 +185,20 @@ export default { // this.setformWatch(this.options, "form") }) }, - + mounted() { + // 处ç†computeIndex + let domArr = document.querySelectorAll(".computeIndex") + for (let i = 0; i < domArr.length; i++) { + domArr[i].style.height = "54px" + domArr[i].innerHTML = "" + if (domArr.length / i == 2) { + domArr[i].innerHTML = "6" + } + if (i == domArr.length - 1) { + domArr[i].style.height = "53px" + } + } + }, methods: { // 显示ä¸ç¬¦åˆç›æŸ¥æ¡ä»¶ showError(data) { diff --git a/src/views/audit-detail/components/publicDialog.vue b/src/views/audit-detail/components/publicDialog.vue index 4b920c7..b0ea9dc 100644 --- a/src/views/audit-detail/components/publicDialog.vue +++ b/src/views/audit-detail/components/publicDialog.vue @@ -3,17 +3,12 @@ <el-dialog center :visible.sync="dialogVisible" - width="30%" + width="40%" show-close @closed="cancelSubmit" > <slot name="content"></slot> - <span slot="footer" class="dialog-footer"> - <el-button @click="cancelSubmit">å– æ¶ˆ</el-button> - <el-button type="primary" @click="onSubmit" :loading="loading" - >ç¡® 定</el-button - > - </span> + <slot name="footer"></slot> </el-dialog> </div> </template> @@ -29,9 +24,9 @@ export default { this.dialogVisible = false this.$emit("onCancel") }, - onSubmit() { - this.$emit("onSubmit") - }, + // onSubmit() { + // this.$emit("onSubmit") + // }, }, } </script> diff --git a/src/views/audit-detail/components/screenReview.vue b/src/views/audit-detail/components/screenReview.vue new file mode 100644 index 0000000..74f79e9 --- /dev/null +++ b/src/views/audit-detail/components/screenReview.vue @@ -0,0 +1,137 @@ +<template> + <div> + <el-container> + <el-main v-loading="pageLoading" class="transition-box"> + <el-empty v-if="!isEmpty" description="æš‚æ— æ•°æ®"></el-empty> + <template v-if="isEmpty"> + <div ref="my-form" class="my-form"> + <custom-form + ref="customForm" + :options="jsonList[1]" + :formEdit="form" + ></custom-form> + <!-- <custom-form ref="form" :options="jsonList[1]"></custom-form> + <custom-form ref="form" :options="jsonList[2]"></custom-form> + <custom-form ref="form" :options="jsonList[3]"></custom-form> + <custom-form ref="form" :options="jsonList[4]"></custom-form> --> + </div> + </template> + </el-main> + <!-- <el-aside + :width="sideWidth" + class="transition-box" + :class="{ hidden: !asideShow }" + v-if="contrast" + > + <div class="side-content"></div> + </el-aside> --> + </el-container> + </div> +</template> +<script> +import { mapGetters } from "vuex" +import CustomForm from "@/components/FormComponents/CustomForm/index" +import { getCurrentFormByType } from "@/api/coop-group.js" +import { getFormDetail } from "@/api/field" +export default { + components: { CustomForm }, + data() { + return { + fromLoading: false, + formTabs: [], + formTabsList: [], + jsonList: [], + form: { + name: "123", + phone: "18712412341", + }, + } + }, + computed: { + ...mapGetters({ + group: ["user/group"], + }), + isEmpty() { + return this.jsonList.length + }, + sideWidth() { + return this.asideShow ? "200px" : "0px" + }, + pageLoading() { + return this.loading || this.formloading + }, + }, + watch: {}, + created() { + this.getCurrentFormByType() + }, + mounted() {}, + + methods: { + getCurrentFormByType(type = 1) { + this.fromLoading = true + getCurrentFormByType({ + type, + groupId: this.group.groupId, + }) + .then((res) => { + if (res.code === 1) { + const formTabs = [] + this.formTabsList = res.data.map((item, index) => { + if (index === 0) { + formTabs.push({ + silent: false, + ...item, + label: item.tabName, + }) + } else { + formTabs.push({ + id: item.id, + formId: item.formId, + silent: true, + label: item.tabName, + }) + } + return { + ...item, + silent: false, + label: item.tabName, + } + }) + this.formTabs = formTabs + } + }) + .finally(() => { + this.jsonList = [] + let i = 0 + this.initForm(i) + }) + }, + initForm(i) { + let formId = this.formTabs[i].formId + this.formloading = true + getFormDetail(formId) + .then((res) => { + if (res.code === 1 && res.data) { + const formJson = res.data.formJson + const obj = eval("(" + formJson + ")") + obj.disabled = true + obj.detail = true + this.jsonList.push(obj) + if (i == 4) { + console.log(this.jsonList) + this.formloading = false + } + } + }) + .finally(() => { + if (i < this.formTabs.length - 1) { + i++ + this.initForm(i) + } + }) + }, + }, +} +</script> +<style lang="scss" scoped></style> diff --git a/src/views/audit-detail/index.vue b/src/views/audit-detail/index.vue index 118ab9a..e42b902 100644 --- a/src/views/audit-detail/index.vue +++ b/src/views/audit-detail/index.vue @@ -6,11 +6,11 @@ <span class="f-b">ã€æ— 锡市人民医院医è”体】ã€å‰©ä½™7】</span> </div> <div class="right"> - <el-button class="btn">返回</el-button> + <el-button class="btn" @click="$router.go(-1)">返回</el-button> </div> </div> <div class="choose-handle p-24"> - <span>è¯·é€‰æ‹©å®¡æ ¸ç»“æžœ:</span> + <span v-if="!editStatus">è¯·é€‰æ‹©å®¡æ ¸ç»“æžœ:</span> <div class="btn_group"> <el-button v-for="(item, index) in btnGroup" @@ -21,27 +21,107 @@ @click="showDialog(item.value)" >{{ item.text }}</el-button > + <span v-if="editStatus" class="op">驳回修改建议:胃镜图片ä¸åˆè§„</span> </div> </div> <div class="table-content p-24"> - <!-- <component :is="curComponent"></component> --> + <component :is="curComponent"></component> </div> + <public-dialog ref="editDialog" @onSubmit="onSubmit" @onCancel="onCancel"> + <!-- ä¿®æ”¹å®¡æ ¸ç»“æžœ ä¼˜å…ˆè§¦å‘æç¤º --> + <template v-if="!confirmStatus" slot="content"> + <div class="title">温馨æç¤º</div> + <div class="content"> + <div class="showTips"> + 该病例已ç»å®¡æ ¸ã€é©³å›žä¿®æ”¹ã€‘ï¼Œéœ€è¦æ”¹ä¸º{{ + btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : "" + }}å— + </div> + </div> + <div class="btn"> + <el-button type="primary" :loading="loading" @click="onCancel" + >å¦</el-button + > + <el-button type="primary" :loading="loading" @click="editSubmit" + >是</el-button + > + </div> + </template> + </public-dialog> <public-dialog ref="publicDialog" @onSubmit="onSubmit" @onCancel="onCancel"> + <!-- å®¡æ ¸ç»“æžœå›žæ˜¾ --> <template v-if="!confirmStatus" slot="content"> - <span class="tips">确定æäº¤å®¡æ ¸?</span> + <div class="title"> + {{ btnGroup[curBtn - 1] ? btnGroup[curBtn - 1].text : "" }} + </div> + <div class="content"> + <div v-if="curBtn != 1" class="noPass"> + <el-form + ref="form" + label-position="top" + :model="form" + :rules="rules" + label-width="100px" + class="demo-ruleForm" + > + <el-form-item + :label="curBtn == 2 ? 'ä¸åˆæ ¼åŽŸå› ' : '驳回修改建议'" + prop="reson" + > + <el-input + v-model="form.reson" + type="textarea" + :placeholder=" + curBtn == 2 ? '请填写ä¸åˆæ ¼åŽŸå› ' : '请填写驳回修改建议' + " + ></el-input> + </el-form-item> + </el-form> + </div> + </div> + <div class="btn"> + <el-button type="primary" :loading="loading" @click="onSubmit" + >ç¡® 定</el-button + > + </div> </template> + <!-- æäº¤åŽç»“æžœ --> <template v-if="confirmStatus" slot="content"> - {{ btnGroup[curBtn - 1].text }} + <div class="title">{{ btnGroup[curBtn - 1].text }}</div> + <div class="content"> + <div v-if="curBtn == 1" class="pass">è¯¥ç—…ä¾‹å®¡æ ¸åˆæ ¼æˆåŠŸï¼</div> + <div v-if="curBtn != 1" class="noPass"> + <!-- ä¸åˆæ ¼å’Œé©³å›ž --> + <div class="label"> + {{ curBtn == 2 ? "ä¸åˆæ ¼åŽŸå› " : "驳回修改建议" }} + </div> + <div class="reson"> + {{ form.reson }} + </div> + </div> + </div> + <div v-if="curBtn != 1" class="showTips"> + è¯¥ç—…ä¾‹å®¡æ ¸{{ curBtn == 2 ? "ä¸åˆæ ¼åŽŸå› " : "驳回修改建议" }}æäº¤æˆåŠŸï¼ + </div> + <div class="btn"> + <el-button type="primary" @click="nextExample">下一例</el-button> + </div> </template> </public-dialog> </div> </template> <script> import publicDialog from "./components/publicDialog.vue" +import screenReview from "./components/screenReview.vue" export default { - components: { publicDialog }, + components: { publicDialog, screenReview }, data() { return { + editStatus: false, //è¿›å…¥çš„çŠ¶æ€æ˜¯ç¬¬ä¸€æ¬¡å®¡æ ¸è¿˜æ˜¯ä¿®æ”¹å®¡æ ¸,false为第一次,true为修改 + form: {}, + rules: { + reson: [{ required: true, message: "请填写", trigger: "blur" }], + }, btnGroup: [ { text: "åˆæ ¼", @@ -56,8 +136,9 @@ export default { value: 3, }, ], + loading: false, curBtn: 0, - curComponent: "", + curComponent: "screenReview", confirmStatus: false, } }, @@ -66,14 +147,66 @@ export default { methods: { showDialog(val) { this.curBtn = val - this.$refs.publicDialog.dialogVisible = true + if (!this.editStatus) { + if (this.curBtn == 1) { + // 走接å£ï¼Œä¿å˜åˆæ ¼ + this.confirmStatus = true + } else if (this.curBtn == 2) { + this.rules.reson[0].message = "请输入ä¸åˆæ ¼åŽŸå› " + } else { + this.rules.reson[0].message = "请输入驳回修改建议" + } + this.$refs.publicDialog.dialogVisible = true + } else { + this.$refs.editDialog.dialogVisible = true + } }, onSubmit() { - this.confirmStatus = true + this.loading = true + // åˆ‡æ¢æ–‡æœ¬ + if (this.curBtn != 1) { + this.$refs.form.validate((valid) => { + if (valid) { + // alert("submit!") + // ä¿å˜æˆåŠŸï¼Œå›žæ˜¾,è°ƒç”¨æŽ¥å£ + + // 回调 + this.confirmStatus = true + } else { + console.log("error submit!!") + return false + } + }) + } + + this.loading = false // this.$refs.publicDialog.dialogVisible = true }, onCancel() { this.confirmStatus = false + if (this.curBtn != 1) { + this.form = {} + } + this.$refs.editDialog.dialogVisible = false + this.$refs.publicDialog.dialogVisible = false + if (this.$refs.form) { + this.$refs.form.clearValidate() + } + }, + editSubmit() { + // this.$refs.editDialog.dialogVisible = false + if (this.curBtn == 1) { + // 走接å£ï¼Œä¿å˜åˆæ ¼ + this.confirmStatus = true + } else if (this.curBtn == 2) { + this.rules.reson[0].message = "请输入ä¸åˆæ ¼åŽŸå› " + } else { + this.rules.reson[0].message = "请输入驳回修改建议" + } + this.$refs.publicDialog.dialogVisible = true + }, + nextExample() { + this.onCancel() }, }, } @@ -128,4 +261,47 @@ export default { } } } +.title { + height: 26px; + font-size: 22px; + font-family: AlibabaPuHuiTiM; + color: rgba(0, 0, 0, 0.8); + line-height: 26px; +} +.content { + margin: 58px; + .pass { + font-size: 18px; + font-family: AlibabaPuHuiTiM; + color: #30b9a6; + letter-spacing: 1px; + } +} +.btn { + margin-top: 20px; + .el-button { + width: 100px; + height: 32px; + } +} +::v-deep .el-form-item__label { + width: 100%; + text-align: left; +} +.reson { + margin-top: 20px; +} +.showTips { + color: #4e68ff; +} +.op { + font-size: 14px; + font-family: AlibabaPuHuiTiR; + color: #fa6400; + margin-left: 20px; +} +.table-content { + padding-top: 20px; + padding-bottom: 20px; +} </style> -- 2.22.0