Browse Source

Project Init

yigeren911 2 years ago
parent
commit
4920705f48

+ 1 - 23
.gitignore

@@ -1,24 +1,2 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
 node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
+node_modules

+ 24 - 18
README.md

@@ -1,18 +1,24 @@
-# Vue 3 + TypeScript + Vite
-
-This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
-
-## Recommended IDE Setup
-
-- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
-
-## Type Support For `.vue` Imports in TS
-
-TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
-
-If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
-
-1. Disable the built-in TypeScript Extension
-   1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
-   2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
-2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
+<!--
+ * @Description:: 窝友菜-企业管理中台中文版本-前端
+ * @Version: v.1.0.0
+ * @Author: 舟舟
+ * @Date: 2022-07-27 07:50:53
+ * @LastEditors: 舟舟
+ * @LastEditTime: 2022-07-31 09:06:43
+ * @FilePath: /ouicai_web_framework_vite_ep_nolang/readme.md
+-->
+<!--
+ * @Description:: 说明文件
+ * @Version: V2.0
+ * @Author: 舟舟
+ * @Date: 2022-07-27 07:50:53
+ * @LastEditors: 舟舟
+ * @LastEditTime: 2022-07-27 08:19:15
+ * @FilePath: /ouicai_web_framework_vite_ep_nolang/readme.md
+-->
+ouicai企业级管理中台非双语版本
+*特点
+1、具备两个样式切换和相关组件色彩样式自由搭配
+2、优化了筛选器的布局样式
+*拓展
+1、plop,按照模板生产VUE.js及配套文件,节约开发时间

+ 9 - 0
index.html

@@ -1,3 +1,12 @@
+<!--
+ * @Description:: 请补充填写
+ * @Version: 请配置版本号
+ * @Author: 舟舟
+ * @Date: 2022-06-25 22:32:24
+ * @LastEditors: 舟舟
+ * @LastEditTime: 2022-07-30 19:26:03
+ * @FilePath: /ouicai_web_framework_vite_ep_nolang/index.html
+-->
 <!DOCTYPE html>
 <html lang="en">
 <head>

+ 1 - 3
src/views/backend/back.vue

@@ -11,9 +11,7 @@ import { ElNotification } from 'element-plus'
 const router = useRouter()
 
 const querys = router.currentRoute.value.query
