wangxy преди 1 месец
родител
ревизия
08815f3383
променени са 3 файла, в които са добавени 321 реда и са изтрити 518 реда
  1. 16 0
      src/api/store/storeOrder.js
  2. 181 516
      src/views/company/orderApprove/list.vue
  3. 124 2
      src/views/store/storeOrder/list.vue

+ 16 - 0
src/api/store/storeOrder.js

@@ -260,3 +260,19 @@ export function approveOrderList(query) {
   })
 }
 
+export function financeAuditList(query) {
+  return request({
+    url: '/store/storeOrder/financeAuditList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function financeAudit(data) {
+  return request({
+    url: '/store/storeOrder/financeAudit',
+    method: 'post',
+    data: data
+  })
+}
+

+ 181 - 516
src/views/company/orderApprove/list.vue

@@ -1,28 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
-      <el-form-item label="所属部门" prop="deptId">
-        <treeselect style="width:220px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
-      </el-form-item>
-      <el-form-item label="店铺" prop="storeId">
-        <el-select v-model="queryParams.storeId" placeholder="店铺" clearable size="small" filterable>
-          <el-option
-            v-for="dict in storeOPtions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="会员ID" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入会员ID"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="订单号" prop="orderCode">
         <el-input
           v-model="queryParams.orderCode"
@@ -32,191 +10,28 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="员工姓名" prop="companyUserNickName">
-        <el-input
-          style="width:220px"
-          v-model="queryParams.companyUserNickName"
-          placeholder="请输入员工姓名"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="物流状态" prop="deliveryStatus">
-        <el-select style="width:220px" v-model="queryParams.deliveryStatus" placeholder="请选择物流状态" clearable size="small">
-          <el-option
-            v-for="item in deliveryStatusOptions"
-            :key="item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="结算状态" prop="deliveryPayStatus">
-        <el-select style="width:220px" v-model="queryParams.deliveryPayStatus" placeholder="请选择物流结算状态" clearable size="small">
-          <el-option
-            v-for="item in deliveryPayStatusOptions"
-            :key="item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="收货人" prop="userName">
-        <el-input
-          v-model="queryParams.userName"
-          placeholder="请输入收货人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="套餐名称" prop="packageSecondName">
-        <el-input
-          v-model="queryParams.packageSecondName"
-          placeholder="请输入套餐别名"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否首次进线" prop="isFirst">
-        <el-select filterable v-model="queryParams.isFirst" placeholder="状态" clearable size="small">
-          <el-option
-            v-for="dict in orOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
+      <el-form-item label="审核类型" prop="auditType">
+        <el-select v-model="queryParams.auditType" placeholder="请选择审核类型" clearable size="small">
+          <el-option label="价格变更审核" :value="1" />
+          <el-option label="订单完成审核" :value="2" />
         </el-select>
       </el-form-item>
-      <el-form-item label="档期归属" prop="scheduleId">
-        <el-select multiple filterable style="width: 200px" v-model="scheduleIdArr" placeholder="请选择档期" clearable size="small">
-          <el-option
-            v-for="item in scheduleOptions"
-            :key="'scheduleId'+item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="订单购买类型" prop="orderBuyType">
-        <el-select multiple filterable style="width: 200px" v-model="buyTypeArr" placeholder="请选择购买类型" clearable size="small">
-          <el-option
-            v-for="item in orderBuyTypeOptions"
-            :key="'bugType'+item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
+      <el-form-item label="审核状态" prop="auditStatus">
+        <el-select v-model="queryParams.auditStatus" placeholder="请选择审核状态" clearable size="small">
+          <el-option label="待审核" :value="0" />
+          <el-option label="审核通过" :value="1" />
+          <el-option label="审核拒绝" :value="2" />
         </el-select>
       </el-form-item>
-      <el-form-item label="渠道" prop="channel">
-        <el-select multiple filterable style="width: 200px" v-model="channelArr" placeholder="请选择渠道" clearable size="small">
-          <el-option
-            v-for="item in channelOptions"
-            :key="'channel'+item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="企微主体" prop="qwSubject">
-        <el-select multiple filterable style="width: 200px" v-model="qwSubjectArr" placeholder="请选择企微主体" clearable size="small">
-          <el-option
-            v-for="item in qwSubjectOptions"
-            :key="'qwSubject'+item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="电话" prop="userPhone">
-        <el-input
-          v-model="queryParams.userPhone"
-          placeholder="请输入收货人电话"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="加密电话" prop="userPhoneMk">
+      <el-form-item label="申请人" prop="applyUserName">
         <el-input
-          v-model="queryParams.userPhoneMk"
-          placeholder="请输入收货人电话"
+          v-model="queryParams.applyUserName"
+          placeholder="请输入申请人姓名"
           clearable
           size="small"
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="医生姓名" prop="doctorName">
-        <el-input
-          v-model="queryParams.doctorName"
-          placeholder="请输入医生姓名"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="患者姓名" prop="patientName">
-        <el-input
-          v-model="queryParams.patientName"
-          placeholder="请输入患者姓名"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="订单来源" prop="source">
-        <el-select v-model="queryParams.source" placeholder="请选择是否支付" clearable size="small">
-          <el-option
-            v-for="dict in sourceOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="订单类型" prop="orderType">
-        <el-select v-model="queryParams.orderType" placeholder="状态" clearable size="small">
-          <el-option
-            v-for="dict in orderTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="支付方式" prop="payType">
-        <el-select multiple v-model="payTypeArr" placeholder="请选择支付方式" clearable size="small">
-          <el-option
-            v-for="item in PayOptions"
-            :key="'type'+item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="快递单号" prop="deliverySn">
-        <el-input
-          v-model="queryParams.deliverySn"
-          placeholder="请输入快递单号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="下单时间" prop="createTime">
-        <el-date-picker v-model="createTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="changeTime"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="支付时间" prop="payTime">
-        <el-date-picker v-model="payTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="changePayTime"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="发货时间" prop="deliverySendTime">
-        <el-date-picker v-model="deliverySendTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="changeTime"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="入账时间" prop="tuiMoneyTime">
-        <el-date-picker v-model="tuiMoneyTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="changeTime"></el-date-picker>
-      </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>
@@ -224,64 +39,40 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-check"
-          size="mini"
-          :disabled="multiple"
-          v-hasPermi="['his:storeOrder:approveOrder']"
-          @click="handleBatchAudit"
-        >批量审核</el-button>
-      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table height="450" v-loading="loading" border :data="orderList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="药品订单号" align="center" prop="orderCode" width="180px"/>
-      <el-table-column label="所属公司" align="center" prop="companyName" />
-      <el-table-column label="员工" align="center" prop="companyUserName" />
-      <el-table-column label="就诊人" align="center" prop="patientName" />
-      <el-table-column label="收货人" align="center" prop="userName" />
-      <el-table-column label="套餐名称" align="center" prop="packageName" />
-      <el-table-column label="套餐别名" align="center" prop="packageSecondName" />
-      <el-table-column label="应收金额" align="center" prop="payPrice" />
-      <el-table-column label="实收金额" align="center" prop="payMoney" />
-      <el-table-column label="支付方式" align="center" prop="payType">
-        <template slot-scope="scope">
-          <dict-tag :options="PayOptions" :value="scope.row.payType"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="订单来源" align="center" prop="source">
+    <el-table height="450" v-loading="loading" border :data="orderList">
+      <el-table-column label="订单编号" align="center" prop="orderCode" width="180px"/>
+      <el-table-column label="审核类型" align="center" prop="auditType">
         <template slot-scope="scope">
-          <dict-tag :options="sourceOptions" :value="scope.row.source"/>
+          <span v-if="scope.row.auditType === 1">价格变更审核</span>
+          <span v-else-if="scope.row.auditType === 2">订单完成审核</span>
         </template>
       </el-table-column>
-      <el-table-column label="下单时间" align="center" prop="createTime" width="180" />
-      <el-table-column label="支付时间" align="center" prop="payTime" width="180" />
-      <el-table-column label="订单状态" align="center" prop="status">
+      <el-table-column label="原订单总价" align="center" prop="originalTotalPrice" />
+      <el-table-column label="原实付金额" align="center" prop="originalPayPrice" />
+      <el-table-column label="变更后总价" align="center" prop="newTotalPrice" />
+      <el-table-column label="变更后实付金额" align="center" prop="newPayPrice" />
+      <el-table-column label="价格变更原因" align="center" prop="priceChangeReason" show-overflow-tooltip />
+      <el-table-column label="审核状态" align="center" prop="auditStatus">
         <template slot-scope="scope">
-          <dict-tag :options="orderOptions" :value="scope.row.status"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="物流状态" align="center" prop="deliveryStatus">
-        <template slot-scope="scope">
-          <dict-tag :options="deliveryStatusOptions" :value="scope.row.deliveryStatus"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="结算状态" align="center" prop="deliveryPayStatus">
-        <template slot-scope="scope">
-          <dict-tag :options="deliveryPayStatusOptions" :value="scope.row.deliveryPayStatus"/>
+          <el-tag v-if="scope.row.auditStatus === 0" type="warning">待审核</el-tag>
+          <el-tag v-else-if="scope.row.auditStatus === 1" type="success">审核通过</el-tag>
+          <el-tag v-else-if="scope.row.auditStatus === 2" type="danger">审核拒绝</el-tag>
         </template>
       </el-table-column>
+      <el-table-column label="申请人" align="center" prop="applyUserName" />
+      <el-table-column label="申请时间" align="center" prop="applyTime" width="160" />
+      <el-table-column label="审核人" align="center" prop="auditUserName" />
+      <el-table-column label="审核时间" align="center" prop="auditTime" width="160" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="100px">
         <template slot-scope="scope">
           <el-button
             size="mini"
             type="text"
             v-hasPermi="['his:storeOrder:approveOrder']"
+            v-if="scope.row.auditStatus === 0"
             @click="handleAudit(scope.row)"
           >审核</el-button>
         </template>
@@ -295,327 +86,201 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
+
+    <el-dialog title="审核" :visible.sync="auditOpen" width="700px" append-to-body :close-on-click-modal="false">
+      <el-form ref="auditForm" :model="auditForm" :rules="auditRules" label-width="120px">
+        <el-divider content-position="left">申请信息</el-divider>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="审核类型">
+              <el-tag v-if="auditForm.auditType === 1" type="warning">价格变更审核</el-tag>
+              <el-tag v-else-if="auditForm.auditType === 2" type="success">订单完成审核</el-tag>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <template v-if="auditForm.auditType === 1">
+          <el-divider content-position="left">价格信息</el-divider>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="原订单总价">
+                <span class="price-info">{{ auditForm.originalTotalPrice }} 元</span>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="原实付金额">
+                <span class="price-info">{{ auditForm.originalPayPrice }} 元</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="变更后总价">
+                <span class="price-info highlight">{{ auditForm.newTotalPrice }} 元</span>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="变更后实付">
+                <span class="price-info highlight">{{ auditForm.newPayPrice }} 元</span>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </template>
+        <el-divider content-position="left">凭证信息</el-divider>
+        <el-form-item label="申请原因">
+          <div class="info-box">{{ auditForm.priceChangeReason || '无' }}</div>
+        </el-form-item>
+        <el-form-item label="凭证图片" v-if="auditForm.voucherImages">
+          <el-image 
+            style="width: 120px; height: 120px; border-radius: 4px;"
+            :src="auditForm.voucherImages" 
+            :preview-src-list="[auditForm.voucherImages]"
+            fit="cover"
+          />
+        </el-form-item>
+        <el-form-item label="凭证说明">
+          <div class="info-box">{{ auditForm.voucherRemark || '无' }}</div>
+        </el-form-item>
+        <el-divider content-position="left">审核操作</el-divider>
+        <el-form-item label="审核结果" prop="auditStatus">
+          <el-radio-group v-model="auditForm.auditStatus">
+            <el-radio :label="1">
+              <el-tag type="success" size="small">通过</el-tag>
+            </el-radio>
+            <el-radio :label="2">
+              <el-tag type="danger" size="small">拒绝</el-tag>
+            </el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="审核备注" prop="auditRemark">
+          <el-input v-model="auditForm.auditRemark" type="textarea" :rows="3" placeholder="请输入审核备注" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="auditOpen = false">取 消</el-button>
+        <el-button type="primary" @click="submitAudit">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import {listOrder, approveOrder, approveOrderList} from "@/api/store/storeOrder";
-import { getTcmScheduleList } from "@/api/company/tcmScheduleReport";
-import { treeselect } from "@/api/company/companyDept";
-import Treeselect from "@riophae/vue-treeselect";
-import { listStore } from "@/api/store/storeProduct";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {financeAuditList, financeAudit} from "@/api/store/storeOrder";
 
 export default {
   name: "Order",
-  components: { Treeselect },
   data() {
     return {
-      payTypeArr: [],
-      scheduleIdArr: [],
-      buyTypeArr: [],
-      channelArr: [],
-      qwSubjectArr: [],
-      // 部门树选项
-      deptOptions: [],
-      deptName: undefined,
-      // 遮罩层
       loading: true,
-      sourceOptions: [],
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
       showSearch: true,
-      // 总条数
       total: 0,
-      // 订单表格数据
       orderList: [],
-      createTime: null,
-      payTime: null,
-      deliverySendTime: null,
-      tuiMoneyTime: null,
-      // 查询参数
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        storeId: null,
         orderCode: null,
-        userId: null,
-        userName: null,
-        userPhone: null,
-        userPhoneMk: null,
-        deliverySn: null,
-        deliveryStatus: null,
-        deliveryPayStatus: null,
-        companyUserNickName: null,
-        packageSecondName: null,
-        isFirst: null,
-        source: null,
-        orderType: null,
-        doctorName: null,
-        patientName: null,
-        deptId: null,
-        scheduleId: null,
-        orderBuyType: null,
-        orderChannel: null,
-        qwSubject: null,
-        payType: null,
-        status: null,
-        sTime: null,
-        eTime: null,
-        paysTime: null,
-        payeTime: null,
-        deliverySendsTime: null,
-        deliverySendeTime: null,
-        tuisTime: null,
-        tuieTime: null,
-        isPay: 1
+        auditType: null,
+        auditStatus: null,
+        applyUserName: null
       },
-      PayOptions: [],
-      orderOptions: [],
-      channelOptions: [],
-      qwSubjectOptions: [],
-      orderTypeOptions: [],
-      orOptions: [],
-      storeOPtions: [],
-      deliveryPayStatusOptions: [],
-      deliveryStatusOptions: [],
-      orderBuyTypeOptions: [],
-      scheduleOptions: []
+      auditOpen: false,
+      auditForm: {
+        id: null,
+        auditType: null,
+        originalTotalPrice: null,
+        originalPayPrice: null,
+        newTotalPrice: null,
+        newPayPrice: null,
+        priceChangeReason: null,
+        voucherImages: null,
+        voucherRemark: null,
+        auditStatus: null,
+        auditRemark: null
+      },
+      auditRules: {
+        auditStatus: [
+          { required: true, message: "请选择审核结果", trigger: "change" }
+        ]
+      }
     };
   },
-  watch: {
-    deptName(val) {
-      this.$refs.tree.filter(val);
-    }
-  },
   created() {
-    this.getTreeselect();
-    this.getstoreList();
     this.getList();
-    this.getTcmScheduleList();
-    this.getDicts("sys_store_order_buy_type").then(response => {
-      this.orderBuyTypeOptions = response.data;
-      this.orderBuyTypeOptions.push({ dictLabel: "无", dictValue: "-1" });
-    });
-    this.getDicts("sys_order_source").then(response => {
-      this.sourceOptions = response.data;
-    });
-    this.getDicts("sys_store_pay_type").then(response => {
-      this.PayOptions = response.data;
-    });
-    this.getDicts("sys_store_order_type").then(response => {
-      this.orderTypeOptions = response.data;
-    });
-    this.getDicts("sys_order_status").then(response => {
-      this.orderOptions = response.data;
-    });
-    this.getDicts("sys_store_channel").then(response => {
-      this.channelOptions = response.data;
-      this.channelOptions.push({ dictLabel: "无", dictValue: "-1" });
-    });
-    this.getDicts("sys_store_qw_subject").then(response => {
-      this.qwSubjectOptions = response.data;
-      this.qwSubjectOptions.push({ dictLabel: "无", dictValue: "-1" });
-    });
-    this.getDicts("sys_company_or").then(response => {
-      this.orOptions = response.data;
-    });
-    this.getDicts("sys_store_delivery_pay_status").then(response => {
-      this.deliveryPayStatusOptions = response.data;
-    });
-    this.getDicts("sys_store_order_delivery_status").then(response => {
-      this.deliveryStatusOptions = response.data;
-    });
   },
   methods: {
-    /** 查询部门下拉树结构 */
-    getTreeselect() {
-      treeselect().then((response) => {
-        this.deptOptions = response.data;
-      });
-    },
-    /** 查询档期列表 */
-    getTcmScheduleList() {
-      getTcmScheduleList().then(response => {
-        this.scheduleOptions = response.data;
-        this.scheduleOptions.push({ id: "-1", name: "无" });
-      });
-    },
-    getstoreList() {
-      listStore().then(response => {
-        this.storeOPtions = response.rows;
-      });
-    },
-    /** 查询订单列表 */
     getList() {
       this.loading = true;
-      this.queryParams.isPay = 1;
-      // 处理多选参数
-      if (this.payTypeArr.length > 0) {
-        this.queryParams.payType = this.payTypeArr.toString();
-      } else {
-        this.queryParams.payType = null;
-      }
-
-      if (this.scheduleIdArr.length > 0) {
-        this.queryParams.scheduleId = this.scheduleIdArr.toString();
-      } else {
-        this.queryParams.scheduleId = null;
-      }
-
-      if (this.buyTypeArr.length > 0) {
-        this.queryParams.orderBuyType = this.buyTypeArr.toString();
-      } else {
-        this.queryParams.orderBuyType = null;
-      }
-
-      if (this.channelArr.length > 0) {
-        this.queryParams.orderChannel = this.channelArr.toString();
-      } else {
-        this.queryParams.orderChannel = null;
-      }
-
-      if (this.qwSubjectArr.length > 0) {
-        this.queryParams.qwSubject = this.qwSubjectArr.toString();
-      } else {
-        this.queryParams.qwSubject = null;
-      }
-
-      approveOrderList(this.queryParams).then(response => {
+      financeAuditList(this.queryParams).then(response => {
         this.orderList = response.rows;
         this.total = response.total;
         this.loading = false;
       });
     },
 
-    /** 审核按钮操作 */
     handleAudit(row) {
-      this.$confirm('确定要审核该订单吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        // 将当前行的orderId放入数组中传递给后端
-        const orderIds = [row.orderId];
-        approveOrder(orderIds).then(response => {
-          this.msgSuccess('审核成功');
-          this.getList(); // 审核成功后刷新列表
-        }).catch(error => {
-          console.error('审核失败:', error);
-        });
-      }).catch(() => {
-        this.$message.info('已取消审核');
+      this.auditForm = {
+        id: row.id,
+        auditType: row.auditType,
+        originalTotalPrice: row.originalTotalPrice,
+        originalPayPrice: row.originalPayPrice,
+        newTotalPrice: row.newTotalPrice,
+        newPayPrice: row.newPayPrice,
+        priceChangeReason: row.priceChangeReason,
+        voucherImages: row.voucherImages,
+        voucherRemark: row.voucherRemark,
+        auditStatus: null,
+        auditRemark: null
+      };
+      this.auditOpen = true;
+    },
+
+    submitAudit() {
+      this.$refs["auditForm"].validate(valid => {
+        if (valid) {
+          const data = {
+            id: this.auditForm.id,
+            auditStatus: this.auditForm.auditStatus,
+            auditRemark: this.auditForm.auditRemark
+          };
+          financeAudit(data).then(response => {
+            this.msgSuccess("审核成功");
+            this.auditOpen = false;
+            this.getList();
+          });
+        }
       });
     },
 
-    /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.isPay = 1;
       this.queryParams.pageNum = 1;
       this.getList();
     },
 
-    changeTime() {
-      if (this.createTime != null) {
-        this.queryParams.sTime = this.createTime[0];
-        this.queryParams.eTime = this.createTime[1];
-      } else {
-        this.queryParams.sTime = null;
-        this.queryParams.eTime = null;
-      }
-
-      if (this.deliverySendTime != null) {
-        this.queryParams.deliverySendsTime = this.deliverySendTime[0];
-        this.queryParams.deliverySendeTime = this.deliverySendTime[1];
-      } else {
-        this.queryParams.deliverySendsTime = null;
-        this.queryParams.deliverySendeTime = null;
-      }
-
-      if (this.tuiMoneyTime != null) {
-        this.queryParams.tuisTime = this.tuiMoneyTime[0];
-        this.queryParams.tuieTime = this.tuiMoneyTime[1];
-      } else {
-        this.queryParams.tuisTime = null;
-        this.queryParams.tuieTime = null;
-      }
-    },
-
-    changePayTime() {
-      if (this.payTime != null) {
-        this.queryParams.paysTime = this.payTime[0];
-        this.queryParams.payeTime = this.payTime[1];
-      } else {
-        this.queryParams.paysTime = null;
-        this.queryParams.payeTime = null;
-      }
-    },
-
-    /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
-      this.createTime = null;
-      this.payTime = null;
-      this.deliverySendTime = null;
-      this.tuiMoneyTime = null;
-      this.payTypeArr = [];
-      this.scheduleIdArr = [];
-      this.buyTypeArr = [];
-      this.channelArr = [];
-      this.qwSubjectArr = [];
-      this.queryParams.isPay = 1;
-
-      this.queryParams.sTime = null;
-      this.queryParams.eTime = null;
-      this.queryParams.paysTime = null;
-      this.queryParams.payeTime = null;
-      this.queryParams.deliverySendsTime = null;
-      this.queryParams.deliverySendeTime = null;
-      this.queryParams.tuisTime = null;
-      this.queryParams.tuieTime = null;
-      this.queryParams.payType = null;
-      this.queryParams.scheduleId = null;
-      this.queryParams.orderBuyType = null;
-      this.queryParams.orderChannel = null;
-      this.queryParams.qwSubject = null;
-
       this.handleQuery();
-    },
-
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.orderId);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length;
-    },
-    /** 批量审核按钮操作 */
-    handleBatchAudit() {
-      if (this.ids.length === 0) {
-        this.$message.warning('请先选择要审核的订单');
-        return;
-      }
-
-      this.$confirm(`确定要审核选中的${this.ids.length}条订单吗?`, '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        // 直接传递选中的ids数组给后端
-        approveOrder(this.ids).then(response => {
-          this.msgSuccess('批量审核成功');
-          this.getList(); // 审核成功后刷新列表
-        }).catch(error => {
-          console.error('批量审核失败:', error);
-        });
-      }).catch(() => {
-        this.$message.info('已取消审核');
-      });
     }
   }
 };
 </script>
