xiaodai2017 2 жил өмнө
parent
commit
086ee5e33e
38 өөрчлөгдсөн 1295 нэмэгдсэн , 59 устгасан
  1. 41 0
      src/api/operate/batchCreatUser.ts
  2. 41 0
      src/api/operate/batchSetVideo.ts
  3. 41 0
      src/api/operate/setComGood.ts
  4. 41 0
      src/api/operate/setService.ts
  5. 41 0
      src/api/operate/setTheme.ts
  6. 41 0
      src/api/operate/setUserVideo.ts
  7. 6 1
      src/components/RemoteSelect/index.ts
  8. 40 0
      src/components/RemoteSelect/src/search/Brand.vue
  9. 39 0
      src/components/RemoteSelect/src/search/Category.vue
  10. 52 0
      src/components/RemoteSelect/src/search/Customer.vue
  11. 48 0
      src/components/RemoteSelect/src/search/Project.vue
  12. 40 0
      src/components/RemoteSelect/src/search/Unit.vue
  13. 1 1
      src/config/status.ts
  14. 1 1
      src/views/operate/SetUserVideo/config/content.config.ts
  15. 1 1
      src/views/operate/SetUserVideo/config/modal.config.ts
  16. 1 1
      src/views/operate/SetUserVideo/index.vue
  17. 1 1
      src/views/operate/batchCreatUser/config/content.config.ts
  18. 1 1
      src/views/operate/batchCreatUser/config/modal.config.ts
  19. 1 1
      src/views/operate/batchCreatUser/index.vue
  20. 1 1
      src/views/operate/batchSetVideo/config/content.config.ts
  21. 1 1
      src/views/operate/batchSetVideo/config/modal.config.ts
  22. 1 1
      src/views/operate/batchSetVideo/index.vue
  23. 1 1
      src/views/operate/setComGood/config/content.config.ts
  24. 5 6
      src/views/operate/setComGood/config/modal.config.ts
  25. 13 1
      src/views/operate/setComGood/config/search.config.ts
  26. 103 0
      src/views/operate/setComGood/cpns/commodity-feedback.vue
  27. 70 0
      src/views/operate/setComGood/cpns/commodity-modal.vue
  28. 117 0
      src/views/operate/setComGood/cpns/ladder-modal.vue
  29. 85 0
      src/views/operate/setComGood/cpns/ladder-table.vue
  30. 199 0
      src/views/operate/setComGood/cpns/project-form.vue
  31. 83 0
      src/views/operate/setComGood/cpns/scheme-plan.vue
  32. 105 0
      src/views/operate/setComGood/detail.vue
  33. 28 35
      src/views/operate/setComGood/index.vue
  34. 1 1
      src/views/operate/setService/config/content.config.ts
  35. 1 1
      src/views/operate/setService/config/modal.config.ts
  36. 1 1
      src/views/operate/setTheme/config/content.config.ts
  37. 1 1
      src/views/operate/setTheme/config/modal.config.ts
  38. 1 1
      src/views/operate/setTheme/index.vue

+ 41 - 0
src/api/operate/batchCreatUser.ts

@@ -0,0 +1,41 @@
+import { loadEnv } from "@build/index";
+import { http } from "/@/utils/http";
+
+const { VITE_PROXY_DOMAIN_REAL } = loadEnv();
+
+// 添加
+export async function httpAdd(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyAdd`, {
+    data
+  });
+}
+// 列表
+export async function httpList(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companylist`, {
+    data
+  });
+}
+// 详情
+export async function httpDetail(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyRead`, {
+    data
+  });
+}
+// 更新
+export async function httpUpdate(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyEdit`, {
+    data
+  });
+}
+// 状态
+export async function httpStatus(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyChange`, {
+    data
+  });
+}
+// 删除
+export async function httpDelete(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyDelete`, {
+    data
+  });
+}

+ 41 - 0
src/api/operate/batchSetVideo.ts

@@ -0,0 +1,41 @@
+import { loadEnv } from "@build/index";
+import { http } from "/@/utils/http";
+
+const { VITE_PROXY_DOMAIN_REAL } = loadEnv();
+
+// 添加
+export async function httpAdd(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyAdd`, {
+    data
+  });
+}
+// 列表
+export async function httpList(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companylist`, {
+    data
+  });
+}
+// 详情
+export async function httpDetail(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyRead`, {
+    data
+  });
+}
+// 更新
+export async function httpUpdate(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyEdit`, {
+    data
+  });
+}
+// 状态
+export async function httpStatus(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyChange`, {
+    data
+  });
+}
+// 删除
+export async function httpDelete(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyDelete`, {
+    data
+  });
+}

+ 41 - 0
src/api/operate/setComGood.ts

@@ -0,0 +1,41 @@
+import { loadEnv } from "@build/index";
+import { http } from "/@/utils/http";
+
+const { VITE_PROXY_DOMAIN_REAL } = loadEnv();
+
+// 添加
+export async function httpAdd(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyAdd`, {
+    data
+  });
+}
+// 列表
+export async function httpList(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companylist`, {
+    data
+  });
+}
+// 详情
+export async function httpDetail(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyRead`, {
+    data
+  });
+}
+// 更新
+export async function httpUpdate(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyEdit`, {
+    data
+  });
+}
+// 状态
+export async function httpStatus(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyChange`, {
+    data
+  });
+}
+// 删除
+export async function httpDelete(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyDelete`, {
+    data
+  });
+}

+ 41 - 0
src/api/operate/setService.ts

@@ -0,0 +1,41 @@
+import { loadEnv } from "@build/index";
+import { http } from "/@/utils/http";
+
+const { VITE_PROXY_DOMAIN_REAL } = loadEnv();
+
+// 添加
+export async function httpAdd(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyAdd`, {
+    data
+  });
+}
+// 列表
+export async function httpList(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companylist`, {
+    data
+  });
+}
+// 详情
+export async function httpDetail(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyRead`, {
+    data
+  });
+}
+// 更新
+export async function httpUpdate(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyEdit`, {
+    data
+  });
+}
+// 状态
+export async function httpStatus(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyChange`, {
+    data
+  });
+}
+// 删除
+export async function httpDelete(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyDelete`, {
+    data
+  });
+}

+ 41 - 0
src/api/operate/setTheme.ts

