CzRger 10 ヶ月 前
コミット
515581c69f
共有5 個のファイルを変更した178 個の追加67 個の削除を含む
  1. 22 0
      src/api/modules/manage/theme.ts
  2. 2 0
      src/stores/dictionary-define.ts
  3. 16 3
      src/views/manage/system/dict/index.vue
  4. 93 37
      src/views/manage/theme/detail.vue
  5. 45 27
      src/views/manage/theme/index.vue

+ 22 - 0
src/api/modules/manage/theme.ts

@@ -7,4 +7,26 @@ export const sysThemeGetPageTheme = (params: any) => handle({
   url: `/${suffix}/sysTheme/getPageTheme`,
   method: 'get',
   params
+})
+// 新增
+export const sysThemeAdd = (params: any) => handle({
+  url: `/${suffix}/sysTheme/add`,
+  method: 'post',
+  params
+})
+// 编辑 || 配置
+export const sysThemeUpdate = (params: any) => handle({
+  url: `/${suffix}/sysTheme/update`,
+  method: 'post',
+  params
+})
+// 详情
+export const sysThemeFind = (id: any) => handle({
+  url: `/${suffix}/sysTheme/find/${id}`,
+  method: 'get',
+})
+// 删除
+export const sysThemeDelete = (id: any) => handle({
+  url: `/${suffix}/sysTheme/delete/${id}`,
+  method: 'get',
 })

+ 2 - 0
src/stores/dictionary-define.ts

@@ -11,6 +11,8 @@ export const dictionaryDefine = {
 	analyzer: ['analyzerList', 'analyzerMap'], //  分词器
 	user_status: ['userStatusList', 'userStatusMap'], //  用户状态
 	role_status: ['roleStatusList', 'roleStatusMap'], //  字典状态
+	theme_type: ['themeTypeList', 'themeTypeMap'], //  主题类别
+	theme_status: ['themeStatusList', 'themeStatusMap'], //  主题状态
 }
 
 const stateMap = {}

+ 16 - 3
src/views/manage/system/dict/index.vue

