From a5cba9ab040f6f97558046885dce3017f9bab7e9 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期二, 11 八月 2026 14:12:29 +0800
Subject: [PATCH] 提交
---
src/views/knowledge/drug/index.vue | 623 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 610 insertions(+), 13 deletions(-)
diff --git a/src/views/knowledge/drug/index.vue b/src/views/knowledge/drug/index.vue
index aa54bde..b50a5a2 100644
--- a/src/views/knowledge/drug/index.vue
+++ b/src/views/knowledge/drug/index.vue
@@ -1,27 +1,624 @@
<template>
- <div>
-鑽搧鐭ヨ瘑搴�
+ <div class="app-container">
+ <!-- ===== 鎼滅储鏍� ===== -->
+ <el-form
+ :model="queryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ v-show="showSearch"
+ label-width="88px"
+ >
+ <el-form-item label="鑽搧鍚嶇О" prop="itemName">
+ <el-input
+ v-model="queryParams.itemName"
+ placeholder="璇疯緭鍏ヨ嵂鍝佸悕绉�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鑽搧缂栫爜" prop="itemCode">
+ <el-input
+ v-model="queryParams.itemCode"
+ placeholder="璇疯緭鍏ヨ嵂鍝佺紪鐮�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鐢熶骇鍘傚" prop="manufacturerName">
+ <el-input
+ v-model="queryParams.manufacturerName"
+ placeholder="璇疯緭鍏ョ敓浜у巶瀹�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鑽搧绫诲瀷" prop="medicationType">
+ <el-input
+ v-model="queryParams.medicationType"
+ placeholder="璇疯緭鍏ヨ嵂鍝佺被鍨�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="mini"
+ @click="handleQuery"
+ >鎼滅储</el-button
+ >
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+ >閲嶇疆</el-button
+ >
+ </el-form-item>
+ </el-form>
+
+ <!-- ===== 鎿嶄綔鏍� ===== -->
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="handleAdd"
+ >鏂板</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="mini"
+ :disabled="single"
+ @click="handleUpdate"
+ >淇敼</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ size="mini"
+ :disabled="multiple"
+ @click="handleDelete"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="mini"
+ @click="handleExport"
+ >瀵煎嚭</el-button
+ >
+ </el-col>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
+ </el-row>
+
+ <!-- ===== 琛ㄦ牸 ===== -->
+ <el-table
+ v-loading="loading"
+ :data="drugList"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55" align="center" />
+ <el-table-column
+ label="鑽搧缂栫爜"
+ align="center"
+ prop="itemCode"
+ :show-overflow-tooltip="true"
+ width="120"
+ />
+ <el-table-column
+ label="鑽搧鍚嶇О"
+ align="center"
+ prop="itemName"
+ :show-overflow-tooltip="true"
+ min-width="150"
+ />
+ <el-table-column
+ label="閫氱敤鍚�"
+ align="center"
+ prop="medicationCommonName"
+ :show-overflow-tooltip="true"
+ min-width="120"
+ />
+ <el-table-column
+ label="瑙勬牸"
+ align="center"
+ prop="specification"
+ width="120"
+ />
+ <el-table-column
+ label="鍓傚瀷"
+ align="center"
+ prop="doseFormName"
+ width="100"
+ />
+ <el-table-column
+ label="鐢熶骇鍘傚"
+ align="center"
+ prop="manufacturerName"
+ :show-overflow-tooltip="true"
+ min-width="150"
+ />
+ <el-table-column
+ label="鎵瑰噯鏂囧彿"
+ align="center"
+ prop="licenseNumber"
+ width="140"
+ />
+ <el-table-column
+ label="闆跺敭浠�"
+ align="center"
+ prop="retailPrice"
+ width="100"
+ />
+ <el-table-column label="鐘舵��" align="center" prop="status" width="80">
+ <template slot-scope="scope">
+ <el-tag
+ :type="scope.row.status == 1 ? 'success' : 'danger'"
+ size="small"
+ >
+ {{ scope.row.status == 1 ? "鍚敤" : "绂佺敤" }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="160"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleUpdate(scope.row)"
+ >淇敼</el-button
+ >
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-delete"
+ @click="handleDelete(scope.row)"
+ >鍒犻櫎</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+
+ <!-- ===== 鏂板/淇敼寮圭獥 ===== -->
+ <el-dialog
+ :title="title"
+ :visible.sync="open"
+ width="700px"
+ append-to-body
+ :close-on-click-modal="false"
+ >
+ <el-form ref="form" :model="form" :rules="rules" label-width="110px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑽搧鍚嶇О" prop="itemName">
+ <el-input v-model="form.itemName" placeholder="璇疯緭鍏ヨ嵂鍝佸悕绉�" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑽搧缂栫爜" prop="itemCode">
+ <el-input v-model="form.itemCode" placeholder="璇疯緭鍏ヨ嵂鍝佺紪鐮�" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑽搧閫氱敤鍚�" prop="medicationCommonName">
+ <el-input
+ v-model="form.medicationCommonName"
+ placeholder="璇疯緭鍏ヨ嵂鍝侀�氱敤鍚�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑽搧璇嗗埆鐮�">
+ <el-input
+ v-model="form.identificationCode"
+ placeholder="璇疯緭鍏ヨ嵂鍝佽瘑鍒爜"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="瑙勬牸" prop="specification">
+ <el-input
+ v-model="form.specification"
+ placeholder="濡� 0.25g*24绮�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍓傚瀷">
+ <el-input v-model="form.doseFormName" placeholder="濡� 鑳跺泭鍓�" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐢熶骇鍘傚" prop="manufacturerName">
+ <el-input
+ v-model="form.manufacturerName"
+ placeholder="璇疯緭鍏ョ敓浜у巶瀹�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎵瑰噯鏂囧彿">
+ <el-input
+ v-model="form.licenseNumber"
+ placeholder="璇疯緭鍏ユ壒鍑嗘枃鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑽搧绫诲瀷" prop="medicationType">
+ <el-input v-model="form.medicationType" placeholder="濡� 鎶楃敓绱�" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="闆跺敭浠�">
+ <el-input-number
+ v-model="form.retailPrice"
+ :precision="2"
+ :min="0"
+ style="width: 100%"
+ placeholder="璇疯緭鍏ラ浂鍞环"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="灏忓寘瑁呭崟浣�">
+ <el-input v-model="form.smallPackageUnit" placeholder="濡� 鐩�" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="澶у寘瑁呭崟浣�">
+ <el-input v-model="form.largePackageUnit" placeholder="濡� 绠�" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="澶у皬鍖呰杞崲姣�">
+ <el-input-number
+ v-model="form.smallLargePackageRatio"
+ :min="0"
+ style="width: 100%"
+ placeholder="澶у皬鍖呰杞崲姣�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select
+ v-model="form.status"
+ placeholder="璇烽�夋嫨鐘舵��"
+ style="width: 100%"
+ >
+ <el-option label="鍚敤" :value="1" />
+ <el-option label="绂佺敤" :value="0" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="榛樿鐢ㄦ硶">
+ <el-input
+ v-model="form.defaultUsageName"
+ placeholder="璇疯緭鍏ラ粯璁ょ敤娉�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐗规畩鑽搧">
+ <el-input
+ v-model="form.specialDrugsName"
+ placeholder="璇疯緭鍏ョ壒娈婅嵂鍝佸悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- ===== 鍓傞噺鏄庣粏鍒楄〃 ===== -->
+ <el-divider content-position="left">鍓傞噺鏄庣粏</el-divider>
+ <el-button
+ type="primary"
+ size="small"
+ icon="el-icon-plus"
+ @click="addDoseRow"
+ style="margin-bottom: 10px"
+ >娣诲姞鍓傞噺</el-button
+ >
+ <el-table
+ :data="form.doseInfoList"
+ border
+ size="small"
+ style="width: 100%"
+ >
+ <el-table-column label="鍓傞噺" width="100" align="center">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.dose"
+ :min="0"
+ size="small"
+ controls-position="right"
+ style="width: 80px"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="灏忓寘瑁呮暟閲�" width="120" align="center">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.doseSmallPackageNum"
+ :min="0"
+ size="small"
+ controls-position="right"
+ style="width: 90px"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="鍗曚綅" align="center">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.doseUnit"
+ size="small"
+ placeholder="濡� 绮�"
+ style="width: 70px"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="鍗曚綅绫诲瀷" align="center">
+ <template slot-scope="scope">
+ <el-select
+ v-model="scope.row.doseUnitType"
+ size="small"
+ placeholder="閫夋嫨"
+ style="width: 90px"
+ >
+ <el-option label="涓�" :value="1" />
+ <el-option label="鍏�" :value="2" />
+ <el-option label="姣崌" :value="3" />
+ <el-option label="姣厠" :value="4" />
+ </el-select>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="70" align="center">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="danger"
+ icon="el-icon-delete"
+ @click="removeDoseRow(scope.$index)"
+ />
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="cancel">鍙� 娑�</el-button>
+ <el-button type="primary" :loading="submitLoading" @click="submitForm"
+ >纭� 瀹�</el-button
+ >
+ </div>
+ </el-dialog>
</div>
</template>
<script>
+import {
+ listMedication,
+ getMedication,
+ addMedication,
+ updateMedication,
+ delMedication,
+ exportMedication,
+} from "@/api/knowledge/drug";
+
export default {
- data () {
+ name: "Drug",
+ data() {
return {
-
- }
+ loading: false,
+ submitLoading: false,
+ showSearch: true,
+ ids: [],
+ single: true,
+ multiple: true,
+ total: 0,
+ drugList: [],
+ title: "",
+ open: false,
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ itemName: undefined,
+ itemCode: undefined,
+ manufacturerName: undefined,
+ medicationType: undefined,
+ },
+ form: {
+ doseInfoList: [],
+ },
+ rules: {
+ itemName: [
+ { required: true, message: "鑽搧鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ itemCode: [
+ { required: true, message: "鑽搧缂栫爜涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ medicationCommonName: [
+ { required: true, message: "鑽搧閫氱敤鍚嶄笉鑳戒负绌�", trigger: "blur" },
+ ],
+ manufacturerName: [
+ { required: true, message: "鐢熶骇鍘傚涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ specification: [
+ { required: true, message: "瑙勬牸涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ medicationType: [
+ { required: true, message: "鑽搧绫诲瀷涓嶈兘涓虹┖", trigger: "blur" },
+ ],
+ status: [
+ { required: true, message: "鐘舵�佷笉鑳戒负绌�", trigger: "change" },
+ ],
+ },
+ };
},
-
- created () {
-
+ created() {
+ this.getList();
},
-
methods: {
+ // ===== 鍒楄〃 =====
+ getList() {
+ this.loading = true;
+ listMedication(this.queryParams)
+ .then((res) => {
+ this.drugList = res.rows || [];
+ this.total = res.total || 0;
+ this.loading = false;
+ })
+ .catch(() => {
+ this.loading = false;
+ });
+ },
+ handleQuery() {
+ this.queryParams.pageNum = 1;
+ this.getList();
+ },
+ resetQuery() {
+ this.resetForm("queryForm");
+ this.handleQuery();
+ },
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.id);
+ this.single = selection.length !== 1;
+ this.multiple = !selection.length;
+ },
- }
-}
+ // ===== 鏂板/淇敼 =====
+ handleAdd() {
+ this.reset();
+ this.title = "鏂板鑽搧";
+ this.open = true;
+ },
+ handleUpdate(row) {
+ this.reset();
+ const id = row.id || this.ids[0];
+ this.title = "淇敼鑽搧";
+ getMedication(id).then((res) => {
+ this.form = res.data || {};
+ this.form.doseInfoList = this.form.doseInfoList || [];
+ this.open = true;
+ });
+ },
+ submitForm() {
+ this.$refs["form"].validate((valid) => {
+ if (!valid) return;
+ this.submitLoading = true;
+ const api = this.form.id
+ ? updateMedication(this.form)
+ : addMedication(this.form);
+ api
+ .then((res) => {
+ if (res.code === 200) {
+ this.$modal.msgSuccess(this.form.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+ this.open = false;
+ this.getList();
+ }
+ })
+ .finally(() => {
+ this.submitLoading = false;
+ });
+ });
+ },
+ cancel() {
+ this.open = false;
+ this.reset();
+ },
+ reset() {
+ this.form = { status: 1, doseInfoList: [] };
+ this.resetForm("form");
+ },
+
+ // ===== 鍓傞噺鏄庣粏 =====
+ addDoseRow() {
+ this.form.doseInfoList.push({
+ dose: null,
+ doseSmallPackageNum: null,
+ doseUnit: "",
+ doseUnitType: 1,
+ });
+ },
+ removeDoseRow(index) {
+ this.form.doseInfoList.splice(index, 1);
+ },
+
+ // ===== 鍒犻櫎 =====
+ handleDelete(row) {
+ const ids = row.id ? [row.id] : this.ids;
+ this.$modal
+ .confirm("鏄惁纭鍒犻櫎鎵�閫夎嵂鍝佷俊鎭紵")
+ .then(() => {
+ return delMedication(JSON.stringify(ids));
+ })
+ .then((res) => {
+ if (res.code === 200) {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ }
+ })
+ .catch(() => {});
+ },
+
+ // ===== 瀵煎嚭 =====
+ handleExport() {
+ this.download(
+ "smartor/medicationitem/export",
+ { ...this.queryParams },
+ `鑽搧淇℃伅_${new Date().getTime()}.xlsx`
+ );
+ },
+ },
+};
</script>
-<style lang='scss' scoped>
-
+<style lang="scss" scoped>
+::v-deep .el-divider__text {
+ font-size: 14px;
+ font-weight: 600;
+}
</style>
--
Gitblit v1.9.3