@@ -0,0 +1,41 @@
+import { loadEnv } from "@build/index";
+import { http } from "/@/utils/http";
+
+const { VITE_PROXY_DOMAIN_REAL } = loadEnv();
+
+// 添加
+export async function httpAdd(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyAdd`, {
+    data
+  });
+}
+// 列表
+export async function httpList(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companylist`, {
+    data
+  });
+}
+// 详情
+export async function httpDetail(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyRead`, {
+    data
+  });
+}
+// 更新
+export async function httpUpdate(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyEdit`, {
+    data
+  });
+}
+// 状态
+export async function httpStatus(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyChange`, {
+    data
+  });
+}
+// 删除
+export async function httpDelete(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyDelete`, {
+    data
+  });
+}

+ 41 - 0
src/api/operate/setUserVideo.ts

@@ -0,0 +1,41 @@
+import { loadEnv } from "@build/index";
+import { http } from "/@/utils/http";
+
+const { VITE_PROXY_DOMAIN_REAL } = loadEnv();
+
+// 添加
+export async function httpAdd(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyAdd`, {
+    data
+  });
+}
+// 列表
+export async function httpList(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companylist`, {
+    data
+  });
+}
+// 详情
+export async function httpDetail(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyRead`, {
+    data
+  });
+}
+// 更新
+export async function httpUpdate(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyEdit`, {
+    data
+  });
+}
+// 状态
+export async function httpStatus(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyChange`, {
+    data
+  });
+}
+// 删除
+export async function httpDelete(data: object = {}): Promise<DataType<any>> {
+  return http.request("post", `${VITE_PROXY_DOMAIN_REAL}admin/companyDelete`, {
+    data
+  });
+}

+ 6 - 1
src/components/RemoteSelect/index.ts

@@ -1,3 +1,8 @@
 import RemoteSelect from "./src/remote-select";
-
+import Project from "./src/search/Project.vue";
+import Category from "./src/search/Category.vue";
+import Customer from "./src/search/Customer.vue";
+import Brand from "./src/search/Brand.vue";
+import Unit from "./src/search/Unit.vue";
+export { Customer, Brand, Unit, Category, Project };
 export default RemoteSelect;

+ 40 - 0
src/components/RemoteSelect/src/search/Brand.vue

@@ -0,0 +1,40 @@
+<script setup lang="ts">
+import { ref } from "vue";
+import { useVModel } from "@vueuse/core";
+import { httpBrandList } from "/@/api/components/remoteSelect";
+import RemoteSelect from "../remote-select";
+
+const props = defineProps<{
+  placeholder?: string;
+  modelValue?: string;
+  brand_name?: string;
+}>();
+
+const remoteSelectRef = ref<any>(null);
+
+const emit = defineEmits(["update:modelValue", "change"]);
+
+const value = useVModel(props, "modelValue");
+
+function initalData(data) {
+  remoteSelectRef.value.initalData(data);
+}
+
+defineExpose({
+  initalData
+});
+</script>
+
+<template>
+  <RemoteSelect
+    v-model="value"
+    :api="httpBrandList"
+    :placeholder="placeholder"
+    ref="remoteSelectRef"
+    response-label-prop="brand_name"
+    response-val-prop="id"
+    request-prop="brand_name"
+    @change="val => emit('change', val)"
+    @inital="id => (value = id)"
+  />
+</template>

+ 39 - 0
src/components/RemoteSelect/src/search/Category.vue

@@ -0,0 +1,39 @@
+<script setup lang="ts">
+import { ref } from "vue";
+import { useVModel } from "@vueuse/core";
+import { httpCategorys } from "/@/api/components/remoteSelect";
+import RemoteSelect from "../remote-select";
+
+const props = defineProps<{
+  placeholder?: string;
+  modelValue?: string;
+  cat_name?: string;
+}>();
+
+const remoteSelectRef = ref<any>(null);
+
+defineEmits(["update:modelValue"]);
+
+const value = useVModel(props, "modelValue");
+
+function initalData(data) {
+  remoteSelectRef.value.initalData(data);
+}
+
+defineExpose({
+  initalData
+});
+</script>
+
+<template>
+  <RemoteSelect
+    v-model="value"
+    :api="httpCategorys"
+    :placeholder="placeholder"
+    ref="remoteSelectRef"
+    response-label-prop="search"
+    response-val-prop="id"
+    request-prop="cat_name"
+    @inital="id => (value = id)"
+  />
+</template>

+ 52 - 0
src/components/RemoteSelect/src/search/Customer.vue

@@ -0,0 +1,52 @@
+<script setup lang="ts">
+import { ref, watch } from "vue";
+import { useVModel } from "@vueuse/core";
+import { httpCustomerlist } from "/@/api/other";
+import RemoteSelect from "../remote-select";
+
+const props = defineProps<{
+  placeholder?: string;
+  modelValue?: string;
+  companyNo?: string;
+  disabled?: boolean;
+}>();
+
+const remoteSelectRef = ref<any>(null);
+
+defineEmits(["update:modelValue"]);
+
+const value = useVModel(props, "modelValue");
+
+function initalData(companyNo) {
+  remoteSelectRef.value.initalData({ companyNo });
+}
+
+watch(
+  () => props.companyNo,
+  companyNo => {
+    if (!companyNo && !remoteSelectRef.value) return;
+    remoteSelectRef.value.initalData({ companyNo });
+  },
+  {
+    deep: true
+  }
+);
+
+defineExpose({
+  initalData
+});
+</script>
+
+<template>
+  <RemoteSelect
+    v-model="value"
+    :api="httpCustomerlist"
+    :placeholder="placeholder"
+    :disabled="disabled"
+    ref="remoteSelectRef"
+    response-label-prop="companyName"
+    response-val-prop="companyNo"
+    request-prop="companyName"
+    prop="item"
+  />
+</template>

+ 48 - 0
src/components/RemoteSelect/src/search/Project.vue

@@ -0,0 +1,48 @@
+<script setup lang="ts">
+import { ref, watch } from "vue";
+import { useVModel } from "@vueuse/core";
+import { httpList } from "/@/api/sellOut/project";
+import RemoteSelect from "../remote-select";
+
+const emit = defineEmits(["update:modelValue", "change"]);
+
+const props = defineProps<{
+  placeholder?: string;
+  modelValue?: string;
+  project_name?: string;
+  disabled?: boolean;
+}>();
+
+const remoteSelectRef = ref<any>(null);
+
+const value = useVModel(props, "modelValue");
+
+function handleChange(item) {
+  emit("change", item);
+}
+
+watch(
+  () => props.project_name,
+  project_name => {
+    if (!project_name && !remoteSelectRef.value) return;
+    remoteSelectRef.value.initalData({ project_name });
+  },
+  {
+    deep: true
+  }
+);
+</script>
+
+<template>
+  <RemoteSelect
+    v-model="value"
+    :api="httpList"
+    :placeholder="placeholder"
+    :disabled="disabled"
+    ref="remoteSelectRef"
+    response-label-prop="project_name"
+    request-prop="project_name"
+    response-val-prop="id"
+    @item-change="handleChange"
+  />
+</template>

+ 40 - 0
src/components/RemoteSelect/src/search/Unit.vue

@@ -0,0 +1,40 @@
+<script setup lang="ts">
+import { ref } from "vue";
+import { useVModel } from "@vueuse/core";
+import { httpUnitList } from "/@/api/components/remoteSelect";
+import RemoteSelect from "../remote-select";
+
+const props = defineProps<{
+  placeholder?: string;
+  modelValue?: string;
+  unit?: string;
+}>();
+
+const remoteSelectRef = ref<any>(null);
+
+const emit = defineEmits(["update:modelValue", "change"]);
+
+const value = useVModel(props, "modelValue");
+
+function initalData(data) {
+  remoteSelectRef.value.initalData(data);
+}
+
+defineExpose({
+  initalData
+});
+</script>
+
+<template>
+  <RemoteSelect
+    v-model="value"
+    :api="httpUnitList"
+    :placeholder="placeholder"
+    ref="remoteSelectRef"
+    response-label-prop="unit"
+    response-val-prop="id"
+    request-prop="unit"
+    @item-change="val => emit('change', val)"
+    @inital="unit => (value = unit)"
+  />
+</template>

+ 1 - 1
src/config/status.ts

@@ -44,7 +44,7 @@ export const MENU_TYPE_OPTIONS = [
 ];
 export const MENU_PRICATE_OPTIONS = [
   { id: "1", label: "显示", value: "1", type: "primary" },
-  { id: "2", label: "隐藏", value: "2", type: "warning" }
+  { id: "0", label: "隐藏", value: "0", type: "warning" }
 ];
 export const LEVEL_OPTIONS = [
   { id: "1", label: "超级管理员", value: "1", type: "success" },

+ 1 - 1
src/views/operate/SetUserVideo/config/content.config.ts

@@ -5,7 +5,7 @@ import {
   httpUpdate,
   httpStatus,
   httpDelete
-} from "/@/api/parameter/good";
+} from "/@/api/operate/setUserVideo";
 import { renderStatus } from "/@/utils/column-helper";
 import { STATUS_OPTIONS } from "/@/config/status";
 

+ 1 - 1
src/views/operate/SetUserVideo/config/modal.config.ts

@@ -5,7 +5,7 @@ const modalConfig: ModalConfig = {
   title: "企业商品",
   colLayout: { span: 24 },
   itemStyle: {},
-  contact: "good",
+  contact: "setUserVideo",
   labelWidth: "85px",
   formItems: [
     {

+ 1 - 1
src/views/operate/SetUserVideo/index.vue

@@ -9,7 +9,7 @@ import { PageContent } from "/@/components/PageContent";
 
 import type { PageContentInstance } from "/@/components/PageContent";
 const pageContentRef = ref<PageContentInstance | null>(null);
-const pageName = "good";
+const pageName = "setUserVideo";
 const {
   pageModalRef,
   handleUpdateData,

+ 1 - 1
src/views/operate/batchCreatUser/config/content.config.ts

@@ -5,7 +5,7 @@ import {
   httpUpdate,
   httpStatus,
   httpDelete
-} from "/@/api/parameter/good";
+} from "/@/api/operate/batchCreatUser";
 import { renderStatus } from "/@/utils/column-helper";
 import { STATUS_OPTIONS } from "/@/config/status";
 

+ 1 - 1
src/views/operate/batchCreatUser/config/modal.config.ts

@@ -5,7 +5,7 @@ const modalConfig: ModalConfig = {
   title: "企业商品",
   colLayout: { span: 24 },
   itemStyle: {},
-  contact: "good",
+  contact: "batchCreatUser",
   labelWidth: "85px",
   formItems: [
     {

+ 1 - 1
src/views/operate/batchCreatUser/index.vue

@@ -9,7 +9,7 @@ import { PageContent } from "/@/components/PageContent";
 
 import type { PageContentInstance } from "/@/components/PageContent";
 const pageContentRef = ref<PageContentInstance | null>(null);
-const pageName = "good";
+const pageName = "batchCreatUser";
 const {
   pageModalRef,
   handleUpdateData,

+ 1 - 1
src/views/operate/batchSetVideo/config/content.config.ts

@@ -5,7 +5,7 @@ import {
   httpUpdate,
   httpStatus,
   httpDelete
-} from "/@/api/parameter/good";
+} from "/@/api/operate/batchSetVideo";
 import { renderStatus } from "/@/utils/column-helper";
 import { STATUS_OPTIONS } from "/@/config/status";
 

+ 1 - 1
src/views/operate/batchSetVideo/config/modal.config.ts

@@ -5,7 +5,7 @@ const modalConfig: ModalConfig = {
   title: "企业商品",
   colLayout: { span: 24 },
   itemStyle: {},
-  contact: "good",
+  contact: "batchSetVideo",
   labelWidth: "85px",
   formItems: [
     {

+ 1 - 1
src/views/operate/batchSetVideo/index.vue

@@ -9,7 +9,7 @@ import { PageContent } from "/@/components/PageContent";
 
 import type { PageContentInstance } from "/@/components/PageContent";
 const pageContentRef = ref<PageContentInstance | null>(null);
-const pageName = "good";
+const pageName = "batchSetVideo";
 const {
   pageModalRef,
   handleUpdateData,

+ 1 - 1
src/views/operate/setComGood/config/content.config.ts

@@ -5,7 +5,7 @@ import {
   httpUpdate,
   httpStatus,
   httpDelete
-} from "/@/api/parameter/good";
+} from "/@/api/operate/setComGood";
 import { renderStatus } from "/@/utils/column-helper";
 import { STATUS_OPTIONS } from "/@/config/status";
 

+ 5 - 6
src/views/operate/setComGood/config/modal.config.ts

@@ -5,23 +5,22 @@ const modalConfig: ModalConfig = {
   title: "企业商品",
   colLayout: { span: 24 },
   itemStyle: {},
-  contact: "good",
+  contact: "setComGood",
   labelWidth: "85px",
   formItems: [
     {
-      field: "name",
+      field: "id",
       type: "remote-select",
       label: "业务企业",
       placeholder: "业务企业",
       otherOptions: {
         api: httpCompanylist,
+        requesetProp: "title",
         responseLabelProp: "title",
         responseValPro: "id",
-        requesetProp: "",
-        isRoot: false,
         prop: "list"
       },
-      span: 24,
+      span: 12,
       rules: [{ required: true, trigger: "change", message: "请选择业务企业" }]
     },
     {
@@ -37,7 +36,7 @@ const modalConfig: ModalConfig = {
         isRoot: false,
         prop: "list"
       },
-      span: 24,
+      span: 12,
       rules: [{ required: true, trigger: "change", message: "请选择卡类型" }]
     }
   ]

+ 13 - 1
src/views/operate/setComGood/config/search.config.ts

@@ -1,7 +1,7 @@
 import { FormConfig } from "/@/components/PageSearch";
 import { STATUS_OPTIONS } from "/@/config/status";
 import { convertOptions } from "/@/utils/column-helper";
-
+import { httpList as httpCompanylist } from "/@/api/parameter/company";
 const searchFormConfig: FormConfig = {
   formItems: [
     {
@@ -10,6 +10,18 @@ const searchFormConfig: FormConfig = {
       placeholder: "状态",
       options: convertOptions(STATUS_OPTIONS)
     },
+    {
+      field: "id",
+      type: "remote-select",
+      placeholder: "业务企业",
+      otherOptions: {
+        api: httpCompanylist,
+        requesetProp: "title",
+        responseLabelProp: "title",
+        responseValPro: "id",
+        prop: "list"
+      }
+    },
     {
       field: "title",
       type: "input",

+ 103 - 0
src/views/operate/setComGood/cpns/commodity-feedback.vue

@@ -0,0 +1,103 @@
+<script setup lang="ts">
+import { ref } from "vue";
+import { goodTypeOptions } from "../config/_options";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import CommodityModal from "./commodity-modal.vue";
+
+defineProps<{
+  feedback: Record<string, any>;
+}>();
+
+const commodityModalRef = ref<InstanceType<typeof CommodityModal> | null>(null);
+</script>
+
+<template>
+  <div class="flex flex-col gap-5">
+    <ElCard v-for="(item, index) in feedback" :key="item.id">
+      <h1 class="mb-2">商品要求 {{ index + 1 }}</h1>
+      <ElTable border class="mb-2" :data="[item]" size="small">
+        <ElTableColumn prop="good_type" label="商品类型">
+          <template #="{ row }">
+            <ElTag>
+              {{
+                goodTypeOptions.find(({ id }) => id === row.good_type)?.label ||
+                "--"
+              }}
+            </ElTag>
+          </template>
+        </ElTableColumn>
+        <ElTableColumn prop="budget_price" label="预算单价" />
+        <ElTableColumn prop="num" label="购买数量" />
+        <ElTableColumn prop="cat_name" label="商品分类" width="220">
+          <template #="{ row }">
+            {{ row.can.map(({ name }) => name).join("_") }}
+          </template>
+        </ElTableColumn>
+        <ElTableColumn label="图片">
+          <template #="{ row }">
+            <ElImage
+              v-if="row.good_info_img"
+              style="width: 30px; height: 30px"
+              :preview-src-list="[row.good_info_img]"
+              preview-teleported
+            />
+          </template>
+        </ElTableColumn>
+        <ElTableColumn prop="good_name" label="商品名称" />
+      </ElTable>
+      <h1 class="mb-2">商品反馈情况</h1>
+      <ElTable border :data="[item]">
+        <ElTableColumn prop="pgNo" label="商品要求编码" min-width="180" />
+        <ElTableColumn prop="sale_price" label="销售单价" min-width="120" />
+        <ElTableColumn prop="num" label="购买数量" min-width="120" />
+        <ElTableColumn prop="" label="商品图片" min-width="120">
+          <template #="{ row }">
+            <ElImage
+              v-if="row.good_info_img"
+              :src="row.good_info_img"
+              style="width: 30px; height: 30px"
+              :preview-src-list="[row.good_info_img]"
+              preview-teleported
+            />
+          </template>
+        </ElTableColumn>
+        <ElTableColumn prop="good_name" label="商品名称" min-width="180" />
+        <ElTableColumn prop="class_cat" label="商品分类" min-width="220">
+          <template #="{ row }">
+            <ElTag>
+              {{
+                goodTypeOptions.find(({ id }) => id === row.good_type)?.label ||
+                "--"
+              }}
+            </ElTag>
+          </template>
+        </ElTableColumn>
+        <ElTableColumn prop="source" label="商品来源" min-width="120">
+          <template #="{ row }">
+            <ElTag>
+              {{ row.data_source === "1" ? "平台商品" : "采反商品" }}
+            </ElTag>
+          </template>
+        </ElTableColumn>
+        <ElTableColumn prop="expire_day" label="信息有效期" min-width="140" />
+        <ElTableColumn prop="work_day" label="制作工期" min-width="120" />
+        <ElTableColumn prop="delivery_day" label="物流时间" min-width="120" />
+        <ElTableColumn prop="creater" label="负责人" min-width="80" />
+        <ElTableColumn fixed="right" label="操作" width="80">
+          <template #="{ row }">
+            <ElTooltip placement="top" content="详情">
+              <ElButton
+                @click="() => commodityModalRef.onDisplay(row)"
+                type="primary"
+                :icon="useRenderIcon('eye-view')"
+                link
+              />
+            </ElTooltip>
+          </template>
+        </ElTableColumn>
+      </ElTable>
+    </ElCard>
+
+    <CommodityModal ref="commodityModalRef" />
+  </div>
+</template>

+ 70 - 0
src/views/operate/setComGood/cpns/commodity-modal.vue

@@ -0,0 +1,70 @@
+<script setup lang="ts">
+// import { ref, computed } from "vue";
+// import BasicDescriptions from "/@/components/BasicDescriptions";
+// import { useAsync } from "/@/hooks/useAsync";
+
+// import {
+//   platformGoodColumns,
+//   commodityFeedbackColumns
+// } from "./../config/_details";
+
+// import {
+//   httpPlatformGoodDetail,
+//   httpCommodityGoodDetail
+// } from "/@/api/sellOut/project";
+
+// const visible = ref(false);
+// const isPlatform = ref(false);
+
+// const title = computed(() =>
+//   isPlatform.value ? "平台商品详情" : "采反商品详情"
+// );
+
+// const columns = computed(() =>
+//   isPlatform.value ? platformGoodColumns : commodityFeedbackColumns
+// );
+
+// const {
+//   data,
+//   setData,
+//   loading,
+//   run: detail
+// } = useAsync<Record<string, any>>({
+//   initalData: {}
+// });
+
+// function onDisplay(data) {
+//   const { data_source, skuCode, spuCode } = data;
+//   isPlatform.value = data_source === "1";
+
+//   visible.value = true;
+
+//   detail(
+//     isPlatform.value
+//       ? httpPlatformGoodDetail({ skuCode })
+//       : httpCommodityGoodDetail({ spuCode })
+//   );
+// }
+
+// defineExpose({
+//   onDisplay
+// });
+</script>
+
+<template>
+  11
+  <!-- <ElDialog
+    center
+    v-model="visible"
+    :title="title"
+    width="1024px"
+    @close="() => setData({})"
+  >
+    <BasicDescriptions
+      labelWidth="100"
+      :columns="columns"
+      v-loading="loading"
+      :data="data"
+    />
+  </ElDialog> -->
+</template>

+ 117 - 0
src/views/operate/setComGood/cpns/ladder-modal.vue

@@ -0,0 +1,117 @@
+<script setup lang="ts">
+import { ref, unref, computed } from "vue";
+import { ElForm } from "element-plus";
+import { goodTypeOptions } from "../config/_options";
+import { ladderFormRules } from "../config/_rules";
+import { ImageUpload } from "/@/components/Upload";
+
+import { AmountInput, NumberInput } from "/@/components/Input";
+import GoodClass from "/@/components/GoodClass";
+
+const emit = defineEmits(["push", "update"]);
+
+const defaultData = {
+  budget_price: "0.00",
+  good_type: "1",
+  good_name: "",
+  cat_info: [],
+  num: "0"
+};
+
+const isUpdate = ref(false);
+const visible = ref(false);
+const formRef = ref<InstanceType<typeof ElForm> | null>(null);
+const updateIndex = ref("0");
+
+const formData = ref<Record<string, any>>({ ...defaultData });
+
+const title = computed(() => {
+  return isUpdate.value ? "修改商品要求" : "添加商品要求";
+});
+
+function handleConfirm() {
+  formRef.value.validate(isValid => {
+    if (!isValid) return;
+
+    emit(
+      isUpdate.value ? "update" : "push",
+      unref(formData),
+      unref(updateIndex)
+    );
+
+    visible.value = false;
+  });
+}
+
+defineExpose({
+  onDisplay: (data?: Record<string, any>, index = "0") => {
+    if (data) {
+      data.cat_info = [];
+      formData.value = data;
+      updateIndex.value = index;
+    }
+
+    visible.value = true;
+    isUpdate.value = !!data;
+  }
+});
+</script>
+
+<template>
+  <ElDialog
+    center
+    :title="title"
+    v-model="visible"
+    @close="() => (formData = { ...defaultData })"
+  >
+    <ElForm
+      ref="formRef"
+      :model="formData"
+      :rules="ladderFormRules"
+      label-width="100px"
+      size="small"
+    >
+      <ElFormItem label="预算单价" prop="budget_price">
+        <AmountInput v-model="formData.budget_price" />
+      </ElFormItem>
+
+      <ElFormItem label="购买数量" prop="num">
+        <NumberInput placeholder="购买数量" v-model="formData.num" />
+      </ElFormItem>
+
+      <ElFormItem label="商品类型" prop="good_type">
+        <ElSelect
+          style="width: 100%"
+          placeholder="商品类型"
+          v-model="formData.good_type"
+        >
+          <ElOption
+            v-for="item in goodTypeOptions"
+            :value="item.id"
+            :label="item.label"
+            :key="item.id"
+          />
+        </ElSelect>
+      </ElFormItem>
+
+      <ElFormItem label="商品分类" prop="cat_info">
+        <GoodClass v-model="formData.cat_info" style="width: 100%" />
+      </ElFormItem>
+
+      <ElFormItem label="商品名称" prop="good_name">
+        <ElInput placeholder="商品名称" v-model="formData.good_name" />
+      </ElFormItem>
+
+      <ElFormItem label="商品图片" prop="good_info_img">
+        <ImageUpload />
+      </ElFormItem>
+
+      <ElFormItem>
+        <div class="w-full flex justify-end">
+          <ElButton type="primary" @click="handleConfirm">保存</ElButton>
+          <ElButton @click="() => (visible = false)">取消</ElButton>
+        </div>
+      </ElFormItem>
+    </ElForm>
+  </ElDialog>
+</template>

+ 85 - 0
src/views/operate/setComGood/cpns/ladder-table.vue

@@ -0,0 +1,85 @@
+<script setup lang="ts">
+import { goodTypeOptions } from "../config/_options";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+
+const emit = defineEmits(["choose", "delete", "update"]);
+
+defineProps<{
+  ladder: Record<string, any>[];
+  readonly: boolean;
+}>();
+</script>
+
+<template>
+  <ElTable size="small" border :data="ladder">
+    <ElTableColumn prop="name" label="商品阶梯">
+      <template #="{ $index }">
+        {{ $index + 1 }}
+      </template>
+    </ElTableColumn>
+
+    <ElTableColumn prop="good_type" label="商品类型">
+      <template #="{ row }">
+        <ElTag>{{
+          goodTypeOptions.find(({ id }) => id === row.good_type)?.label || "--"
+        }}</ElTag>
+      </template>
+    </ElTableColumn>
+    <ElTableColumn prop="budget_price" label="预算单价" />
+
+    <ElTableColumn prop="num" label="购买数量" />
+
+    <ElTableColumn prop="cat_name" label="商品分类" width="280">
+      <template #="{ row }">
+        {{ row.cat_info.map(({ name }) => name).join("_") }}
+      </template>
+    </ElTableColumn>
+
+    <ElTableColumn prop="good_img" label="图片">
+      <template #="{ row }">
+        <ElImage
+          v-if="row.good_img"
+          style="width: 20px; height: 20px"
+          :preview-src-list="[row.good_img]"
+          preview-teleported=""
+        />
+      </template>
+    </ElTableColumn>
+
+    <ElTableColumn prop="good_name" label="商品名称" />
+
+    <ElTableColumn v-if="!readonly">
+      <template #header>
+        <div class="w-full flex justify-between">
+          <p>操作</p>
+
+          <ElTooltip content="添加阶梯" placement="top">
+            <ElButton
+              link
+              :icon="useRenderIcon('add')"
+              @click="() => emit('choose')"
+            />
+          </ElTooltip>
+        </div>
+      </template>
+
+      <template #="{ $index, row }">
+        <ElButton
+          text
+          type="primary"
+          size="small"
+          @click="() => emit('update', { data: row, index: $index })"
+          >编辑</ElButton
+        >
+
+        <ElButton
+          text
+          type="primary"
+          size="small"
+          @click="() => emit('delete', $index)"
+          >删除</ElButton
+        >
+      </template>
+    </ElTableColumn>
+  </ElTable>
+</template>

+ 199 - 0
src/views/operate/setComGood/cpns/project-form.vue

@@ -0,0 +1,199 @@
+<script setup lang="ts">
+import { ref, watchEffect, unref } from "vue";
+import { ElForm, ElMessage } from "element-plus";
+import { projectFormConfig } from "../config/_details";
+import { projectFormRules } from "../config/_rules";
+import { httpCateDetail } from "/@/api/operate/setComGood";
+import { BasicForm } from "/@/components/BasicForm";
+import LadderModal from "./ladder-modal.vue";
+import LadderTable from "./ladder-table.vue";
+
+import SearchTerrace from "/@/components/SearchTerrace";
+import SearchWorkCompany from "/@/components/SearchWorkCompany";
+import { transform, createDefaultData } from "/@/components/BasicForm";
+import { Customer } from "/@/components/RemoteSelect";
+import { AmountInput } from "/@/components/Input";
+import { useResponseHandle } from "/@/hooks/useAsync";
+
+const config = {
+  name: "project_name",
+  platform: "platform_name"
+};
+
+const emit = defineEmits(["create"]);
+
+const props = defineProps<{
+  data: Record<string, string>;
+  readonly: boolean;
+  id?: string;
+}>();
+
+const loading = ref(false);
+const { formItems } = projectFormConfig;
+
+const responseHandle = useResponseHandle();
+const basicFormRef = ref<InstanceType<typeof ElForm>>(null);
+const formData = ref<Record<string, any>>(createDefaultData(formItems));
+const ladderModalRef = ref<InstanceType<typeof LadderModal>>(null);
+
+function requesetCategoryById(id: string) {
+  const transform = ({ cat_name, ...rest }: any) => ({
+    ...rest,
+    name: cat_name
+  });
+  return new Promise(resolve => {
+    httpCateDetail({ id }).then(({ code, message, data }) => {
+      responseHandle({
+        code,
+        message,
+        handler: () => resolve(transform(data))
+      });
+    });
+  });
+}
+
+async function ladderTransform(ladder) {
+  loading.value = true;
+  const { ladder: _ladder } = formData.value;
+  const tasks = ladder.cat_info.map(async id => await requesetCategoryById(id));
+  ladder.cat_info = await Promise.all(tasks);
+  loading.value = false;
+  return ladder;
+}
+
+async function handlePush(_ladder) {
+  const ladder = await ladderTransform(_ladder);
+  if (!Array.isArray(formData.value.ladder)) {
+    formData.value.ladder = [];
+  }
+  formData.value.ladder.push(ladder);
+}
+
+async function handleUpdate(_ladder, index) {
+  const ladder = await ladderTransform(_ladder);
+  formData.value.ladder[index] = ladder;
+}
+
+function disabledDate(date) {
+  return date.getTime() < new Date().getTime() - 86400000;
+}
+
+function handleDateChange(prop: string) {
+  const { arrtime, endtime } = formData.value;
+  const start = new Date(arrtime).valueOf();
+  const end = new Date(endtime).valueOf();
+  if (start > end) {
+    formData.value[prop] = "";
+    ElMessage.warning(`竞价截止时间不能大于要求到货时间!`);
+  }
+}
+
+function handleCreate() {
+  basicFormRef.value.validate(isValid => {
+    if (!isValid) return;
+    const { ladder, ...rest } = unref(formData);
+    const transform = ladder => {
+      return {
+        ...(ladder.good_img ? { good_img: ladder.good_img } : {}),
+        ...{
+          budget_price: ladder.budget_price,
+          good_name: ladder.good_name,
+          good_type: ladder.good_type,
+          num: ladder.num
+        }
+      };
+    };
+
+    const params = {
+      ...rest,
+      ladder: ladder.map(transform)
+    };
+
+    emit("create", params);
+  });
+}
+
+watchEffect(() => {
+  const { readonly, data } = props;
+  if (readonly && !data) {
+    return;
+  }
+
+  formData.value = transform(formItems, data, config);
+});
+</script>
+
+<template>
+  <ElScrollbar>
+    <BasicForm
+      ref="basicFormRef"
+      v-bind="projectFormConfig"
+      :form-data="formData"
+      :rules="projectFormRules"
+      :disabled="readonly"
+      label-width="120px"
+    >
+      <template #platform>
+        <SearchTerrace v-model="formData.platform" placeholder="所属平台" />
+      </template>
+
+      <template #companyNo>
+        <SearchWorkCompany v-model="formData.companyNo" placeholder="销售方" />
+      </template>
+
+      <template #arrtime>
+        <ElDatePicker
+          v-model="formData.arrtime"
+          style="width: 100%"
+          :disabled-date="disabledDate"
+          @change="e => handleDateChange('arrtime')"
+          placeholder="竞价截止时间"
+        />
+      </template>
+
+      <template #endtime>
+        <ElDatePicker
+          v-model="formData.endtime"
+          style="width: 100%"
+          :disabled-date="disabledDate"
+          @change="e => handleDateChange('endtime')"
+          placeholder="竞价截止时间"
+        />
+      </template>
+
+      <template #khNo>
+        <Customer
+          v-model="formData.khNo"
+          :companyNo="formData.khNo"
+          placeholder="购买方"
+        />
+      </template>
+
+      <template #budget_total>
+        <AmountInput v-model="formData.budget_total" placeholder="项目总预算" />
+      </template>
+
+      <template #ladder>
+        <LadderTable
+          :readonly="readonly"
+          :ladder="formData.ladder"
+          @choose="() => ladderModalRef.onDisplay()"
+          @update="({ data, index }) => ladderModalRef.onDisplay(data, index)"
+          @delete="index => formData.ladder.splice(index, 1)"
+        />
+      </template>
+
+      <template #footer>
+        <div class="w-full flex justify-end" v-if="!readonly">
+          <ElButton type="primary" @click="handleCreate">保存</ElButton>
+        </div>
+      </template>
+    </BasicForm>
+
+    <LadderModal
+      ref="ladderModalRef"
+      @update="handleUpdate"
+      @push="handlePush"
+    />
+  </ElScrollbar>
+</template>

+ 83 - 0
src/views/operate/setComGood/cpns/scheme-plan.vue

@@ -0,0 +1,83 @@
+<script setup lang="ts">
+import { computed } from "vue";
+import { useAsync } from "/@/hooks/useAsync";
+import { httpProjectFeedlist, httpProjectPlan } from "/@/api/sellOut/project";
+
+const props = defineProps<{
+  id: string;
+  feedback: Record<string, string>;
+  project: Record<string, string>;
+}>();
+
+const { run: feed, data: feedData } = useAsync<Record<string, string>[]>({
+  initalData: [],
+  isList: true
+});
+
+const { run: plan, data: planData } = useAsync<Record<string, string>[]>({
+  initalData: []
+});
+
+const planTotal = computed(() => planData.value.length);
+
+function initalData() {
+  const projectNo = props.id;
+
+  if (!projectNo) {
+    return;
+  }
+
+  feed(httpProjectFeedlist({ projectNo }));
+  plan(httpProjectPlan({ projectNo }));
+}
+
+initalData();
+</script>
+
+<template>
+  <ElCard title="商品要求">
+    <h1 class="mb-2">商品要求</h1>
+    <ElTable class="mb-2" :data="project?.ladder || []" border size="small">
+      <ElTableColumn label="要求编码" prop="pgNo" />
+      <ElTableColumn label="商品类型" prop="good_type" />
+      <ElTableColumn label="预算单价" prop="budget_price" />
+      <ElTableColumn label="购买数量" prop="num" />
+      <ElTableColumn label="商品分类" prop="can" />
+      <ElTableColumn label="图片" prop="good_img" />
+      <ElTableColumn label="商品名称" prop="good_name" />
+    </ElTable>
+
+    <h1 class="mb-2">客户意向商品</h1>
+    <ElTable class="mb-2" :data="[]" border size="small">
+      <ElTableColumn label="要求编码" prop="pgNo" />
+      <ElTableColumn label="销售单价" prop="pgNo" />
+      <ElTableColumn label="购买数量" prop="pgNo" />
+      <ElTableColumn label="商品图片" prop="pgNo" />
+      <ElTableColumn label="商品名称" prop="pgNo" />
+      <ElTableColumn label="商品来源" prop="pgNo" />
+      <ElTableColumn label="商品分类" prop="pgNo" />
+      <ElTableColumn label="信息有效期" prop="pgNo" />
+      <ElTableColumn label="制作工期" prop="pgNo" />
+      <ElTableColumn label="物流时间" prop="pgNo" />
+    </ElTable>
+
+    <div class="w-full flex justify-end">
+      <ElButtonGroup size="small">
+        <ElButton type="primary">&lt;</ElButton>
+        <ElButton type="primary">方案共1/{{ planTotal }}</ElButton>
+        <ElButton type="primary">&gt;</ElButton>
+      </ElButtonGroup>
+    </div>
+
+    <h1 class="mb-2">项目方案</h1>
+    <ElTable class="mb-2" :data="feedData" border size="small">
+      <ElTableColumn label="要求编码" prop="pgNo" />
+      <ElTableColumn label="商品类型" prop="pgNo" />
+      <ElTableColumn label="预算单价" prop="pgNo" />
+      <ElTableColumn label="购买数量" prop="pgNo" />
+      <ElTableColumn label="商品分类" prop="pgNo" />
+      <ElTableColumn label="图片" prop="pgNo" />
+      <ElTableColumn label="商品名称" prop="pgNo" />
+    </ElTable>
+  </ElCard>
+</template>

+ 105 - 0
src/views/operate/setComGood/detail.vue

@@ -0,0 +1,105 @@
+<script setup lang="ts">
+import CommodityFeedback from "./cpns/commodity-feedback.vue";
+import ApprovalRecord from "/@/components/ApprovalRecord";
+import PgaeDetail from "/@/components/PageDetail";
+// import SchemePlans from "./cpns/scheme-plan.vue";
+import ProjectForm from "./cpns/project-form.vue";
+import { useAsync } from "/@/hooks/useAsync";
+import { useDetail } from "/@/hooks/useDetail";
+import { useRouter } from "vue-router";
+
+import {
+  httpDetail,
+  httpCreate
+  // httpCommodityFeedback
+} from "/@/api/operate/setComGood";
+
+//方案制作状态
+const schemeStatus = ["3", "4", "5", "6"];
+
+const { push } = useRouter();
+
+const { isDetail, collapses, label, id } = useDetail({
+  baseName: "项目",
+  collapseLen: 2
+});
+
+const {
+  data: projectData,
+  run: project,
+  loading: projectLoading
+} = useAsync<Record<string, string>>({
+  initalData: {}
+});
+
+const {
+  data: feedbackData,
+  run: feedback,
+  loading: feedbackLoading
+} = useAsync({
+  initalData: {},
+  isList: true
+});
+
+const { run: create } = useAsync({
+  success: () => push("/operate/setComGood")
+});
+
+const handleCreate = data => create(httpCreate(data));
+
+function initalData() {
+  if (!id.value) {
+    return;
+  }
+
+  project(httpDetail({ projectNo: id.value }));
+  // feedback(httpCommodityFeedback({ projectNo: id.value }));
+}
+
+initalData();
+</script>
+
+<template>
+  <PgaeDetail>
+    <ElTabs>
+      <ElTabPane :label="label">
+        <ElCollapse v-model="collapses">
+          <ElCollapseItem :title="label" name="1" v-loading="projectLoading">
+            <ProjectForm
+              :readonly="isDetail"
+              :data="projectData"
+              @create="handleCreate"
+            />
+          </ElCollapseItem>
+        </ElCollapse>
+
+        <template v-if="isDetail" />
+      </ElTabPane>
+
+      <template v-if="isDetail">
+        <!-- <ElTabPane label="商品反馈详情" v-loading="feedbackLoading">
+          <CommodityFeedback :feedback="feedbackData" />
+        </ElTabPane>
+
+        <ElTabPane
+          v-if="schemeStatus.includes(projectData.status)"
+          label="方案制作"
+        >
+          <SchemePlans
+            :id="id"
+            :feedback="feedbackData"
+            :project="projectData"
+          />
+        </ElTabPane> -->
+
+        <ElTabPane label="审批记录">
+          <!-- <ApprovalRecord :orderCode="id" :type="'PRO'" /> -->
+        </ElTabPane>
+
+        <ElTabPane label="流程图">
+          <!-- <FlowChart processId="14" :orderCode="id" type="PRO" /> -->
+        </ElTabPane>
+      </template>
+    </ElTabs>
+  </PgaeDetail>
+</template>

+ 28 - 35
src/views/operate/setComGood/index.vue

@@ -1,47 +1,40 @@
 <script setup lang="ts">
-import { ref } from "vue";
-import { PageSearch, usePageSearch } from "/@/components/PageSearch";
+import { usePageSearch } from "/@/components/PageSearch";
 import searchConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
-import modalConfig from "./config/modal.config";
-import { PageModal, usePageModal } from "/@/components/PageModal";
-import { PageContent } from "/@/components/PageContent";
+import PageAuth from "/@/components/PageAuth";
+import { useRouter } from "vue-router";
 
-import type { PageContentInstance } from "/@/components/PageContent";
-const pageContentRef = ref<PageContentInstance | null>(null);
-const pageName = "good";
-const {
-  pageModalRef,
-  handleUpdateData,
-  handleCreateData,
-  handlePreviewData,
-  handleConfrim,
-  defaultInfo
-} = usePageModal({
-  pageContentRef
-});
-const { handleResetClick, handleSearchClick } = usePageSearch();
+import PageContainer, {
+  type Events,
+  type Hooks
+} from "/@/components/PageContainer";
+
+const pageName = "setComGood";
+
+const basePath = "/operate/setComGoodDetail";
+
+const { push } = useRouter();
+
+const hooks: Hooks = {
+  pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig)
+};
+
+const events: Events = {
+  content: {
+    preview: ({ projectNo }) => push(`${basePath}?id=${projectNo}`),
+    create: () => push(basePath)
+  }
+};
 </script>
 
 <template>
   <!-- <PageAuth :pageName="pageName"> -->
-  <PageSearch
-    :form-config="searchConfig"
-    @search-btn-click="handleSearchClick"
-    @reset-btn-click="handleResetClick"
-  />
-  <PageContent
-    ref="pageContentRef"
+  <PageContainer
+    :hooks="hooks"
+    :events="events"
+    :search-config="searchConfig"
     :content-config="contentConfig"
-    @create-btn-click="handleCreateData"
-    @preview-btn-click="row => handlePreviewData(row)"
-    @update-btn-click="row => handleUpdateData(row)"
-  />
-  <PageModal
-    ref="pageModalRef"
-    :modal-config="modalConfig"
-    :default-info="defaultInfo"
-    @confirm-btn-click="handleConfrim"
   />
   <!-- </PageAuth> -->
 </template>

+ 1 - 1
src/views/operate/setService/config/content.config.ts

@@ -5,7 +5,7 @@ import {
   httpUpdate,
   httpStatus,
   httpDelete
-} from "/@/api/parameter/good";
+} from "/@/api/operate/setService";
 import { renderStatus } from "/@/utils/column-helper";
 import { STATUS_OPTIONS } from "/@/config/status";
 

+ 1 - 1
src/views/operate/setService/config/modal.config.ts

@@ -5,7 +5,7 @@ const modalConfig: ModalConfig = {
   title: "企业商品",
   colLayout: { span: 24 },
   itemStyle: {},
-  contact: "good",
+  contact: "setService",
   labelWidth: "85px",
   formItems: [
     {

+ 1 - 1
src/views/operate/setTheme/config/content.config.ts

@@ -5,7 +5,7 @@ import {
   httpUpdate,
   httpStatus,
   httpDelete
-} from "/@/api/parameter/good";
+} from "/@/api/operate/setTheme";
 import { renderStatus } from "/@/utils/column-helper";
 import { STATUS_OPTIONS } from "/@/config/status";
 

+ 1 - 1
src/views/operate/setTheme/config/modal.config.ts

@@ -5,7 +5,7 @@ const modalConfig: ModalConfig = {
   title: "企业商品",
   colLayout: { span: 24 },
   itemStyle: {},
-  contact: "good",
+  contact: "setTheme",
   labelWidth: "85px",
   formItems: [
     {

+ 1 - 1
src/views/operate/setTheme/index.vue

@@ -9,7 +9,7 @@ import { PageContent } from "/@/components/PageContent";
 
 import type { PageContentInstance } from "/@/components/PageContent";
 const pageContentRef = ref<PageContentInstance | null>(null);
-const pageName = "good";
+const pageName = "setTheme";
 const {
   pageModalRef,
   handleUpdateData,