博客列表 >vue代码练习

vue代码练习

Blackeye
Blackeye原创
2022年06月27日 14:19:11417浏览


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. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议