+
+<style scoped>
+.el-divider {
+  margin: 15px 0;
+}
+.price-info {
+  font-size: 16px;
+  font-weight: 500;
+  color: #606266;
+}
+.price-info.highlight {
+  color: #E6A23C;
+  font-weight: 600;
+}
+.info-box {
+  padding: 10px 15px;
+  background-color: #f5f7fa;
+  border-radius: 4px;
+  color: #606266;
+  line-height: 1.6;
+}
+</style>

+ 124 - 2
src/views/store/storeOrder/list.vue

@@ -287,12 +287,13 @@
              <dict-tag :options="deliveryStatusOptions" :value="scope.row.deliveryStatus"/>
         </template>
      </el-table-column>
+      <el-table-column label="物流单号" align="center" prop="deliverySn" width="180px"/>
     <el-table-column label="结算状态" align="center" prop="deliveryPayStatus" >
       <template slot-scope="scope">
             <dict-tag :options="deliveryPayStatusOptions" :value="scope.row.deliveryPayStatus"/>
        </template>
     </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="100px">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150px">
       <template slot-scope="scope">
           <el-button
               size="mini"
@@ -301,6 +302,14 @@
               @click="handledetails(scope.row)"
             >查看
             </el-button>
+          <el-button
+              size="mini"
+              type="text"
+              v-hasPermi="['his:storeOrder:approveOrder']"
+              v-if="!scope.row.isApplyAudit"
+              @click="handleApprove(scope.row)"
+            >申请审核
+            </el-button>
       </template>
       </el-table-column>
     </el-table>
