xiaodai2017 2 years ago
parent
commit
5499d8a998
25 changed files with 544 additions and 77 deletions
  1. 30 32
      src/components/BasicDescriptions/src/basic-descriptions.tsx
  2. 40 0
      src/components/BasicDescriptions/src/index.scss
  3. 2 2
      src/components/BasicDescriptions/src/types.ts
  4. 2 0
      src/components/ListModal/ListModal.vue
  5. 5 0
      src/components/PageDetail/index.ts
  6. 41 0
      src/components/PageDetail/page-detail.vue
  7. 31 0
      src/components/PageDetail/types.ts
  8. 2 0
      src/components/PageModal/src/page-modal.vue
  9. 2 0
      src/components/resetPwd/ResetPwd.vue
  10. 10 3
      src/config/status.ts
  11. 2 0
      src/layout/components/search/components/SearchModal.vue
  12. 30 2
      src/utils/tooltip.ts
  13. 82 0
      src/views/mobile/exchangeOrder/components/edit-dialog.vue
  14. 0 0
      src/views/mobile/exchangeOrder/components/execl-files-upload/columns-config.ts
  15. 2 0
      src/views/mobile/exchangeOrder/components/execl-files-upload/index.vue
  16. 9 3
      src/views/mobile/exchangeOrder/config/content.config.ts
  17. 80 0
      src/views/mobile/exchangeOrder/config/orderDetail.config.ts
  18. 7 1
      src/views/mobile/exchangeOrder/config/search.config.ts
  19. 8 30
      src/views/mobile/exchangeOrder/index.vue
  20. 0 1
      src/views/mobile/exchangeStock/components/add-dialog.vue
  21. 14 2
      src/views/mobile/exchangeStock/components/edit-dialog.vue
  22. 60 0
      src/views/mobile/exchangeStock/config/userDetail.config.ts
  23. 8 1
      src/views/mobile/shopStock/components/edit-dialog.vue
  24. 75 0
      src/views/mobile/shopStock/config/goodDetail.config.ts
  25. 2 0
      src/views/operate/setTheme/cpns/addModel.vue

+ 30 - 32
src/components/BasicDescriptions/src/basic-descriptions.tsx

@@ -1,7 +1,9 @@
-import { ElDescriptions, ElDescriptionsItem } from "element-plus";
+/* eslint-disable prettier/prettier */
 import { defineComponent } from "vue";
+import { ElRow, ElCol } from "element-plus";
 import { useRenderIcon } from "../../ReIcon/src/hooks";
 import { basicDescriptionsProps } from "./types";
