Blogger Information
Blog 38
fans 0
comment 0
visits 18520
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
vue代码练习
Blackeye
Original
416 people have browsed it


0525\antd\src\App.vue

  1. <template>
  2. <a-layout style="min-height: 100vh" id="oyk">
  3. <a-layout-sider v-model:collapsed="collapsed" collapsible>
  4. <div class="logo" />
  5. <a-menu v-model:selectedKeys="selectedKeys" theme="dark" mode="inline">
  6. <router-link to="/">
  7. <a-menu-item key="-1">
  8. <DesktopOutlined />
  9. <span>首页</span>
  10. </a-menu-item>
  11. </router-link>
  12. <router-link to="/info">
  13. <a-menu-item key="-2">
  14. <UserOutlined />
  15. <span>个人中心</span>
  16. </a-menu-item>
  17. </router-link>
  18. <a-sub-menu v-for="(item,index,key) in data.menu" :key="item.mid">
  19. <template #title v-if="item.type == 0">
  20. <span>
  21. <HeartOutlined />
  22. <span>{{item.label}}</span>
  23. </span>
  24. </template>
  25. <template #title v-if="item.type == 1">
  26. <router-link :key="item.mid" :to="item.src">
  27. <MenuOutlined />
  28. <span>{{item.label}}</span>
  29. </router-link>
  30. </template>
  31. <template #title v-if="item.type == 2">
  32. <a :href="item.src">
  33. <MenuOutlined />
  34. <span>{{item.label}}</span>
  35. </a>
  36. </template>
  37. <template v-if="item.son" v-for="(items,indexs,keys) in item.son" >
  38. <router-link :key="items.mid" :to="items.src" v-if="items.type==1">
  39. <a-menu-item :key="items.mid">
  40. <MenuOutlined />
  41. <span>{{items.label}}</span>
  42. </a-menu-item>
  43. </router-link>
  44. <a :key="items.mid" :href="items.src" v-if="items.type==2">
  45. <a-menu-item :key="items.mid">
  46. <MenuOutlined />
  47. <span>{{items.label}}</span>
  48. </a-menu-item>
  49. </a>
  50. </template>
  51. </a-sub-menu>
  52. <!-- <a-sub-menu key="3">
  53. <template #title>
  54. <span>
  55. <SettingOutlined />
  56. <span>系统配置</span>
  57. </span>
  58. </template>
  59. <a-menu-item key="4">
  60. <TeamOutlined />
  61. <span>部门管理</span>
  62. </a-menu-item>
  63. <router-link to="/user_lists">
  64. <a-menu-item key="5">
  65. <UserOutlined />
  66. <span>管理员管理</span>
  67. </a-menu-item>
  68. </router-link>
  69. </a-sub-menu>
  70. <a-sub-menu key="4">
  71. <template #title>
  72. <span>
  73. <SettingOutlined />
  74. <span>商城项目</span>
  75. </span>
  76. </template>
  77. <router-link to="/shop_lists">
  78. <a-menu-item key="10">
  79. <UserOutlined />
  80. <span>商品列表</span>
  81. </a-menu-item>
  82. </router-link>
  83. <a-menu-item key="11">
  84. <UserOutlined />
  85. <span>商品分类列表</span>
  86. </a-menu-item>
  87. <a-menu-item key="12">
  88. <UserOutlined />
  89. <span>订单列表</span>
  90. </a-menu-item>
  91. <a-menu-item key="13">
  92. <UserOutlined />
  93. <span>用户列表</span>
  94. </a-menu-item>
  95. <a-menu-item key="14">
  96. <UserOutlined />
  97. <span>用户地址列表</span>
  98. </a-menu-item>
  99. <a-menu-item key="15">
  100. <UserOutlined />
  101. <span>广告列表</span>
  102. </a-menu-item>
  103. </a-sub-menu> -->
  104. </a-menu>
  105. </a-layout-sider>
  106. <a-layout>
  107. <a-layout-content style="margin: 0 16px">
  108. <div :style="{ padding: '24px', background: '#fff', minHeight: '360px' }">
  109. <router-view></router-view>
  110. </div>
  111. </a-layout-content>
  112. </a-layout>
  113. </a-layout>
  114. </template>
  115. <script>
  116. import { reactive, toRef } from '@vue/reactivity';
  117. import {AdminIndexLists} from './network/index.js';
  118. import { message, Modal } from "ant-design-vue";
  119. import {
  120. DesktopOutlined,
  121. UserOutlined,
  122. HeartOutlined,
  123. MenuOutlined,
  124. SettingOutlined,
  125. TeamOutlined,
  126. ApiOutlined
  127. } from "@ant-design/icons-vue";
  128. import { defineComponent, ref } from "vue";
  129. export default defineComponent({
  130. components: {
  131. DesktopOutlined,
  132. UserOutlined,
  133. HeartOutlined,
  134. MenuOutlined,
  135. SettingOutlined,
  136. TeamOutlined,
  137. ApiOutlined
  138. },
  139. data() {
  140. return {
  141. collapsed: ref(false),
  142. selectedKeys: ref(["-1"]),
  143. };
  144. },
  145. setup(){
  146. const data = reactive({
  147. menu:[],
  148. })
  149. AdminIndexLists().then( (res)=>{
  150. data.menu = res.data.menu;
  151. } )
  152. return{
  153. data
  154. }
  155. }
  156. });
  157. </script>

