diff --git a/README.md b/README.md index e69de29..7a0a2b3 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,2 @@ +# 普達國際 CMS + diff --git a/admin/src/api/config.js b/admin/src/api/config.js new file mode 100644 index 0000000..52f4b0d --- /dev/null +++ b/admin/src/api/config.js @@ -0,0 +1,7 @@ +import ajax from "@/utils/request"; + +export const getConfig = async () => + ajax(`/config/getConfig`, "GET"); + +export const updateConfig = async (params) => + ajax(`/config/updateConfig`, "POST", params); diff --git a/admin/src/layouts/menu/index.vue b/admin/src/layouts/menu/index.vue index cbccd3d..92a1037 100644 --- a/admin/src/layouts/menu/index.vue +++ b/admin/src/layouts/menu/index.vue @@ -117,6 +117,11 @@ const menuData = ([ }, ], }, + { + title: "站台設定", + icon: Lock, + path: "/site/config", + }, ]); const handleSelect = (key, keyPath) => { diff --git a/admin/src/pages/Index/banner/components/Form.vue b/admin/src/pages/Index/banner/components/Form.vue index 9338cd4..dd12710 100644 --- a/admin/src/pages/Index/banner/components/Form.vue +++ b/admin/src/pages/Index/banner/components/Form.vue @@ -185,7 +185,7 @@ const submitForm = (formEl) => { - + @@ -197,7 +197,7 @@ const submitForm = (formEl) => { - + diff --git a/admin/src/pages/Index/banner/index.vue.aaa b/admin/src/pages/Index/banner/index.vue.aaa deleted file mode 100644 index f44c20c..0000000 --- a/admin/src/pages/Index/banner/index.vue.aaa +++ /dev/null @@ -1,162 +0,0 @@ - - - diff --git a/admin/src/pages/Site/config.vue b/admin/src/pages/Site/config.vue new file mode 100644 index 0000000..cc35e7b --- /dev/null +++ b/admin/src/pages/Site/config.vue @@ -0,0 +1,115 @@ + + + + + \ No newline at end of file diff --git a/admin/src/router/index.js b/admin/src/router/index.js index a64dfe9..956fa96 100644 --- a/admin/src/router/index.js +++ b/admin/src/router/index.js @@ -132,6 +132,14 @@ let routes = [ }, component: () => import("../pages/Contact/map/Index.vue"), }, + { + path: "/site/config", + name: "SiteConfig", + meta: { + title: "站台設定", + }, + component: () => import("../pages/Site/config.vue"), + }, ], }, { diff --git a/app/app/adminapi/controller/ConfigController.php b/app/app/adminapi/controller/ConfigController.php new file mode 100644 index 0000000..a686df4 --- /dev/null +++ b/app/app/adminapi/controller/ConfigController.php @@ -0,0 +1,52 @@ +get(); + // $where[] = ['lang', $param['lang']]; + + $list = Db::name('config') + ->where('lang',$param['lang']) + ->select() + ->toArray(); + + $result = []; + + foreach ($list as $key => $val) { + $result[$val['code']] = $val['value']; + } + + return $this->Success($result); + } + + public function updateConfig(Request $request) + { + $param = $request->post(); + + try{ + foreach ($param as $key => $val) { + if($key != 'lang'){ + $data = [ + 'value' => $val, + ]; + + Db::name('config') + ->where('code',$key) + ->where('lang',$param['lang']) + ->update($data); + } + } + return $this->Success('更新成功'); + }catch(\Exception $e){ + return $this->Error('更新失敗'); + } + } +} diff --git a/app/app/adminapi/controller/IndexController.php b/app/app/adminapi/controller/IndexController.php index e3a35f0..113d1df 100644 --- a/app/app/adminapi/controller/IndexController.php +++ b/app/app/adminapi/controller/IndexController.php @@ -8,10 +8,6 @@ use think\facade\Db; class IndexController extends BaseController { - public function index(Request $request) - { - return json(['code' => 0, 'msg' => 'success', 'data' => ['name' => 'adminapi']]); - } public function getBannerList(Request $request) { $param = $request->get(); @@ -128,7 +124,7 @@ class IndexController extends BaseController $filename = uniqid() . '.' . $file->getUploadExtension(); $file->move(public_path().'/storage/banner/'. $filename); - $savePath = '/storage/banner/'. $filename; + $savePath = getUrl().'/storage/banner/'. $filename; return $this->Success($savePath); } return $this->Error('操作失敗'); diff --git a/app/app/appapi/controller/IndexController.php b/app/app/appapi/controller/IndexController.php index c314379..ec79656 100644 --- a/app/app/appapi/controller/IndexController.php +++ b/app/app/appapi/controller/IndexController.php @@ -7,10 +7,6 @@ use think\facade\Db; class IndexController extends BaseController { - public function index(Request $request) - { - return response('appapi index'); - } public function getConfig(Request $request) { $param = $request->get(); @@ -35,7 +31,7 @@ class IndexController extends BaseController // $where[] = ['lang', $param['lang']]; $list = Db::name('banner') - // ->where('lang',$param['lang']) + ->where('lang',$param['lang']) ->order('id', 'desc') ->select() ->toArray(); diff --git a/app/app/appapi/controller/SocialController.php b/app/app/appapi/controller/SocialController.php index 91e0f6d..30c1f7e 100644 --- a/app/app/appapi/controller/SocialController.php +++ b/app/app/appapi/controller/SocialController.php @@ -9,21 +9,33 @@ class SocialController extends BaseController { public function getNewsList(Request $request) { - $param = $request->get(); - // $where[] = ['lang', $param['lang']]; + $param = $request->post(); + + $page = isset($param['page']) ? $param['page'] : 1; + $pageSize = isset($param['pageSize']) ? $param['pageSize'] : 10; + $search = isset($param['search']) ? $param['search'] : []; + + $where = [ + ]; $list = Db::name('news') - // ->where('lang',$param['lang']) - ->order('id', 'desc') + ->where($where) + ->order('id', 'asc') + ->page($page, $pageSize) ->select() ->toArray(); + $total = Db::name('news') + ->where($where) + ->count(); - foreach($list as $key => $val){ - - } + // foreach($list as $key => $val){ + // } - $result = $list; + $result = [ + 'list' => $list, + 'total' => $total + ]; return $this->Success($result); } @@ -49,23 +61,15 @@ class SocialController extends BaseController public function getActivityList(Request $request) { - $param = $request->get(); - // $where[] = ['lang', $param['lang']]; + $param = $request->post(); - $list = Db::name('activity') - // ->where('lang',$param['lang']) - ->order('id', 'desc') - ->select() - ->toArray(); + $result = \app\common\GetData::getPageList('activity',$param); - - foreach($list as $key => $val){ - $list[$key]['imageList'] = json_decode($val['image_list']); - unset($list[$key]['image_list']); + foreach($result['list'] as $key => $val){ + $result['list'][$key]['imageList'] = json_decode($val['image_list']); + unset($result['list'][$key]['image_list']); } - $result = $list; - return $this->Success($result); } diff --git a/app/app/common/GetData.php b/app/app/common/GetData.php new file mode 100644 index 0000000..29cd996 --- /dev/null +++ b/app/app/common/GetData.php @@ -0,0 +1,54 @@ +totle: 總筆數 + * list->list: 資料 + */ + public static function getPageList($db,$param){ + $page = isset($param['page']) ? $param['page'] : 1; + $pageSize = isset($param['pageSize']) ? $param['pageSize'] : 10; + $search = isset($param['search']) ? $param['search'] : []; + + $where = [ + ]; + + $list = Db::name($db) + ->where($where) + ->order('id', 'asc') + ->page($page, $pageSize) + ->select() + ->toArray(); + + $total = Db::name('activity') + ->where($where) + ->count(); + + // foreach($list as $key => $val){ + // } + + $result = [ + 'list' => $list, + 'total' => $total + ]; + + return $result; + } +} diff --git a/docker-compose.yaml b/docker-compose.yaml index aee9eb5..13f0c1d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,47 +1,55 @@ version: '3.8' services: - nginx-php: + web: build: context: . - dockerfile: ./nginx-php/Dockerfile - container_name: "utel-nginx-php" + dockerfile: ./nuxt/Dockerfile + container_name: "prodio-web" ports: - - 6050:80 + - "6061:3000" volumes: - - "./app:/var/www" - - "./data/logs:/log" + - ./nuxt/app:/app networks: - - utel-network + - prodio-internal + api: + image: krisss/docker-webman:8.2-cli-alpine + container_name: "prodio-api" + ports: + - "6060:8787" + volumes: + - ./app:/app + networks: + - prodio-internal mysql: build: context: . dockerfile: ./mysql/Dockerfile - container_name: "utel-mysql" - ports: - - "3306:3306" + container_name: "prodio-mysql" + #ports: + # - "3306:3306" networks: - - utel-network + - prodio-internal volumes: - ./data/mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD: 1qazvfr4 + MYSQL_ROOT_PASSWORD: admin # redis: # image: redis - # container_name: "bdshop-redis" + # container_name: "prodio-redis" # networks: - # - bdshop-network + # - internal phpmyadmin: image: phpmyadmin/phpmyadmin - container_name: "utel-myadmin" + container_name: "prodio-myadmin" ports: - - "6059:80" + - "6069:80" networks: - - utel-network + - prodio-internal environment: PMA_HOST: mysql PMA_PORT: 3306 UPLOAD_LIMIT: 100M networks: - utel-network: + prodio-internal: driver: bridge diff --git a/web/composables/useMyFetch.js b/web/composables/useMyFetch.js index 0b5d456..382c290 100644 --- a/web/composables/useMyFetch.js +++ b/web/composables/useMyFetch.js @@ -24,4 +24,5 @@ export const useMyFetch = (request, method="GET" ,opts={}, headers ={}) => { } return useFetch(request, options) -} \ No newline at end of file +} + diff --git a/web/composables/useRequest.js b/web/composables/useRequest.js new file mode 100644 index 0000000..d64560f --- /dev/null +++ b/web/composables/useRequest.js @@ -0,0 +1,30 @@ +import Cookies from 'js-cookie' + +export const useRequest = (request, method="GET" ,opts={}, headers ={}) => { + let locale = Cookies.get('i18n_redirected'); + const config = useRuntimeConfig() + const options = { + baseURL: config.public.apiBaseUrl, + method: method, + headers: { + "Content-Type": "application/json", + // "Authorization": Cookies.get('token'), + ...headers, + } + }; + + let data = { + ...opts, + lang: locale + } + + if (method === "GET" || method === "DELETE") { + options.params = data; + } + if (method === "POST" || method === "PUT") { + options.body = data; + } + + return $fetch(request, options) +} + diff --git a/web/layouts/default.vue b/web/layouts/default.vue index 5301a64..d18c080 100644 --- a/web/layouts/default.vue +++ b/web/layouts/default.vue @@ -58,19 +58,19 @@ const { data: cateRes } = await useMyFetch('/index/getCateList', "GET") diff --git a/web/locales/cn.js b/web/locales/cn.js index 8af35ac..7da57a2 100644 --- a/web/locales/cn.js +++ b/web/locales/cn.js @@ -7,12 +7,21 @@ export default { productandservice: '产品与服务', development: '企业永续发展', contactinfo: '联络资讯', - copyright: '普达国际 版权所有 © All Rights Reserved Copyright © 2013. All rights reserved.', + copyright: '普达国际 版权所有 © All Rights Reserved Copyright © 2013. All rights reserved.', + Form: { + submit: '确认送出', + }, about: { company: '公司简介', concept: '经营理念', }, + Social: { + news: '产业动态', + activity: '公司活动', + }, Contact: { + form: '联络表单', + branch: '公司据点', company: '公司名称', name: '姓名', email: '电子邮件', diff --git a/web/locales/en.js b/web/locales/en.js index cb736b3..1d5d782 100644 --- a/web/locales/en.js +++ b/web/locales/en.js @@ -3,24 +3,33 @@ export default { products: 'PRODUCTS', news: 'NEWS', contact: 'CONTACT US', - branch: 'BRANCH', + branch: 'Company Locations', productandservice: 'Products and Services', - development: 'Sustainable development of enterprises', - contactinfo: 'CONTACT INFORMATION', - copyright: '普達國際 版權所有 © All Rights Reserved Copyright © 2013. All rights reserved.', + development: 'Sustainable Development', + contactinfo: 'Contact Information', + copyright: 'Puda International. All Rights Reserved © Copyright 2013. All rights reserved.', + Form: { + submit: 'Submit', + }, about: { - company: 'Company Profile', + company: 'Company Overview', concept: 'Business Philosophy', }, + Social: { + news: 'Industry Updates', + activity: 'Company Activities', + }, Contact: { + form: 'Contact Form', + branch: 'Company Locations', company: 'Company', name: 'Name', email: 'Email', - tel: 'Telephone', + tel: 'Phone', content: 'Content', submit: 'Submit', success: 'Success', - fail: 'Fail', - formmessage : 'We welcome you to provide relevant suggestions through this email form. Your encouragement is our driving force for growth, and we will respond to all inquiries as soon as possible.' - } -}; \ No newline at end of file + fail: 'Failure', + formmessage: 'We welcome you to provide suggestions through this email form. Your encouragement is our driving force, and we will respond to all inquiries as soon as possible.' + }, +}; diff --git a/web/locales/tw.js b/web/locales/tw.js index 8f7632f..8f6c497 100644 --- a/web/locales/tw.js +++ b/web/locales/tw.js @@ -15,7 +15,13 @@ export default { company: '公司簡介', concept: '經營理念', }, + Social: { + news: '產業動態', + activity: '公司活動', + }, Contact: { + form: '聯絡表單', + branch: '公司據點', company: '公司名稱', name: '姓名', email: '電子郵件', diff --git a/web/nuxt.config.ts b/web/nuxt.config.ts index ef44b05..80165f9 100644 --- a/web/nuxt.config.ts +++ b/web/nuxt.config.ts @@ -12,7 +12,7 @@ export default defineNuxtConfig({ link: [ { rel: 'stylesheet', - href: 'js/libs/bootstrap/bootstrap-submenu.min.css' + href: '/home/js/libs/bootstrap/bootstrap-submenu.min.css' }, { rel: 'stylesheet', diff --git a/web/pages/about.vue b/web/pages/about.vue index d6a0c88..b14de5c 100644 --- a/web/pages/about.vue +++ b/web/pages/about.vue @@ -26,10 +26,11 @@ const menuList = [ }, ] -const currentRoute = ref(0); +const currentRoute = ref(''); onMounted(() => { currentRoute.value = route.path; + console.log('route',route) }); watch(() => route.params, @@ -51,7 +52,7 @@ watch(() => route.params,
{ currentRoute.value = route.path; @@ -53,7 +53,7 @@ watch(() => route.params,
bannerRes.value.data); const cateData = ref([]); const supplierData = ref([]); const { data: bannerRes } = await useMyFetch('/index/getBannerList', "GET") -if (bannerRes.value.code === 200) { - bannerData.value = bannerRes.value.data -} +// if (bannerRes.value.code === 200) { +// bannerData.value = bannerRes.value.data +// } const { data: cateRes } = await useMyFetch('/index/getParentCateList', "GET") diff --git a/web/pages/social.vue b/web/pages/social.vue index ea6be90..d38afcd 100644 --- a/web/pages/social.vue +++ b/web/pages/social.vue @@ -7,6 +7,8 @@ import PageBanner from "@/components/PageBanner.vue"; import featureImg from '@/assets/img/feature.jpg'; import bannerImg from '@/assets/img/pageBanner/p1.jpg'; +const { t } = useI18n(); + const route = useRoute(); const router = useRouter(); @@ -19,16 +21,16 @@ const bannerObj = { const menuList = [ { - "name":"產業動態", + "name":t('Social.news'), "path":"/social/news" }, { - "name":"公司活動", + "name":t('Social.activity'), "path":"/social/activity" }, ] -const currentRoute = ref(0); +const currentRoute = ref(''); onMounted(() => { currentRoute.value = route.path; @@ -52,7 +54,7 @@ watch(() => route.params,
res.value.data); +const page = ref(1) +const pageSize = ref(10) + // 取得活動資料 -const { data: res } = await useMyFetch('/social/getActivityList', "GET") +const { data: res } = await useMyFetch('/social/getActivityList', "POST", { + page: page.value, + pageSize: pageSize.value, +}) + +const handlePageChange = async (npage,npageSize) => { + page.value = npage + pageSize.value = npageSize + + res.value = await useRequest('/social/getActivityList', "POST", { + page: page.value, + pageSize: pageSize.value, + }) +} @@ -14,11 +30,11 @@ const { data: res } = await useMyFetch('/social/getActivityList', "GET")
-
- +
+
-
+
+
+
+ +
- \ No newline at end of file + \ No newline at end of file diff --git a/web/pages/social/news/index.vue b/web/pages/social/news/index.vue index 7f4432c..cbd91e6 100644 --- a/web/pages/social/news/index.vue +++ b/web/pages/social/news/index.vue @@ -1,9 +1,25 @@ @@ -13,15 +29,21 @@ const { data: newsRes } = await useMyFetch('/social/getNewsList', "GET")
- +
{{ item.title }}
{{ item.create_time }}
+
+ +