Przeglądaj źródła

客户管理修改;订单审核完成

Huanyi 2 tygodni temu
rodzic
commit
76437152d0

+ 13 - 0
src/api/erp/color/index.ts

@@ -0,0 +1,13 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+
+/**
+ * 查询颜色列表
+ * @Author: Antigravity
+ */
+export function listColor(): AxiosPromise<any[]> {
+    return request({
+        url: '/erp/colorKind/all',
+        method: 'get'
+    });
+}

+ 15 - 0
src/api/erp/model/index.ts

@@ -0,0 +1,15 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+
+/**
+ * 查询型材列表
+ * @param query
+ * @Author: Antigravity
+ */
+export function listModel(query: any): AxiosPromise<any[]> {
+  return request({
+    url: '/erp/model/all',
+    method: 'get',
+    params: query
+  });
+}

+ 54 - 0
src/api/erp/order/index.ts

@@ -0,0 +1,54 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { ErpOrderQuery, ErpOrderVo, ErpOrderForm } from './types';
+
+/**
+ * 查询订单列表
+ * @param query
+ * @Author: Antigravity
+ */
+export function listOrder(query: ErpOrderQuery): AxiosPromise<ErpOrderVo[]> {
+  return request({
+    url: '/erp/order/list',
+    method: 'get',
+    params: query
+  });
+}
+
+/**
+ * 查询订单详细
+ * @param rowId
+ * @Author: Antigravity
+ */
+export function getOrder(rowId: string): AxiosPromise<ErpOrderVo> {
+  return request({
+    url: '/erp/order/' + rowId,
+    method: 'get'
+  });
+}
+
+/**
+ * 新增订单
+ * @param data
+ * @Author: Antigravity
+ */
+export function addOrder(data: ErpOrderForm) {
+  return request({
+    url: '/erp/order/add',
+    method: 'post',
+    data: data
+  });
+}
+
+/**
+ * 审核订单
+ * @param data
+ * @Author: Antigravity
+ */
+export function auditOrder(data: any) {
+  return request({
+    url: '/erp/order/audit',
+    method: 'post',
+    data: data
+  });
+}

+ 48 - 0
src/api/erp/order/types.ts

@@ -0,0 +1,48 @@
+/**
+ * 订单管理类型定义
+ * @Author: Antigravity
+ */
+
+export interface ErpOrderQuery extends PageQuery {
+  code?: string;
+  placer?: number | string;
+  status?: number | string;
+}
+
+export interface ErpOrderVo {
+  rowId: string;
+  code: string;
+  placer: number;
+  placeTime: string;
+  status: number;
+  createTime: string;
+  totalCount: number;
+  details?: ErpOrderDetailVo[];
+}
+
+export interface ErpOrderDetailVo {
+  rowId: string;
+  orderId: string;
+  modelId: string;
+  modelName: string;
+  colorId: string;
+  colorName: string;
+  count: number;
+  remark: string;
+}
+
+export interface ErpOrderForm {
+  rowId?: string;
+  code?: string;
+  placer?: number;
+  status?: number;
+  details: ErpOrderDetailForm[];
+}
+
+export interface ErpOrderDetailForm {
+  rowId?: string;
+  modelId?: string;
+  colorId?: string;
+  count?: number;
+  remark?: string;
+}

+ 19 - 12
src/views/customer/index.vue

@@ -58,8 +58,8 @@
         <!-- 授权客户对话框 -->
         <!-- 授权客户对话框 -->
         <el-dialog v-model="authDialog.visible" title="授权客户" width="900px" append-to-body>
         <el-dialog v-model="authDialog.visible" title="授权客户" width="900px" append-to-body>
             <el-form :model="erpQueryParams" ref="erpQueryFormRef" :inline="true" label-width="68px">
             <el-form :model="erpQueryParams" ref="erpQueryFormRef" :inline="true" label-width="68px">