0525\antd\src\views\GroupLists.vue

  1. <template>
  2. <a-button type="default" @click="add(2)">修改</a-button>
  3. <a-modal
  4. v-model:visible="data.addModal"
  5. width="100%"
  6. centered
  7. :title="data.title"
  8. :mask="mask"
  9. wrapClassName="full-modal"
  10. okText="确定"
  11. okType="primary"
  12. cancelText="取消"
  13. @ok="add_ok()"
  14. >
  15. <a-form name="form" :model="formData" @submit="submit">
  16. <a-form-item name="group_name" label="部门名">
  17. <a-input v-model:value="formData.group_name" />
  18. </a-form-item>
  19. <a-form-item name="name" label="权限">
  20. <a-checkbox-group name="rights" v-model:value="formData.rights">
  21. <div v-for="(item,index,key) in data.menu" :key="item.id">
  22. <a-checkbox :value="item.mid">{{item.label}}</a-checkbox>
  23. <hr style="border:dotted #0066CC;"/>
  24. <div>
  25. <a-checkbox v-for="(items,indexs,keys) in item.son" :key="items.mid" :value="items.mid">{{items.label}}</a-checkbox>
  26. <hr/>
  27. </div>
  28. </div>
  29. </a-checkbox-group>
  30. </a-form-item>
  31. </a-form>
  32. </a-modal>
  33. <a-table :dataSource="data.dataSource" :columns="data.columns" :rowSelection="rowSelection">
  34. <template #bodyCell="{ text, record, index, column }">
  35. <template v-if="column.dataIndex=='sex'">
  36. <span v-if="record.sex == 1"></span>
  37. <span v-if="record.sex == 2"></span>
  38. </template>
  39. <template v-if="column.dataIndex=='status'">
  40. <span v-if="record.status == 1" style="color:green;">开启</span>
  41. <span v-if="record.status == 0" style="color:red;">关闭</span>
  42. <a-button type="default" @click="edit( record.group_id )">修改</a-button>
  43. </template>
  44. </template>
  45. </a-table>
  46. </template>
  47. <script>
  48. import { reactive, toRef } from '@vue/reactivity';
  49. import { AdminGroupLists,AdminMenuAdd,AdminMenuLists } from '../network/index.js';
  50. import { message,Modal } from "ant-design-vue";
  51. export default {
  52. setup() {
  53. const rowSelection = {
  54. type : "radio" ,
  55. onChange(selectedRowKeys, selectedRows) {
  56. console.log(selectedRowKeys,selectedRows);
  57. data.select_id = selectedRowKeys[0];
  58. data.select_data = selectedRows[0];
  59. }
  60. };
  61. const data = reactive({
  62. select_id : 0,
  63. // columns 表单头
  64. columns: [
  65. {
  66. title: "ID", // 是显示在表单头上的名字
  67. dataIndex: "group_id", // 对应接口返回的字段名,就是key
  68. },
  69. {
  70. title: "部门名",
  71. dataIndex: "group_name"
  72. },
  73. {
  74. title: "状态",
  75. dataIndex: "status"
  76. }
  77. ],
  78. dataSource: [],
  79. menu: [],
  80. addModal : false,
  81. b_status : 1,
  82. title : "修改",
  83. select_data : []
  84. })
  85. const formData = reactive({
  86. group_name : '',
  87. rights : '',
  88. });
  89. const add = (e)=>{
  90. if(e == 2){
  91. if(data.select_id == 0){
  92. message.warning('请您选择一条数据');
  93. return false;
  94. }
  95. data.title = "修改";
  96. formData.group_name = data.select_data.group_name;
  97. formData.rights = data.select_data.rights;
  98. }else{
  99. data.title = "添加";
  100. }
  101. data.b_status = e;
  102. data.addModal = true;
  103. }
  104. // 模态框确认按钮
  105. const add_ok = ()=>{
  106. // 可以在这里判断form表单的数据,不能为空。
  107. // 减少服务器压力,必然的。
  108. // 但是后端接口,也要判断。
  109. // 前端比较多,如果不是你写的前端呢?安卓和ios,它们在传值的时候没有判断
  110. // 那么后端接口就会吃大亏。
  111. if(data.select_id == 0){
  112. formData.group_id = 0;
  113. }else{
  114. formData.group_id = data.select_data.group_id;
  115. }
  116. AdminMenuAdd(formData).then( (res)=>{
  117. console.log(res);
  118. if(res.code == 0){
  119. message.success(res.msg);
  120. data.addModal = false;
  121. AdminGroupLists().then( (res)=>{
  122. data.dataSource = res.data.group;
  123. data.menu = res.data.menu;
  124. } )
  125. }else{
  126. message.warning(res.msg);
  127. }
  128. } )
  129. }
  130. AdminGroupLists().then( (res)=>{
  131. data.dataSource = res.data.group;
  132. data.menu = res.data.menu;
  133. } )
  134. return {
  135. data,
  136. rowSelection,
  137. add,
  138. formData,
  139. add_ok,
  140. };
  141. }
  142. };
  143. </script>