-const adminInfo = useAdminInfo
-
-
+const adminInfo = useAdminInfo()
 
 qrcodeLogin(querys)
     .then((res) => {

+ 115 - 0
src/views/backend/enterprise/community/index.vue

@@ -0,0 +1,115 @@
+<template>
+    <div class="default-main ba-table-box">
+        <el-alert class="ba-table-alert" v-if="baTable.table.remark" :title="baTable.table.remark" type="info"
+                  show-icon/>
+        <el-row>
+            <el-col :span="24">
+                <!-- 表格顶部菜单 -->
+                <TableHeader :buttons="['refresh', 'add', 'edit', 'delete', 'comSearch']"
+                             quick-search-placeholder="通过标题模糊搜索"
+                             @action="baTable.onTableHeaderAction"/>
+                <!-- 表格 -->
+                <!-- 要使用`el-table`组件原有的属性,直接加在Table标签上即可 -->
+                <Table @action="baTable.onTableAction"/>
+
+            </el-col>
+        </el-row>
+
+        <!-- 表单 -->
+        <PopupForm ref="formRef"/>
+
+    </div>
+</template>
+
+<script setup>
+import {ref, onMounted, provide} from 'vue'
+import {advertisement, document} from '/@/api/controllerUrls'
+import Table from '/@/components/table/index.vue'
+import TableHeader from '/@/components/table/header/index.vue'
+import PopupForm from './popupForm.vue'
+import {baTableApi} from '/@/api/common'
+import baTableClass from '/@/utils/baTable'
+import { defaultOptButtons } from "/@/components/table";
+
+
+const baTable = new baTableClass(
+    new baTableApi(advertisement),
+    {
+        dblClickNotEditColumn: [undefined, 'status'],
+        column: [
+            {type: 'selection', align: 'center', operator: false},
+            {label: '标题', prop: 'adTitle', align: 'left', operator: 'LIKE'},
+            {
+                label: '场景',
+                prop: 'sceneType',
+                align: 'center',
+                width: '120',
+                render: 'tag',
+                operator: '=',
+                replaceValue:{0:'开机',1:'轮播'}
+            },
+            {
+                label: '类型',
+                prop: 'adType',
+                align: 'center',
+                width: '120',
+                render: 'tag',
+                operator: '=',
+                custom: { 0: '', 1: '' ,2:''},
+                replaceValue:{0:'展示',1:'推广',2:'好物'}
+            },
+            {
+                label: '曝光量',
+                prop: 'viewCount',
+                align: 'center',
+                width: '120',
+                operator: false
+            },
+            {
+                label: '是否上架',
+                prop: 'adStatus',
+                align: 'center',
+                width: '120',
+                render: 'tag',
+                operator: '=',
+                custom: { 0: 'success', 1: 'info' },
+                replaceValue:{0:'上架',1:'下架'}
+            },
+            {label: '创建人', prop: 'creatorName', align: 'center', width: '120', operator: false},
+            {label: '创建时间', prop: 'createTime', align: 'center', width: '160', operator: false},
+            {
+                label: '操作',
+                align: 'center',
+                width: '160',
+                render: 'buttons',
+                buttons: defaultOptButtons(),
+                operator: false
+            },
+        ],
+    },
+    {
+        defaultItems: {
+            sceneType:0
+        },
+    },
+    {
+        // 获得编辑数据后
+        requestEdit: () => {
+            if (baTable.form.items && !baTable.form.items.icon) baTable.form.items.icon = 'el-icon-Minus'
+        },
+    }
+)
+
+
+provide('baTable', baTable)
+onMounted(() => {
+    baTable.mount()
+    baTable.getIndex()
+})
+
+
+</script>
+
+<style scoped>
+
+</style>

+ 220 - 0
src/views/backend/enterprise/community/popupForm.vue

@@ -0,0 +1,220 @@
+<template>
+    <!-- 对话框表单 -->
+    <el-dialog custom-class="ba-operate-dialog" :close-on-click-modal="false"
+               :model-value="baTable.form.operate ? true : false" @close="baTable.toggleForm">
+        <template #header>
+            <div class="title" v-drag="['.ba-operate-dialog', '.el-dialog__header']" v-zoom="'.ba-operate-dialog'">
+                {{ baTable.form.operate ? baTable.form.operate == 'edit' ? '编辑' : '添加' : '无标题' }}
+            </div>
+        </template>
+        <el-scrollbar v-loading="baTable.form.loading" class="ba-table-form-scrollbar">
+            <div class="ba-operate-form" :class="'ba-' + baTable.form.operate + '-form'"
+                 :style="'width: calc(100% - ' + baTable.form.labelWidth! / 2 + 'px)'">
+                <el-form ref="formRef" @keyup.enter="baTable.onSubmit(formRef)" :model="baTable.form.items"
+                         label-position="right" :label-width="baTable.form.labelWidth + 'px'" :rules="rules"
+                         v-if="!baTable.form.loading">
+                    <el-form-item prop="adTitle" label="广告标题">
+                        <el-input v-model="baTable.form.items!.adTitle"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="sceneType" label="场景">
+                        <el-select v-model="baTable.form.items!.sceneType" placeholder="请选择场景" style="width: 100%"
+                                   clearable>
+                            <el-option label="开机" :value="0"/>
+                            <el-option label="轮播" :value="1"/>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="adType" label="类型">
+                        <el-select v-model="baTable.form.items!.adType" placeholder="请选择类型" style="width: 100%"
+                                   clearable
+                                   @change="onChange">
+                            <el-option label="展示" :value="0"/>
+                            <el-option label="推广" :value="1"/>
+                            <el-option label="好物" :value="2"/>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="documentId" label="关联" v-if="baTable.form.items.adType>0">
+                        <el-select v-model="baTable.form.items!.documentId" placeholder="请选择关联" style="width: 100%"
+                                   clearable
+                                   filterable>
+                            <el-option v-for="(item,index) in datas.selectList" :label="item.label" :value="item.value"
+                                       :key="index"/>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="adStatus" label="状态">
+                        <el-select v-model="baTable.form.items!.adStatus" placeholder="请选择状态" style="width: 100%"
+                                   clearable>
+                            <el-option label="下架" :value="1"/>
+                            <el-option label="上架" :value="0"/>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="screenDisplayHorizontalUrl" label="大屏横屏展示"
+                                  v-if="baTable.form.items!.sceneType==0">
+                        <pictureUpload v-model:fileUrl="baTable.form.items!.screenDisplayHorizontalUrl"></pictureUpload>
+                    </el-form-item>
+                    <el-form-item prop="screenDisplayVerticalUrl" label="大屏竖屏展示"
+                                  v-if="baTable.form.items!.sceneType==0">
+                        <pictureUpload v-model:fileUrl="baTable.form.items!.screenDisplayVerticalUrl"></pictureUpload>
+                    </el-form-item>
+                    <el-form-item prop="screenDisplayHorizontalUrl" label="大屏轮播展示"
+                                  v-if="baTable.form.items!.sceneType==1">
+                        <pictureUpload v-model:fileUrl="baTable.form.items!.screenDisplayHorizontalUrl"></pictureUpload>
+                    </el-form-item>
+                    <el-form-item prop="appDisplayUrl" label="移动APP展示">
+                        <pictureUpload v-model:fileUrl="baTable.form.items!.appDisplayUrl"></pictureUpload>
+                    </el-form-item>
+                    <div style="font-size: 10px;color: #92969a;margin-left: 150px">
+                        仅限jpg/png格式文件,大小不超过1MB
+                    </div>
+                </el-form>
+            </div>
+        </el-scrollbar>
+        <template #footer>
+            <div :style="'width: calc(100% - ' + baTable.form.labelWidth! / 1.8 + 'px)'">
+                <el-button @click="baTable.toggleForm('')">取消</el-button>
+                <el-button v-blur :loading="baTable.form.submitLoading" @click="baTable.onSubmit(formRef)"
+                           type="primary">
+                    {{ baTable.form.operateIds && baTable.form.operateIds.length > 1 ? '保存并编辑下一项' : '保存' }}
+                </el-button>
+            </div>
+        </template>
+    </el-dialog>
+</template>
+
+<script setup lang="ts">
+import {ref, reactive, inject, onMounted, watch} from 'vue'
+
+import type baTableClass from '/@/utils/baTable'
+import {regularPassword, validatorAccount, validatorMobile} from '/@/utils/validate'
+import type {ElForm, FormItemRule} from 'element-plus'
+import FormItem from '/@/components/formItem/index.vue'
+import {getOrgTree, getEmployees} from '/@/api/backend/auth/account'
+import {authGroup, sysConfig} from '/@/api/controllerUrls'
+import editor from '/@/components/editor/index.vue'
+import request from '/@/api/request'
+import {ElNotification} from 'element-plus/es'
+import {document} from '/@/api/controllerUrls'
+import pictureUpload from '/@/components/pictureUpload/index.vue'
+import {getRecommendList} from '/@/api/backend/enterprise/advertisement'
+
+const formRef = ref<InstanceType<typeof ElForm>>()
+const baTable = inject('baTable') as baTableClass
+
+onMounted(() => {
+    getDocList()
+})
+
+let datas = reactive({
+    selectList: [],
+})
+
+function getDocList() {
+    request.index(document, undefined, 'list').then((res) => {
+        datas.selectList = []
+        baTable.form.items!.documentId = ''
+        res.data.map((item: any) => {
+            let selectItem = {
+                label: item.documentTitle,
+                value: item.id,
+            }
+            datas.selectList.push(selectItem)
+        })
+
+    })
+}
+
+const onChange = (val: any) => {
+    if (val === 1) {
+        getDocList()
+    }
+
+    if (val === 2) {
+        getRecommendList().then((res) => {
+            datas.selectList = []
+            baTable.form.items!.documentId = ''
+            res.data.map((item: any) => {
+                let selectItem = {
+                    label: item.recommendTitle,
+                    value: item.id,
+                }
+
+                datas.selectList.push(selectItem)
+            })
+        })
+    }
+}
+
+const rules: Partial<Record<string, FormItemRule[]>> = reactive({
+    adTitle: [
+        {
+            required: true,
+            message: '请输入标题',
+            trigger: 'blur',
+        },
+    ],
+    sceneType: [
+        {
+            required: true,
+            message: '请选择场景',
+            trigger: 'blur',
+        },
+    ],
+    adType: [
+        {
+            required: true,
+            message: '请选择类型',
+            trigger: 'blur',
+        },
+    ],
+    documentId: [
+        {
+            required: true,
+            message: '请选择关联',
+            trigger: 'blur',
+        },
+    ],
+    adStatus: [
+        {
+            required: true,
+            message: '请选择状态',
+            trigger: 'blur',
+        },
+    ],
+})
+</script>
+
+<style scoped lang="scss">
+.avatar-uploader {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    position: relative;
+    border-radius: var(--el-border-radius-small);
+    box-shadow: var(--el-box-shadow-light);
+    border: 1px dashed var(--color-sub-1);
+    cursor: pointer;
+    overflow: hidden;
+    width: 110px;
+    height: 110px;
+}
+
+.avatar-uploader:hover {
+    border-color: var(--color-primary);
+}
+
+.avatar {
+    width: 110px;
+    height: 110px;
+    display: block;
+}
+
+.image-slot {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 100%;
+}
+</style>
+
+function getRecommendList() {
+throw new Error('Function not implemented.')
+}

+ 9 - 0
vite.config.ts

@@ -1,3 +1,12 @@
+/*
+ * @Description:: 打包配置文件
+ * @Version: V1.0.0
+ * @Author: 舟舟
+ * @Date: 2022-06-25 22:48:58
+ * @LastEditors: 舟舟
+ * @LastEditTime: 2022-07-30 23:18:53
+ * @FilePath: /ouicai_web_framework_vite_ep_nolang/vite.config.ts
+ */
 import vue from '@vitejs/plugin-vue'
 import { resolve } from 'path'
 import type { UserConfig, ConfigEnv } from 'vite'