From 4128e96b8cd8830c624d6687bee50a7812edce28 Mon Sep 17 00:00:00 2001 From: qinxianzhangyao <11053546+qinxianzhangyao@user.noreply.gitee.com> Date: 星期三, 26 六月 2024 17:41:44 +0800 Subject: [PATCH] qxtj --- src/views/hosp/customer/index.vue | 543 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 515 insertions(+), 28 deletions(-) diff --git a/src/views/hosp/customer/index.vue b/src/views/hosp/customer/index.vue index 2f7156b..f7ae839 100644 --- a/src/views/hosp/customer/index.vue +++ b/src/views/hosp/customer/index.vue @@ -1,8 +1,21 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> + <el-form + :model="queryParams" + ref="queryForm" + size="small" + :inline="true" + v-show="showSearch" + label-width="68px" + > <el-form-item label="濮撳悕" prop="cusName"> - <el-input v-model="queryParams.cusName" placeholder="璇疯緭鍏ュ鍚�" clearable style="width:120px" @keyup.enter.native="handleQuery"/> + <el-input + v-model="queryParams.cusName" + placeholder="璇疯緭鍏ュ鍚�" + clearable + style="width: 120px" + @keyup.enter.native="handleQuery" + /> </el-form-item> <!-- <el-form-item label="鎬у埆" prop="cusSex"> <el-select v-model="queryParams.cusSex" placeholder="璇烽�夋嫨鎬у埆" clearable style="width:120px"> @@ -16,7 +29,13 @@ <el-input v-model="queryParams.cusAddr" placeholder="璇疯緭鍏ョ幇灞呬綇鍦板潃" clearable @keyup.enter.native="handleQuery"/> </el-form-item> --> <el-form-item label="鑱旂郴鐢佃瘽" prop="cusPhone"> - <el-input v-model="queryParams.cusPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" style="width:140px" clearable @keyup.enter.native="handleQuery"/> + <el-input + v-model="queryParams.cusPhone" + placeholder="璇疯緭鍏ヨ仈绯荤數璇�" + style="width: 140px" + clearable + @keyup.enter.native="handleQuery" + /> </el-form-item> <!-- <el-form-item label="閭斂缂栫爜" prop="cusPostcode"> <el-input v-model="queryParams.cusPostcode" placeholder="璇疯緭鍏ラ偖鏀跨紪鐮�" clearable @keyup.enter.native="handleQuery"/> @@ -66,7 +85,7 @@ v-model="queryParams.cusIntroduce" placeholder="璇疯緭鍏ヤ粙缁嶄汉" clearable - style="width:140px" + style="width: 140px" @keyup.enter.native="handleQuery" /> </el-form-item> @@ -83,7 +102,7 @@ v-model="queryParams.cusNumber" placeholder="杈撳叆鏁存暟" clearable - style="width:100px" + style="width: 100px" @keyup.enter.native="handleQuery" /> </el-form-item> @@ -92,7 +111,7 @@ v-model="queryParams.cusIsvip" placeholder="閫夋嫨VIP" clearable - style="width:100px" + style="width: 100px" > <el-option v-for="dict in dict.type.sys_yes_no" @@ -108,6 +127,7 @@ icon="el-icon-search" size="mini" @click="handleQuery" + style="margin: 0 15px" >鎼滅储</el-button > <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" @@ -119,7 +139,7 @@ <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button - type="primary" + type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" @@ -129,7 +149,7 @@ </el-col> <el-col :span="1.5"> <el-button - type="primary" + type="primary" icon="el-icon-edit" size="mini" :disabled="single" @@ -140,7 +160,7 @@ </el-col> <el-col :span="1.5"> <el-button - type="primary" + type="primary" icon="el-icon-delete" size="mini" :disabled="multiple" @@ -151,7 +171,17 @@ </el-col> <el-col :span="1.5"> <el-button - type="primary" + type="primary" + size="mini" + @click="handleBlacklist" + :disabled="single" + v-hasPermi="['hosp:order:export']" + >鍔犲叆榛戝悕鍗�</el-button + > + </el-col> + <el-col :span="1.5"> + <el-button + type="primary" icon="el-icon-download" size="mini" @click="handleExport" @@ -170,9 +200,13 @@ v-loading="loading" :data="customerList" @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="40px" align="center" fixed="left" /> + <el-table-column + type="selection" + width="40px" + align="center" + fixed="left" + /> <el-table-column label="搴忓彿" align="center" @@ -183,7 +217,7 @@ /> <el-table-column label="濮撳悕" - align="center" + align="center" prop="cusName" width="90px" fixed="left" @@ -221,7 +255,7 @@ width="170px" :show-overflow-tooltip="true" /> - <el-table-column + <el-table-column label="鑱旂郴鐢佃瘽" align="center" prop="cusPhone" @@ -235,7 +269,7 @@ width="180px" :show-overflow-tooltip="true" /> - + <el-table-column label="閭斂缂栫爜" align="center" @@ -278,7 +312,7 @@ /> </template> </el-table-column> - + <el-table-column label="浠嬬粛浜�" align="center" @@ -308,6 +342,19 @@ </template> </el-table-column> <el-table-column + label="榛戝悕鍗�" + align="center" + prop="isBlack" + width="76px" + > + <template slot-scope="scope"> + <dict-tag + :options="dict.type.sys_yes_no" + :value="scope.row.isBlack" + /> + </template> + </el-table-column> + <el-table-column label="绱㈠紩鍗″彿" align="center" prop="indexCard" @@ -317,7 +364,7 @@ fixed="right" label="鎿嶄綔" align="center" - width="70px" + width="90px" class-name="small-padding fixed-width" > <template slot-scope="scope"> @@ -328,6 +375,14 @@ @click="handleUpdate(scope.row)" v-hasPermi="['hosp:customer:edit']" title="淇敼" + ></el-button> + <el-button + size="mini" + type="text" + icon="el-icon-share" + @click="handleDetails(scope.row)" + v-hasPermi="['hosp:customer:edit']" + title="璇︽儏" ></el-button> <el-button size="mini" @@ -391,12 +446,14 @@ <el-form-item label="韬唤璇佸彿" prop="cusIdcard"> <el-input v-model="form.cusIdcard" + @input="inputChange" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" style="width: 200px" /> </el-form-item> <el-form-item label="鍑虹敓鏃ユ湡" prop="cusBrithday"> <el-date-picker + disabled clearable v-model="form.cusBrithday" type="date" @@ -406,10 +463,11 @@ > </el-date-picker> </el-form-item> - <el-form-item label="鐜颁綇鍧�" prop="cusAddr"> + <el-form-item label="骞撮緞" prop="age"> <el-input - v-model="form.cusAddr" - placeholder="璇疯緭鍏ョ幇灞呬綇鍦板潃" + disabled + v-model="form.age" + placeholder="璇疯緭鍏ュ勾榫�" style="width: 200px" /> </el-form-item> @@ -487,26 +545,325 @@ ></el-option> </el-select> </el-form-item> + <el-form-item label="鐜颁綇鍧�" prop="cusAddr"> + <el-input + v-model="form.cusAddr" + placeholder="璇疯緭鍏ョ幇灞呬綇鍦板潃" + style="width: 200px" + /> + </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> <el-button @click="cancel">鍙� 娑�</el-button> </div> </el-dialog> + + <!-- 鐐瑰嚮鍙宠竟寮瑰嚭灞� --> + <el-drawer + :visible.sync="drawer" + :with-header="false" + size="70%" + :before-close="handleClose" + > + <div style="text-align: center; margin: 10px 0"> + <span>鍋ュ悍璁板綍</span> + </div> + <template> + <el-tabs + v-model="activeName" + type="border-card" + @tab-click="handleTabClick" + style="margin-left: 10px" + > + <el-tab-pane label="浣撴璁板綍" name="first"> + <el-row> + <el-col :span="14"> + <el-table + ref="selectChargeRuleRef" + v-loading="loading" + :data="detailsList" + border + height="680px" + style="width: 96%; margin: 10px 10px" + @selection-change="selectChargeRule" + > + <el-table-column + type="selection" + width="40px" + align="center" + fixed="left" + /> + <!-- <el-table-column prop="tjNum" label="浣撴鍙�" width="155" align="center"></el-table-column> --> + <el-table-column + prop="tjTime" + label="浣撴鏃堕棿" + width="155" + align="center" + ></el-table-column> + <el-table-column + prop="tjProName" + label="浣撴椤圭洰" + align="center" + ></el-table-column> + <el-table-column + prop="userName" + label="鎬绘鍖诲笀" + width="75" + align="center" + ></el-table-column> + <el-table-column + prop="paidIn" + label="浣撴璐圭敤" + width="75" + align="center" + ></el-table-column> + </el-table> + </el-col> + <el-col :span="10"> + <div> + <iframe + id="printIframe" + :src="url" + frameborder="0" + style="width: 100%; height: 680px" + ></iframe> + </div> + </el-col> + </el-row> + </el-tab-pane> + <el-tab-pane label="闂ㄨ瘖璁板綍" name="second"> + <el-row> + <el-col :span="14"> + <el-table + ref="selectChargeRuleRef" + v-loading="loading" + :data="detailsList" + border + height="680px" + style="width: 96%; margin: 10px 10px" + @selection-change="selectChargeRule" + > + <el-table-column + type="selection" + width="40px" + align="center" + /> + <el-table-column + prop="project.proScope" + label="搴忓彿" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="灏辫瘖鏃堕棿" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="灏辫瘖绉戝" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鎺ヨ瘖鍖诲笀" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="灏辫瘖鎬昏垂鐢�" + align="center" + ></el-table-column> + </el-table> + </el-col> + <el-col :span="10"> + <quill-editor + v-model="form.content" + :options="editorOption" + style="height: 680px; width: 96%" + > + </quill-editor> + </el-col> + </el-row> + </el-tab-pane> + <el-tab-pane label="浣忛櫌璁板綍" name="third"> + <el-row> + <el-col :span="14"> + <el-table + ref="selectChargeRuleRef" + v-loading="loading" + :data="detailsList" + border + height="680px" + style="width: 96%; margin: 10px 10px" + @selection-change="selectChargeRule" + > + <el-table-column + type="selection" + width="40px" + align="center" + /> + <el-table-column + prop="project.proScope" + label="搴忓彿" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鍏ラ櫌鏃堕棿" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鍑洪櫌鏃堕棿" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="浣忛櫌澶╂暟" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="浣忛櫌绉戝" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="涓绘不鍖诲笀" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="涓昏璇婃柇" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鏄惁鎵嬫湳" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="绂婚櫌鏂瑰紡" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="浣忛櫌鎬昏垂鐢�" + align="center" + ></el-table-column> + </el-table> + </el-col> + <el-col :span="10"> + <quill-editor + v-model="form.content" + :options="editorOption" + style="height: 680px; width: 96%" + > + </quill-editor> + </el-col> + </el-row> + </el-tab-pane> + <el-tab-pane label="鎵嬫湳璁板綍" name="fourth"> + <el-table + v-loading="loading" + :data="detailsList" + border + height="460px" + style="width: 96%; margin: 10px 10px" + > + <el-table-column + prop="project.proScope" + label="搴忓彿" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="寮�濮嬫椂闂�" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="缁撴潫鏃堕棿" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鎵嬫湳鍚嶇О" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鎵嬫湳缂栫爜" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鎵嬫湳绾у埆" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="鏈��" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="涓�鍔�" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="浜屽姪" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="楹婚唹鏂瑰紡" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="楹婚唹寮�濮嬫椂闂�" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="楹婚唹缁撴潫鏃堕棿" + align="center" + ></el-table-column> + <el-table-column + prop="project.proScope" + label="楹婚唹鍖诲笀" + align="center" + ></el-table-column> + </el-table> + </el-tab-pane> + </el-tabs> + </template> + </el-drawer> </div> </template> <script> +import { quillEditor } from "vue-quill-editor"; +import "quill/dist/quill.core.css"; +import "quill/dist/quill.snow.css"; +import "quill/dist/quill.bubble.css"; + import { listCustomer, getCustomer, delCustomer, addCustomer, updateCustomer, + getHistryTjOrderByCusIdCard, } from "@/api/hosp/customer"; +import { getPdf, addCustomerBlack } from "@/api/hosp/order"; export default { name: "Customer", + components: { quillEditor }, dicts: [ "dict_user_national", "dict_user_marry", @@ -514,15 +871,51 @@ "sys_user_sex", ], data() { + let checkPhoneNum = (rule, value, callback) => { + let patter = new RegExp(/^1\s*[3456789]\s*(\d\s*){9}$/); + if (value == "" && value == undefined && !value) { + return callback(""); + } else if (value != undefined && value != "") { + return callback(); + } else if (!patter.test(value)) { + return callback(""); + } + }; return { + editorOption: { + placeholder: "璇峰湪杩欓噷杈撳叆", + modules: { + toolbar: [ + ["bold", "italic", "underline", "strike"], //鍔犵矖锛屾枩浣擄紝涓嬪垝绾匡紝鍒犻櫎绾� + ["blockquote", "code-block"], //寮曠敤锛屼唬鐮佸潡 + [{ header: 1 }, { header: 2 }], // 鏍囬锛岄敭鍊煎鐨勫舰寮忥紱1銆�2琛ㄧず瀛椾綋澶у皬 + [{ list: "ordered" }, { list: "bullet" }], //鍒楄〃 + [{ script: "sub" }, { script: "super" }], // 涓婁笅鏍� + [{ indent: "-1" }, { indent: "+1" }], // 缂╄繘 + [{ direction: "rtl" }], // 鏂囨湰鏂瑰悜 + [{ size: ["small", false, "large", "huge"] }], // 瀛椾綋澶у皬 + [{ header: [1, 2, 3, 4, 5, 6, false] }], //鍑犵骇鏍囬 + [{ color: [] }, { background: [] }], // 瀛椾綋棰滆壊锛屽瓧浣撹儗鏅鑹� + [{ font: [] }], //瀛椾綋 + [{ align: [] }], //瀵归綈鏂瑰紡 + ["clean"], //娓呴櫎瀛椾綋鏍峰紡 + ["image", "video"], //涓婁紶鍥剧墖銆佷笂浼犺棰� + ], + }, + }, + // 閬僵灞� loading: true, // 閫変腑鏁扮粍 ids: [], // 闈炲崟涓鐢� single: true, + drawer: false, + detailsList: [], + activeName: "first", // 闈炲涓鐢� multiple: true, + url: "", // 鏄剧ず鎼滅储鏉′欢 showSearch: true, // 鎬绘潯鏁� @@ -556,30 +949,32 @@ form: {}, // 琛ㄥ崟鏍¢獙 rules: { - cusName: [{ required: true, message: "", trigger: "blur" }], + cusName: [ + { required: true, validator: checkPhoneNum, trigger: "blur" }, + ], cusSex: [ - { required: true, message: "", trigger: "change" }, + { required: true, validator: checkPhoneNum, trigger: "change" }, ], cusBrithday: [ - { required: true, message: "", trigger: "blur" }, + { required: true, validator: checkPhoneNum, trigger: "blur" }, ], cusAddr: [ - { required: true, message: "", trigger: "blur" }, + { required: true, validator: checkPhoneNum, trigger: "blur" }, ], cusPhone: [ - { required: true, message: "", trigger: "blur" }, + { required: true, validator: checkPhoneNum, trigger: "blur" }, ], cusPassword: [ - { required: true, message: "", trigger: "blur" }, + { required: true, validator: checkPhoneNum, trigger: "blur" }, ], // cusNational: [ // { required: true, message: "姘戞棌涓嶈兘涓虹┖", trigger: "change" } // ], cusIdcard: [ - { required: true, message: "", trigger: "blur" }, + { required: true, validator: checkPhoneNum, trigger: "blur" }, ], deleted: [ - { required: true, message: "", trigger: "blur" }, + { required: true, validator: checkPhoneNum, trigger: "blur" }, ], }, }; @@ -667,6 +1062,97 @@ this.title = "瀹㈡埛淇℃伅缁存姢"; }); }, + + // 璇︽儏 + handleDetails(row) { + this.drawer = true; + let cusId = row.cusId; + getHistryTjOrderByCusIdCard(cusId).then((res) => { + this.detailsList = res.data; + }); + }, + + handleBlacklist() { + let data = { + cusId: this.ids[0], + }; + addCustomerBlack(data).then((res) => { + this.$modal.msgSuccess("宸插姞鍏ラ粦鍚嶅崟"); + this.getList(); + }); + }, + + inputChange() { + const reg = + /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; + if (reg.test(this.form.cusIdcard)) { + var org_birthday = this.form.cusIdcard.substring(6, 14); + var org_gender = this.form.cusIdcard.substring(16, 17); + var sex = org_gender % 2 == 1 ? 0 : 1; + var birthday = + org_birthday.substring(0, 4) + + "-" + + org_birthday.substring(4, 6) + + "-" + + org_birthday.substring(6, 8); + var birthdays = new Date(birthday.replace(/-/g, "-")); + let d = new Date(); + let age = + d.getFullYear() - + birthdays.getFullYear() - + (d.getMonth() < birthdays.getMonth() || + (d.getMonth() == birthdays.getMonth() && + d.getDate() < birthdays.getDate()) + ? 1 + : 0); + this.form.cusSex = sex; + this.form.cusBrithday = birthday; + this.form.age = age; + } + }, + + selectChargeRule(val) { + if (val.length > 1) { + this.$refs.selectChargeRuleRef.clearSelection(); + this.$refs.selectChargeRuleRef.toggleRowSelection(val[val.length - 1]); + } + let selectedRule = val[val.length - 1]; + if (this.activeName == "first") { + const flag = true; + let tjNumber = selectedRule.tjNum; + // let tjNumber = "10001240305100029" + getPdf(tjNumber, flag).then((response) => { + if (response.size === 0) { + const loading = this.$loading({ + lock: true, + text: "Loading", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }); + setTimeout(() => { + loading.close(); + }, 3000); + // this.$message.msgSuccess("鎶ュ憡姝e湪鐢熸垚锛岃涓ゅ垎閽熷悗棰勮锛�"); + this.$message({ + message: "鎶ュ憡姝e湪鐢熸垚锛岃涓ゅ垎閽熷悗棰勮锛�", + type: "warning", + }); + } else { + this.dialogVisible = true; + this.url = window.webkitURL.createObjectURL(response); //灏嗗悗绔繑鍥炵殑blob鏂囦欢璇诲彇鍑簎rl + } + }); + } else if (this.activeName == "second") { + } else if (this.activeName == "third") { + } + }, + + handleClose() { + this.$tab.refreshPage(); + }, + handleTabClick() { + console.log(this.activeName); + }, /** 鎻愪氦鎸夐挳 */ submitForm() { this.$refs["form"].validate((valid) => { @@ -720,6 +1206,7 @@ display: flex; justify-content: center; } + .pag1 { width: 30%; } -- Gitblit v1.8.0