0525\antd\src\network\index.js

  1. import {request} from "./request.js";
  2. export function AdminUserLists(data={}){
  3. return request( {
  4. method : "POST",
  5. url : "Index/admin_user_lists",
  6. data
  7. } )
  8. }
  9. export function AdminUserAdd(data={}){
  10. return request( {
  11. method : "POST",
  12. url : "Index/admin_user_add",
  13. data
  14. } )
  15. }
  16. export function AdminUserDel(data={}){
  17. return request( {
  18. method : "POST",
  19. url : "Index/admin_user_del",
  20. data
  21. } )
  22. }
  23. export function AdminMenuLists(data={}){
  24. return request( {
  25. method : "POST",
  26. url : "Index/admin_menu_lists",
  27. data
  28. } )
  29. }
  30. export function AdminIndexLists(data={}){
  31. return request( {
  32. method : "POST",
  33. url : "Index/admin_index_lists",
  34. data
  35. } )
  36. }
  37. export function AdminGroupLists(data={}){
  38. return request( {
  39. method : "POST",
  40. url : "Index/admin_group_lists",
  41. data
  42. } )
  43. }
  44. export function AdminMenuAdd(data={}){
  45. return request( {
  46. method : "POST",
  47. url : "Index/admin_menu_add",
  48. data
  49. } )
  50. }

