zhangjintao 1 éve
szülő
commit
9a1c574368

+ 3 - 3
.env.development

@@ -2,12 +2,12 @@
  # @FilePath: .env.development
  # @Author: 旭颖
  # @Date: 2023-04-03 10:38:35
- # @LastEditors:
- # @LastEditTime: 2023-04-11 19:00:56
+ # @LastEditors: Please set LastEditors
+ # @LastEditTime: 2023-07-31 14:26:36
 ###
 # 开发环境,VUE_APP_BASE_URL可以选择自己配置成需要的接口地址,如"https://api.xxx.com"
 # 此文件修改后需要重启项目
 VUE_APP_OUTPUT=development
 NODE_ENV=development
 VUE_APP_BASE_URL='/api'
-VUE_APP_FILE_URL='http://192.168.12.124:10015'
+VUE_APP_FILE_URL='http://192.168.12.123:10015'

+ 1 - 0
library/build/vuePlugins/components.d.ts

@@ -37,6 +37,7 @@ declare module '@vue/runtime-core' {
     ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+    ElLink: typeof import('element-plus/es')['ElLink']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElOption: typeof import('element-plus/es')['ElOption']

+ 16 - 1
library/components/VabFooter/index.vue

@@ -1,9 +1,22 @@
 <script lang="ts" setup>
   import { useSettingsStore } from '@/store/modules/settings'
-
+  import { getVersion } from '@/api/user'
   const fullYear = new Date().getFullYear()
   const settingsStore = useSettingsStore()
+  const cot: any = ref('')
   const { title } = storeToRefs(settingsStore)
+  const getVersionFn = async () => {
+    const { data } = await getVersion({})
+    const list = data.records
+    if (list.length) {
+      cot.value = list[0].versionCode
+    } else {
+      cot.value = '1.0.0'
+    }
+  }
+  onMounted(() => {
+    getVersionFn()
+  })
 </script>
 
 <template>
@@ -11,6 +24,8 @@
     Copyright
     <vab-icon icon="copyright-line" />
     {{ fullYear }} {{ title }}
+    <span style="margin-left: 6px">版本号</span>
+    {{ cot }}
   </footer>
 </template>
 

+ 9 - 0
src/api/user.ts

@@ -54,3 +54,12 @@ export function register(data: any) {
     data,
   })
 }
+
+//获取版本号列表
+export function getVersion(params: any) {
+  return request({
+    url: '/sys/log/page',
+    method: 'get',
+    params,
+  })
+}

+ 23 - 0
src/views/login/index.vue

@@ -95,6 +95,20 @@
                   {{ translateTitle('找回密码') }}
                 </el-button> -->
               </div>
+              <div class="chromeDiv">
+                <el-text class="mx-1">
+                  推荐使用
+                  <el-link
+                    href="https://www.google.cn/chrome/"
+                    style="margin-top: -4px; text-decoration: underline"
+                    target="_blank"
+                    :underline="false"
+                  >
+                    Chrome
+                  </el-link>
+                  浏览器访问本系统
+                </el-text>
+              </div>
             </el-form-item>
           </el-form>
         </el-col>
@@ -266,6 +280,15 @@
 </script>
 
 <style lang="scss" scoped>
