lzj500 пре 4 година
родитељ
комит
82d6f74e67

+ 1 - 0
.gitignore

@@ -82,3 +82,4 @@ fabric.properties
 # sftp configuration file
 sftp-config.json
 
+/uniapp/node_modules

+ 74 - 1
README.md

@@ -1,3 +1,76 @@
 # yckj_framework
 
-宇宸项目基础框架
+宇宸项目基础框架
+
+### 项目目录说明 
+|-- thinkphp6  后端项目,基于thinkPHP6, 
+|-- d2-admin  后台前端项目,基于d2admin简化版本
+|-- uniapp 移动端前端项目,基于uniapp
+
+
+
+### 项目配置
+##### d2admin
+基于以下配置,通过使用vscode作为编辑 器,可以实现保存代码时自动 补全和自动格式化功能。由于各种组件eslint编码规范不一致,是否使用由个人决定
+###### .prettierrc
+```
+{
+    "printWidth": 1000,
+    "tabWidth": 2,
+    "useTabs": true,
+    "singleQuote": false,
+    "semi": true,
+    "trailingComma": "none",
+    "bracketSpacing": true
+}
+```
+######  .vscode/.settings.json
+```
+{
+    "editor.lineNumbers": "on", //开启行数提示
+    "editor.quickSuggestions": {
+        //开启自动显示建议
+        "other": true,
+        "comments": true,
+        "strings": true
+    }, //制表符符号eslint
+    "editor.formatOnSave": true, //每次保存自动格式化
+    // "eslint.autoFixOnSave": true, // 每次保存的时候将代码按eslint格式进行修复
+    "editor.codeActionsOnSave": {
+        "source.fixAll": true
+    },
+    "prettier.eslintIntegration": true, //让prettier使用eslint的代码格式进行校验
+    "prettier.semi": true, //去掉代码结尾的分号
+    "prettier.singleQuote": false, //使用带引号替代双引号
+    "javascript.format.insertSpaceBeforeFunctionParenthesis": true, //让函数(名)和后面的括号之间加个空格
+    "vetur.format.defaultFormatter.html": "js-beautify-html", //格式化.vue中html
+    "vetur.format.defaultFormatter.js": "vscode-typescript", //让vue中的js按编辑器自带的ts格式进行格式化
+    "vetur.format.defaultFormatterOptions": {
+        "js-beautify-html": {
+            "wrap_attributes": "force-aligned" //属性强制折行对齐
+        }
+    },
+    "eslint.validate": [
+        "javascript",
+        "javascriptreact",
+        "html",
+        "vue"
+    ],
+    "eslint.workingDirectories": []
+}
+
+```
+######  .eslintignore 忽略js和vue文件
+```
+**/*.js
+**/*.vue
+```
+### 相关知识
+thinkphp文档: [http://kancloud.cn/manual/thinkphp6_0/content](http://kancloud.cn/manual/thinkphp6_0/content)
+d2admin文档: [https://d2.pub/zh/doc/d2-admin/](https://d2.pub/zh/doc/d2-admin/)
+uniapp文档: [https://uniapp.dcloud.io/](https://uniapp.dcloud.io/)
+[文档:d2admin修改组件默认大小.note](http://note.youdao.com/noteshare?id=7aa4fdbbac32ee7683c6f835ccec67a2&sub=240C6888D9534DB5A8207A3E2BF5FFA3)
+[文档:d2admin不使用框架页面的方法.note](http://note.youdao.com/noteshare?id=51bad13c3e3d8ef94ab7b6015c2e2e01&sub=3C96C1300A474BB6815E6E3CB8135E20)
+[文档:d2admin修改环境变量.note](http://note.youdao.com/noteshare?id=566eb5adb8a6425ceb5f3b01f51df9d1&sub=5FE4BE2B48DD4E6CBE470C03F04B2DCC)
+[文档:d2admin 部署在相对路径.note](http://note.youdao.com/noteshare?id=9249cc2c90291fd0193cb1f314c2daa4&sub=7A16FE8AA54B42ED9317DFA7FDD4B11F)
+

+ 0 - 3
d2-admin/src/libs/model/demo.js

@@ -30,9 +30,6 @@ class Demo {
 
 
   //= ===================数据计算=======================
-  dateToPeriodId () {
-
-  }
 
   //= ===================END 数据计算========================
 

+ 1 - 1
d2-admin/src/libs/net/urls.js

@@ -1,5 +1,5 @@
 const url = {
-  // 账套类
+  // 列表
   demoIndex: '/index/demo/index',
 };
 export default url;

+ 1 - 1
d2-admin/src/store/modules/d2admin/modules/size.js

@@ -59,7 +59,7 @@ export default {
       state.value = await dispatch('d2admin/db/get', {
         dbName: 'sys',
         path: 'size.value',
-        defaultValue: 'default',
+        defaultValue: 'mini',//默认小尺寸
         user: true
       }, { root: true })
       // 应用

+ 7 - 2
thinkphp6/app/common/controller/Base.php

@@ -90,8 +90,10 @@ class Base
             validate($class)->check($param);
         } catch (ValidateException $e) {
             // 验证失败 输出错误信息
-            $this->error($e->getError());
+            return returnFormat(999,$e->getError());
+            //$this->error($e->getError());
         }
+        return returnFormat(0);
     }
     /**
      * 接口签名校验
@@ -100,10 +102,13 @@ class Base
     {
         $param = request()->param();
 
-        $this->autoValid([
+        $validRes= $this->autoValid([
             "_timestamp" => "require",
             "_sign" => "require",
         ], $param);
+        if($validRes['code']!==0){
+            return $validRes;
+        }
         $effectMinute=2;//有效时间,分钟数
         if (!($param["_timestamp"] >= time() - $effectMinute * 60 && $param["_timestamp"] <= time() + $effectMinute * 60)) {
             return returnFormat(9004);

+ 1 - 0
thinkphp6/app/index/controller/Base.php

@@ -32,6 +32,7 @@ class Base extends \app\common\controller\Base
     public function __construct()
     {
         parent::__construct();//继承父类构造函数
+        $this->checkSignOpen=true;
         if ($this->checkSignOpen) {
            $checkRes=$this->checkApiSign();
            if($checkRes['code']!==0){

+ 1 - 1
thinkphp6/app/index/controller/Demo.php

@@ -9,7 +9,7 @@
 namespace app\index\controller;
 
 
-class Demo extends IndexBase
+class Demo extends Base
 {
     public function index(){
         $demoM=new \app\common\model\Demo();

+ 0 - 25
thinkphp6/app/index/controller/IndexBase.php

@@ -1,25 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: yckj_lzj
- * Date: 2020-05-21
- * Time: 11:49
- */
-
-namespace app\index\controller;
-
-
-/**
- * 自己实现的控制器基类,建议需要用到token的控制器继承
- * Class IndexBase
- * @package app\index\controller
- */
-class IndexBase extends Base
-{
-    public function __construct()
-    {
-        parent::__construct();
-
-    }
-
-}

+ 21 - 20
thinkphp6/demo.sql

@@ -1,7 +1,7 @@
 /*
 Navicat MySQL Data Transfer
 
-Source Server         : 0_localhost
+Source Server         : 0localhost
 Source Server Version : 50726
 Source Host           : localhost:3306
 Source Database       : demo
@@ -10,7 +10,7 @@ Target Server Type    : MYSQL
 Target Server Version : 50726
 File Encoding         : 65001
 
-Date: 2020-05-21 12:18:11
+Date: 2021-04-16 00:44:04
 */
 
 SET FOREIGN_KEY_CHECKS=0;
@@ -26,27 +26,28 @@ CREATE TABLE `demo` (
   `content` text COMMENT '内容',
   `create_time` datetime DEFAULT NULL COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+  `delete_time` varchar(255) DEFAULT NULL COMMENT '删除标志',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4;
 
 -- ----------------------------
 -- Records of demo
 -- ----------------------------
-INSERT INTO `demo` VALUES ('1', '标题1', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('3', '标题3', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('4', '标题4', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('5', '标题5', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('6', '标题6', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('7', '标题7', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('8', '标题8', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('9', '标题9', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('10', '标题10', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('11', '标题11', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('12', '标题12', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44');
-INSERT INTO `demo` VALUES ('13', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:13:46', '2020-05-21 12:13:46');
-INSERT INTO `demo` VALUES ('14', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:00', '2020-05-21 12:14:00');
-INSERT INTO `demo` VALUES ('15', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:13', '2020-05-21 12:14:13');
-INSERT INTO `demo` VALUES ('16', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:29', '2020-05-21 12:14:29');
-INSERT INTO `demo` VALUES ('17', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:35', '2020-05-21 12:14:35');
-INSERT INTO `demo` VALUES ('18', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:15:10', '2020-05-21 12:15:10');
-INSERT INTO `demo` VALUES ('19', '标题录入2', '作者', '这是内容', '2020-05-21 12:16:31', '2020-05-21 12:16:31');
+INSERT INTO `demo` VALUES ('1', '标题1', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('3', '标题3', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('4', '标题4', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('5', '标题5', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('6', '标题6', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('7', '标题7', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('8', '标题8', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('9', '标题9', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('10', '标题10', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('11', '标题11', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('12', '标题12', '作者1', '内容1', '2020-05-21 11:27:41', '2020-05-21 11:27:44', null);
+INSERT INTO `demo` VALUES ('13', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:13:46', '2020-05-21 12:13:46', null);
+INSERT INTO `demo` VALUES ('14', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:00', '2020-05-21 12:14:00', null);
+INSERT INTO `demo` VALUES ('15', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:13', '2020-05-21 12:14:13', null);
+INSERT INTO `demo` VALUES ('16', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:29', '2020-05-21 12:14:29', null);
+INSERT INTO `demo` VALUES ('17', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:14:35', '2020-05-21 12:14:35', null);
+INSERT INTO `demo` VALUES ('18', '标题录入1 ', '作者', '这是内容', '2020-05-21 12:15:10', '2020-05-21 12:15:10', null);
+INSERT INTO `demo` VALUES ('19', '标题录入2', '作者', '这是内容', '2020-05-21 12:16:31', '2020-05-21 12:16:31', null);

+ 22 - 0
uniapp/.gitignore

@@ -0,0 +1,22 @@
+.DS_Store
+.hbuilderx
+node_modules
+unpackage
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 9 - 0
uniapp/config.js

@@ -0,0 +1,9 @@
+const config = {
+	host: "http://local.lzj/yckj_framework/thinkphp6/public/index.php", //请求地址
+	api_sign_key:"32a1ff74699ff2d6ce4c497cb94cb5c8",//接口签名参数
+};
+if (process.env.NODE_ENV === 'development') {
+	//开发环境配置
+	config.host = "http://local.lzj/yckj_framework/thinkphp6/public/index.php";
+} 
+export default config;

+ 71 - 0
uniapp/libs/model/demo.js

@@ -0,0 +1,71 @@
+const tagInfo = '[/libs/model/demo.js]:';
+import to from 'await-to-js';
+import urls from '@/libs/net/urls';
+import {request} from "@/libs/net/request.js";
+
+
+/**
+ * 模型通过单例模式实现,不要直接实例化,要么调用静态方法,要么通过 getInstance()获取引用
+ */
+class Demo {
+  // ES6类的静态方法(只能直接由类名调用的方法):static getInstance
+  // ES6类的静态属性:直接挂载在类名上的方法,如:Db.instance()
+  static instance;
+  initFinish = false;
+  //=======================基础方法====================
+  /**
+   * 获取列表方法(具体参数返回,可根据实际业务修改)
+   * @returns 
+   */
+  async getList () {
+    let url = urls.demoIndex;
+    let param = {};
+
+    let [err, res] = await to(request(url, param));
+    if (err) {
+      return err;
+    }
+    return res;
+  }
+
+
+  //= ===================数据计算=======================
+
+
+  //= ===================END 数据计算========================
+
+  //= ====================私有方法=====================
+
+  /**
+   * 
+   * @returns 获取引用
+   */
+  static getInstance () {
+    if (!Demo.instance) {
+      Demo.instance = new Demo();
+      return Demo.instance;
+    }
+    return Demo.instance;
+  }
+
+  /**
+   * 构造函数
+   */
+  constructor() {
+    this.init();
+  }
+
+  /**
+   * 类实例初始化
+   */
+  async init () {
+    console.log(tagInfo + '初始化');
+    this.initFinish = false;
+    //如果有初始化业务,就写在这里
+    this.initFinish = true;
+    console.log(tagInfo + '初始化完成');
+  }
+  //= ====================END 私有方法=====================
+
+}
+export default Demo;

+ 39 - 0
uniapp/libs/net/request.js

@@ -0,0 +1,39 @@
+import config from '@/config.js';
+import sign from "@/libs/net/sign.js";
+
+
+export function request(url, param, isShowLoading = "1", method = 'POST') {
+	if (isShowLoading) {
+		uni.showLoading({
+			title: '正在加载...'
+		})
+	}
+	param=sign(param);
+	let header = {};
+	// header['Current-Admin-Id'] = uni.getStorageSync('adminId');
+	// header['Current-School-Id'] = uni.getStorageSync('schoolId');
+	return new Promise((resolve, reject) => {
+		uni.request({
+			url: config.host + url,
+			data: param,
+			method: method,
+			header: header,
+			success(res) {
+				//console.log(res);
+				if (res.data.code === 0) { //找不到openid对应的用户
+					resolve(res.data);
+				} else if (res.data.code == 102) {
+					reject(res.data);
+				} else {
+					reject(res.data);
+				}
+			},
+			fail(err) {
+				reject(err);
+			},
+			complete() {
+				uni.hideLoading();
+			}
+		});
+	});
+}

+ 22 - 0
uniapp/libs/net/sign.js

@@ -0,0 +1,22 @@
+import md5 from 'js-md5';
+import config from "@/config.js";
+import util from '@/libs/util';
+const api_sign_secret = config.api_sign_key;
+const tagInfo = "/libs/net/sign.js";
+export default function (data) {
+  if (!data) {
+    data = {};
+  }
+  const timestamp = parseInt((new Date()).getTime() / 1000);
+
+
+  // console.log("timestamp,",timestamp,data);
+  data._timestamp = timestamp;
+  const sortData = {};
+  Object.keys(data).sort().forEach((key) => {
+    sortData[key] = util.string.parseString(data[key]);
+  });
+  console.log(tagInfo, JSON.stringify(sortData) + api_sign_secret);
+  sortData._sign = md5(JSON.stringify(sortData) + api_sign_secret);
+  return sortData;
+};

+ 5 - 0
uniapp/libs/net/urls.js

@@ -0,0 +1,5 @@
+const url = {
+  // 列表
+  demoIndex: '/index/demo/index',
+};
+export default url;

+ 7 - 0
uniapp/libs/util.js

@@ -0,0 +1,7 @@
+import stringHelper from "@/libs/util.string.js";
+const util = {
+
+  string: stringHelper,
+
+}
+export default util

+ 37 - 0
uniapp/libs/util.string.js

@@ -0,0 +1,37 @@
+/**
+ * 将对象每个元素都转成字符串
+ */
+function arrayStringVal(data) {
+  for (const index in data) {
+    data[index] = String(data[index]);
+  }
+  return data;
+}
+
+function parseString(obj) {
+  if (!obj && typeof obj !== 'undefined' && obj != 0) {
+    return '';
+  }
+  if (typeof obj === 'undefined') {
+    return '';
+  }
+  if (typeof obj === 'number' && isNaN(obj)) {
+    return '0';
+  }
+  return obj.toString();
+}
+
+function showPeriodNameById(periodId) {
+  const year = parseInt(periodId / 100);
+  let month = parseInt(periodId % 100);
+  month = month > 9 ? month : '0'.concat(month);
+  return year + '年第' + month + '期';
+}
+
+const stringHelper = {
+  arrayStringVal,
+  parseString,
+  showPeriodNameById
+};
+
+export default stringHelper;

+ 16 - 0
uniapp/package-lock.json

@@ -0,0 +1,16 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "await-to-js": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/await-to-js/download/await-to-js-3.0.0.tgz",
+      "integrity": "sha1-cJKZlBhWFvRnWpGvYWfrYcySho8="
+    },
+    "js-md5": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npm.taobao.org/js-md5/download/js-md5-0.7.3.tgz",
+      "integrity": "sha1-tPL7sLMnRV9ZjWcn447Ccs0Jw/I="
+    }
+  }
+}

+ 8 - 1
uniapp/pages/index/index.vue

@@ -3,11 +3,13 @@
 		<image class="logo" src="/static/logo.png"></image>
 		<view class="text-area">
 			<text class="title">{{title}}</text>
+			<button @click="testQuery">测试查询</button>
 		</view>
 	</view>
 </template>
 
 <script>
+	import Demo from "@/libs/model/demo.js";
 	export default {
 		data() {
 			return {
@@ -18,7 +20,12 @@
 
 		},
 		methods: {
-
+			async testQuery(){
+				let res = await Demo.getInstance().getList();
+				uni.showModal({
+					content:JSON.stringify(res)
+				})
+			}
 		}
 	}
 </script>