Ver Fonte

销售制单审核页面开发、加入是否开启制单改价审核控制、部门权限设置提交

yjwang há 4 dias atrás
pai
commit
af24920dcd

+ 63 - 0
src/api/hisStore/change.js

@@ -0,0 +1,63 @@
+import request from '@/utils/request'
+
+// 查询销售制单改价审核记录列表
+export function listChange(query) {
+  return request({
+    url: '/shop/change/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询销售制单改价审核记录详细
+export function getChange(id) {
+  return request({
+    url: '/shop/change/' + id,
+    method: 'get'
+  })
+}
+
+// 新增销售制单改价审核记录
+export function addChange(data) {
+  return request({
+    url: '/shop/change',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改销售制单改价审核记录
+export function updateChange(data) {
+  return request({
+    url: '/shop/change',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除销售制单改价审核记录
+export function delChange(id) {
+  return request({
+    url: '/shop/change/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出销售制单改价审核记录
+export function exportChange(query) {
+  return request({
+    url: '/shop/change/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 批量审核功能
+export function batchAudit(data) {
+  return request({
+    url: '/shop/change/batchAudit',
+    method: 'post',
+    data: data
+  })
+}

+ 22 - 3
src/views/course/coursePlaySourceConfig/index.vue

@@ -40,6 +40,17 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+
+      <el-form-item label="所属部门" prop="deptName">
+        <el-input
+          v-model="queryParams.deptName"
+          placeholder="请输入部门信息"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
       <el-form-item label="状态" prop="status">
         <el-select
           v-model="queryParams.status"
@@ -55,6 +66,7 @@
           />
         </el-select>
       </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>
@@ -132,6 +144,11 @@
       <el-table-column label="ID" align="center" prop="id" />
       <el-table-column label="名称" align="center" prop="name" />
       <el-table-column label="所属公司" align="center" prop="companyId" :formatter="companyNameFormatter"/>
+      <el-table-column label="所属部门" align="center" width="120px">
+        <template v-slot="scope">
+          <span style="font-size: 20px">{{scope.row.deptName}}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="图标" align="center" prop="img">
         <template slot-scope="scope">
           <el-image
@@ -177,7 +194,7 @@
       </el-table-column>
       <el-table-column label="创建时间" align="center" prop="createTime" />
       <el-table-column label="修改时间" align="center" prop="updateTime" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" fixed="right" width="120px">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -385,9 +402,10 @@ import Treeselect from "@riophae/vue-treeselect";
 import {listDept} from "@/api/system/dept";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import { getUserProfile } from "@/api/system/user";
+import Template from '@/views/his/complaint/template.vue'
 export default {
   name: 'CoursePlaySourceConfig',
-  components: {Treeselect},
+  components: { Template, Treeselect},
   data() {
     return {
       privacyTitle:null,
@@ -434,7 +452,8 @@ export default {
         pageSize: 10,
         name: null,
         appid: null,
-        status: null
+        status: null,
+        deptName:null
       },
       showSearch: true,
       single: true,

+ 798 - 0
src/views/hisStore/change/index.vue

@@ -0,0 +1,798 @@
+<template>
+  <div class="app-container">
+    <el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="68px">
+      <el-form-item label="商品名称" prop="matchedProducts">
+        <el-input
+          v-model="queryParams.matchedProducts"
+          clearable
+          placeholder="请输入商品名称"
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="销售名称" prop="nickName">
+        <el-input
+          v-model="queryParams.nickName"
+          clearable
+          placeholder="请输入销售名称"
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="审核状态" prop="auditStatus">
+        <el-select
+          v-model="queryParams.auditStatus"
+          clearable
+          placeholder="请选择审核状态"
+          size="small"
+          style="width: 120px"
+        >
+          <el-option :value="null" label="全部"/>
+          <el-option
+            v-for="item in auditStatusOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button icon="el-icon-search" size="mini" type="primary" @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-->
+<!--          v-hasPermi="['shop:change:batch:audit']"-->
+<!--          :disabled="single"-->
+<!--          icon="el-icon-edit"-->
+<!--          plain-->
+<!--          size="mini"-->
+<!--          type="success"-->
+<!--          @click="handleUpdate"-->
+<!--        >审核-->
+<!--        </el-button>-->
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-hasPermi="['shop:change:remove']"
+          :disabled="multiple"
+          icon="el-icon-delete"
+          plain
+          size="mini"
+          type="danger"
+          @click="handleDelete"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-hasPermi="['shop:change:export']"
+          :loading="exportLoading"
+          icon="el-icon-download"
+          plain
+          size="mini"
+          type="warning"
+          @click="handleExport"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="changeList" border @selection-change="handleSelectionChange">
+      <el-table-column align="center" type="selection" width="55"/>
+      <el-table-column align="center" label="主键ID" prop="id"/>
+      <el-table-column align="center" label="商品信息" prop="matchedProducts"/>
+      <el-table-column align="center" label="支付金额" prop="money">
+        <template v-slot="scope">
+          <span>{{ formatMoney(scope.row.money) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="物流代收金额" prop="payAmount">
+        <template v-slot="scope">
+          <span>{{ formatMoney(scope.row.payAmount) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="销售" prop="nickName"/>
+      <el-table-column align="center" label="审核状态" prop="auditStatus">
+        <template v-slot="scope">
+          <el-tag :type="getAuditStatusTagType(scope.row.auditStatus)">
+            {{ getAuditStatus(scope.row.auditStatus) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
+        <template slot-scope="scope">
+          <el-button
+            v-hasPermi="['shop:change:query']"
+            icon="el-icon-view"
+            size="mini"
+            type="text"
+            @click="handleView(scope.row)"
+          >查看
+          </el-button>
+          <el-button
+            v-hasPermi="['shop:change:batch:audit']"
+            icon="el-icon-edit"
+            size="mini"
+            type="text"
+            v-if="scope.row.auditStatus != 2 && scope.row.auditStatus != 1"
+            @click="handleUpdate(scope.row)"
+          >审核
+          </el-button>
+          <el-button
+            v-hasPermi="['shop:change:remove']"
+            icon="el-icon-delete"
+            size="mini"
+            type="text"
+            v-if="scope.row.auditStatus != 2 && scope.row.auditStatus != 1"
+            @click="handleDelete(scope.row)"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :limit.sync="queryParams.pageSize"
+      :page.sync="queryParams.pageNum"
+      :total="total"
+      @pagination="getList"
+    />
+
+    <!-- 查看详情对话框 -->
+    <el-dialog
+      :close-on-click-modal="false"
+      :visible.sync="viewOpen"
+      append-to-body
+      title="改价审核详情"
+      width="800px"
+    >
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="支付金额">
+          <span class="price-text">{{ formatMoney(viewData.money) }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="物流代收金额">
+          <span class="price-text">{{ formatMoney(viewData.payAmount) }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="审核状态">
+          <el-tag :type="getAuditStatusTagType(viewData.auditStatus)">
+            {{ getAuditStatus(viewData.auditStatus) }}
+          </el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item :span="2" label="销售ID">
+          {{ viewData.companyUserId }}
+        </el-descriptions-item>
+        <el-descriptions-item :span="2" label="购物车ID">
+          {{ viewData.cartIds }}
+        </el-descriptions-item>
+      </el-descriptions>
+
+      <div class="product-section">
+        <h4>商品信息</h4>
+        <div v-if="viewData.preparedProductInfoVoList && viewData.preparedProductInfoVoList.length > 0">
+          <div v-for="(product, index) in viewData.preparedProductInfoVoList" :key="index" class="product-item">
+            <el-row :gutter="20" class="product-row">
+              <el-col :span="4">
+                <div class="product-image">
+                  <el-image
+                    :preview-src-list="[product.image]"
+                    :src="product.image"
+                    fit="cover"
+                    style="width: 80px; height: 80px; border-radius: 4px;"
+                  >
+                    <div slot="error" class="image-slot">
+                      <i class="el-icon-picture-outline"></i>
+                    </div>
+                  </el-image>
+                </div>
+              </el-col>
+              <el-col :span="20">
+                <div class="product-info">
+                  <div class="product-name">{{ getDisplayProductName(product) }}</div>
+                  <div class="product-details">
+                    <span class="detail-item">商品名称:{{ getDisplayProductName(product) }}</span>
+                    <span class="detail-item">店铺:{{ product.storeName || '-' }}</span>
+                    <span class="detail-item">数量:{{ product.cartNum || 0 }}</span>
+                  </div>
+                  <div class="product-id">商品ID:{{ product.productId }}</div>
+                </div>
+              </el-col>
+            </el-row>
+            <el-divider v-if="index < viewData.preparedProductInfoVoList.length - 1"></el-divider>
+          </div>
+        </div>
+        <div v-else class="empty-product">
+          <el-empty description="暂无商品信息"></el-empty>
+        </div>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="viewOpen = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 审核对话框 -->
+    <el-dialog
+      :close-on-click-modal="false"
+      :title="title"
+      :visible.sync="open"
+      append-to-body
+      width="900px"
+    >
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-card class="price-card" shadow="never">
+          <div slot="header" class="clearfix">
+            <span style="font-weight: bold; color: #409EFF;">价格信息</span>
+          </div>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <div class="price-info-item">
+                <div class="price-label">支付金额:</div>
+                <div class="price-value money">{{ formatMoney(form.money) }}</div>
+              </div>
+            </el-col>
+            <el-col :span="12">
+              <div class="price-info-item">
+                <div class="price-label">物流代收金额:</div>
+                <div class="price-value pay-amount">{{ formatMoney(form.payAmount) }}</div>
+              </div>
+            </el-col>
+          </el-row>
+          <div v-if="form.payType" class="price-info-item">
+            <div class="price-label">支付类型:</div>
+            <el-tag :type="form.payType === 1 ? 'success' : 'warning'">
+              {{ getPayTypeText(form.payType) }}
+            </el-tag>
+          </div>
+        </el-card>
+
+        <el-card class="product-card" shadow="never" style="margin-top: 20px;">
+          <div slot="header" class="clearfix">
+            <span style="font-weight: bold; color: #67C23A;">商品信息</span>
+            <span class="product-count">共 {{ getProductCount() }} 件商品</span>
+          </div>
+          <div v-if="form.preparedProductInfoVoList && form.preparedProductInfoVoList.length > 0">
+            <div v-for="(product, index) in form.preparedProductInfoVoList" :key="index" class="audit-product-item">
+              <el-row :gutter="20" class="audit-product-row">
+                <el-col :span="4">
+                  <div class="product-image-container">
+                    <el-image
+                      :preview-src-list="[product.image]"
+                      :src="product.image"
+                      class="audit-product-image"
+                      fit="cover"
+                    >
+                      <div slot="error" class="image-slot">
+                        <i class="el-icon-picture-outline"></i>
+                      </div>
+                    </el-image>
+                  </div>
+                </el-col>
+                <el-col :span="20">
+                  <div class="audit-product-info">
+                    <!-- 修改这里:商品名称优先显示productName,为空则显示commonName -->
+                    <div class="audit-product-name">{{ getDisplayProductName(product) }}</div>
+                    <div class="audit-product-details">
+                      <el-row :gutter="20">
+                        <el-col :span="8">
+                          <div class="detail-row">
+                            <span class="detail-label">商品名称:</span>
+                            <span class="detail-value">{{ getDisplayProductName(product) }}</span>
+                          </div>
+                        </el-col>
+                        <el-col :span="8">
+                          <div class="detail-row">
+                            <span class="detail-label">店铺:</span>
+                            <span class="detail-value">{{ product.storeName || '-' }}</span>
+                          </div>
+                        </el-col>
+                        <el-col :span="8">
+                          <div class="detail-row">
+                            <span class="detail-label">数量:</span>
+                            <el-tag size="small" type="info">{{ product.cartNum || 0 }}</el-tag>
+                          </div>
+                        </el-col>
+                      </el-row>
+                      <div class="detail-row">
+                        <span class="detail-label">商品ID:</span>
+                        <span class="detail-value">{{ product.productId }}</span>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+              </el-row>
+              <el-divider v-if="index < form.preparedProductInfoVoList.length - 1"></el-divider>
+            </div>
+          </div>
+          <div v-else class="empty-product">
+            <el-empty description="暂无商品信息"></el-empty>
+          </div>
+        </el-card>
+
+        <el-form-item label="审核操作" prop="auditStatus" style="margin-top: 20px;">
+          <el-radio-group v-model="form.auditStatus">
+            <el-radio :label="2">通过</el-radio>
+            <el-radio :label="-1">驳回</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="审核备注" prop="auditRemark">
+          <el-input
+            v-model="form.auditRemark"
+            :rows="3"
+            maxlength="200"
+            placeholder="请输入驳回原因"
+            show-word-limit
+            type="textarea"
+          />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="auditSubmitForm">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listChange,
+  getChange,
+  delChange,
+  addChange,
+  updateChange,
+  exportChange,
+  batchAudit
+} from '@/api/hisStore/change'
+
+export default {
+  name: 'Change',
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 销售制单改价审核记录表格数据
+      changeList: [],
+      // 查看对话框显示
+      viewOpen: false,
+      // 查看数据
+      viewData: {},
+      // 弹出层标题
+      title: '',
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        cartIds: null,
+        money: null,
+        payAmount: null,
+        companyUserId: null,
+        createOrderKey: null,
+        matchedProducts: null,
+        auditStatus: null,
+        nickName: null
+      },
+      // 审核状态选项
+      auditStatusOptions: [
+        { label: '驳回', value: -1 },
+        { label: '待审核', value: 0 },
+        { label: '审核中', value: 1 },
+        { label: '已审核', value: 2 }
+      ],
+      // 表单参数
+      form: {
+        auditStatus: 2,
+        auditRemark: ''
+      },
+      // 表单校验
+      rules: {
+        auditStatus: [
+          { required: true, message: '请选择审核操作', trigger: 'change' }
+        ],
+        auditRemark: [
+          {
+            required: true, message: '驳回原因不能为空', trigger: 'blur', validator: (rule, value, callback) => {
+              if (this.form.auditStatus === -1 && !value) {
+                callback(new Error('驳回原因不能为空'))
+              } else {
+                callback()
+              }
+            }
+          }
+        ]
+      }
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    // 获取显示的商品名称
+    getDisplayProductName(product) {
+      // 优先显示productName,如果productName为空、null、undefined或'-',则显示commonName
+      if (product && (product.productName && product.productName !== '-')) {
+        return product.productName
+      } else if (product && product.commonName) {
+        return product.commonName
+      }
+      return '-'
+    },
+
+    // 格式化金额
+    formatMoney(value) {
+      if (value == null) return '¥0.00'
+      return `¥${parseFloat(value).toFixed(2)}`
+    },
+
+    // 获取支付类型文本
+    getPayTypeText(type) {
+      const types = {
+        1: '全付款',
+        3: '物流代收(货到付款)'
+      }
+      return types[type] || '未知'
+    },
+
+    // 获取审核状态标签类型
+    getAuditStatusTagType(status) {
+      const types = {
+        '-1': 'danger',  // 驳回
+        '0': 'info',     // 待审核
+        '1': 'warning',  // 审核中
+        '2': 'success'   // 已审核
+      }
+      return types[status] || 'info'
+    },
+
+    getAuditStatus(v) {
+      let value = '暂无'
+      switch (v) {
+        case -1:
+          value = '驳回'
+          break
+        case 0:
+          value = '待审核'
+          break
+        case 1:
+          value = '审核中'
+          break
+        case 2:
+          value = '已审核'
+          break
+      }
+      return value
+    },
+
+    // 获取商品总数
+    getProductCount() {
+      if (!this.form.preparedProductInfoVoList) return 0
+      return this.form.preparedProductInfoVoList.length
+    },
+
+    /** 查询销售制单改价审核记录列表 */
+    getList() {
+      this.loading = true
+      listChange(this.queryParams).then(response => {
+        this.changeList = response.rows
+        this.total = response.total
+        this.loading = false
+      })
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false
+      this.reset()
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        cartIds: null,
+        money: null,
+        payAmount: null,
+        companyUserId: null,
+        createOrderKey: null,
+        auditStatus: 2,
+        payType: null,
+        preparedProductInfoVoList: [],
+        remark: ''
+      }
+      this.resetForm('form')
+    },
+    /** 搜索按钮操作 */
+    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
+    },
+    /** 查看详情按钮操作 */
+    handleView(row) {
+      getChange(row.id).then(response => {
+        this.viewData = response.data
+        this.viewOpen = true
+      })
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset()
+      const id = row.id || this.ids[0]
+      getChange(id).then(response => {
+        this.form = response.data
+        this.open = true
+        this.title = '销售制单改价审核'
+      })
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          updateChange(this.form).then(response => {
+            this.msgSuccess('审核成功')
+            this.open = false
+            this.getList()
+          })
+        }
+      })
+    },
+    /** 提交按钮 */
+    auditSubmitForm() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          const form = { ids: [this.form.id], auditStatus: this.form.auditStatus ,auditRemark: this.form.auditRemark }
+          batchAudit(form).then(response => {
+            this.msgSuccess('审核成功')
+            this.open = false
+            this.getList()
+          })
+        }
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids
+      this.$confirm('是否确认删除销售制单改价审核记录编号为"' + ids + '"的数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return delChange(ids)
+      }).then(() => {
+        this.getList()
+        this.msgSuccess('删除成功')
+      }).catch(() => {
+      })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams
+      this.$confirm('是否确认导出所有销售制单改价审核记录数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.exportLoading = true
+        return exportChange(queryParams)
+      }).then(response => {
+        this.download(response.msg)
+        this.exportLoading = false
+      }).catch(() => {
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+/* 价格卡片样式 */
+.price-card {
+  margin-bottom: 20px;
+  border: 1px solid #ebeef5;
+}
+
+.price-info-item {
+  display: flex;
+  align-items: center;
+  margin-bottom: 10px;
+  padding: 8px 0;
+}
+
+.price-label {
+  width: 120px;
+  font-weight: bold;
+  color: #606266;
+}
+
+.price-value {
+  font-size: 18px;
+  font-weight: bold;
+}
+
+.price-value.money {
+  color: #e6a23c;
+}
+
+.price-value.pay-amount {
+  color: #f56c6c;
+}
+
+/* 商品卡片样式 */
+.product-card {
+  border: 1px solid #ebeef5;
+}
+
+.product-count {
+  float: right;
+  color: #909399;
+  font-size: 14px;
+}
+
+/* 审核商品项样式 */
+.audit-product-item {
+  padding: 15px 0;
+}
+
+.audit-product-row {
+  align-items: center;
+}
+
+.product-image-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.audit-product-image {
+  width: 100px;
+  height: 100px;
+  border-radius: 6px;
+  border: 1px solid #ebeef5;
+  overflow: hidden;
+}
+
+.audit-product-info {
+  padding: 0 10px;
+}
+
+.audit-product-name {
+  font-size: 16px;
+  font-weight: bold;
+  color: #303133;
+  margin-bottom: 10px;
+  line-height: 1.4;
+}
+
+.audit-product-details {
+  background-color: #f8f9fa;
+  padding: 12px;
+  border-radius: 4px;
+}
+
+.detail-row {
+  margin-bottom: 8px;
+  display: flex;
+  align-items: center;
+}
+
+.detail-label {
+  color: #909399;
+  min-width: 80px;
+}
+
+.detail-value {
+  color: #606266;
+  flex: 1;
+}
+
+/* 查看页面样式 */
+.product-section {
+  margin-top: 20px;
+  padding-top: 20px;
+  border-top: 1px solid #ebeef5;
+}
+
+.product-section h4 {
+  margin-bottom: 15px;
+  color: #303133;
+  font-weight: bold;
+}
+
+.product-item {
+  padding: 15px 0;
+}
+
+.product-row {
+  align-items: center;
+}
+
+.product-image {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100px;
+}
+
+.product-info {
+  padding-left: 10px;
+}
+
+.product-name {
+  font-size: 16px;
+  font-weight: bold;
+  color: #303133;
+  margin-bottom: 8px;
+  line-height: 1.4;
+}
+
+.product-details {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 20px;
+  margin-bottom: 8px;
+}
+
+.detail-item {
+  color: #606266;
+  font-size: 14px;
+}
+
+.product-id {
+  color: #909399;
+  font-size: 13px;
+}
+
+.empty-product {
+  padding: 40px 0;
+}
+
+/* 图片错误样式 */
+.image-slot {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
+  background: #f5f7fa;
+  color: #909399;
+  font-size: 30px;
+}
+
+/* 价格文本样式 */
+.price-text {
+  font-size: 16px;
+  font-weight: bold;
+  color: #f56c6c;
+}
+
+.el-divider {
+  margin: 15px 0;
+}
+</style>

+ 7 - 0
src/views/system/config/config.vue

@@ -1237,6 +1237,13 @@
               inactive-color="#ff4949">
             </el-switch>
           </el-form-item>
+          <el-form-item label="是否开启制单改价审核" prop="isPreparedPriceChange">
+            <el-switch
+              v-model="form17.isPreparedPriceChange"
+              active-color="#13ce66"
+              inactive-color="#ff4949">
+            </el-switch>
+          </el-form-item>
           <div class="footer">
             <el-button type="primary" @click="submitForm17">提 交</el-button>
           </div>