0525\antd\src\router\index.js

  1. import { createRouter, createWebHashHistory } from "vue-router";
  2. import Index from "../views/Index.vue";
  3. import UserLists from "../views/UserLists.vue";
  4. import MenuLists from "../views/MenuLists.vue";
  5. import GroupLists from "../views/GroupLists.vue";
  6. const routes = [
  7. {
  8. path: "/",
  9. alias: "/index",
  10. name: "Index",
  11. component: Index,
  12. meta: {
  13. title: "首页",
  14. }
  15. },
  16. {
  17. path: "/user_lists",
  18. name: "UserLists",
  19. component: UserLists,
  20. meta: {
  21. title: "用户列表"
  22. }
  23. },
  24. {
  25. path: "/menu_lists",
  26. name: "MenuLists",
  27. component: MenuLists,
  28. meta: {
  29. title: "菜单列表"
  30. }
  31. },
  32. {
  33. path: "/group_lists",
  34. name: "GroupLists",
  35. component: GroupLists,
  36. meta: {
  37. title: "权限列表"
  38. }
  39. }
  40. ];
  41. const router = createRouter({
  42. history: createWebHashHistory(process.env.BASE_URL),
  43. routes,
  44. });
  45. router.beforeEach((to) => {
  46. document.title = to.meta.title;
  47. });
  48. export default router;

