From d23ab1d66456d5dd8aa8645bb262deef4e70a9eb Mon Sep 17 00:00:00 2001 From: lkk <364857242@qq.com> Date: 星期五, 17 一月 2025 19:02:01 +0800 Subject: [PATCH] 2 --- src/views/reservation/reservations/index.vue | 590 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 557 insertions(+), 33 deletions(-) diff --git a/src/views/reservation/reservations/index.vue b/src/views/reservation/reservations/index.vue index d1144aa..7a21217 100644 --- a/src/views/reservation/reservations/index.vue +++ b/src/views/reservation/reservations/index.vue @@ -1,5 +1,96 @@ <template> <div class="app-container"> + <el-dialog + :title="title" + :visible.sync="open1" + width="1000px" + append-to-body + > + <el-form + ref="form1" + :model="form1" + :rules="rules1" + label-width="100px" + :inline="true" + > + <el-form-item label="鍗曚綅鍚嶇О" prop="cnName"> + <el-input v-model="form1.cnName" placeholder="璇疯緭鍏ヤ腑鏂囧悕绉�" /> + </el-form-item> + <el-form-item label="鑱旂郴浜�" prop="contactPerson"> + <el-input v-model="form1.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉" /> + </el-form-item> + <el-form-item label="鑱旂郴鐢佃瘽" prop="contactPhone"> + <el-input v-model="form1.contactPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" /> + </el-form-item> + <el-form-item label="绋庡彿" prop="taxNumber"> + <el-input v-model="form1.taxNumber" placeholder="璇疯緭鍏ョ◣鍙�" /> + </el-form-item> + <el-form-item label="娉曚汉" prop="legalPerson"> + <el-input v-model="form1.legalPerson" placeholder="璇疯緭鍏ユ硶浜�" /> + </el-form-item> + <el-form-item label="娉ㄥ唽鍦板潃" prop="registerAddress"> + <el-input + v-model="form1.registerAddress" + placeholder="璇疯緭鍏ユ敞鍐屽湴鍧�" + /> + </el-form-item> + <el-form-item label="閫氳鍦板潃" prop="mailingAddress"> + <el-input + v-model="form1.mailingAddress" + placeholder="璇疯緭鍏ラ�氳鍦板潃" + /> + </el-form-item> + <el-form-item label="寮�鎴烽摱琛�" prop="bankAccount"> + <el-input v-model="form1.bankAccount" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" /> + </el-form-item> + <el-form-item label="閾惰璐︽埛" prop="countNum"> + <el-input v-model="form1.countNum" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" /> + </el-form-item> + <el-form-item label="閭" prop="email"> + <el-input v-model="form1.email" placeholder="璇疯緭鍏ラ偖绠�" /> + </el-form-item> + <el-form-item label="璐熻矗浜�" prop="principal"> + <el-input v-model="form1.principal" placeholder="璇疯緭鍏ヨ礋璐d汉" /> + </el-form-item> + <el-form-item label="缃戝潃" prop="url"> + <el-input v-model="form1.url" placeholder="璇疯緭鍏ョ綉鍧�" /> + </el-form-item> + <el-form-item label="浼犵湡" prop="faxNumber"> + <el-input v-model="form1.faxNumber" placeholder="璇疯緭鍏ヤ紶鐪�" /> + </el-form-item> + <el-form-item label="琛屾斂鍖哄垝鍚嶇О" prop="areaName"> + <el-input v-model="form1.areaName" placeholder="璇疯緭鍏ヨ鏀垮尯鍒掑悕绉�" /> + </el-form-item> + <el-form-item label="鎺掑簭" prop="orderNum"> + <el-input v-model="form1.orderNum" placeholder="璇疯緭鍏ユ帓搴�" /> + </el-form-item> + <el-form-item label="鏈夋晥鏃堕棿" prop="validTime"> + <el-date-picker + clearable + v-model="form1.validTime" + type="date" + value-format="yyyy-MM-dd" + placeholder="璇烽�夋嫨鏈夋晥鏃堕棿" + > + </el-date-picker> </el-form-item + ><br /> + <el-form-item label="澶囨敞" prop="remark"> + <el-input + v-model="form1.remark" + type="textarea" + placeholder="璇疯緭鍏ュ唴瀹�" + :rows="2" + label-width="400px" + style="width: 830px" + resize="none" + ></el-input> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer2"> + <el-button type="primary" @click="submitFormS">纭� 瀹�</el-button> + <el-button @click="cancel1">鍙� 娑�</el-button> + </div> + </el-dialog> <el-form :model="queryParams" ref="queryForm" @@ -38,20 +129,23 @@ <el-select :remote-method="getRemoteData" v-model="queryParams.company" - value-key="drugManufacturerId" remote + default-first-option + allow-create filterable + style="width: 200px" placeholder="璇烽�夋嫨鍗曚綅鍚嶇О" clearable - @change="searchSelect" + @change="idFn1" > <el-option v-for="dict in CompanyList" - :key="dict.drugManufacturerId" + :key="dict.cnName" :label="dict.cnName" - :value="dict.cnName" + :value="dict.drugManufacturerId" /> </el-select> + <i class="el-icon-circle-plus-outline" @click="handleAdd1"></i> </el-form-item> <el-form-item label="棰勭害瓒呮湡" prop="isExpire"> <el-select @@ -89,7 +183,6 @@ size="mini" :disabled="multiple" @click="batch" - >鎾ら攢棰勭害</el-button > <!-- v-hasPermi="['reservation:reservation:remove']" --> @@ -100,7 +193,6 @@ size="mini" :disabled="single" @click="receipt" - >琛ユ墦灏忕エ</el-button > <!-- v-hasPermi="['reservation:reservation:remove']" --> @@ -273,17 +365,17 @@ type="text" icon="el-icon-s-order" @click="handleUpdate1(scope.row)" - v-hasPermi="['reservation:reservation:edit']" title="棰勭害璇︾粏" ></el-button> + <!-- v-hasPermi="['reservation:reservation:edit']" --> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" - v-hasPermi="['reservation:reservation:edit']" title="淇敼" ></el-button> + <!-- v-hasPermi="['reservation:reservation:edit']" --> <el-button size="mini" type="text" @@ -452,12 +544,27 @@ style="width: 160px" /> </el-form-item> - <el-form-item label="宸ヤ綔鍗曚綅" prop="company"> - <el-input + <el-form-item label="鍗曚綅鍚嶇О" prop="company"> + <el-select + :remote-method="getRemoteData" v-model="formIn.company" - placeholder="璇疯緭鍏ュ伐浣滃崟浣�" - style="width: 410px" - /> + remote + default-first-option + allow-create + filterable + style="width: 200px" + placeholder="璇烽�夋嫨鍗曚綅鍚嶇О" + clearable + @change="idFn1" + > + <el-option + v-for="dict in CompanyList" + :key="dict.cnName" + :label="dict.cnName" + :value="dict.drugManufacturerId" + /> + </el-select> + <i class="el-icon-circle-plus-outline" @click="handleAdd1"></i> </el-form-item> <el-form-item label="鑱屼笟" prop="career"> <el-select @@ -704,18 +811,114 @@ </el-form> </template> - <div style="text-align: center; margin-bottom: 10px"> + <div + style=" + display: flex; + align-items: center; + justify-content: flex-start; + width: 100%; + " + > + <div + style=" + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-left: 46px; + font-size: 16px; + margin-right: 20px; + " + > + 宸查�夐」鐩潯鏁帮細<span + style="font-weight: 700; color: red; margin-right: 5px" + >{{ this.tableData1.length || 0 }}</span + >鏉� + </div> 宸查�夐」鐩垪琛� </div> <div style=" padding: 0px 6px; border: 1px solid #e6ebf5; + max-height: 650%; + overflow: auto; + width: 916px; + margin-left: 35px; + " + > + <el-table :data="tableData1" border style="width: 100%"> + <el-table-column prop="proName" label="椤圭洰" width="180" align="center"> + </el-table-column> + <el-table-column prop="proType" label="鎬у埆" width="50" align="center"> + <template slot-scope="scope"> + <template v-if="isAll(scope.row.proType)"> + 鍏ㄩ儴 + </template> + <template v-else> + <dict-tag + :options="dict.type.sys_user_sex" + :value="scope.row.proType" + /> + </template> + </template> + </el-table-column> + + <el-table-column prop="ordPrice" label="搴旀敹閲戦" align="center"> + </el-table-column> + <el-table-column label="鎶樻墸" width="160px" align="center"> + <template slot-scope="scope"> + <el-input-number + v-model.number="scope.row.discount" + @input="validateDiscount(scope.row)" + placeholder="杈撳叆鎶樻墸" + size="small" + type="number" + :precision="1" + :step="0.1" + :max="10" + :min="0" + :disabled="true" + > + </el-input-number> + </template> + </el-table-column> + <el-table-column prop="nowPrice" label="瀹炴敹閲戦" align="center"> + </el-table-column> + <el-table-column prop="proCheckMethod" label="鏄惁绌鸿吂" align="center"> + <template slot-scope="scope"> + <dict-tag + :options="dict.type.sys_yes_no" + :value="scope.row.proCheckMethod" + /> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔" align="center" width="80px"> + <template slot-scope="scope"> + <el-button + size="mini" + type="text" + icon="el-icon-delete" + @click="handleDelete1(scope.row)" + title="鍒犻櫎" + > + </el-button> + </template> + </el-table-column> + </el-table> + </div> + + <!-- <div style="text-align: center; margin-bottom: 10px"> + 宸查�夐」鐩垪琛� + </div> --> + <!-- <div + style=" + padding: 0px 6px; + border: 1px solid #e6ebf5; max-height: 420px; overflow: auto; " - > - <el-collapse v-model="index" accordion v-if="list3"> + > --> + <!-- <el-collapse v-model="index" accordion v-if="list3"> <div class="info1" v-for="(item, index) in tableData1" @@ -733,6 +936,16 @@ item.nowPrice + "鍏�)" }} + <div style="font-size: 16px; margin-left: 20px"> + 宸查�夐」鐩潯鏁帮細<span + style=" + font-weight: 700 !important; + color: red; + margin-right: 5px; + " + >{{ item.list.length || 0 }}</span + >鏉� + </div> </template> <el-table :data="item.list" @@ -748,7 +961,39 @@ </el-table-column> <el-table-column prop="ordPrice" label="搴旀敹閲戦"> </el-table-column> + <el-table-column label="鎶樻墸"> + <template slot-scope="scope"> + <el-input-number + v-model.number="scope.row.discount" + @input="validateDiscount(scope.row)" + placeholder="杈撳叆鎶樻墸" + size="small" + type="number" + :precision="1" + :step="0.1" + :max="10" + :min="0" + > + </el-input-number> + </template> + </el-table-column> <el-table-column prop="nowPrice" label="瀹炴敹閲戦"> + </el-table-column> + <el-table-column + label="鎿嶄綔" + align="center" + width="80px" + > + <template slot-scope="scope"> + <el-button + size="mini" + type="text" + icon="el-icon-delete" + @click="handleDelete1(scope.row)" + title="鍒犻櫎" + > + </el-button> + </template> </el-table-column> </el-table> </el-collapse-item> @@ -819,8 +1064,8 @@ </el-table> </el-collapse-item> </div> - </el-collapse> - </div> + </el-collapse> --> + <!-- </div> --> </div> </el-col> </el-row> @@ -1025,12 +1270,27 @@ style="width: 160px" /> </el-form-item> - <el-form-item label="宸ヤ綔鍗曚綅" prop="company"> - <el-input + <el-form-item label="鍗曚綅鍚嶇О" prop="company"> + <el-select + :remote-method="getRemoteData" v-model="formIn.company" - placeholder="璇疯緭鍏ュ伐浣滃崟浣�" - style="width: 410px" - /> + remote + default-first-option + allow-create + filterable + style="width: 200px" + placeholder="璇烽�夋嫨鍗曚綅鍚嶇О" + clearable + @change="idFn1" + > + <el-option + v-for="dict in CompanyList" + :key="dict.cnName" + :label="dict.cnName" + :value="dict.drugManufacturerId" + /> + </el-select> + <i class="el-icon-circle-plus-outline" @click="handleAdd1"></i> </el-form-item> <el-form-item label="鑱屼笟" prop="career"> <el-select @@ -1239,9 +1499,6 @@ ></el-option> </el-select> </el-form-item> - - <!-- <div class="tab1"> --> - <!-- <el-form :inline="true" class="tab1"> --> <el-form-item label="搴旀敹閲戦"> <el-input placeholder="搴旀敹閲戦" @@ -1251,7 +1508,6 @@ ></el-input> </el-form-item> <el-form-item label="浼樻儬鎶樻墸"> - <!-- <el-input style="width: 100px" type="number" v-model="discount" :value="discount"></el-input> --> <el-input-number ref="inputNumber" style="width: 130px" @@ -1289,7 +1545,79 @@ <div style="text-align: center; margin-bottom: 10px"> 宸查�夐」鐩垪琛� </div> + <div + style=" + padding: 0px 6px; + border: 1px solid #e6ebf5; + max-height: 650%; + overflow: auto; + width: 916px; + margin-left: 35px; + " + > + <el-table :data="tableData1" border style="width: 100%"> + <el-table-column prop="proName" label="椤圭洰" width="180" align="center"> + </el-table-column> + <el-table-column prop="proType" label="鎬у埆" width="50" align="center"> + <template slot-scope="scope"> + <template v-if="isAll(scope.row.proType)"> + 鍏ㄩ儴 + </template> + <template v-else> + <dict-tag + :options="dict.type.sys_user_sex" + :value="scope.row.proType" + /> + </template> + </template> + </el-table-column> + + <el-table-column prop="ordPrice" label="搴旀敹閲戦" align="center"> + </el-table-column> + <el-table-column label="鎶樻墸" width="160px" align="center"> + <template slot-scope="scope"> + <el-input-number + v-model.number="scope.row.discount" + @input="validateDiscount(scope.row)" + placeholder="杈撳叆鎶樻墸" + size="small" + type="number" + :precision="1" + :step="0.1" + :max="10" + :min="0" + :disabled="true" + > + </el-input-number> + </template> + </el-table-column> + <el-table-column prop="nowPrice" label="瀹炴敹閲戦" align="center"> + </el-table-column> + <el-table-column prop="proCheckMethod" label="鏄惁绌鸿吂" align="center"> + <template slot-scope="scope"> + <dict-tag + :options="dict.type.sys_yes_no" + :value="scope.row.proCheckMethod" + /> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔" align="center" width="80px"> + <template slot-scope="scope"> + <el-button + size="mini" + type="text" + icon="el-icon-delete" + @click="handleDelete1(scope.row)" + title="鍒犻櫎" + > + </el-button> + </template> + </el-table-column> + </el-table> + </div> + + <!-- <div style=" padding: 0px 6px; border: 1px solid #e6ebf5; @@ -1297,6 +1625,14 @@ overflow: auto; " > + <div + style=" + padding: 0px 6px; + border: 1px solid #e6ebf5; + max-height: 420px; + overflow: auto; + " + ></div> <el-collapse v-model="index" accordion v-if="list3"> <div class="info1" @@ -1315,7 +1651,18 @@ item.nowPrice + ".00鍏�)" }} + <div style="font-size: 16px; margin-left: 20px"> + 宸查�夐」鐩潯鏁帮細<span + style=" + font-weight: 700 !important; + color: red; + margin-right: 5px; + " + >{{ item.list.length || 0 }}</span + >鏉� + </div> </template> + <el-table :data="item.list" border @@ -1335,6 +1682,22 @@ > </el-table-column> <el-table-column prop="ordPrice" label="搴旀敹閲戦"> + </el-table-column> + <el-table-column label="鎶樻墸"> + <template slot-scope="scope"> + <el-input-number + v-model.number="scope.row.discount" + @input="validateDiscount(scope.row)" + placeholder="杈撳叆鎶樻墸" + size="small" + type="number" + :precision="1" + :step="0.1" + :max="10" + :min="0" + > + </el-input-number> + </template> </el-table-column> <el-table-column prop="nowPrice" label="瀹炴敹閲戦"> </el-table-column> @@ -1410,7 +1773,7 @@ </el-collapse-item> </div> </el-collapse> - </div> + </div> --> </div> </el-col> </el-row> @@ -1436,6 +1799,8 @@ </template> <script> +import { addComp } from "@/api/system/comp"; +import Big from "big.js"; import { listReservation, gettjCancel, @@ -1450,6 +1815,9 @@ getPackageListName, getaddtTransition, getTransitionList, + getconfigKey, + delTbBycusCardIdAndProId, + getTransitionList1, } from "@/api/system/tijian"; import { getCompany, queryCompany } from "@/api/team/tuanti"; import user from "@/store/modules/user"; @@ -1496,6 +1864,7 @@ return time.getTime() < Date.now() - 8.64e7; // 涓嶅彲閫夊巻鍙插ぉ銆佷笉鍙�夊綋鍓嶅ぉ銆佸彲閫夋湭鏉ュぉ }, }, + discount: 10, taocan: false, defaultKeys: [], value1: "", @@ -1562,7 +1931,7 @@ multiple: true, nodeobj: {}, // 鏄惁鏄剧ず寮瑰嚭灞� - Seachopen: false, + pacId: "", // 缁撴灉 result: "", @@ -1607,9 +1976,47 @@ cusNumber: null, cusIsvip: null, }, - formIn: {}, + formIn: { + name: "", + age: "", + idCard: "", + remark: null, + pacName: "", + cusaddr: null, + idType: null, + ageUnit: null, + sex: null, + phoe: "", + nation: null, + email: "", + marriage: null, + address: "", + tjCategory: null, + company: "", + career: null, + reservationTime: null, + timeRegion: null, + indexCard: "", + department: "", + }, fmobj: {}, // 琛ㄥ崟鏍¢獙 + form1: {}, + open1: false, + rules1: { + cnName: [{ required: true, trigger: "blur" }], + contactPerson: [{ required: true, trigger: "blur" }], + contactPhone: [ + { + required: true, + trigger: "blur", + }, + { + pattern: /^1[3-9]\d{9}$/, + trigger: "blur", + }, + ], + }, rules: { cusName: [ { required: true, validator: checkPhoneNum, trigger: "blur" }, @@ -1716,6 +2123,117 @@ this.getList(); }, methods: { + isAll(value) { + return value === "" || value === null; + }, + validateDiscount(row) { + if (row.discount == null || isNaN(row.discount)) { + row.discount = 10; + } + if (row.discount > 10) { + row.discount = 10; // 寮哄埗灏嗗�艰缃负鏈�澶у�� + } else if (row.discount < 0) { + row.discount = 0; // 寮哄埗灏嗗�艰缃负鏈�灏忓�� + } + this.updateProPrice(row); // 鏇存柊浠锋牸鎴栧叾浠栭�昏緫 + }, + updateProPrice(row) { + const ordPrice = new Big(row.ordPrice || 0); + const discount = new Big(row.discount || 0); + const result = ordPrice.times(discount.div(10)); // ordPrice * (discount / 10) + row.nowPrice = result.toNumber(); + this.TotalPrice = this.tableData1.reduce((sum, item) => { + return sum.plus(new Big(item.nowPrice || "0")); + }, new Big(0)); + + this.discount = + (Math.floor((this.TotalPrice / this.TotalPrice1) * 100) / 100) * 10; + }, + + /** 鍒犻櫎鎸夐挳鎿嶄綔 */ + handleDelete1(row) { + // console.log(row); + let data = { + cusCardId: row.cusId, + proId: row.parentProId, + }; + this.$modal + .confirm("鏄惁纭鍒犻櫎锛�") + .then(() => { + return delTbBycusCardIdAndProId(data); + }) + .then(() => { + this.TotalPrice1 = 0; + getTransitionList1(row.cusId).then((response) => { + this.tableData1 = response.data; + + this.tableData1.forEach((item) => { + this.TotalPrice1 += item.ordPrice; + this.TotalPrice += item.nowPrice; + }); + this.TotalPrice = this.tableData1.reduce((sum, item) => { + return sum.plus(new Big(item.nowPrice || "0")); + }, new Big(0)); + this.discount = + (Math.floor((this.TotalPrice / this.TotalPrice1) * 100) / 100) * + 10; + }); + this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }) + .catch(() => {}); + }, + getCompanyList() { + this.loading = true; + getconfigKey("team_reservation_default_day").then((res) => { + this.queryParams.yxts = res.msg; + }); + getCompany(this.queryParam).then((response) => { + this.CompanyList = response.data; + this.total = response.total; + this.loading = false; + }); + }, + cancel1() { + this.open1 = false; + this.reset1(); + }, + submitFormS() { + this.$refs["form1"].validate((valid) => { + if (valid) { + addComp(this.form1).then((response) => { + this.$modal.msgSuccess("鏂板鎴愬姛"); + this.open1 = false; + this.getCompanyList(); + }); + } + }); + }, + reset1() { + this.form1 = { + company: "", + payType: "", + name: "", + phoe: "", + signingPic: "", + discount: "", + }; + }, + handleAdd1() { + this.reset1(); + this.open1 = true; + this.title = "娣诲姞浣撴鍗曚綅淇℃伅缁存姢"; + }, + idFn1(value) { + if (value) { + this.form.dictCompId = value; + this.CompanyList.forEach((item) => { + if (item.drugManufacturerId == this.form.dictCompId) { + this.form.compName = item.cnName; + this.queryParams.company = item.cnName; + } + }); + } + }, /** 鏌ヨ浣撴棰勭害鍒楄〃 */ getList() { this.loading = true; @@ -1880,7 +2398,7 @@ getReservation(id).then((response) => { if (response.data) { let cusId = response.data.idCard; - getTransitionList(cusId).then((response) => { + getTransitionList1(cusId).then((response) => { if (response.data) { this.tableData1 = response.data; if (this.tableData1.length != 0) { @@ -1991,9 +2509,10 @@ getReservation(id).then((response) => { if (response.data) { let cusId = response.data.idCard; - getTransitionList(cusId).then((response) => { + getTransitionList1(cusId).then((response) => { if (response.data) { this.tableData1 = response.data; + if (this.tableData1.length != 0) { this.TotalPrice1 = 0; this.tableData1.forEach((item) => { @@ -2504,7 +3023,12 @@ -moz-border-radius: 2em; border-radius: 2em; } - +.dialog-footer2 { + width: 960px; + height: 36px; + display: flex; + justify-content: center; +} /* 淇敼 婊戝潡 */ #printIframe::-webkit-scrollbar-thumb { background-color: #dcdfe6; -- Gitblit v1.8.0