@@ -88,7 +88,7 @@ const state: any = reactive({
     loading: false,
     filter: '',
     defaultProps: {
-      label: 'dictLabel',
+      label: 'showText',
       vaue: 'dictValue',
     },
     options: []
@@ -99,7 +99,10 @@ const initTree = () => {
   state.tree.loading = true
   dictList().then(res => {
     if (res.code === 200) {
-      state.tree.options = res.data.filter(v => v.parentId == 0)
+      state.tree.options = res.data.filter(v => v.parentId == 0).map(v => {
+        v.showText = `${v.dictLabel}(${v.dictValue})`
+        return v
+      })
       state.tree.loading = false
     } else {
       ElMessage.error(res.msg)
@@ -164,12 +167,22 @@ const onDel = (row) => {
 }
 const filterNode = (value, data) => {
   if (!value) return true
-  return data.dictLabel.includes(value)
+  return data.showText.includes(value)
 }
 watch(() => state.tree.filter, (n) => {
   ref_tree.value?.filter(n)
 })
+const copyDict = (dict) => {
+  try {
+    const key = dict.dictValue.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase())
+    const str = `${dict.dictValue}: ['${key}List', '${key}Map'], //  ${dict.dictLabel}`
+    proxy.$util.copy(str)
+  } catch (e) {
+    console.log(e)
+  }
+}
 const onTreeClick = (row) => {
+  copyDict(row)
   state.tree.value = row
   initDictList()
 }

+ 93 - 37
src/views/manage/theme/detail.vue

@@ -14,36 +14,59 @@
           :span="24"
           required
           label="名称"
-          v-model:param="state.form.indexName"
+          v-model:param="state.form.themeName"
         />
         <CusFormColumn
           :span="24"
           required
           label="类别"
-          v-model:param="state.form.shareMethod"
+          v-model:param="state.form.themeType"
           link="select"
-          :options="DictionaryStore.gxMethodList"
+          :options="DictionaryStore.themeTypeList"
+          :disabled="transfer.mode !== 'add'"
         />
         <CusFormColumn
           :span="24"
           required
           label="状态"
-          v-model:param="state.form.shareMethod"
+          v-model:param="state.form.themeState"
           link="select"
-          :options="DictionaryStore.gxMethodList"
-        />
-        <CusFormColumn
-          :span="24"
-          required
-          label="URL"
-          v-model:param="state.form.shareMethod"
-        />
-        <CusFormColumn
-          :span="24"
-          required
-          label="参数"
-          v-model:param="state.form.shareMethod"
+          :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>
@@ -53,6 +76,7 @@
 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()
@@ -83,17 +107,34 @@ const onSubmit = () => {
       cancelButtonText: "取消",
       type: "warning",
     } as any).then(() => {
-      // state.loading = true
-      // sysIndexSaveOrUpdate(state.form).then(res => {
-      //   if (res.code === 200) {
-      //     ElMessage.success(props.transfer.mode === 'add' ? '新增成功!' : '编辑成功!')
-      //     emit('update:show', false)
-      //     emit('refresh')
-      //   } else {
-      //     ElMessage.error(res.msg)
-      //   }
-      //   state.loading = false
-      // })
+      state.loading = true
+      const params = JSON.parse(JSON.stringify(state.form))
+      if (params.themeType == '2') {
+        params.themeParam = params.themeParam.join(',')
+      }
+      if (props.transfer.mode === 'add') {
+        sysThemeAdd(params).then(res => {
+          if (res.code === 200) {
+            ElMessage.success('新增成功!')
+            emit('update:show', false)
+            emit('refresh')
+          } else {
+            ElMessage.error(res.msg)
+          }
+          state.loading = false
+        })
+      } else if (props.transfer.mode === 'edit') {
+        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({
@@ -104,21 +145,36 @@ const onSubmit = () => {
   })
 }
 const initDetail = () => {
-  // state.loading = true
-  // sysIndexGetDetail(props.transfer.id).then(res => {
-  //   if (res.code === 200) {
-  //     state.form = res.data
-  //     state.loading = false
-  //   } else {
-  //     ElMessage.error(res.msg)
-  //   }
-  // })
+  state.loading = true
+  sysThemeFind(props.transfer.id).then(res => {
+    if (res.code === 200) {
+      state.form = res.data
+      if (state.form.themeType == '2') {
+        state.form.themeParam = state.form.themeParam.split(',')
+      }
+      state.loading = false
+    } else {
+      ElMessage.error(res.msg)
+    }
+  })
 }
 watch(() => props.show, (n) => {
   if (n) {
     initDictionary()
     if (props.transfer.mode === 'add') {
       state.form = {}
+      watch(() => state.form.themeType, (n) => {
+        if (n == '1') {
+          state.form.themeUrl = ''
+          state.form.themeParam = ''
+        } else if (n == '2') {
+          state.form.themeUrl = '/web/archive'
+          state.form.themeParam = []
+        } else if (n == '3') {
+          state.form.themeUrl = ''
+          state.form.themeParam = ''
+        }
+      })
     } else {
       initDetail()
     }

+ 45 - 27
src/views/manage/theme/index.vue

@@ -7,21 +7,21 @@
           label-width="80px"
           :span="4"
           label="主题名称"
-          v-model:param="state.query.form.keyword"
+          v-model:param="state.query.form.themeName"
         />
         <CusFormColumn
           :span="4"
           label="类别"
-          v-model:param="state.query.form.keyword"
+          v-model:param="state.query.form.themeType"
           link="select"
-          :options="DictionaryStore.trueFalseList"
+          :options="DictionaryStore.themeTypeList"
         />
         <CusFormColumn
           :span="4"
           label="状态"
-          v-model:param="state.query.form.keyword"
+          v-model:param="state.query.form.themeState"
           link="select"
-          :options="DictionaryStore.trueFalseList"
+          :options="DictionaryStore.themeStatusList"
         />
         <CusButton type="main" title="搜索" @click="onSearch"/>
         <CusButton type="main" title="重置" @click="onReset"/>
@@ -37,14 +37,21 @@
         :table-head="state.query.tableHead"
         @handlePage="onPage"
       >
-        <template #shareMethod-column-value="{scope}">
-          {{DictionaryStore.gxMethodMap.get(scope.row.shareMethod)}}
+        <template #themeType-column-value="{scope}">
+          {{DictionaryStore.themeTypeMap.get(scope.row.themeType)}}
+        </template>
+        <template #themeState-column-value="{scope}">
+          {{DictionaryStore.themeStatusMap.get(scope.row.themeState)}}
         </template>
         <template #do-column-value="{scope}">
           <CusButton type="table-edit" @click="onEdit(scope.row)"/>
           <CusButton type="table-del" @click="onDel(scope.row)"/>
-          <CusButton type="table-edit" title="配置" icon="text" @click="onPassword(scope.row)"/>
-          <CusButton type="table" icon="relation" title="索引构成"  @click="onRole(scope.row)"/>
+          <template v-if="scope.row.themeType == '1'">
+            <CusButton type="table-edit" title="配置" icon="text" @click="onPassword(scope.row)"/>
+          </template>
+          <template v-else-if="scope.row.themeType == '2'">
+            <CusButton type="table" icon="relation" title="索引构成"  @click="onRole(scope.row)"/>
+          </template>
         </template>
       </CusTable>
     </div>
@@ -54,10 +61,10 @@
 
 <script setup lang="ts">
 import {getCurrentInstance, onMounted, reactive} from "vue";
-import {ElMessage} from "element-plus";
+import {ElMessage, ElMessageBox} from "element-plus";
 import DetailCom from "./detail.vue";
 import {useDictionaryStore} from "@/stores";
-import {sysThemeGetPageTheme} from "@/api/modules/manage/theme";
+import {sysThemeDelete, sysThemeGetPageTheme} from "@/api/modules/manage/theme";
 
 const {proxy} = getCurrentInstance()
 const DictionaryStore = useDictionaryStore()
@@ -69,21 +76,21 @@ const state: any = reactive({
       pageSize: 10
     },
     tableHead: [
-      {value: "indexName", label: "主题名称", fixed: 'left'},
-      {value: "indexName", label: "类别"},
-      {value: "dataSource", label: "状态"},
-      {value: "dataSource", label: "请求URL示例",width: 200, popover: true},
+      {value: "themeName", label: "主题名称", fixed: 'left'},
+      {value: "themeType", label: "类别"},
+      {value: "themeState", label: "状态"},
+      {value: "themeUrl", label: "请求URL示例",width: 200, popover: true},
       {value: "createTime", label: "创建时间", width: 200},
-      {value: "indexName", label: "创建人"},
+      {value: "createBy", label: "创建人"},
       {value: "updateTime", label: "最后修改时间", width: 200},
-      {value: "updateTime", label: "最后修改人"},
-      {value: "do", label: "操作", width: 320, fixed: 'right'},
+      {value: "updateBy", label: "最后修改人"},
+      {value: "do", label: "操作", width: 280, fixed: 'right'},
     ],
     form: {},
     formReal: {},
     result: {
       total: 0,
-      data: [{}]
+      data: []
     }
   },
   detail: {
@@ -140,7 +147,7 @@ const onAdd = () => {
 const onEdit = (row) => {
   state.detail.transfer = {
     mode: 'edit',
-    id: row.id,
+    id: row.themeId,
   }
   state.detail.show = true
 }
@@ -150,16 +157,27 @@ const onPassword = (row) => {
   }
   state.password.show = true
 }
-const onRole = (row) => {
-  state.role.transfer = {
-    id: row.id,
-  }
-  state.role.show = true
-}
 const onDel = (row) => {
+  ElMessageBox.confirm(`请确认是否删除${row.themeName}?`, "提示", {
+    confirmButtonText: "确定",
+    cancelButtonText: "取消",
+    type: "warning",
+  } as any).then(() => {
+    state.query.loading = true
+    sysThemeDelete(row.themeId).then(res => {
+      if (res.code === 200) {
+        ElMessage.success('删除成功!')
+        state.query.loading = false
+        onSearch()
+      } else {
+        ElMessage.error(res.msg)
+      }
+    })
+  }).catch(() => {})
 }
 const initDictionary = () => {
-  DictionaryStore.initDict('true_false')
+  DictionaryStore.initDict('theme_type')
+  DictionaryStore.initDict('theme_status')
 }
 onMounted(() => {
   initDictionary()