xiaodai2017 2 år sedan
förälder
incheckning
9f77e2c5e4

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

@@ -1,15 +1,9 @@
 import { ContentConfig } from "/@/components/PageContent";
-import { httpList, httpAdd } from "/@/api/operate/batchCreatUser";
+import { httpList } from "/@/api/operate/batchCreatUser";
 import { renderStatus, timeInterval } from "/@/utils/column-helper";
 import { BATCH_USER_OPTIONS } from "/@/config/status";
 
 const columns = [
-  {
-    type: "selection",
-    width: 55,
-    hide: ({ checkList }) => !checkList.includes("勾选列")
-  },
-
   {
     prop: "id",
     label: "ID",
@@ -49,15 +43,7 @@ const columns = [
   {
     prop: "addtime",
     label: "创建时间",
-    sortable: true,
     width: "160px"
-  },
-
-  {
-    label: "操作",
-    fixed: "right",
-    width: 60,
-    slot: "operation"
   }
 ];
 
@@ -65,7 +51,6 @@ const contentConfig: ContentConfig = {
   title: "批量创建账号",
   columns,
   apis: {
-    httpAdd,
     httpList
   }
 };

+ 56 - 46
src/views/operate/batchCreatUser/index.vue

@@ -10,15 +10,15 @@ import { PageContent } from "/@/components/PageContent";
 import { Company, Card } from "/@/components/RemoteSelect";
 import { projectFormConfig } from "./config/_details";
 import { projectFormRules } from "./config/_rules";
+import { usePermission } from "/@/hooks/usePermission";
 import {
   BasicForm,
   transform,
   createDefaultData
 } from "/@/components/BasicForm";
 import { ElForm } from "element-plus";
-
+const pageName = "batchCreatUser";
 import dayjs from "dayjs";
-// import { httpDetail } from "/@/api/parameter/video";
 const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch(
   undefined,
   undefined,
@@ -30,7 +30,7 @@ const { pageModalRef, handleCreateData, handleConfrim, defaultInfo } =
   });
 
 const { formItems } = projectFormConfig;
-
+const { hasPermissionWithCode, permissions } = usePermission(pageName);
 const basicFormRef = ref<InstanceType<typeof ElForm>>(null);
 const formData = ref<Record<string, any>>(createDefaultData(formItems));
 function handleCreate() {
@@ -49,50 +49,60 @@ function handleCreate() {
 </script>
 
 <template>
-  <!-- <PageAuth :pageName="pageName"> -->
-  <PageSearch
-    :form-config="searchConfig"
-    @search-btn-click="handleSearchClick"
-    @reset-btn-click="handleResetClick"
-  />
-  <PageContent
-    ref="pageContentRef"
-    :content-config="contentConfig"
-    @create-btn-click="handleCreateData"
-  />
-  <PageModal
-    ref="pageModalRef"
-    :modal-config="modalConfig"
-    :default-info="defaultInfo"
-    @confirm-btn-click="handleConfrim"
-  >
-    <BasicForm
-      ref="basicFormRef"
-      v-bind="projectFormConfig"
-      :form-data="formData"
-      :rules="projectFormRules"
-      :disabled="false"
-      label-width="120px"
+  <PageAuth :pageName="pageName">
+    <PageSearch
+      :form-config="searchConfig"
+      @search-btn-click="handleSearchClick"
+      @reset-btn-click="handleResetClick"
     >
-      <template #company_id>
-        <Company v-model="formData.company_id" placeholder="公司" />
-      </template>
-      <template #card_id>
-        <Card v-model="formData.card_id" placeholder="卡类型" />
-      </template>
-      <template #headname>
-        <span>CJ1745</span>
-      </template>
-      <template #suffix>
-        <span>0000~9999</span>
+      <template #action>
+        <el-button
+          type="primary"
+          @click="handleCreateData"
+          v-if="hasPermissionWithCode('002')"
+        >
+          新增
+        </el-button>
       </template>
+    </PageSearch>
+    <PageContent
+      ref="pageContentRef"
+      :powers="permissions"
+      :content-config="contentConfig"
+    />
+    <PageModal
+      ref="pageModalRef"
+      :modal-config="modalConfig"
+      :default-info="defaultInfo"
+      @confirm-btn-click="handleConfrim"
+    >
+      <BasicForm
+        ref="basicFormRef"
+        v-bind="projectFormConfig"
+        :form-data="formData"
+        :rules="projectFormRules"
+        :disabled="false"
+        label-width="120px"
+      >
+        <template #company_id>
+          <Company v-model="formData.company_id" placeholder="公司" />
+        </template>
+        <template #card_id>
+          <Card v-model="formData.card_id" placeholder="卡类型" />
+        </template>
+        <template #headname>
+          <span>CJ1745</span>
+        </template>
+        <template #suffix>
+          <span>0000~9999</span>
+        </template>
 
-      <template #footer>
-        <div class="w-full flex justify-end">
-          <ElButton type="primary" @click="handleCreate">保存</ElButton>
-        </div>
-      </template>
-    </BasicForm>
-  </PageModal>
-  <!-- </PageAuth> -->
+        <template #footer>
+          <div class="w-full flex justify-end">
+            <ElButton type="primary" @click="handleCreate">保存</ElButton>
+          </div>
+        </template>
+      </BasicForm>
+    </PageModal>
+  </PageAuth>
 </template>

+ 2 - 4
src/views/operate/batchSetVideo/config/content.config.ts

@@ -1,5 +1,5 @@
 import { ContentConfig } from "/@/components/PageContent";
-import { httpList, httpAdd } from "/@/api/operate/batchSetVideo";
+import { httpList } from "/@/api/operate/batchSetVideo";
 
 const columns = [
   {
@@ -26,8 +26,7 @@ const columns = [
 
   {
     prop: "addtime",
-    label: "创建时间",
-    sortable: true
+    label: "创建时间"
   }
 ];
 
@@ -35,7 +34,6 @@ const contentConfig: ContentConfig = {
   title: "批量设置视频",
   columns,
   apis: {
-    httpAdd,
     httpList
   }
 };

+ 79 - 66
src/views/operate/batchSetVideo/index.vue

@@ -15,11 +15,14 @@ import {
   transform,
   createDefaultData
 } from "/@/components/BasicForm";
+import { usePermission } from "/@/hooks/usePermission";
 import { Video } from "/@/components/RemoteSelect";
 const { formItems } = projectFormConfig;
 const formData = ref<Record<string, any>>(createDefaultData(formItems));
 const basicFormRef = ref<InstanceType<typeof ElForm>>(null);
 const pageName = "batchSetVideo";
+const { hasPermissionWithCode, permissions } = usePermission(pageName);
+
 const Video_id = ref("");
 const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch(
   undefined,
@@ -60,78 +63,88 @@ function videoChange(e) {
 </script>
 
 <template>
-  <!-- <PageAuth :pageName="pageName"> -->
-  <PageSearch
-    :form-config="searchConfig"
-    @search-btn-click="handleSearchClick"
-    @reset-btn-click="handleResetClick"
-  />
-  <PageContent
-    ref="pageContentRef"
-    :content-config="contentConfig"
-    @create-btn-click="handleCreateData"
-  >
-    <template #expand="{ video_name }">
-      <div style="padding: 5px 55px">
-        <el-tag
-          v-for="(tag, index) in video_name"
-          disable-transitions
-          :key="tag + index"
-          size="mini"
-        >
-          {{ tag }}
-        </el-tag>
-      </div>
-    </template>
-  </PageContent>
-  <PageModal
-    ref="pageModalRef"
-    :modal-config="modalConfig"
-    :default-info="defaultInfo"
-    @confirm-btn-click="handleConfrim"
-  >
-    <BasicForm
-      ref="basicFormRef"
-      v-bind="projectFormConfig"
-      :form-data="formData"
-      :rules="projectFormRules"
-      :disabled="false"
-      label-width="120px"
+  <PageAuth :pageName="pageName">
+    <PageSearch
+      :form-config="searchConfig"
+      @search-btn-click="handleSearchClick"
+      @reset-btn-click="handleResetClick"
     >
-      <template #group_id>
-        <ComCard v-model="formData.group_id" placeholder="公司卡类型" />
-      </template>
-      <template #video_ids>
-        <div
-          v-show="formData.video_ids && formData.video_ids.length > 0"
-          style="width: 100%; padding: 0 0 15px 0"
+      <template #action>
+        <el-button
+          type="primary"
+          @click="handleCreateData"
+          v-if="hasPermissionWithCode('002')"
         >
+          新增
+        </el-button>
+      </template>
+    </PageSearch>
+    <PageContent
+      ref="pageContentRef"
+      :powers="permissions"
+      :content-config="contentConfig"
+    >
+      <template #expand="{ video_name }">
+        <div style="padding: 5px 55px">
           <el-tag
-            v-for="(tag, index) in formData.video_ids"
-            :key="tag.id + index"
-            class="mx-1"
+            v-for="(tag, index) in video_name"
             disable-transitions
-            closable
-            size="large"
-            @close="formData.video_ids.splice(index, 1)"
+            :key="tag + index"
+            :size="'small'"
           >
-            {{ tag.video_name }}
+            {{ tag }}
           </el-tag>
         </div>
-        <div style="width: 50%">
-          <Video
-            v-model="Video_id"
-            placeholder="请选择直播视频"
-            @change="videoChange"
-          />
-        </div>
-      </template>
-      <template #footer>
-        <div class="w-full flex justify-end">
-          <ElButton type="primary" @click="handleCreate">保存</ElButton>
-        </div>
       </template>
-    </BasicForm>
-  </PageModal>
-  <!-- </PageAuth> -->
+    </PageContent>
+    <PageModal
+      ref="pageModalRef"
+      :modal-config="modalConfig"
+      :default-info="defaultInfo"
+      @confirm-btn-click="handleConfrim"
+    >
+      <BasicForm
+        ref="basicFormRef"
+        v-bind="projectFormConfig"
+        :form-data="formData"
+        :rules="projectFormRules"
+        :disabled="false"
+        label-width="120px"
+      >
+        <template #group_id>
+          <ComCard v-model="formData.group_id" placeholder="公司卡类型" />
+        </template>
+        <template #video_ids>
+          <div
+            v-show="formData.video_ids && formData.video_ids.length > 0"
+            style="width: 100%; padding: 0 0 15px 0"
+          >
+            <el-tag
+              v-for="(tag, index) in formData.video_ids"
+              :key="tag.id + index"
+              class="mx-1"
+              disable-transitions
+              closable
+              size="large"
+              @close="formData.video_ids.splice(index, 1)"
+            >
+              {{ tag.video_name }}
+            </el-tag>
+          </div>
+          <div style="width: 50%">
+            <Video
+              v-model="Video_id"
+              placeholder="请选择直播视频"
+              @change="videoChange"
+            />
+          </div>
+        </template>
+        <template #footer>
+          <div class="w-full flex justify-end">
+            <ElButton type="primary" @click="handleCreate">保存</ElButton>
+          </div>
+        </template>
+      </BasicForm>
+    </PageModal>
+  </PageAuth>
 </template>

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

@@ -10,20 +10,10 @@ import { GOOD_OPTIONS, STATUS_OPTIONS } from "/@/config/status";
 import { renderImage, renderStatus } from "/@/utils/column-helper";
 
 const columns = [
-  {
-    type: "selection",
-    width: 55,
-    hide: ({ checkList }) => !checkList.includes("勾选列")
-  },
-
-  {
-    prop: "id",
-    label: "ID"
-  },
   {
     label: "商品编号",
     prop: "good_code",
-    width: 180,
+    width: 160,
     showOverflowTooltip: true
   },
   {

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

@@ -6,33 +6,29 @@ const modalConfig: ModalConfig = {
   title: "服务",
   itemStyle: {},
   contact: "setService",
-  labelWidth: "90px",
+  labelWidth: "10px",
   formItems: [
     {
       field: "status",
       type: "select",
-      label: "状态",
       placeholder: "状态",
       options: convertOptions(STATUS_OPTIONS)
     },
     {
       field: "company_title",
       type: "input",
-      label: "公司",
       placeholder: "公司"
     },
 
     {
       field: "card_title",
       type: "input",
-      label: "卡类型",
       placeholder: "卡类型"
     },
 
     {
       field: "good_code",
       type: "input",
-      label: "商品编码",
       placeholder: "商品编码"
     }
   ]

+ 309 - 0
src/views/operate/setService/components/edit-dialog.vue

@@ -0,0 +1,309 @@
+<script setup lang="ts">
+import { FormRules, ElForm } from "element-plus";
+import { reactive, ref } from "vue";
+import { httpUpdate, httpAdd, httpDetail } from "/@/api/operate/setService";
+import { responseHandle } from "/@/utils/responseHandle";
+import { useNav } from "/@/layout/hooks/useNav";
+import { Company, Card } from "/@/components/RemoteSelect";
+import { ElMessage } from "element-plus";
+import dayjs from "dayjs";
+enum FROM_TYPE {
+  create = "create",
+  edit = "edit",
+  view = "view"
+}
+const { logout } = useNav();
+const showModel = ref(false);
+const TYPE = ref<FROM_TYPE>(FROM_TYPE.create);
+const formRef = ref<InstanceType<typeof ElForm>>(null);
+const loading = ref(false);
+const titleType = ref("");
+const id = ref("");
+const emit = defineEmits(["reload"]);
+const initform = {
+  company_id: "",
+  card_id: "",
+  id: "",
+  title: "",
+  original_price: 0,
+  activity_price: 0,
+  time: [],
+  expiretime: "",
+  content: "",
+  remark: ""
+};
+const ruleForm = ref({ ...initform });
+const rules = reactive<FormRules>({
+  company_id: [{ required: true, trigger: "change", message: "请选择企业" }],
+  card_id: [{ required: true, trigger: "change", message: "请选择企业" }],
+  title: [{ required: true, trigger: "blur", message: "请输入服务名称" }],
+  original_price: [
+    { required: true, trigger: "change", message: "请选择原价" }
+  ],
+  activity_price: [
+    { required: true, trigger: "change", message: "请选择活动价" }
+  ],
+  time: [
+    {
+      required: true,
+      type: "array",
+      trigger: "change",
+      message: "请选择活动日期"
+    }
+  ],
+
+  expiretime: [
+    { required: true, trigger: "change", message: "请选择服务到期日期" }
+  ],
+  content: [{ required: true, trigger: "blur", message: "请输入服务介绍" }],
+  remark: [{ required: true, trigger: "blur", message: "请输入备注" }]
+});
+const initData = async () => {
+  const { code, data, message } = await httpDetail({ id: id.value });
+  responseHandle({
+    code,
+    message,
+    logout,
+    handler: () => {
+      console.log(data);
+      Object.keys(ruleForm.value).forEach(key => {
+        if (key === "time") {
+          const starttime = dayjs(data.starttime).format("YYYY-MM-DD");
+          const endtime = dayjs(data.endtime).format("YYYY-MM-DD");
+          ruleForm.value[key] =
+            starttime !== "" && endtime !== "" ? [starttime, endtime] : [];
+        } else if (key === "activity_price" || key === "original_price") {
+          ruleForm.value[key] = Number(data[key]);
+        } else {
+          ruleForm.value[key] = data[key] ? data[key] + "" : "";
+        }
+      });
+    }
+  });
+};
+async function show(node: any, did: string, isCreate: string) {
+  id.value = did;
+  Object.keys(ruleForm.value).forEach(key => {
+    ruleForm.value[key] = initform[key];
+  });
+  TYPE.value = isCreate;
+  switch (TYPE.value) {
+    case "create":
+      titleType.value = "新建服务";
+      break;
+    case "edit":
+      titleType.value = "编辑服务";
+      break;
+    case "view":
+      titleType.value = "服务详情";
+      break;
+    default:
+      titleType.value = "新建服务";
+  }
+  if (TYPE.value !== "create") {
+    await initData();
+  }
+
+  showModel.value = true;
+}
+
+function handleUpdate() {
+  const data = {
+    ...ruleForm.value
+  };
+
+  return {
+    data,
+    api: httpUpdate
+  };
+}
+
+function handleCreate() {
+  const data = {
+    ...ruleForm.value
+  };
+  return {
+    data,
+    api: httpAdd
+  };
+}
+
+function handleSave() {
+  formRef.value.validate(async vaild => {
+    if (vaild) {
+      if (loading.value) return;
+      loading.value = true;
+      const { original_price, activity_price, time } = ruleForm.value;
+      if (Number(original_price) < Number(activity_price)) {
+        loading.value = false;
+        ElMessage.warning("原价应该大于活动价!");
+        return;
+      }
+      if (time.length !== 2) {
+        loading.value = false;
+        ElMessage.warning("活动时间不完整!");
+        return;
+      }
+
+      const handler =
+        TYPE.value === FROM_TYPE.create ? handleCreate : handleUpdate;
+
+      const { api, data } = handler();
+      let model = JSON.parse(JSON.stringify(data));
+      model.starttime = dayjs(model.time[0]).format("YYYY-MM-DD");
+      model.endtime = dayjs(model.time[1]).format("YYYY-MM-DD");
+      model.expiretime = dayjs(model.expiretime).format("YYYY-MM-DD");
+      delete model["time"];
+      const { message, code } = await api(model);
+      loading.value = false;
+      responseHandle({
+        code,
+        message,
+        logout,
+        handler: () => {
+          showModel.value = false;
+          emit("reload");
+        }
+      });
+    }
+  });
+}
+
+defineExpose({
+  show
+});
+</script>
+
+<template>
+  <el-dialog
+    v-model="showModel"
+    :close-on-press-escape="false"
+    center
+    append-to-body
+    destroy-on-close
+    :width="'1040px'"
+    :title="titleType"
+    v-loading="loading"
+  >
+    <el-form
+      ref="formRef"
+      :model="ruleForm"
+      :rules="rules"
+      label-width="85px"
+      style="margin-top: -10px"
+      class="demo-ruleForm"
+      status-icon
+    >
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="企业名称" prop="company_id">
+            <Company
+              v-model="ruleForm.company_id"
+              :disabled="TYPE === 'view'"
+              placeholder="企业名称"
+            /> </el-form-item
+        ></el-col>
+        <el-col :span="6">
+          <el-form-item label="卡类型" prop="card_id">
+            <Card
+              v-model="ruleForm.card_id"
+              :disabled="TYPE === 'view'"
+              placeholder="卡类型"
+            /> </el-form-item
+        ></el-col>
+        <el-col :span="6">
+          <el-form-item label="到期时间" prop="expiretime">
+            <el-date-picker
+              placeholder="到期时间"
+              :disabled="TYPE === 'view'"
+              type="date"
+              v-model="ruleForm.expiretime"
+              format="YYYY-MM-DD"
+            /> </el-form-item
+        ></el-col>
+        <el-col :span="24">
+          <el-form-item label="服务名称" prop="title">
+            <ElInput
+              placeholder="服务名称"
+              :disabled="TYPE === 'view'"
+              maxlength="50"
+              v-model="ruleForm.title"
+            /> </el-form-item
+        ></el-col>
+
+        <el-col :span="6">
+          <el-form-item label="原价" prop="original_price">
+            <el-input-number
+              style="width: 100%"
+              :disabled="TYPE === 'view'"
+              :precision="2"
+              :step="1"
+              controls-position="right"
+              v-model="ruleForm.original_price"
+              :min="0"
+              placeholder="原价"
+              :max="99999999.99"
+              clearable /></el-form-item
+        ></el-col>
+        <el-col :span="6">
+          <el-form-item label="活动价" prop="activity_price">
+            <el-input-number
+              style="width: 100%"
+              :disabled="TYPE === 'view'"
+              :precision="2"
+              :step="1"
+              controls-position="right"
+              v-model="ruleForm.activity_price"
+              :min="0"
+              placeholder="活动价"
+              :max="99999999.99"
+              clearable
+            /> </el-form-item
+        ></el-col>
+        <el-col :span="12">
+          <el-form-item label="活动时间" prop="time">
+            <el-date-picker
+              v-model="ruleForm.time"
+              type="daterange"
+              :disabled="TYPE === 'view'"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+            /> </el-form-item
+        ></el-col>
+
+        <el-col :span="24">
+          <el-form-item label="服务说明" prop="content">
+            <ElInput
+              placeholder="服务说明"
+              :disabled="TYPE === 'view'"
+              maxlength="500"
+              type="textarea"
+              v-model="ruleForm.content"
+            /> </el-form-item
+        ></el-col>
+        <el-col :span="24">
+          <el-form-item label="备注" prop="remark">
+            <ElInput
+              placeholder="备注"
+              :disabled="TYPE === 'view'"
+              maxlength="500"
+              type="textarea"
+              v-model="ruleForm.remark"
+            /> </el-form-item
+        ></el-col>
+      </el-row>
+      <div class="flex justify-end">
+        <el-button
+          v-if="TYPE !== 'view'"
+          :loading="loading"
+          :disabled="loading"
+          type="primary"
+          @click="handleSave"
+          >保存</el-button
+        >
+        <el-button @click="showModel = false">取消</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>

+ 0 - 107
src/views/operate/setService/config/_details.ts

@@ -1,107 +0,0 @@
-/* eslint-disable prettier/prettier */
-import { FormConfig } from "/@/components/PageSearch";
-export const projectFormConfig: FormConfig = {
-  formItems: [
-    {
-      label: "公司",
-      field: "company_id",
-      placeholder: "公司",
-      span: 24,
-
-      slot: "company_id"
-    },
-    {
-      label: "卡类型",
-      field: "card_id",
-      placeholder: "卡类型",
-      span: 24,
-
-      slot: "card_id"
-    },
-    {
-      label: "服务名称",
-      field: "title",
-      type: "input",
-      placeholder: "服务名称",
-      span: 24
-    },
-    {
-      label: "原价",
-      field: "original_price",
-      type: "number",
-      placeholder: "原价",
-      otherOptions: {
-        precision: 2,
-        step: 1,
-        "controls-position": "right",
-        min: 0,
-        max: 99999999
-      },
-      span: 12
-    },
-    {
-      label: "活动价",
-      field: "activity_price",
-      type: "number",
-      placeholder: "活动价",
-      otherOptions: {
-        precision: 2,
-        step: 1,
-        "controls-position": "right",
-        min: 0,
-        max: 99999999
-      },
-      span: 12
-    },
-
-    {
-      label: "活动开始日期",
-      field: "starttime",
-      type: "date_picker",
-      otherOptions: {
-        type: "date",
-        format: "YYYY-MM-DD"
-      },
-      placeholder: "活动开始日期",
-      span: 12
-    },
-    {
-      label: "活动结束日期",
-      field: "endtime",
-      type: "date_picker",
-
-      otherOptions: {
-        type: "date",
-        format: "YYYY-MM-DD"
-      },
-      placeholder: "活动结束日期",
-      span: 12
-    },
-    {
-      label: "服务到期日期",
-      field: "expiretime",
-      type: "date_picker",
-
-      otherOptions: {
-        type: "date",
-        format: "YYYY-MM-DD"
-      },
-      placeholder: "服务到期日期",
-      span: 24
-    },
-    {
-      label: "服务介绍",
-      field: "content",
-      type: "textarea",
-      placeholder: "服务介绍",
-      span: 24
-    },
-    {
-      label: "备注",
-      field: "remark",
-      type: "textarea",
-      placeholder: "备注",
-      span: 24
-    }
-  ]
-};

+ 0 - 76
src/views/operate/setService/config/_rules.ts

@@ -1,76 +0,0 @@
-import { FormRules } from "element-plus";
-import { isArray, validUpperCase } from "/@/utils/validate";
-export const projectFormRules: FormRules = {
-  company_id: {
-    trigger: "change",
-    required: true,
-    message: "请选择公司"
-  },
-  card_id: {
-    trigger: "change",
-    required: true,
-    message: "请选择卡类型"
-  },
-  title: {
-    trigger: "change",
-    required: true,
-    message: "请输入服务名称"
-  },
-  original_price: {
-    trigger: "change",
-    required: true,
-    validator(_, value) {
-      if (typeof value != "number") return new Error("请输入原价");
-      const num = Number(value + "");
-      if (num < 0) return new Error("原价不能低于0");
-      return true;
-    }
-  },
-  activity_price: {
-    trigger: "change",
-    required: true,
-    validator(_, value) {
-      if (typeof value != "number") return new Error("请输入活动价");
-      const num = Number(value + "");
-      if (num < 0) return new Error("原价不能低于0");
-      return true;
-    }
-  },
-  starttime: {
-    trigger: "change",
-    required: true,
-    validator(_, value) {
-      const val = value ?? "";
-      if (val === "") return new Error("请选择活动开始日期");
-      return true;
-    }
-  },
-  endtime: {
-    trigger: "change",
-    required: true,
-    validator(_, value) {
-      const val = value ?? "";
-      if (val === "") return new Error("请选择活动结束日期");
-      return true;
-    }
-  },
-  expiretime: {
-    trigger: "change",
-    required: true,
-    validator(_, value) {
-      const val = value ?? "";
-      if (val === "") return new Error("请选择服务到期日期");
-      return true;
-    }
-  },
-
-  content: {
-    trigger: "change",
-    required: true,
-    validator(_, value) {
-      const val = value ?? "";
-      if (val === "") return new Error("请输入服务介绍");
-      return true;
-    }
-  }
-};

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

@@ -1,11 +1,5 @@
 import { ContentConfig } from "/@/components/PageContent";
-import {
-  httpList,
-  httpAdd,
-  httpUpdate,
-  httpStatus,
-  httpDelete
-} from "/@/api/operate/setService";
+import { httpList, httpStatus, httpDelete } from "/@/api/operate/setService";
 import { renderStatus, timeInterval } from "/@/utils/column-helper";
 import { ONLINE_OPTIONS } from "/@/config/status";
 
@@ -80,8 +74,6 @@ const contentConfig: ContentConfig = {
   columns,
   apis: {
     httpList,
-    httpAdd,
-    httpUpdate,
     httpStatus,
     httpDelete
   }

+ 0 - 89
src/views/operate/setService/config/modal.config.ts

@@ -1,89 +0,0 @@
-import { ModalConfig } from "/@/components/PageModal/src/types";
-import { isLicense } from "/@/utils/validate";
-
-const modalConfig: ModalConfig = {
-  title: "服务",
-  colLayout: { span: 24 },
-  itemStyle: {},
-  contact: "setService",
-  labelWidth: "100px",
-  width: "700px",
-  formItems: [
-    {
-      field: "company_title",
-      type: "input",
-      label: "公司",
-      placeholder: "公司"
-    },
-
-    {
-      field: "card_title",
-      type: "input",
-      label: "卡类型",
-      placeholder: "卡类型"
-    },
-
-    {
-      field: "title",
-      type: "input",
-      label: "服务名称",
-      placeholder: "服务名称"
-    },
-    {
-      field: "original_price",
-      type: "number",
-      label: "原价",
-      placeholder: "原价"
-    },
-    {
-      field: "activity_price",
-      type: "number",
-      label: "活动价",
-      placeholder: "活动价"
-    },
-
-    {
-      field: "starttime",
-      type: "date_picker",
-      label: "活动开始日期",
-      placeholder: "活动开始日期",
-      span: 24
-    },
-    {
-      field: "endtime",
-      type: "date_picker",
-      label: "活动结束日期",
-      placeholder: "活动结束日期",
-      span: 24
-    },
-    {
-      field: "expiretime",
-      type: "date_picker",
-      label: "服务到期日期",
-      placeholder: "服务到期日期",
-      span: 24
-    },
-    {
-      field: "content",
-      type: "textarea",
-      label: "服务介绍",
-      placeholder: "服务介绍",
-      span: 24
-    },
-    {
-      field: "remark",
-      type: "textarea",
-      label: "备注",
-      placeholder: "备注",
-      span: 24
-    },
-    {
-      field: "addtime",
-      type: "input",
-      label: "创建时间",
-      placeholder: "创建时间"
-    }
-  ]
-};
-
-export default modalConfig;

+ 31 - 108
src/views/operate/setService/index.vue

@@ -2,125 +2,48 @@
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
 import searchConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
-import PageAuth from "/@/components/PageAuth";
-import { PageModal, usePageModal } from "/@/components/PageModalShell";
-import modalConfig from "./config/modal.config";
+import { usePermission } from "/@/hooks/usePermission";
 import { PageContent } from "/@/components/PageContent";
-import { Company, Card } from "/@/components/RemoteSelect";
-import { projectFormConfig } from "./config/_details";
-import { projectFormRules } from "./config/_rules";
-import {
-  BasicForm,
-  transform,
-  createDefaultData
-} from "/@/components/BasicForm";
-import { ElImage } from "element-plus";
-import { httpDetail } from "/@/api/operate/setService";
-import { ElForm } from "element-plus";
-import { ref, unref } from "vue";
-import dayjs from "dayjs";
-import { useResponseHandle } from "/@/hooks/useAsync";
-const responseHandle = useResponseHandle();
-// import { httpDetail } from "/@/api/parameter/video";
+import { ref } from "vue";
+import EditModel from "./components/edit-dialog.vue";
 const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch(
   undefined,
   undefined,
   searchConfig
 );
-const {
-  pageModalRef,
-  handleUpdateData,
-  handleCreateData,
-  handlePreviewData,
-  handleConfrim,
-  defaultInfo
-} = usePageModal({
-  pageContentRef
-});
+const pageName = "setService";
+const modelRef = ref<InstanceType<typeof EditModel>>(null);
+const { hasPermissionWithCode, permissions } = usePermission(pageName);
 
-const { formItems } = projectFormConfig;
-
-const basicFormRef = ref<InstanceType<typeof ElForm>>(null);
-const formData = ref<Record<string, any>>(createDefaultData(formItems));
-function handleCreate() {
-  basicFormRef.value.validate(isValid => {
-    if (!isValid) return;
-    const params = unref(formData);
-    const { starttime, endtime, expiretime } = params;
-    params.starttime = starttime ? dayjs(starttime).format("YYYY-MM-DD") : "";
-    params.endtime = endtime ? dayjs(endtime).format("YYYY-MM-DD") : "";
-    params.expiretime = expiretime
-      ? dayjs(expiretime).format("YYYY-MM-DD")
-      : "";
-    if (
-      new Date(params.starttime).valueOf() >= new Date(params.endtime).valueOf()
-    ) {
-      ElImage.warning("活动开始日期不能大于活动结束日期!");
-      return;
-    }
-    handleConfrim("create", params);
-  });
-}
-async function handleDetailData(row, type) {
-  const { id } = row;
-  const { code, data, message } = await httpDetail({ id: id });
-  responseHandle({
-    code,
-    message,
-    handler: () => {
-      if (type === "preview") {
-        handlePreviewData(data);
-      }
-      if (type === "update") {
-        formData.value = transform(formItems, data, {});
-        handleUpdateData(data);
-      }
-    }
-  });
+function handleAddChangeCheck(item: any, id: string, type: string) {
+  modelRef.value.show(item, id, type);
 }
 </script>
 
 <template>
-  <!-- <PageAuth :pageName="pageName"> -->
-  <PageSearch
-    :form-config="searchConfig"
-    @search-btn-click="handleSearchClick"
-    @reset-btn-click="handleResetClick"
-  />
-  <PageContent
-    ref="pageContentRef"
-    :content-config="contentConfig"
-    @create-btn-click="handleCreateData"
-    @preview-btn-click="row => handleDetailData(row, 'preview')"
-    @update-btn-click="row => handleDetailData(row, 'update')"
-  />
-  <!--需要优化 上架/下架提示优化-->
-  <PageModal
-    ref="pageModalRef"
-    :modal-config="modalConfig"
-    :default-info="defaultInfo"
-    @confirm-btn-click="handleConfrim"
-  >
-    <BasicForm
-      ref="basicFormRef"
-      v-bind="projectFormConfig"
-      :form-data="formData"
-      :rules="projectFormRules"
-      :disabled="false"
-      label-width="120px"
+  <PageAuth :pageName="pageName">
+    <PageSearch
+      :form-config="searchConfig"
+      @search-btn-click="handleSearchClick"
+      @reset-btn-click="handleResetClick"
     >
-      <template #company_id>
-        <Company v-model="formData.company_id" placeholder="公司" />
-      </template>
-      <template #card_id>
-        <Card v-model="formData.card_id" placeholder="卡类型" />
-      </template>
-      <template #footer>
-        <div class="w-full flex justify-end">
-          <ElButton type="primary" @click="handleCreate">保存</ElButton>
-        </div>
+      <template #action>
+        <el-button
+          type="primary"
+          @click="handleAddChangeCheck({}, '', 'create')"
+          v-if="hasPermissionWithCode('002')"
+        >
+          新增
+        </el-button>
       </template>
-    </BasicForm>
-  </PageModal>
-  <!-- </PageAuth> -->
+    </PageSearch>
+    <PageContent
+      ref="pageContentRef"
+      :powers="permissions"
+      :content-config="contentConfig"
+      @preview-btn-click="row => handleAddChangeCheck(row, row.id, 'view')"
+      @update-btn-click="row => handleAddChangeCheck(row, row.id, 'edit')"
+    />
+    <EditModel ref="modelRef" @reload="pageContentRef.onSearch()" />
+  </PageAuth>
 </template>

+ 1 - 3
src/views/operate/setTheme/config/_rules.ts

@@ -1,7 +1,5 @@
 import { ref, reactive } from "vue";
-import type { FormInstance, FormRules } from "element-plus";
-import { isArray, validUpperCase } from "/@/utils/validate";
-const ruleFormRef = ref<FormInstance>();
+import type { FormRules } from "element-plus";
 export const projectFormRules = reactive<FormRules>({
   group_id: [
     { required: true, message: "请选择公司卡类型", trigger: "change" }

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

@@ -1,10 +1,5 @@
 import { ContentConfig } from "/@/components/PageContent";
-import {
-  httpList,
-  httpAdd,
-  httpUpdate,
-  httpStatus
-} from "/@/api/operate/setTheme";
+import { httpList, httpStatus } from "/@/api/operate/setTheme";
 import { renderStatus } from "/@/utils/column-helper";
 import { STATUS_OPTIONS } from "/@/config/status";
 
@@ -41,7 +36,6 @@ const columns = [
   {
     prop: "addtime",
     label: "创建时间",
-    sortable: true,
     width: 160
   },
 
@@ -57,9 +51,7 @@ const contentConfig: ContentConfig = {
   title: "主题设置",
   columns,
   apis: {
-    httpAdd,
     httpList,
-    httpUpdate,
     httpStatus
   }
 };

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

@@ -15,7 +15,7 @@ const { logout } = useNav();
 import { httpAdd, httpDetail, httpUpdate } from "/@/api/operate/setTheme";
 const ladderModalRef = ref<InstanceType<typeof LadderModal>>(null);
 const modelRef = ref<InstanceType<typeof OrderDialog>>(null);
-const emit = defineEmits(["submitOk"]);
+const emit = defineEmits(["reload"]);
 const ruleFormRef = ref<FormInstance>();
 const form = {
   id: "",
@@ -83,7 +83,7 @@ const submitForm = async (formEl: FormInstance | undefined) => {
       confirmLoading.value = false;
       if (hcode === 0) {
         dialogVisible.value = false;
-        emit("submitOk", {});
+        emit("reload", {});
       } else if (hcode >= 100 && hcode <= 104) {
         logout();
       } else {

+ 29 - 38
src/views/operate/setTheme/index.vue

@@ -1,57 +1,48 @@
 <script setup lang="ts">
-import { ref, unref } from "vue";
+import { ref } from "vue";
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
 import searchConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
 import { PageContent } from "/@/components/PageContent";
 import addModel from "./cpns/addModel.vue";
+import { usePermission } from "/@/hooks/usePermission";
 const actionModalRef = ref<InstanceType<typeof addModel>>(null);
-
 const pageName = "setTheme";
-
 const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch(
   undefined,
   undefined,
   searchConfig
 );
-// function handleCreate() {
-//   basicFormRef.value.validate(isValid => {
-//     if (!isValid) return;
-
-//     // handleConfrim("create", {});
-//   });
-// }
-function Create() {
-  pageContentRef.value.getPageData({ id: "" });
-}
-function handleCreateData() {
-  // console.log(actionModalRef.value);
-  // console.log(actionModalRef);
-  actionModalRef.value.onShow("主题设置", "create", "");
-  // actionModalRef.value.confirmLoading = false;
-  // actionModalRef.value.type = "create";
-  // actionModalRef.value.dialogVisible = true;
-}
-function handleData(id, type) {
+const { hasPermissionWithCode, permissions } = usePermission(pageName);
+function handleAddChangeCheck(type: string, id: string) {
   actionModalRef.value.onShow("主题设置", type, id);
 }
 </script>
 
 <template>
-  <!-- <PageAuth :pageName="pageName"> -->
-  <PageSearch
-    :form-config="searchConfig"
-    @search-btn-click="handleSearchClick"
-    @reset-btn-click="handleResetClick"
-  />
-  <PageContent
-    ref="pageContentRef"
-    :content-config="contentConfig"
-    @create-btn-click="handleCreateData"
-    @preview-btn-click="({ id }) => handleData(id, 'preview')"
-    @update-btn-click="({ id }) => handleData(id, 'update')"
-  />
-  <addModel ref="actionModalRef" @submitOk="Create" />
-
-  <!-- </PageAuth> -->
+  <PageAuth :pageName="pageName">
+    <PageSearch
+      :form-config="searchConfig"
+      @search-btn-click="handleSearchClick"
+      @reset-btn-click="handleResetClick"
+    >
+      <template #action>
+        <el-button
+          type="primary"
+          @click="handleAddChangeCheck('create', '')"
+          v-if="hasPermissionWithCode('002')"
+        >
+          新增
+        </el-button>
+      </template>
+    </PageSearch>
+    <PageContent
+      ref="pageContentRef"
+      :powers="permissions"
+      :content-config="contentConfig"
+      @preview-btn-click="({ id }) => handleAddChangeCheck('preview', id)"
+      @update-btn-click="({ id }) => handleAddChangeCheck('update', id)"
+    />
+    <addModel ref="actionModalRef" @reload="pageContentRef.onSearch()" />
+  </PageAuth>
 </template>

+ 1 - 1
src/views/parameter/company/index.vue

@@ -11,7 +11,7 @@ const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch(
   undefined,
   searchConfig
 );
-const pageName = "card";
+const pageName = "company";
 const modelRef = ref<InstanceType<typeof EditModel>>(null);
 const { hasPermissionWithCode, permissions } = usePermission(pageName);