@@ -488,6 +497,50 @@
     <el-dialog :title="userAddress.title" v-if="userAddress.open"  :visible.sync="userAddress.open" width="800px" append-to-body>
       <add-user-address ref="addUserAddress"   @addUserAddress="addUserAddress" />
     </el-dialog>
+    <el-dialog title="申请审核" :visible.sync="approveOpen" width="600px" append-to-body :close-on-click-modal="false">
+      <el-form ref="approveForm" :model="approveForm" :rules="approveRules" label-width="120px">
+        <el-form-item label="审核类型" prop="auditType">
+          <el-radio-group v-model="approveForm.auditType">
+            <el-radio :label="1">申请改价</el-radio>
+            <el-radio :label="2">订单完成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <template v-if="approveForm.auditType === 1">
+          <el-form-item label="原价格" prop="newTotalPrice">
+            <el-input v-model="approveForm.oldTotalPrice" disabled style="width: 200px;" />
+          </el-form-item>
+          <el-form-item label="更改后总价" prop="newTotalPrice">
+            <el-input-number v-model="approveForm.newTotalPrice" :precision="2" :min="0" style="width: 200px;" />
+          </el-form-item>
+          <el-form-item label="更改后实收" prop="newPayPrice">
+            <el-input-number v-model="approveForm.newPayPrice" :precision="2" :min="0" style="width: 200px;" />
+          </el-form-item>
+        </template>
+        <el-form-item label="申请原因" prop="priceChangeReason">
+          <el-input v-model="approveForm.priceChangeReason" type="textarea" :rows="3" placeholder="请输入申请原因" />
+        </el-form-item>
+        <el-form-item label="凭证图片" prop="voucherImages">
+          <el-upload
+            class="avatar-uploader"
+            :action="uploadUrl"
+            :headers="headers"
+            :show-file-list="false"
+            :on-success="handleUploadSuccess"
+            accept="image/*"
+          >
+            <img v-if="approveForm.voucherImages" :src="approveForm.voucherImages" class="avatar" style="max-width: 200px; max-height: 200px;">
+            <el-button v-else size="small" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="凭证说明" prop="voucherRemark">
+          <el-input v-model="approveForm.voucherRemark" type="textarea" :rows="2" placeholder="请输入凭证说明" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="approveOpen = false">取 消</el-button>
+        <el-button type="primary" @click="submitApprove">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -500,7 +553,8 @@ import {
   updateOrder,
   exportOrder,
   importTemplate,
-  createOrderByManually
+  createOrderByManually,
+  approveOrder
 } from "@/api/store/storeOrder";
 import storeOrderDetails from '../components/storeOrderDetails.vue';
 import { getTcmScheduleList } from "@/api/company/tcmScheduleReport";