-                <el-form-item label="客户名称" prop="fName">
-                    <el-input v-model="erpQueryParams.fName" placeholder="请输入客户名称" clearable style="width: 240px"
+                <el-form-item label="客户名称" prop="name">
+                    <el-input v-model="erpQueryParams.name" placeholder="请输入客户名称" clearable style="width: 240px"
                         @keyup.enter="getErpList" />
                         @keyup.enter="getErpList" />
                 </el-form-item>
                 </el-form-item>
                 <el-form-item>
                 <el-form-item>
@@ -67,15 +67,22 @@
                     <el-button icon="Refresh" @click="resetErpQuery">重置</el-button>
                     <el-button icon="Refresh" @click="resetErpQuery">重置</el-button>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
-            <el-table v-loading="erpLoading" :data="erpList" highlight-current-row @current-change="handleErpCurrentChange">
-                <el-table-column label="代码" align="center" prop="fnum" width="100" :formatter="(row: ErpClientVO) => row.fnum || '-'" />
-                <el-table-column label="名称" align="left" prop="fname" min-width="180" :show-overflow-tooltip="true" :formatter="(row: ErpClientVO) => row.fname || '-'" />
-                <el-table-column label="客户类型" align="center" prop="fclass" width="100" :formatter="(row: ErpClientVO) => row.fclass || '-'" />
-                <el-table-column label="加入名称" align="center" prop="enterName" width="100" :formatter="(row: ErpClientVO) => row.enterName || '-'" />
-                <el-table-column label="加入时间" align="center" prop="enterDate" width="170" :formatter="(row: ErpClientVO) => row.enterDate || '-'" />
+            <el-table v-loading="erpLoading" :data="erpList" highlight-current-row
+                @current-change="handleErpCurrentChange">
+                <el-table-column label="代码" align="center" prop="num" width="100"
+                    :formatter="(row: ErpClientVO) => row.num || '-'" />
+                <el-table-column label="名称" align="left" prop="name" min-width="180" :show-overflow-tooltip="true"
+                    :formatter="(row: ErpClientVO) => row.name || '-'" />
+                <el-table-column label="客户类型" align="center" prop="class" width="100"
+                    :formatter="(row: ErpClientVO) => row.class || '-'" />
+                <el-table-column label="加入名称" align="center" prop="enterName" width="100"
+                    :formatter="(row: ErpClientVO) => row.enterName || '-'" />
+                <el-table-column label="加入时间" align="center" prop="enterDate" width="170"
+                    :formatter="(row: ErpClientVO) => row.enterDate || '-'" />
             </el-table>
             </el-table>
-            <pagination v-show="erpTotal > 0" v-model:page="erpQueryParams.pageNum" v-model:limit="erpQueryParams.pageSize"
-                :total="erpTotal" layout="total, prev, pager, next" @pagination="getErpList" />
+            <pagination v-show="erpTotal > 0" v-model:page="erpQueryParams.pageNum"
+                v-model:limit="erpQueryParams.pageSize" :total="erpTotal" layout="total, prev, pager, next"
+                @pagination="getErpList" />
             <template #footer>
             <template #footer>
                 <div class="dialog-footer">
                 <div class="dialog-footer">
                     <el-button :loading="buttonLoading" type="primary" @click="confirmAuth">确 定</el-button>
                     <el-button :loading="buttonLoading" type="primary" @click="confirmAuth">确 定</el-button>
@@ -114,7 +121,7 @@ const erpTotal = ref(0);
 const erpQueryParams = reactive<ErpClientQuery>({
 const erpQueryParams = reactive<ErpClientQuery>({
     pageNum: 1,
     pageNum: 1,
     pageSize: 10,
     pageSize: 10,
-    fName: undefined
+    name: undefined
 });
 });
 const selectedErpClient = ref<ErpClientVO | null>(null);
 const selectedErpClient = ref<ErpClientVO | null>(null);
 const erpQueryFormRef = ref<ElFormInstance>();
 const erpQueryFormRef = ref<ElFormInstance>();