0525\tp\app\admin\controller\Index.php

  1. <?php
  2. namespace app\admin\controller;
  3. use think\facade\Db;
  4. use think\facade\Request;
  5. class Index
  6. {
  7. public function __construct(){
  8. // 使用php的header函数,设置为*,全部能访问
  9. header("Access-Control-Allow-Origin:*");
  10. }
  11. public function admin_index_lists(){
  12. $user = Db::table('bew_admin_user')->where('uid',1)->find();
  13. $group = Db::table('bew_admin_user_group')->where('group_id',$user['group_id'])->find();
  14. $rights = json_decode($group['rights'],true);
  15. $menu = Db::table('bew_admin_sys_menu')->where('mid','in',$rights)->where('status',1)->order('sort DESC')->select()->toArray();
  16. $tmp = [];
  17. foreach($menu as $k=>&$v){
  18. if($v['parent_id'] == 0 ){
  19. $v['key'] = $k;
  20. $tmp[$v['mid']] = $v;
  21. }else{
  22. $v['key'] = $k;
  23. $tmp[$v['parent_id']]['son'][] = $v;
  24. }
  25. }
  26. echo json_encode([
  27. 'code' => 0,
  28. 'msg' => '成功',
  29. 'data' => [
  30. 'menu' => $tmp
  31. ]
  32. ]);
  33. }
  34. public function admin_user_lists()
  35. {
  36. $user = Db::table('bew_admin_user')->select()->toArray();
  37. foreach($user as &$v){
  38. $v['key'] = $v['uid']; // 前端用到的字段,key,可以让多选框,选中一条数据。必要的,只要是唯一的就可以用
  39. $v['time_last_s'] = date('Y-m-d H:i:s',$v['time_last']);
  40. }
  41. echo json_encode([
  42. 'code' => 0,
  43. 'msg' => '成功',
  44. 'data' => $user
  45. ]);
  46. }
  47. public function admin_user_add(){
  48. $account = input('post.account');
  49. if(empty($account)){
  50. echo json_encode([
  51. 'code' => 1,
  52. 'msg' => '请输入账号'
  53. ]);
  54. exit;
  55. }
  56. $password = input('post.password');
  57. $name = input('post.name');
  58. $phone = input('post.phone');
  59. $qq = input('post.qq');
  60. $sex = input('post.sex',1);
  61. $data = [
  62. 'account' => $account,
  63. 'password' => md5($password),
  64. 'name' => $name,
  65. 'phone' => $phone,
  66. 'qq' => $qq,
  67. 'sex' => $sex,
  68. ];
  69. $uid = input('post.uid',0);
  70. if($uid == 0){
  71. $data['time_add'] = time();
  72. if(empty($password)){
  73. echo json_encode([
  74. 'code' => 1,
  75. 'msg' => '请输入密码'
  76. ]);
  77. exit;
  78. }
  79. $data['password'] = md5($password);
  80. $insert = Db::table('bew_admin_user')->insert($data);
  81. if(empty($insert)){
  82. echo json_encode([
  83. 'code' => 1,
  84. 'msg' => '添加失败'
  85. ]);
  86. exit;
  87. }
  88. echo json_encode([
  89. 'code' => 0,
  90. 'msg' => '添加成功'
  91. ]);
  92. }else{
  93. if(!empty($password)){
  94. $data['password'] = md5($password);
  95. }
  96. $update = Db::table('bew_admin_user')->where('uid',$uid)->update($data);
  97. if(empty($update)){
  98. echo json_encode([
  99. 'code' => 1,
  100. 'msg' => '修改失败'
  101. ]);
  102. exit;
  103. }
  104. echo json_encode([
  105. 'code' => 0,
  106. 'msg' => '修改成功'
  107. ]);
  108. }
  109. }
  110. public function admin_user_del(){
  111. $uid = input('post.uid');
  112. $delete = Db::table('bew_admin_user')->where('uid',$uid)->delete();
  113. if(empty($delete)){
  114. echo json_encode([
  115. 'code' => 1,
  116. 'msg' => '删除失败'
  117. ]);
  118. }
  119. echo json_encode([
  120. 'code' => 0,
  121. 'msg' => '删除成功'
  122. ]);
  123. }
  124. public function admin_menu_lists(){
  125. $lists = Db::table('bew_admin_sys_menu')->order('sort DESC')->select()->toArray();
  126. $tmp = [];
  127. foreach($lists as $k=>&$v){
  128. if($v['parent_id'] == 0 ){
  129. $v['key'] = $k;
  130. $tmp[$v['mid']] = $v;
  131. }else{
  132. $v['key'] = $k;
  133. $tmp[$v['parent_id']]['son'][] = $v;
  134. }
  135. }
  136. echo json_encode([
  137. 'code' => 0,
  138. 'msg' => '成功',
  139. 'data' => array_merge($tmp)
  140. ]);
  141. }
  142. public function admin_group_lists(){
  143. $group = Db::table('bew_admin_user_group')->select()->toArray();
  144. foreach($group as &$v){
  145. $v['key'] = $v['group_id'];
  146. }
  147. $lists = Db::table('bew_admin_sys_menu')->order('sort DESC')->select()->toArray();
  148. $tmp = [];
  149. foreach($lists as $k=>&$v){
  150. if($v['parent_id'] == 0 ){
  151. $v['key'] = $k;
  152. $tmp[$v['mid']] = $v;
  153. }else{
  154. $v['key'] = $k;
  155. $tmp[$v['parent_id']]['son'][] = $v;
  156. }
  157. }
  158. echo json_encode([
  159. 'code' => 0,
  160. 'msg' => '成功',
  161. 'data' => [
  162. 'group' => $group,
  163. 'menu' => $tmp
  164. ]
  165. ]);
  166. }
  167. public function admin_menu_add(){
  168. $group_id = input('post.group_id');
  169. $rights = input('post.rights');
  170. $group_name = input('post.group_name');
  171. $update = Db::table('bew_admin_user_group')->where('group_id',$group_id)->update([
  172. 'group_name' => $group_name,
  173. 'rights' => json_encode($rights)
  174. ]);
  175. if(empty($update)){
  176. echo json_encode([
  177. 'code'=>1,
  178. 'msg'=>'修改失败'
  179. ]);
  180. exit;
  181. }
  182. echo json_encode([
  183. 'code'=>0,
  184. 'msg'=>'成功'
  185. ]);
  186. }
  187. }
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!