From e17642e99816a4908f81f9500759483b2925d167 Mon Sep 17 00:00:00 2001
From: qinxianzhangyao <11053546+qinxianzhangyao@user.noreply.gitee.com>
Date: 星期四, 12 十月 2023 18:21:08 +0800
Subject: [PATCH] grsf

---
 src/store/modules/user.js             |    1 
 src/views/login.vue                   |   10 +
 src/api/system/examcharge.js          |   37 ++++
 src/views/system/examcharge/index.vue |  491 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 539 insertions(+), 0 deletions(-)

diff --git a/src/api/system/examcharge.js b/src/api/system/examcharge.js
new file mode 100644
index 0000000..44c2c6f
--- /dev/null
+++ b/src/api/system/examcharge.js
@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+// 鑾峰彇浣撴璐圭敤
+export function getTjPrice() {
+    return request({
+        url: '/hosp/new/water/getTjPrice',
+        method: 'get',
+    })
+}
+
+// 鏌ヨ鍙傛暟鍒楄〃
+export function getFlowingWaterList(query) {
+    return request({
+      url: '/hosp/new/water/getFlowingWaterList',
+      method: 'get',
+      params: query
+    })
+  }
+
+
+// 浣撴鏀惰垂鎺ュ彛
+export function addOrderAndDetail(data) {
+    return request({
+        url: '/hosp/new/water/addOrderAndDetail',
+        method: 'post',
+        data
+    })
+}
+
+// 浣撴閫�璐规寜閽帴鍙�
+export function tjRefund(data) {
+    return request({
+        url: '/hosp/new/water/tjRefund',
+        method: 'post',
+        data
+    })
+}
\ No newline at end of file
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 20a2c06..4c23e5e 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -62,6 +62,7 @@
  GetInfo({ commit, state }) {
   return new Promise((resolve, reject) => {
     getInfo().then(res => {
+      localStorage.setItem("securitMessage", JSON.stringify(res.securitMessage));
       const user = res.user
       const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar;
       if (res.roles && res.roles.length > 0) { // 楠岃瘉杩斿洖鐨剅oles鏄惁鏄竴涓潪绌烘暟缁�
diff --git a/src/views/login.vue b/src/views/login.vue
index 511cc79..0e7e3c4 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -218,6 +218,16 @@
 
               });
             } else {
+              const securitMessage = JSON.parse(localStorage.getItem("securitMessage"));
+              if (securitMessage) {
+                if (securitMessage != null) {
+                  this.$message({
+                    message: securitMessage,
+                    type: 'success'
+                  });
+                  localStorage.removeItem("securitMessage");
+                }
+              }
               this.$router.push({ path: this.redirect || "/" }).catch(() => { });
             }
 
diff --git a/src/views/system/examcharge/index.vue b/src/views/system/examcharge/index.vue
new file mode 100644
index 0000000..8f0d5b3
--- /dev/null
+++ b/src/views/system/examcharge/index.vue
@@ -0,0 +1,491 @@
+<template>
+    <!-- <div class="app-container">
+        <div class="grid-content bg-purple">
+            <el-form :inline="true" ref="form" :model="form" class="demo-form-inline" label-width="80px" :rules="rules">
+                <el-form-item label="濮撳悕" prop="name">
+                    <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鍚�" />
+                </el-form-item>
+                <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+                    <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+                </el-form-item>
+                <el-form-item label="浣撴椤圭洰" prop="tjPro">
+                    <el-input ref="inputName" v-model="form.tjPro" placeholder="璇疯緭鍏ヤ綋妫�椤圭洰" />
+                </el-form-item>
+                <el-form-item label="鏁伴噺" prop="number">
+                    <el-input ref="inputName" v-model="form.number" placeholder="璇疯緭鍏ユ暟閲�" style="width: 100px;" />
+                </el-form-item>
+                <el-form-item label="搴旀敹閲戦" prop="ys">
+                    <el-input v-model="form.ys" placeholder="閲戦" :disabled="true" style="width: 100px;"></el-input>
+                </el-form-item>
+                <el-form-item label="浼樻儬鎶樻墸" prop="zk">
+                    <el-input-number v-model="form.zk" :precision="2" :step="0.1" :max="10" :min="1" @change="numberChange"
+                        :disabled="isfalse"></el-input-number>
+                </el-form-item>
+                <el-form-item label="瀹炴敹閲戦" prop="ss">
+                    <el-input v-model="form.ss" placeholder="瀹炰粯" style="width: 100px;">
+                    </el-input>
+                </el-form-item>
+                <el-form-item label="浠樻绫诲瀷" prop="type">
+                    <el-select style="width: 198px" v-model="form.type" placeholder="璇烽�夋嫨浠樻绫诲瀷">
+                        <el-option v-for="dict in dict.type.dict_pay_type" :key="dict.value" :label="dict.label"
+                            :value="dict.value"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button style="margin-left: 15px" type="primary" size="mini" :disabled="disabled == 1 ? true : false"
+                        @click="SubmitEvent">鏀惰垂</el-button>
+                    <el-button style="margin-left: 10px" type="primary" size="mini" @click="resetQuery">閲嶇疆</el-button>
+                    <el-button v-bind:icon="iconData" size="mini" @click="handleToggleSearch"></el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+
+        <el-row :gutter="10" class="mb8" v-if="toggleSearchStatus == '1'">
+            <el-col :span="1.5">
+                <el-form :inline="true" ref="form" :model="queryParams" class="demo-form-inline" label-width="80px" :rules="rules">
+                    <el-form-item label="濮撳悕" prop="name">
+                        <el-input v-model="queryParams.name" placeholder="璇疯緭鍏ュ鍚�" />
+                    </el-form-item>
+                    <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+                        <el-input v-model="queryParams.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+                    </el-form-item>
+                </el-form>
+            </el-col>
+            <el-col :span="1.5">
+                <el-button type="primary" icon="el-icon-search" size="mini" @click="handleUpdate"
+                    v-hasPermi="['hosp:org:edit']">鏌ヨ</el-button>
+            </el-col>
+        </el-row>
+        <el-table v-loading="loading" :data="tableList" @selection-change="handleSelect" border>
+            <el-table-column type="selection" width="55" align="center" />
+            <el-table-column label="濮撳悕" align="center" prop="customer.cusName" width="110px" />
+            <el-table-column label="鎵嬫満鍙�" align="center" prop="customer.cusPhone" width="120px"
+                :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="璁㈠崟娴佹按鍙�" align="center" prop="waterId" width="210px" />
+            <el-table-column label="浣撴椤圭洰" align="center" prop="proname" />
+            <el-table-column label="搴旀敹閲戦" align="center" prop="copeWith" />
+            <el-table-column label="瀹炴敹閲戦" align="center" prop="paidIn" />
+            <el-table-column label="浠樻绫诲瀷" align="center" prop="payType" width="100px">
+                <template slot-scope="scope">
+                    <dict-tag :options="dict.type.dict_pay_type" :value="scope.row.payType" />
+                </template>
+            </el-table-column>
+            <el-table-column label="鏀惰垂鍛�" align="center" prop="updateBy" />
+            <el-table-column fixed="right" label="鎿嶄綔" align="center" class-name="small-padding ">
+                <template slot-scope="scope">
+                    <el-button size="mini" type="text" @click="handlerefund(scope.row)" v-hasPermi="['system:dept:edit']"
+                        v-if="scope.row.payStasus == '1'">閫�璐�</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+    </div> -->
+    <div class="app-container">
+        <el-row :gutter="24">
+            <!--閮ㄩ棬鏁版嵁-->
+            <el-col :span="4" :xs="24">
+                <el-form :inline="true" ref="form" :model="form" class="demo-form-inline" label-width="78px" :rules="rules">
+                    <el-form-item label="濮撳悕" prop="name">
+                        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鍚�" />
+                    </el-form-item>
+                    <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+                        <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+                    </el-form-item>
+                    <el-form-item label="浣撴椤圭洰" prop="tjPro">
+                        <el-input ref="inputName" v-model="form.tjPro" placeholder="璇疯緭鍏ヤ綋妫�椤圭洰" />
+                    </el-form-item>
+                    <el-form-item label="鏁伴噺" prop="number">
+                        <el-input ref="inputName" v-model="form.number" placeholder="璇疯緭鍏ユ暟閲�" />
+                    </el-form-item>
+                    <el-form-item label="搴旀敹閲戦" prop="ys">
+                        <el-input v-model="form.ys" placeholder="閲戦" :disabled="true"></el-input>
+                    </el-form-item>
+                    <el-form-item label="浼樻儬鎶樻墸" prop="zk">
+                        <el-input-number v-model="form.zk" :precision="2" :step="0.1" :max="10" :min="1"
+                            @change="numberChange" :disabled="isfalse"></el-input-number>
+                    </el-form-item>
+                    <el-form-item label="瀹炴敹閲戦" prop="ss">
+                        <el-input v-model="form.ss" placeholder="瀹炰粯">
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item label="浠樻绫诲瀷" prop="type">
+                        <el-select style="width: 198px" v-model="form.type" placeholder="璇烽�夋嫨浠樻绫诲瀷">
+                            <el-option v-for="dict in dict.type.dict_pay_type" :key="dict.value" :label="dict.label"
+                                :value="dict.value"></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-button style="margin-left: 15px" type="primary" size="mini"
+                            :disabled="disabled == 1 ? true : false" @click="SubmitEvent">鏀惰垂</el-button>
+                        <el-button style="margin-left: 10px" type="primary" size="mini" @click="resetQuery">閲嶇疆</el-button>
+                    </el-form-item>
+                </el-form>
+            </el-col>
+
+            <!--鐢ㄦ埛鏁版嵁-->
+            <el-col :span="17" :xs="24" style="padding: 0 10px;">
+                <el-row :gutter="10" class="mb8">
+                    <el-col :span="1.5">
+                        <el-form :inline="true" ref="form" :model="queryParams" class="demo-form-inline" label-width="80px"
+                            :rules="rules">
+                            <el-form-item label="濮撳悕" prop="name">
+                                <el-input v-model="queryParams.name" placeholder="璇疯緭鍏ュ鍚�" />
+                            </el-form-item>
+                            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+                                <el-input v-model="queryParams.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+                            </el-form-item>
+                        </el-form>
+                    </el-col>
+                    <el-col :span="1.5">
+                        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleUpdate"
+                            v-hasPermi="['hosp:org:edit']">鏌ヨ</el-button>
+                    </el-col>
+                </el-row>
+                <div style="margin-bottom: 10px;">
+                    <el-radio-group v-model="queryParams.type" @input="handleUpdate" style="margin-left: 30px">
+                        <el-radio-button label="1">鏀惰垂璁板綍</el-radio-button>
+                        <el-radio-button label="2">閫�璐硅褰�</el-radio-button>
+                    </el-radio-group>
+                </div>
+
+
+                <el-table v-loading="loading" :data="tableList" @selection-change="handleSelect" border max-height="740px"
+                    :row-style="changRed" style="margin-left: 30px;">
+                    <el-table-column type="selection" width="55" align="center" />
+                    <el-table-column label="濮撳悕" align="center" prop="customer.cusName" width="90px" />
+                    <el-table-column label="鎵嬫満鍙�" align="center" prop="customer.cusPhone" width="120px"
+                        :show-overflow-tooltip="true"></el-table-column>
+                    <el-table-column label="璁㈠崟娴佹按鍙�" align="center" prop="waterId" width="210px" />
+                    <el-table-column label="浣撴椤圭洰" align="center" prop="proname" />
+                    <el-table-column label="搴旀敹閲戦" align="center" prop="copeWith" width="90px" />
+                    <el-table-column label="瀹炴敹閲戦" align="center" prop="paidIn" width="90px" />
+                    <el-table-column label="浠樻绫诲瀷" align="center" prop="payType" width="90px">
+                        <template slot-scope="scope">
+                            <dict-tag :options="dict.type.dict_pay_type" :value="scope.row.payType" />
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="鏀惰垂鍛�" align="center" prop="updateBy" width="110px" />
+                    <el-table-column label="鏀堕��鏃堕棿" align="center" prop="updateTime" />
+                    <el-table-column fixed="right" label="鎿嶄綔" align="center" class-name="small-padding " width="120px"
+                        v-if="queryParams.type == '1'">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="text" @click="handlerefund(scope.row)"
+                                v-hasPermi="['system:dept:edit']" v-if="scope.row.remarks != '宸查��璐�'">閫�璐�</el-button>
+                            <el-button size="mini" type="text" v-hasPermi="['system:dept:edit']"
+                                v-if="scope.row.remarks == '宸查��璐�'">{{ scope.row.remarks }}</el-button>
+                            <el-button size="mini" type="text" v-hasPermi="['system:dept:edit']"
+                                v-if="scope.row.remarks != '宸查��璐�'" @click="receipt(scope.row)">琛ユ墦灏忕エ</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </el-col>
+
+        </el-row>
+        <div style="
+              position: absolute;
+              bottom: 100px;
+              width: 360px;
+              display: none;
+            ">
+            <div id="printBill" style="width: 280px;font-size: 1px;" ref="printContent">
+                <div style="font-size: 1px;">
+                    <div style="text-align: center;">
+                        <h3>{{ hospName }}灏忕エ</h3>
+                    </div>
+                 
+                    <div style="margin-top: 4px;">
+                        <div>
+                            濮撳悕:{{ formIn.name }}
+                        </div>
+                        <div>
+                            鐢佃瘽:{{ formIn.phone }}
+                        </div>
+                        <div>
+                            浣撴椤圭洰:{{ formIn.tjPro }}
+                        </div>
+                        <div>
+                            鎶樻墸:{{ formIn.zk + "%" }}
+                        </div>
+                        <div>
+                            瀹炴敹閲戦:{{ formIn.ss }}鍏�
+                        </div>
+                        <div>
+                            鏀惰垂鏃堕棿:{{ currentDate + " " + currentTime }}
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+    
+<script>
+import { getTjPrice, addOrderAndDetail, tjRefund, getFlowingWaterList } from "@/api/system/examcharge";
+import { getInfo } from "@/api/login";
+import printJS from "print-js";
+export default {
+    dicts: ["dict_pay_type"],
+    name: "Examcharge",
+
+    data() {
+        return {
+
+            // 閬僵灞�
+            loading: false,
+            disabled: "",
+            iconData: "el-icon-arrow-down",
+            DataList: [],
+            tableList: [],
+            list: [],
+            // 閫変腑鏁扮粍
+            ids: [],
+            getInfodis: "",
+            waterId: "",
+            isfalse: false,
+            toggleSearchStatus: "0",
+            queryParams: {
+                name: "",
+                phone: "",
+                type: "1"
+            },
+            formIn: {
+                name: "",
+                tjPro: "浣撴璐�",
+                phone: "",
+                number: 1,
+                ys: "0",
+                ss: "0",
+                type: "0",
+                zk: 10,
+
+            },
+            hospName:"",
+            currentDate: "",
+            currentTime: "",
+            // 琛ㄥ崟鍙傛暟
+            form: {
+                name: "",
+                tjPro: "浣撴璐�",
+                phone: "",
+                number: 1,
+                ys: "0",
+                ss: "0",
+                type: "0",
+                zk: 10,
+
+            },
+            // 琛ㄥ崟鏍¢獙
+            rules: {
+                name: [{ required: true, message: "濮撳悕涓嶈兘涓虹┖", trigger: "change" }],
+                tjPro: [
+                    { required: true, message: "浣撴椤圭洰涓嶈兘涓虹┖", trigger: "change" },
+                ],
+                type: [
+                    { required: true, message: "浠樻绫诲瀷涓嶈兘涓虹┖", trigger: "blur" },
+                ],
+            },
+        };
+    },
+    created() {
+        this.getList();
+        this.handleUpdate();
+        this.getCurrentDateTime()
+
+        this.startTimer()
+    },
+    methods: {
+        getCurrentDateTime() {
+
+            const currentDate = new Date()
+
+            // 鏍煎紡鍖栨棩鏈燂細YYYY-MM-DD
+
+            const year = currentDate.getFullYear()
+
+            const month = String(currentDate.getMonth() + 1).padStart(2, '0')
+
+            const day = String(currentDate.getDate()).padStart(2, '0')
+
+            this.currentDate = `${year}-${month}-${day}`
+
+            // 鏍煎紡鍖栨椂闂达細HH:mm:ss
+
+            const hours = String(currentDate.getHours()).padStart(2, '0')
+
+            const minutes = String(currentDate.getMinutes()).padStart(2, '0')
+
+            const seconds = String(currentDate.getSeconds()).padStart(2, '0')
+
+            this.currentTime = `${hours}:${minutes}:${seconds}`
+
+        },
+
+        startTimer() {
+
+            this.timer = setInterval(() => {
+
+                this.getCurrentDateTime()
+
+            }, 1000) //姣忕閽熸洿鏂颁竴娆�
+
+        },
+
+        beforeDestroy() {
+
+            clearInterval(this.timer)
+
+        },//娓呴櫎瀹氭椂鍣紝浠ラ伩鍏嶅唴瀛樻硠闇层��
+
+        getList() {
+            getTjPrice().then(res => {
+                if (res.data) {
+                    const r = /^\+?[0-9][0-9]*$/; //姝f暣鏁帮紙鍙互0鎵撳ご锛�
+                    if (r.test(res.data)) {
+                        this.form.ys = res.data + ".00";
+                    } else {
+                        this.form.ys = res.data
+                    }
+
+                    this.form.ss = this.form.ys
+                }
+            })
+            getInfo(this.queryParams).then((response) => {
+                this.hospName = response.hospName;
+            });
+
+        },
+        changRed({ row }) {
+            if (row.remarks == '宸查��璐�') { // 鍙橀鑹茬殑鏉′欢
+                return {
+                    backgroundColor: "#9cdcfe"  // 杩欎釜return鐨勫氨鏄牱寮� 鍙互鏄痗olor 涔熷彲浠ユ槸backgroundColor
+                }
+            }
+        },
+        handleToggleSearch() {
+            if (this.toggleSearchStatus == "0") {
+                this.toggleSearchStatus = "1"
+                this.iconData = "el-icon-arrow-up"
+            } else {
+                this.toggleSearchStatus = "0"
+                this.iconData = "el-icon-arrow-down"
+            }
+
+        },
+        //閲嶇疆鎸夐挳
+        resetQuery() {
+            this.form = {
+                name: null,
+                tjPro: "浣撴璐�",
+                phone: null,
+                number: 1,
+                ys: "0",
+                ss: "0",
+                type: "0",
+                zk: 10,
+            };
+            this.resetForm("form");
+        },
+
+        // 琛ㄦ牸鍗曢��
+        handleSelect(selection, val) {
+            this.DataList = this.$refs.multipleTable.selection;
+        },
+        handleUpdate() {
+            getFlowingWaterList(this.queryParams).then(res => {
+                this.tableList = res.data
+                this.tableList.forEach(element => {
+                    element.proname = "浣撴璐�"
+                });
+            })
+        },
+
+        // 鎶樻墸
+        numberChange(currentValue, oldValue) {
+            this.form.zk = currentValue;
+            this.form.ss = (
+                this.form.ys *
+                (this.form.zk / 10)
+            ).toFixed(2);
+            const r = /^\+?[0-9][0-9]*$/; //姝f暣鏁帮紙鍙互浠ユ墦澶达級
+            //const r=/^\+?[1-9][0-9]*$/;//姝f暣鏁�
+            if (r.test(this.form.ss)) {
+                this.form.ss = this.form.ss + ".00";
+            }
+        },
+        receipt(row) {
+            this.formIn = {
+                name: row.customer.cusName,
+                tjPro: "浣撴璐�",
+                phone: row.customer.cusPhone,
+                ys: row.copeWith,
+                ss: row.paidIn,
+                zk: row.discount,
+            }
+            this.$nextTick(() => {
+                const style =
+                    "@media print { @page{margin:0 10mm,size:4mm 6mm;}};"; //鎵撳嵃鏃跺幓鎺夌湁椤电湁灏�
+                printJS({
+                    printable: "printBill", // 鏍囩鍏冪礌id
+                    noPrint: ".noPrint",
+                    type: 'html',
+                    header: "",
+                    targetStyles: ["*"],
+                    maxWidth: "800",
+                    scanStyles: true, //鎵撳嵃蹇呴』鍔犱笂锛屼笉鐒堕〉闈笂鐨刢ss鏍峰紡鏃犳晥
+                    style,
+                });
+            });
+        },
+
+        // 鏀惰垂
+        SubmitEvent() {
+            if (this.form.name) {
+                this.formIn = this.form
+                addOrderAndDetail(this.form).then(res => {
+                    if (res.code == 200) {
+                        this.$modal.msgSuccess("鏀惰垂鎴愬姛");
+
+                        this.receipt()
+                        this.resetQuery()
+                        this.handleUpdate()
+                        this.getList()
+                    }
+                })
+            } else {
+                this.$modal.msgError("璇峰~鍐欏甫鏄熷彿淇℃伅");
+            }
+
+        },
+        handlerefund(row) {
+            this.$confirm('鎮ㄧ‘瀹氳閫�璐瑰悧?', '鎻愮ず', {
+                confirmButtonText: '纭畾',
+                cancelButtonText: '鍙栨秷',
+                type: 'warning'
+            }).then(() => {
+                let data = {
+                    waterId: row.waterId
+                }
+                tjRefund(data).then(res => {
+                    if (res.code == 200) {
+                        this.$modal.msgSuccess("閫�璐规垚鍔�");
+                        this.handleUpdate()
+                    }
+
+                })
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '宸插彇娑堥��璐�'
+                });
+            });
+
+
+        }
+    },
+};
+</script>
+  
+<style>
+#sig .el-table__header-wrapper .el-checkbox {
+    display: none;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.8.0