@@ -196,7 +203,7 @@ const confirmAuth = async () => {
     }
     }
     buttonLoading.value = true;
     buttonLoading.value = true;
     try {
     try {
-        await authCustomer(authDialog.customerId!, selectedErpClient.value.frowId);
+        await authCustomer(authDialog.customerId!, selectedErpClient.value.rowId);
         proxy?.$modal.msgSuccess('授权成功');
         proxy?.$modal.msgSuccess('授权成功');
         authDialog.visible = false;
         authDialog.visible = false;
         getList();
         getList();

+ 320 - 0
src/views/order/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
+      <el-form-item label="订单单号" prop="code">
+        <el-input v-model="queryParams.code" placeholder="请输入订单单号" clearable style="width: 200px"
+          @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item label="下单人" prop="placer">
+        <el-input v-model="queryParams.placer" placeholder="请输入下单人" clearable style="width: 200px"
+          @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item label="订单状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="订单状态" clearable style="width: 200px">
+          <el-option label="待审核" :value="0" />
+          <el-option label="已审核" :value="1" />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @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="Plus" @click="handleAdd" v-hasPermi="['erp:order:add']">新增</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="orderList">
+      <el-table-column label="订单单号" align="center" prop="code" />
+      <el-table-column label="下单人" align="center" prop="placerName" />
+      <el-table-column label="下单时间" align="center" prop="placeTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.placeTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="总支数" align="center" prop="totalCount" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template #default="scope">
+          <el-tag :type="scope.row.status === 1 ? 'success' : 'warning'">
+            {{ scope.row.status === 1 ? '已审核' : '待审核' }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Stamp" @click="handleAudit(scope.row)" v-if="scope.row.status === 0"
+            v-hasPermi="['erp:order:audit']">审核</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <!-- 添加或修改订单对话框 -->
+    <el-dialog :title="title" v-model="open" width="1000px" append-to-body>
+      <el-form ref="orderRef" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="订单单号" prop="code">
+              <el-input v-model="form.code" placeholder="请输入订单单号" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="下单人" prop="placer">
+              <el-input v-model="form.placer" placeholder="请输入下单人" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-divider content-position="center">订单明细信息</el-divider>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button type="primary" icon="Plus" @click="handleAddErpOrderDetail">添加</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button type="danger" icon="Delete" @click="handleDeleteErpOrderDetail">删除</el-button>
+          </el-col>
+        </el-row>
+        <el-table :data="form.details" :row-class-name="rowErpOrderDetailIndex"
+          @selection-change="handleErpOrderDetailSelectionChange" ref="erpOrderDetailTable">
+          <el-table-column type="selection" width="50" align="center" />
+          <el-table-column label="序号" align="center" prop="index" width="50" />
+          <el-table-column label="型材" prop="modelId" width="200">
+            <template #default="scope">
+              <el-select v-model="scope.row.modelId" filterable placeholder="请选择型材">
+                <el-option v-for="item in modelOptions" :key="item.rowId" :label="item.name" :value="item.rowId" />
+              </el-select>
+            </template>
+          </el-table-column>
+          <el-table-column label="颜色" prop="colorId" width="200">
+            <template #default="scope">
+              <el-select v-model="scope.row.colorId" filterable placeholder="请选择颜色">
+                <el-option v-for="item in colorOptions" :key="item.rowId" :label="item.name" :value="item.rowId" />
+              </el-select>
+            </template>
+          </el-table-column>
+          <el-table-column label="数量" prop="count" width="150">
+            <template #default="scope">
+              <el-input-number v-model="scope.row.count" :min="1" controls-position="right" placeholder="请输入数量" />
+            </template>
+          </el-table-column>
+          <el-table-column label="备注" prop="remark">
+            <template #default="scope">
+              <el-input v-model="scope.row.remark" placeholder="请输入备注" />
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 订单审核对话框 -->
+    <el-dialog title="订单审核" v-model="auditOpen" width="500px" append-to-body>
+      <el-form ref="auditRef" :model="auditForm" :rules="auditRules" label-width="80px">
+        <el-form-item label="审核结果" prop="auditResult">
+          <el-radio-group v-model="auditForm.auditResult">
+            <el-radio :label="1">通过</el-radio>
+            <el-radio :label="2">驳回</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="驳回原因" prop="rejectReason" v-if="auditForm.auditResult === 2">
+          <el-input v-model="auditForm.rejectReason" type="textarea" placeholder="请输入驳回原因" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitAudit">确 定</el-button>
+          <el-button @click="auditOpen = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Order">
+import { listOrder, getOrder, addOrder, auditOrder } from "@/api/erp/order";
+import { listModel } from "@/api/erp/model";
+import { listColor } from "@/api/erp/color";
+
+/** @Author: Antigravity */
+
+const { proxy } = getCurrentInstance();
+
+const orderList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const total = ref(0);
+const title = ref("");
+const auditOpen = ref(false);
+
+const modelOptions = ref([]);
+const colorOptions = ref([]);
+const checkedErpOrderDetail = ref([]);
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    code: undefined,
+    placer: undefined,
+    status: undefined
+  },
+  rules: {
+    placer: [{ required: true, message: "下单人不能为空", trigger: "blur" }]
+  },
+  auditForm: {},
+  auditRules: {
+    auditResult: [{ required: true, message: "请选择审核结果", trigger: "change" }],
+    rejectReason: [{ required: true, message: "请输入驳回原因", trigger: "blur" }]
+  }
+});
+
+const { queryParams, form, rules, auditForm, auditRules } = toRefs(data);
+
+/** 查询订单列表 */
+function getList() {
+  loading.ref = true;
+  listOrder(queryParams.value).then(response => {
+    orderList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+/** 查询型材和颜色选项 */
+function getOptions() {
+  listModel({}).then(res => {
+    modelOptions.value = res.data;
+  });
+  listColor().then(res => {
+    colorOptions.value = res.data;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    rowId: undefined,
+    code: undefined,
+    placer: undefined,
+    status: 0,
+    details: []
+  };
+  proxy.resetForm("orderRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加订单";
+}
+
+/** 审核按钮操作 */
+function handleAudit(row) {
+  auditForm.value = {
+    orderId: row.rowId,
+    auditResult: 1,
+    rejectReason: undefined
+  };
+  auditOpen.value = true;
+}
+
+/** 提交审核 */
+function submitAudit() {
+  proxy.$refs["auditRef"].validate(valid => {
+    if (valid) {
+      auditOrder(auditForm.value).then(response => {
+        proxy.$modal.msgSuccess("审核成功");
+        auditOpen.value = false;
+        getList();
+      });
+    }
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["orderRef"].validate(valid => {
+    if (valid) {
+      addOrder(form.value).then(response => {
+        proxy.$modal.msgSuccess("新增成功");
+        open.value = false;
+        getList();
+      });
+    }
+  });
+}
+
+
+/** 订单明细序号 */
+function rowErpOrderDetailIndex({ row, rowIndex }) {
+  row.index = rowIndex + 1;
+}
+
+/** 订单明细添加按钮操作 */
+function handleAddErpOrderDetail() {
+  let obj = {};
+  obj.modelId = "";
+  obj.colorId = "";
+  obj.count = 1;
+  obj.remark = "";
+  form.value.details.push(obj);
+}
+
+/** 订单明细删除按钮操作 */
+function handleDeleteErpOrderDetail() {
+  if (checkedErpOrderDetail.value.length == 0) {
+    proxy.$modal.msgError("请选择要删除的订单明细数据");
+  } else {
+    const details = form.value.details;
+    const checkedDetails = checkedErpOrderDetail.value;
+    form.value.details = details.filter(function (item) {
+      return checkedDetails.indexOf(item.index) == -1;
+    });
+  }
+}
+
+/** 复选框选中数据 */
+function handleErpOrderDetailSelectionChange(selection) {
+  checkedErpOrderDetail.value = selection.map(item => item.index);
+}
+
+getOptions();
+getList();
+</script>