CzRger месяцев назад: 7
Родитель
Сommit
c74ff0b611

+ 1 - 1
src/api/interceptors.ts

@@ -46,7 +46,7 @@ export class Interceptors {
           ElMessage.error(res.data?.msg);
           return Promise.reject(res.data?.msg)
         } else {
-          return Promise.reject(res.data);
+          return Promise.resolve(res);
         }
       },
       // 请求失败

+ 19 - 0
src/utils/downLoadUrl.ts

@@ -0,0 +1,19 @@
+export const downLoadUrl = (url, name) => {
+  const a = document.createElement("a");
+  fetch(url)
+    .then((res) => res.blob())
+    .then((bolb) => {
+      a.href = URL.createObjectURL(bolb);
+      a.download = name || "";
+      document.body.appendChild(a);
+      a.click();
+    });
+}
+
+export const downLoadBlob = (data, name) => {
+  let b = new Blob([data], { type: data.type })
+  let link = document.createElement('a')
+  link.href = window.URL.createObjectURL(b)
+  link.download = name
+  link.click()
+}

+ 9 - 5
src/views/manage/index/index.vue

@@ -59,6 +59,7 @@ import DetailCom from "./detail.vue";
 import RelationCom from "./relation.vue";
 import TextCom from "./text.vue";
 import {useDictionaryStore} from "@/stores";
+import {downLoadBlob} from "@/utils/downLoadUrl";
 
 const {proxy} = getCurrentInstance()
 const DictionaryStore = useDictionaryStore()