@@ -654,6 +708,33 @@ export default {
         open:false,
         title:"创建收货地址"
       },
+      approveOpen: false,
+      approveForm: {
+        orderIds: [],
+        auditType: 1,
+        oldTotalPrice: null,
+        newTotalPrice: null,
+        newPayPrice: null,
+        priceChangeReason: null,
+        voucherImages: null,
+        voucherRemark: null
+      },
+      approveRules: {
+        auditType: [
+          { required: true, message: "请选择审核类型", trigger: "change" }
+        ],
+        newTotalPrice: [
+          { required: true, message: "请输入更改后总价", trigger: "blur" }
+        ],
+        newPayPrice: [
+          { required: true, message: "请输入更改后实收", trigger: "blur" }
+        ],
+        priceChangeReason: [
+          { required: true, message: "请输入申请原因", trigger: "blur" }
+        ]
+      },
+      uploadUrl: process.env.VUE_APP_BASE_API + "/common/upload",
+      headers: { Authorization: "Bearer " + getToken() },
       // 表单校验
       rules: {
       },
@@ -1196,6 +1277,47 @@ export default {
           },10000);
         }
         }).catch(() => {});
+    },
+    handleApprove(row) {
+      this.approveForm = {
+        orderIds: [row.orderId],
+        auditType: 1,
+        oldTotalPrice: row.payPrice,
+        newTotalPrice: null,
+        newPayPrice: null,
+        priceChangeReason: null,
+        voucherImages: null,
+        voucherRemark: null
+      };
+      this.approveOpen = true;
+    },
+    handleUploadSuccess(response) {
+      if (response.code === 200) {
+        this.approveForm.voucherImages = response.url;
+        this.msgSuccess("上传成功");
+      } else {
+        this.msgError(response.msg);
+      }
+    },
+    submitApprove() {
+      this.$refs["approveForm"].validate(valid => {
+        if (valid) {
+          const data = {
+            orderIds: this.approveForm.orderIds,
+            auditType: this.approveForm.auditType,
+            newTotalPrice: this.approveForm.newTotalPrice,
+            newPayPrice: this.approveForm.newPayPrice,
+            priceChangeReason: this.approveForm.priceChangeReason,
+            voucherImages: this.approveForm.voucherImages,
+            voucherRemark: this.approveForm.voucherRemark
+          };
+          approveOrder(data).then(response => {
+            this.msgSuccess("提交成功");
+            this.approveOpen = false;
+            this.getList();
+          });
+        }
+      });
     }
   }
 };