+  .chromeDiv {
+    margin-top: 2vh;
+    text-align: center;
+    width: 100%;
+    color: #000;
+  }
+  .el-link.el-link--default {
+    color: #000;
+  }
   .login-container {
     height: 100vh;
     background: url('~@/assets/login_images/login.jpg') center center fixed

+ 17 - 0
src/views/versionManagement/api/index.js

@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+//获取列表
+export function getList(params) {
+  return request({
+    url: '/sys/log/page',
+    method: 'get',
+    params,
+  })
+}
+//添加
+export function doAdd(data) {
+  return request({
+    url: '/sys/log/input',
+    method: 'post',
+    data,
+  })
+}

+ 163 - 0
src/views/versionManagement/components/versionEdit.vue

@@ -0,0 +1,163 @@
+<template>
+  <el-dialog
+    v-model="dialogFormVisible"
+    :title="title"
+    width="600px"
+    @close="close"
+  >
+    <el-form ref="formRef" label-width="80px" :model="form" :rules="rules">
+      <el-form-item label="发布日期" prop="releaseAtStr">
+        <el-date-picker
+          v-model="form.releaseAtStr"
+          format="YYYY-MM-DD"
+          placeholder="请选择发布日期"
+          style="width: 100%"
+          type="date"
+          value-format="YYYY-MM-DD"
+        />
+      </el-form-item>
+      <el-form-item label="版本号" prop="versionCode">
+        <el-input v-model="form.versionCode" placeholder="请输入版本号" />
+      </el-form-item>
+      <el-form-item label="版本内容" prop="versionContent">
+        <el-input
+          v-model="form.versionContent"
+          placeholder="请输入版本更新内容并用;隔开"
+          rows="5"
+          type="textarea"
+        />
+      </el-form-item>
+      <el-form-item label="所用工时">
+        <el-input
+          v-model="form.workHour"
+          placeholder="请输入所用工时"
+          type="number"
+        />
+      </el-form-item>
+      <el-form-item label="注意事项">
+        <el-input
+          v-model="form.versionNote"
+          placeholder="请输入注意事项"
+          rows="5"
+          type="textarea"
+        />
+      </el-form-item>
+      <el-form-item label="更新人员" prop="updateAdmin">
+        <el-input v-model="form.updateAdmin" placeholder="请输入更新人员" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="save">确 定</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+  import { doAdd, getList } from '../api/index'
+
+  export default defineComponent({
+    name: 'VersionEdit',
+    emits: ['fetch-data'],
+    setup(props, { emit }) {
+      const $baseMessage = inject('$baseMessage')
+      const state = reactive({
+        formRef: null,
+        form: {
+          versionCode: '',
+          versionContent: '',
+          workHour: '',
+          versionNote: '',
+          updateAdmin: '',
+          releaseAtStr: '',
+        },
+        rules: {
+          versionCode: [
+            { required: true, trigger: 'blur', message: '请输入版本号' },
+          ],
+          versionContent: [
+            { required: true, trigger: 'blur', message: '请输入版本内容' },
+          ],
+          releaseAtStr: [
+            { required: true, trigger: 'change', message: '请选择发布日期' },
+          ],
+          updateAdmin: [
+            { required: true, trigger: 'blur', message: '请输入更新人员' },
+          ],
+        },
+        title: '',
+        dialogFormVisible: false,
+        list: [],
+      })
+      //添加编辑数据接受
+      const showEdit = () => {
+        state.title = '添加'
+        state.dialogFormVisible = true
+        fetchData()
+      }
+      //关闭
+      const close = () => {
+        state['formRef'].resetFields()
+        state.form = {
+          name: '',
+          description: '',
+        }
+        state.dialogFormVisible = false
+      }
+      //编辑保存
+      const save = () => {
+        state['formRef'].validate(async (valid) => {
+          if (valid) {
+            state.form.versionContent = state.form.versionContent.replace(
+              /;/g,
+              ';'
+            )
+            state.form.updateAdmin = state.form.updateAdmin.replace(/;/g, ';')
+            const { msg } = await doAdd(state.form)
+            $baseMessage(msg, 'success', 'vab-hey-message-success')
+            emit('fetch-data')
+            close()
+          }
+        })
+      }
+      const fetchData = async () => {
+        state.listLoading = true
+        const { data } = await getList({})
+        const list = data.records
+        if (list.length) {
+          state.form.versionCode = list[0].versionCode
+          incrementVersion(state.form.versionCode)
+        } else {
+          state.form.versionCode = '1.0.0'
+        }
+        state.listLoading = false
+      }
+      const incrementVersion = (version) => {
+        const parts = version.split('.')
+        const lastPart = parseInt(parts[parts.length - 1], 10)
+        parts[parts.length - 1] = lastPart + 1
+        state.form.versionCode = parts.join('.')
+      }
+      onMounted(() => {})
+      return {
+        ...toRefs(state),
+        incrementVersion,
+        fetchData,
+        showEdit,
+        close,
+        save,
+      }
+    },
+  })
+</script>
+
+<style lang="scss" scoped>
+  .vab-tree-border {
+    width: 100%;
+    height: 250px;
+    padding: $base-padding;
+    overflow-y: auto;
+    border: 1px solid #dcdfe6;
+    border-radius: $base-border-radius;
+  }
+</style>

+ 172 - 0
src/views/versionManagement/version.vue

@@ -0,0 +1,172 @@
+<template>
+  <div>
+    <div class="page-container">
+      <vab-query-form>
+        <vab-query-form-left-panel :span="24">
+          <el-button :icon="Plus" type="primary" @click="handleDetail($event)">
+            添加
+          </el-button>
+        </vab-query-form-left-panel>
+      </vab-query-form>
+      <el-table v-loading="listLoading" border :data="list">
+        <el-table-column
+          align="center"
+          label="发布日期"
+          prop="releaseAtStr"
+          show-overflow-tooltip
+          width="120"
+        />
+        <el-table-column
+          align="center"
+          label="版本号"
+          show-overflow-tooltip
+          width="120"
+        >
+          <template #default="{ $index, row }">
+            <div v-if="$index == 0 && queryForm.page == 1">
+              <div>{{ row.versionCode }}</div>
+              <div style="font-size: 12px; color: red">(当前版本)</div>
+            </div>
+            <div v-else>{{ row.versionCode }}</div>
+          </template>
+        </el-table-column>
+        <el-table-column align="left" label="版本内容" show-overflow-tooltip>
+          <template #default="{ row }">
+            <div>
+              <div
+                v-for="(item, index) in row.versionContentList"
+                :key="index"
+                style="margin-bottom: 5px"
+              >
+                <div>
+                  {{ item }}
+                </div>
+              </div>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="left"
+          label="注意事项"
+          show-overflow-tooltip
+          width="400"
+        >
+          <template #default="{ row }">
+            <div>{{ row.versionNote }}</div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          align="center"
+          label="更新人员"
+          show-overflow-tooltip
+          width="180"
+        >
+          <template #default="{ row }">
+            <div
+              v-for="(item, index) in row.updateAdminList"
+              :key="index"
+              style="margin-bottom: 5px"
+            >
+              <el-tag>
+                {{ item }}
+              </el-tag>
+            </div>
+          </template>
+        </el-table-column>
+        <template #empty>
+          <el-empty class="vab-data-empty" description="暂无数据" />
+        </template>
+      </el-table>
+      <el-pagination
+        background
+        :current-page="queryForm.page"
+        :layout="layout"
+        :page-size="queryForm.limit"
+        :total="total"
+        @current-change="handleCurrentChange"
+        @size-change="handleSizeChange"
+      />
+      <Detail ref="details" @fetch-data="fetchData" />
+    </div>
+  </div>
+</template>
+
+<script>
+  import { getList } from './api/index'
+  import {
+    Delete,
+    Plus,
+    Search,
+    Upload,
+    Download,
+    Refresh,
+  } from '@element-plus/icons-vue'
+
+  export default defineComponent({
+    name: '',
+    components: {
+      Detail: defineAsyncComponent(() =>
+        import('./components/versionEdit.vue')
+      ),
+    },
+    setup() {
+      // const $baseConfirm = inject('$baseConfirm')
+      // const $baseMessage = inject('$baseMessage')
+      const state = reactive({
+        details: null, //添加
+        list: [],
+        listLoading: true,
+        layout: 'total, sizes, prev, pager, next, jumper',
+        total: 0,
+        queryForm: {
+          page: 1,
+          limit: 10,
+        },
+      })
+      //切换当前页数据条数
+      const handleSizeChange = (val) => {
+        state.queryForm.limit = val
+        fetchData()
+      }
+      //切换页码
+      const handleCurrentChange = (val) => {
+        state.queryForm.page = val
+        fetchData()
+      }
+      //初始化列表
+      const fetchData = async () => {
+        state.listLoading = true
+        const { data } = await getList(state.queryForm)
+        state.list = data.records
+        state.total = data.total
+        state.listLoading = false
+      }
+      //添加
+      const handleDetail = (row) => {
+        state['details'].showEdit(row)
+      }
+      onMounted(() => {
+        fetchData()
+      })
+      return {
+        ...toRefs(state),
+        fetchData,
+        handleSizeChange,
+        handleCurrentChange,
+        Delete,
+        Plus,
+        Search,
+        Upload,
+        Download,
+        Refresh,
+        handleDetail,
+      }
+    },
+  })
+</script>
+<style lang="scss">
+  .user-management-container {
+    background-color: #fff;
+    padding: 20px;
+  }
+</style>

+ 1 - 1
vue.config.js

@@ -66,7 +66,7 @@ module.exports = defineConfig({
     // 4、webpack5版本前端配置代理无法与mock同时使用,如果一定要用前端代理,需注释setupMiddlewares: require('./mock')
     proxy: {
       [baseURL]: {
-        target: `http://192.168.12.124:10015`,
+        target: `http://192.168.12.123:10015`,
         ws: true,
         changeOrigin: true,
         pathRewrite: {