+import "./index.scss"
 
 const BasicDescriptions = defineComponent({
   name: "BasicDescriptions",
@@ -9,46 +11,42 @@ const BasicDescriptions = defineComponent({
   setup(props, { slots }) {
     return () => {
       const { title, colNumber, columns, data, labelWidth, show } = props;
+
       return show ? (
-        <ElDescriptions
-          title={title}
-          border
-          width={props.labelWidth}
-          column={colNumber}
-          size="small"
-        >
+        <ElRow title={title} border column={colNumber} size="small">
           {columns.map(col => (
-            <ElDescriptionsItem
+            <ElCol
               label={col.label}
               key={col.field}
-              span={col.span}
-              labeWidth={col.labelWidth ? col.labelWidth : labelWidth}
+              span={col.span ? col.span : 6}
             >
-              {col.render ? col.render(data[col.field], data) : data[col.field]}
-              {col.append}
-            </ElDescriptionsItem>
+              <div class="col-item">
+                <p class="col-label" style={{ width: labelWidth + 'px' }}>{col.label}</p>
+                <p class="col-value">{col.render ? col.render(data[col.field], data) : data[col.field]}</p>
+              </div>
+            </ElCol>
           ))}
 
           {slots.custom && slots.custom(props.data)}
-        </ElDescriptions>
+        </ElRow>
       ) : (
-        <div
-          style={{
-            display: "flex",
-            width: "100%",
-            justifyContent: "center",
-            flexDirection: "column",
-            alignItems: "center"
-          }}
-        >
-          <el-button
-            text
-            size="large"
-            icon={useRenderIcon("warning-filled")}
-            disabled
-          ></el-button>
-          <span>暂无数据</span>
-        </div>
+          <div
+            style={{
+              display: "flex",
+              width: "100%",
+              justifyContent: "center",
+              flexDirection: "column",
+              alignItems: "center"
+            }}
+          >
+            <el-button
+              text
+              size="large"
+              icon={useRenderIcon("warning-filled")}
+              disabled
+            ></el-button>
+            <span>暂无数据</span>
+          </div>
       );
     };
   }

+ 40 - 0
src/components/BasicDescriptions/src/index.scss

@@ -0,0 +1,40 @@
+.description-label{
+  white-space: nowrap;
+}
+
+
+.col-item{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 100%;
+
+  p{
+    border: 1px solid #ebeef5;
+    min-height: 32px;
+    margin-bottom: -1px;
+    margin-left: -1px;
+    height: 100%;
+    font-size: 14px !important;
+  }
+
+  .col-label{
+    background-color:#f5f7fa;
+    text-align: right;
+    padding-right: 5px;
+    min-width: 100px;
+    height: 100%;
+    font-size: 12px!important;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+  }
+
+  .col-value{
+    flex:1;
+    padding-left: 5px;
+    font-size: 12px !important;
+    display: flex;
+    align-items: center;
+  }
+}

+ 2 - 2
src/components/BasicDescriptions/src/types.ts

@@ -27,8 +27,8 @@ export type DescriptionColumn = {
   label: string;
   span?: number;
   labelWidth?: string;
-  append?: string;
-  render?: (data: any, context: any) => VNode | string;
+  width?: string;
+  render?: (data: any, context: any) => VNode;
 };
 
 export type DescriptionColumns = Array<DescriptionColumn>;

+ 2 - 0
src/components/ListModal/ListModal.vue

@@ -35,8 +35,10 @@ defineExpose({
 <template>
   <el-dialog
     :title="modelTitle"
+    :close-on-press-escape="false"
     v-model="dialogVisible"
     center
+    append-to-body
     destroy-on-close
     width="1040px"
   >

+ 5 - 0
src/components/PageDetail/index.ts

@@ -0,0 +1,5 @@
+import PageDetail from "./page-detail.vue";
+
+export { PageDetail };
+
+export * from "./types";

+ 41 - 0
src/components/PageDetail/page-detail.vue

@@ -0,0 +1,41 @@
+<script setup lang="ts">
+import { computed, ref } from "vue";
+import { useNav } from "/@/layout/hooks/useNav";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+import { responseHandle } from "/@/utils/responseHandle";
+import { PageDetailProps } from "./types";
+const { logout } = useNav();
+
+const props = defineProps(PageDetailProps);
+const columns = computed(() => props.contentConfig.columns);
+const apis = computed(() => props.contentConfig.apis);
+const workDetail = ref({});
+const loading = ref(false);
+const initData = async row => {
+  loading.value = true;
+  const { code, data, message } = await apis.value.httpDetail(row);
+  responseHandle({
+    code,
+    message,
+    logout,
+    handler: () => {
+      workDetail.value = data;
+      console.log(workDetail.value);
+    }
+  });
+  loading.value = false;
+};
+defineExpose({
+  reload: row => {
+    initData(row);
+  }
+});
+</script>
+
+<template>
+  <BasicDescriptions
+    v-loading="loading"
+    :data="workDetail"
+    :columns="columns"
+  />
+</template>

+ 31 - 0
src/components/PageDetail/types.ts

@@ -0,0 +1,31 @@
+import { PropType, ExtractPropTypes } from "vue";
+
+/***
+ * @param apis 请求
+ * @param columns 列数据
+ */
+export interface ContentConfig {
+  apis: ContentApis | any;
+  columns: any;
+}
+
+interface ContentApiResponse {
+  code: number;
+  message: string;
+  data: any;
+}
+
+type API = (data: any) => Promise<ContentApiResponse>;
+
+export interface ContentApis {
+  httpDetail: API;
+}
+export const PageDetailProps = {
+  contentConfig: {
+    type: Object as PropType<ContentConfig>,
+    required: true
+  }
+} as const;
+
+
+export type PageDetailProps = ExtractPropTypes<typeof PageDetailProps>;

+ 2 - 0
src/components/PageModal/src/page-modal.vue

@@ -89,7 +89,9 @@ defineExpose({
   <el-dialog
     :title="title"
     v-model="dialogVisible"
+    :close-on-press-escape="false"
     center
+    append-to-body
     destroy-on-close
     :width="width ? width : '1024px'"
   >

+ 2 - 0
src/components/resetPwd/ResetPwd.vue

@@ -66,7 +66,9 @@ defineExpose({
   <el-dialog
     :title="modelTitle"
     v-model="dialogVisible"
+    :close-on-press-escape="false"
     center
+    append-to-body
     destroy-on-close
     width="500px"
   >

+ 10 - 3
src/config/status.ts

@@ -43,9 +43,16 @@ export const ONLINE_OPTIONS = [
   { id: "0", label: "已下架", value: "0", type: "warning" }
 ];
 export const ORDER_OPTIONS = [
-  { id: "0", label: "未发货", value: "0", type: "warning" },
-  { id: "1", label: "已发货", value: "1", type: "primary" },
-  { id: "2", label: "已收货", value: "2", type: "success" }
+  { id: "0", label: "待支付", value: "0", type: "info" },
+  { id: "1", label: "支付失败", value: "1", type: "error" },
+  { id: "2", label: "待发货", value: "2", type: "warning" },
+  { id: "3", label: "已发货", value: "3", type: "primary" },
+  { id: "4", label: "已收货", value: "4", type: "success" }
+];
+export const ORDER_TYPE_OPTIONS = [
+  { id: "1", label: "兑换商品", value: "1", type: "success" },
+  { id: "2", label: "商城商品", value: "2", type: "primary" },
+  { id: "3", label: "服务", value: "3", type: "info" }
 ];
 export const STYLE_OPTIONS = [
   { id: "1", label: "样式1", value: "1", type: "primary" },

+ 2 - 0
src/layout/components/search/components/SearchModal.vue

@@ -135,7 +135,9 @@ onKeyStroke("ArrowDown", handleDown);
   <el-dialog
     top="5vh"
     :width="device === 'mobile' ? '80vw' : '50vw'"
+    :close-on-press-escape="false"
     v-model="show"
+    append-to-body
     :before-close="handleClose"
   >
     <el-input

+ 30 - 2
src/utils/tooltip.ts

@@ -1,8 +1,8 @@
 import { h } from "vue";
-import { ElButton, ElPopover } from "element-plus";
+import { ElImage, ElButton, ElPopover, ElTag } from "element-plus";
 import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
 
-export function createTooltip(left: string, reference: string, width = 200) {
+function createTooltip(left: string, reference: string, width = 200) {
   return h(
     "div",
     {
@@ -33,3 +33,31 @@ export function createTooltip(left: string, reference: string, width = 200) {
     }
   );
 }
+
+function createImages(imgSrc: string | string[]) {
+  const imgs = Array.isArray(imgSrc) ? imgSrc : imgSrc?.split(",");
+  if (!imgs) return null;
+  return imgs.map(src => {
+    return h(ElImage, {
+      src,
+      previewSrcList: [src],
+      style: {
+        height: "20px",
+        width: "20px"
+      }
+    });
+  });
+}
+function createStatus(options: any[], status: string | number) {
+  const item = options.find(s => s.value === String(status));
+  return h(
+    ElTag,
+    {
+      type: item?.type ? item.type : ""
+    },
+    {
+      default: () => (item?.label ? item.label : "")
+    }
+  );
+}
+export { createTooltip, createImages, createStatus };

+ 82 - 0
src/views/mobile/exchangeOrder/components/edit-dialog.vue

@@ -0,0 +1,82 @@
+<script setup lang="ts">
+import { ElForm } from "element-plus";
+import { ref, nextTick } from "vue";
+
+import { PageDetail } from "/@/components/PageDetail";
+import orderDetailConfig from "../config/orderDetail.config";
+import userDetailConfig from "/@/views/mobile/exchangeStock/config/userDetail.config";
+import goodDetailConfig from "/@/views/mobile/shopStock/config/goodDetail.config";
+
+const showModel = ref(false);
+const orderDetailRef = ref<InstanceType<typeof PageDetail>>(null);
+const goodDetailRef = ref<InstanceType<typeof PageDetail>>(null);
+const userDetailRef = ref<InstanceType<typeof PageDetail>>(null);
+
+const loading = ref(false);
+
+function show(row) {
+  showModel.value = true;
+  loading.value = true;
+  const { id, account_id, good_id } = row;
+  nextTick(() => {
+    if (id) {
+      orderDetailRef.value.reload({ id: id });
+    }
+    if (account_id) {
+      userDetailRef.value.reload({ id: account_id });
+    }
+    if (good_id) {
+      goodDetailRef.value.reload({ id: good_id });
+    }
+  });
+
+  loading.value = false;
+}
+defineExpose({
+  show
+});
+</script>
+
+<template>
+  <el-dialog
+    v-model="showModel"
+    :close-on-press-escape="false"
+    center
+    append-to-body
+    destroy-on-close
+    :width="'1040px'"
+    :title="'订单详情'"
+    v-loading="loading"
+  >
+    <el-form
+      ref="formRef"
+      label-width="100px"
+      style="margin-top: -10px"
+      class="demo-ruleForm"
+      status-icon
+    >
+      <el-row>
+        <el-col :span="24">
+          <el-form-item label="订单信息">
+            <PageDetail
+              ref="orderDetailRef"
+              :contentConfig="orderDetailConfig"
+            />
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="24">
+          <el-form-item label="账号信息">
+            <PageDetail ref="userDetailRef" :contentConfig="userDetailConfig" />
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="24">
+          <el-form-item label="商品信息">
+            <PageDetail ref="goodDetailRef" :contentConfig="goodDetailConfig" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </el-dialog>
+</template>

+ 0 - 0
src/views/mobile/exchangeOrder/cpns/execl-files-upload/columns-config.ts → src/views/mobile/exchangeOrder/components/execl-files-upload/columns-config.ts


+ 2 - 0
src/views/mobile/exchangeOrder/cpns/execl-files-upload/index.vue → src/views/mobile/exchangeOrder/components/execl-files-upload/index.vue

@@ -129,9 +129,11 @@ defineExpose({
   <el-dialog
     v-model="visible"
     title="导入表格数据"
+    :close-on-press-escape="false"
     width="1040px"
     top="8vh"
     center
+    append-to-body
     @close="handleClose"
   >
     <execlUpload @on-success="Uploadsuccess" v-if="tableData.length === 0" />

+ 9 - 3
src/views/mobile/exchangeOrder/config/content.config.ts

@@ -1,7 +1,7 @@
 import { ContentConfig } from "/@/components/PageContent";
 import { httpList } from "/@/api/mobile/exchangeOrder";
 import { renderStatus, renderImage } from "/@/utils/column-helper";
-import { ORDER_OPTIONS } from "/@/config/status";
+import { ORDER_OPTIONS, ORDER_TYPE_OPTIONS } from "/@/config/status";
 
 const columns = [
   {
@@ -12,9 +12,15 @@ const columns = [
   {
     prop: "status",
     label: "状态",
-    minWidth: "90px",
+    width: "90px",
     ...renderStatus(ORDER_OPTIONS)
   },
+  {
+    prop: "type",
+    label: "类型",
+    width: "100px",
+    ...renderStatus(ORDER_TYPE_OPTIONS, "type")
+  },
   {
     prop: "company_title",
     label: "企业名称",
@@ -85,7 +91,7 @@ const columns = [
   {
     prop: "addtime",
     label: "购买时间",
-    width: "160px"
+    width: "140px"
   },
 
   {

+ 80 - 0
src/views/mobile/exchangeOrder/config/orderDetail.config.ts

@@ -0,0 +1,80 @@
+import { ContentConfig } from "/@/components/PageDetail";
+import { httpDetail } from "/@/api/mobile/exchangeOrder";
+import { createStatus } from "/@/utils/tooltip";
+import { ORDER_OPTIONS, ORDER_TYPE_OPTIONS } from "/@/config/status";
+const columns = [
+  {
+    field: "orderCode",
+    label: "订单编号",
+    span: 8
+  },
+  {
+    label: "订单状态",
+    field: "status",
+    span: 8,
+    render: status => createStatus(ORDER_OPTIONS, status)
+  },
+  {
+    label: "订单类型",
+    field: "type",
+    span: 8,
+    render: type => createStatus(ORDER_TYPE_OPTIONS, type)
+  },
+
+  {
+    label: "创建时间",
+    field: "addtime",
+    span: 8
+  },
+  {
+    field: "num",
+    label: "数量",
+    span: 8
+  },
+  {
+    field: "num1",
+    label: "单价",
+    span: 8
+  },
+  {
+    label: "物流公司",
+    field: "post_name",
+    span: 8
+  },
+  {
+    label: "物流编码",
+    field: "post_code",
+    span: 8
+  },
+  {
+    label: "收货联系人",
+    field: "contactor",
+    span: 8
+  },
+
+  {
+    field: "mobile",
+    label: "联系电话",
+    span: 8
+  },
+  {
+    field: "addr",
+    label: "收货地址",
+    span: 16,
+    render: (_, { addr_name, addr }) => addr_name + addr
+  },
+
+  {
+    field: "addr",
+    label: "备注",
+    span: 24
+  }
+];
+const orderDetailConfig: ContentConfig = {
+  columns,
+  apis: {
+    httpDetail
+  }
+};
+
+export default orderDetailConfig;

+ 7 - 1
src/views/mobile/exchangeOrder/config/search.config.ts

@@ -1,5 +1,5 @@
 import { FormConfig } from "/@/components/PageSearch";
-import { ORDER_OPTIONS } from "/@/config/status";
+import { ORDER_OPTIONS, ORDER_TYPE_OPTIONS } from "/@/config/status";
 import { convertOptions } from "/@/utils/column-helper";
 
 const searchFormConfig: FormConfig = {
@@ -21,6 +21,12 @@ const searchFormConfig: FormConfig = {
       placeholder: "订单状态",
       options: convertOptions(ORDER_OPTIONS)
     },
+    {
+      field: "type",
+      type: "select",
+      placeholder: "订单类型",
+      options: convertOptions(ORDER_TYPE_OPTIONS, "type")
+    },
     {
       field: "name",
       type: "input",

+ 8 - 30
src/views/mobile/exchangeOrder/index.vue

@@ -3,37 +3,18 @@ import { ref } from "vue";
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
 import searchConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
-import { PageModal, usePageModal } from "/@/components/PageModal";
-import modalConfig from "./config/modal.config";
 import { PageContent } from "/@/components/PageContent";
 import { exportPageContent } from "/@/utils/export";
-import ExeclUpload from "./cpns/execl-files-upload/index.vue";
-import { httpDetail } from "/@/api/mobile/exchangeOrder";
-import { useResponseHandle } from "/@/hooks/useAsync";
+import ExeclUpload from "./components/execl-files-upload/index.vue";
 import { usePermission } from "/@/hooks/usePermission";
+import EditModel from "./components/edit-dialog.vue";
 const pageName = "exchangeOrder";
-const responseHandle = useResponseHandle();
 const { pageContentRef, handleResetClick, handleSearchClick, getMergeParams } =
   usePageSearch(undefined, undefined, searchConfig);
 const { hasPermissionWithCode, permissions } = usePermission(pageName);
-
-const { pageModalRef, handlePreviewData, handleConfrim, defaultInfo } =
-  usePageModal({
-    pageContentRef
-  });
+const modelEditRef = ref<InstanceType<typeof EditModel>>(null);
 const execlUploadRef = ref<InstanceType<typeof ExeclUpload>>(null);
 
-async function handleDetailData(id) {
-  const { code, data, message } = await httpDetail({ id: id });
-  responseHandle({
-    code,
-    message,
-    handler: () => {
-      handlePreviewData(data);
-    }
-  });
-  // actionModalRef.value.onShow("兑换商品库存", type, id);
-}
 function getParams() {
   exportPageContent({
     type: "http",
@@ -41,7 +22,6 @@ function getParams() {
     params: getMergeParams(),
     name: "订单导出"
   });
-  // console.log(pageContentRef);
 }
 </script>
 
@@ -69,14 +49,12 @@ function getParams() {
       ref="pageContentRef"
       :powers="permissions"
       :content-config="contentConfig"
-      @preview-btn-click="({ id }) => handleDetailData(id)"
+      @preview-btn-click="
+        ({ id, account_id, good_id, type }) =>
+          modelEditRef.show({ id, account_id, good_id, type })
+      "
     />
     <ExeclUpload ref="execlUploadRef" @onSuccess="handleResetClick" />
-    <PageModal
-      ref="pageModalRef"
-      :modal-config="modalConfig"
-      :default-info="defaultInfo"
-      @confirm-btn-click="handleConfrim"
-    />
+    <EditModel ref="modelEditRef" @reload="pageContentRef.onSearch()" />
   </PageAuth>
 </template>

+ 0 - 1
src/views/mobile/exchangeStock/components/add-dialog.vue

@@ -7,7 +7,6 @@ import { useNav } from "/@/layout/hooks/useNav";
 import { ComCard } from "/@/components/RemoteSelect";
 import OrderDialog from "/@/components/PageListModal";
 import LadderTable from "./ladder-table.vue";
-// import LadderModal from "./ladder-modal.vue";
 enum FROM_TYPE {
   create = "create",
   edit = "edit",

+ 14 - 2
src/views/mobile/exchangeStock/components/edit-dialog.vue

@@ -5,6 +5,10 @@ import { httpUpdate, httpDetail } from "/@/api/mobile/exchangeStock";
 import { responseHandle } from "/@/utils/responseHandle";
 import { useNav } from "/@/layout/hooks/useNav";
 import { FLAG_OPTIONS } from "/@/config/status";
+import { PageDetail } from "/@/components/PageDetail";
+import userDetailConfig from "../config/userDetail.config";
+import goodDetailConfig from "/@/views/mobile/shopStock/config/goodDetail.config";
+
 enum FROM_TYPE {
   create = "create",
   edit = "edit",
@@ -14,6 +18,8 @@ const { logout } = useNav();
 const showModel = ref(false);
 const TYPE = ref<FROM_TYPE>(FROM_TYPE.create);
 const formRef = ref<InstanceType<typeof ElForm>>(null);
+const goodDetailRef = ref<InstanceType<typeof PageDetail>>(null);
+const userDetailRef = ref<InstanceType<typeof PageDetail>>(null);
 const loading = ref(false);
 const titleType = ref("");
 const inventory = ref(0);
@@ -48,6 +54,8 @@ const initData = async () => {
         }
       });
       inventory.value = Number(data.inventory);
+      userDetailRef.value.reload({ id: data.account_id });
+      goodDetailRef.value.reload({ id: data.good_id });
     }
   });
 };
@@ -209,11 +217,15 @@ defineExpose({
           <el-button @click="showModel = false">取消</el-button>
         </el-col>
         <el-col :span="24">
-          <el-form-item label="账号信息"> 111 </el-form-item>
+          <el-form-item label="账号信息">
+            <PageDetail ref="userDetailRef" :contentConfig="userDetailConfig" />
+          </el-form-item>
         </el-col>
 
         <el-col :span="24">
-          <el-form-item label="商品信息"> 22 </el-form-item>
+          <el-form-item label="商品信息">
+            <PageDetail ref="goodDetailRef" :contentConfig="goodDetailConfig" />
+          </el-form-item>
         </el-col>
       </el-row>
     </el-form>

+ 60 - 0
src/views/mobile/exchangeStock/config/userDetail.config.ts

@@ -0,0 +1,60 @@
+import { ContentConfig } from "/@/components/PageDetail";
+import { httpDetail } from "/@/api/mobile/user";
+const columns = [
+  {
+    field: "username",
+    label: "卡号",
+    span: 6
+  },
+  {
+    label: "公司名称",
+    field: "company_title",
+    span: 6
+  },
+  {
+    field: "card_title",
+    label: "卡类型",
+    span: 6
+  },
+  {
+    label: "创建时间",
+    field: "addtime",
+    span: 6
+  },
+
+  {
+    label: "有效开始时间",
+    field: "starttime",
+    span: 6
+  },
+  {
+    label: "有效结束时间",
+    field: "expiretime",
+    span: 6
+  },
+  {
+    label: "客户姓名",
+    field: "name",
+    span: 6
+  },
+
+  {
+    field: "mobile",
+    label: "手机号",
+    span: 6
+  },
+
+  {
+    field: "remark",
+    label: "备注",
+    span: 24
+  }
+];
+const userDetailConfig: ContentConfig = {
+  columns,
+  apis: {
+    httpDetail
+  }
+};
+
+export default userDetailConfig;

+ 8 - 1
src/views/mobile/shopStock/components/edit-dialog.vue

@@ -5,6 +5,9 @@ import { httpUpdate, httpDetail } from "/@/api/mobile/shopStock";
 import { responseHandle } from "/@/utils/responseHandle";
 import { useNav } from "/@/layout/hooks/useNav";
 import { FLAG_OPTIONS } from "/@/config/status";
+import { PageDetail } from "/@/components/PageDetail";
+import goodDetailConfig from "../config/goodDetail.config";
+
 enum FROM_TYPE {
   create = "create",
   edit = "edit",
@@ -14,6 +17,7 @@ const { logout } = useNav();
 const showModel = ref(false);
 const TYPE = ref<FROM_TYPE>(FROM_TYPE.create);
 const formRef = ref<InstanceType<typeof ElForm>>(null);
+const PageDetailRef = ref<InstanceType<typeof PageDetail>>(null);
 const loading = ref(false);
 const titleType = ref("");
 const inventory = ref(0);
@@ -48,6 +52,7 @@ const initData = async () => {
         }
       });
       inventory.value = Number(data.inventory);
+      PageDetailRef.value.reload({ id: data.good_id });
     }
   });
 };
@@ -209,7 +214,9 @@ defineExpose({
           <el-button @click="showModel = false">取消</el-button>
         </el-col>
         <el-col :span="24">
-          <el-form-item label="商品信息"> 22 </el-form-item>
+          <el-form-item label="商品信息">
+            <PageDetail ref="PageDetailRef" :contentConfig="goodDetailConfig" />
+          </el-form-item>
         </el-col>
       </el-row>
     </el-form>

+ 75 - 0
src/views/mobile/shopStock/config/goodDetail.config.ts

@@ -0,0 +1,75 @@
+import { createTooltip, createImages } from "/@/utils/tooltip";
+import { ContentConfig } from "/@/components/PageDetail";
+import { httpDetail } from "/@/api/parameter/good";
+const columns = [
+  {
+    field: "good_name",
+    label: "商品名称",
+    span: 24,
+    render: (good_name, { good_code }) =>
+      createTooltip(good_name, "商品编号 : " + good_code, 360)
+  },
+  {
+    label: "图片",
+    field: "good_cover_img",
+    span: 6,
+    render: good_cover_img => createImages(good_cover_img)
+  },
+  {
+    field: "type",
+    label: "商品类型",
+    span: 6
+  },
+  {
+    label: "售价",
+    field: "price",
+    span: 6
+  },
+
+  {
+    label: "单位",
+    field: "unit",
+    span: 6
+  },
+  {
+    label: "起订量",
+    field: "moq",
+    span: 6
+  },
+  {
+    label: "步长",
+    field: "step",
+    span: 6
+  },
+
+  {
+    field: "updatetime",
+    label: "更新时间",
+    span: 6
+  },
+  {
+    field: "good_banner_img",
+    label: "轮播图",
+    span: 12,
+    render: good_banner_img => createImages(good_banner_img)
+  },
+  {
+    field: "good_cover_img",
+    label: "详情图",
+    span: 12,
+    render: good_cover_img => createImages(good_cover_img)
+  },
+  {
+    field: "good_remark",
+    label: "商品备注",
+    span: 24
+  }
+];
+const goodDetailConfig: ContentConfig = {
+  columns,
+  apis: {
+    httpDetail
+  }
+};
+
+export default goodDetailConfig;

+ 2 - 0
src/views/operate/setTheme/cpns/addModel.vue

@@ -176,8 +176,10 @@ defineExpose({
   <el-dialog
     :title="title"
     v-model="dialogVisible"
+    :close-on-press-escape="false"
     center
     top="5vh"
+    append-to-body
     destroy-on-close
     width="1024px"
   >