@@ -192,13 +193,16 @@ const onDel = (row) => {
 }
 const onExport = () => {
   state.query.loading = true
-  const params = {
-  }
-  if (proxy.$util.isValue(state.query.formReal.keyword)) {
-    params.keyword = state.query.formReal.keyword
+  const params = {}
+  //  添加表单参数
+  for (const [k, v] of Object.entries(state.query.formReal)) {
+    if (proxy.$util.isValue(v)) {
+      params[k] = v
+    }
   }
   sysIndexExport(proxy.$util.formatGetParam(params)).then(res => {
-
+    downLoadBlob(res.data, '索引导出.xlsx')
+    state.query.loading = false
   })
 }
 const initDictionary = () => {

+ 16 - 8
src/views/manage/theme/index.vue

@@ -47,15 +47,16 @@
           <CusButton type="table-edit" @click="onEdit(scope.row)"/>
           <CusButton type="table-del" @click="onDel(scope.row)"/>
           <template v-if="scope.row.themeType == '1'">
-            <CusButton type="table-edit" title="配置" icon="text" @click="onPassword(scope.row)"/>
+            <CusButton type="table-edit" title="配置" icon="text" @click="onStyle(scope.row)"/>
           </template>
           <template v-else-if="scope.row.themeType == '2'">
-            <CusButton type="table" icon="relation" title="索引构成"  @click="onRole(scope.row)"/>
+            <CusButton type="table" icon="relation" title="索引构成"  @click="onIndexBuild(scope.row)"/>
           </template>
         </template>
       </CusTable>
     </div>
     <DetailCom v-model:show="state.detail.show" :transfer="state.detail.transfer" @refresh="onSearch"/>
+    <StyleCom v-model:show="state.style.show" :transfer="state.style.transfer" @refresh="onSearch"/>
   </div>
 </template>
 
@@ -63,6 +64,7 @@
 import {getCurrentInstance, onMounted, reactive} from "vue";
 import {ElMessage, ElMessageBox} from "element-plus";
 import DetailCom from "./detail.vue";
+import StyleCom from "./style.vue";
 import {useDictionaryStore} from "@/stores";
 import {sysThemeDelete, sysThemeGetPageTheme} from "@/api/modules/manage/theme";
 
@@ -97,11 +99,11 @@ const state: any = reactive({
     show: false,
     transfer: {}
   },
-  password: {
+  style: {
     show: false,
     transfer: {}
   },
-  role: {
+  indexBuild: {
     show: false,
     transfer: {}
   },
@@ -151,11 +153,17 @@ const onEdit = (row) => {
   }
   state.detail.show = true
 }
-const onPassword = (row) => {
-  state.password.transfer = {
-    id: row.id,
+const onStyle = (row) => {
+  state.style.transfer = {
+    id: row.themeId,
+  }
+  state.style.show = true
+}
+const onIndexBuild = (row) => {
+  state.indexBuild.transfer = {
+    id: row.themeId,
   }
-  state.password.show = true
+  state.indexBuild.show = true
 }
 const onDel = (row) => {
   ElMessageBox.confirm(`请确认是否删除${row.themeName}?`, "提示", {

+ 152 - 0
src/views/manage/theme/style.vue

@@ -0,0 +1,152 @@
+<template>
+  <CusDialog
+    :show="show"
+    :title="titleCpt"
+    @onClose="$emit('update:show', false)"
+    width="600px"
+    height="auto"
+    @onSubmit="onSubmit"
+    :loading="state.loading"
+  >
+    <div class="__cus-dialog-form">
+      <CusForm ref="ref_form" label-width="80px">
+        <CusFormColumn
+          :span="24"
+          required
+          label="名称"
+          v-model:param="state.form.themeName"
+        />
+        <CusFormColumn
+          :span="24"
+          required
+          label="类别"
+          v-model:param="state.form.themeType"
+          link="select"
+          :options="DictionaryStore.themeTypeList"
+          :disabled="transfer.mode !== 'add'"
+        />
+        <CusFormColumn
+          :span="24"
+          required
+          label="状态"
+          v-model:param="state.form.themeState"
+          link="select"
+          :options="DictionaryStore.themeStatusList"
+        />
+        <template v-if="state.form.themeType && state.form.themeType != '1'">
+          <CusFormColumn
+            :span="24"
+            required
+            label="URL"
+            v-model:param="state.form.themeUrl"
+            :disabled="state.form.themeType == '2'"
+          />
+          <template v-if="state.form.themeType == '2'">
+            <CusFormColumn
+              :span="24"
+              required
+              label="参数"
+              v-model:param="state.form.themeParam"
+              link="select"
+              multiple
+              filterable
+              allow-create
+              default-first-option
+              :reserve-keyword="false"
+              :options="[]"
+              static
+              placeholder="请输入参数,按回车保存"
+            />
+          </template>
+          <template v-else-if="state.form.themeType == '3'">
+            <CusFormColumn
+              :span="24"
+              required
+              label="参数"
+              v-model:param="state.form.themeParam"
+            />
+          </template>
+        </template>
+      </CusForm>
+    </div>
+  </CusDialog>
+</template>
+
+<script setup lang="ts">
+import {computed, getCurrentInstance, nextTick, reactive, ref, watch} from "vue";
+import {useDictionaryStore} from "@/stores";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {sysThemeAdd, sysThemeFind, sysThemeUpdate} from "@/api/modules/manage/theme";
+
+const emit = defineEmits(['update:show', 'refresh'])
+const {proxy} = getCurrentInstance()
+const DictionaryStore = useDictionaryStore()
+const props = defineProps({
+  show: {default: false},
+  transfer: {}
+ })
+const state: any = reactive({
+  detail: {},
+  form: {},
+  loading: false
+})
+const ref_form = ref()
+const titleCpt = computed(() => {
+  let t = '全局系统级主题样式配置'
+  return t
+})
+const onSubmit = () => {
+  ref_form.value.submit().then(() => {
+    ElMessageBox.confirm("是否提交?", "提示", {
+      confirmButtonText: "确定",
+      cancelButtonText: "取消",
+      type: "warning",
+    } as any).then(() => {
+      state.loading = true
+      const params = JSON.parse(JSON.stringify(state.detail))
+      params.themeParam = JSON.stringify(state.form)
+      sysThemeUpdate(params).then(res => {
+        if (res.code === 200) {
+          ElMessage.success('配置成功!')
+          emit('update:show', false)
+          emit('refresh')
+        } else {
+          ElMessage.error(res.msg)
+        }
+        state.loading = false
+      })
+    }).catch(() => {})
+  }).catch((e) => {
+    ElMessage({
+      message: e[0].message,
+      grouping: true,
+      type: 'warning',
+    })
+  })
+}
+const initDetail = () => {
+  state.loading = true
+  sysThemeFind(props.transfer.id).then(res => {
+    if (res.code === 200) {
+      state.detail = res.data
+      state.form = state.detail.themeParam ? JSON.parse(state.detail.themeParam) : {
+
+      }
+      state.loading = false
+    } else {
+      ElMessage.error(res.msg)
+    }
+  })
+}
+watch(() => props.show, (n) => {
+  if (n) {
+    initDetail()
+    nextTick(() => {
+      ref_form.value.reset()
+    })
+  }
+})
+</script>
+
+<style lang="scss" scoped>
+</style>