神仙都没用 1 năm trước cách đây
mục cha
commit
b1981630a7

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 686 - 564
build/cool/eps.d.ts


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
build/cool/eps.json


+ 2 - 2
src/config/proxy.ts

@@ -1,7 +1,7 @@
 export const proxy = {
 	"/dev/": {
-		target: "http://127.0.0.1:9009",
-		// target: "http://192.168.0.112:9009",
+		// target: "http://127.0.0.1:9009",
+		target: "http://192.168.0.112:8001",
 		// target: "https://dev-admin.cool-js.cloud",
 		changeOrigin: true,
 		rewrite: (path: string) => path.replace(/^\/dev/, "")

+ 1 - 3
src/modules/helper/types/index.d.ts

@@ -30,11 +30,9 @@ export declare interface EpsData {
 	[key: string]: EpsModule[];
 }
 
-export declare type CodeType = "node-entity" | "node-controller" | "node-service" | "vue";
-
 export interface CodeItem {
 	label: string;
-	value: CodeType;
+	value: string;
 	content: string;
 	[key: string]: any;
 }

+ 33 - 17
src/modules/helper/views/ai-code.vue

@@ -217,6 +217,12 @@
 										<download />
 									</el-icon>
 								</el-tooltip>
+
+								<el-tooltip content="复制代码">
+									<el-icon @click="code.copy()">
+										<copy-document />
+									</el-icon>
+								</el-tooltip>
 							</div>
 						</div>
 
@@ -271,7 +277,7 @@ import {
 	Back,
 	ArrowRightBold,
 	Loading,
-	CirclePlusFilled,
+	CopyDocument,
 	QuestionFilled
 } from "@element-plus/icons-vue";
 import { ElMessage, ElMessageBox } from "element-plus";
@@ -280,15 +286,17 @@ import { useMenu, useAi } from "../hooks";
 import { isDev } from "/@/config";
 import { useForm } from "@cool-vue/crud";
 import * as monaco from "monaco-editor";
-import { sleep } from "/@/cool/utils";
+import { sleep, storage } from "/@/cool/utils";
 import dayjs from "dayjs";
 import { nextTick } from "vue";
 import type { CodeItem } from "../types";
+import { useClipboard } from "@vueuse/core";
 
 const { service, refs, setRefs, router } = useCool();
 const menu = useMenu();
 const ai = useAi();
 const Form = useForm();
+const { copy } = useClipboard();
 
 // 编辑器样式
 monaco.editor.defineTheme("ai-code--dark", {
@@ -312,7 +320,7 @@ const form = reactive({
 // 执行步骤
 const step = reactive({
 	loading: false,
-	value: "start",
+	value: "coding",
 	list: ["start", "enter", "form", "coding"],
 
 	async next() {
@@ -368,10 +376,10 @@ const code = reactive({
 	active: "",
 
 	// 代码列表
-	list: [] as CodeItem[],
+	list: (storage.get("ai-code.list") || []) as CodeItem[],
 
 	// 其他数据
-	data: {} as any,
+	data: (storage.get("ai-code.data") || {}) as any,
 
 	// 日志
 	logs: [] as any[],
@@ -488,14 +496,11 @@ const code = reactive({
 		const item = code.add("Vue 页面", "vue");
 
 		code.data = {
-			...form,
 			router: "",
 			prefix: "",
 			path: "",
-			module: "",
 			fileName: "",
 			className: "",
-			other: "",
 			columns: [],
 			api: [
 				{
@@ -522,7 +527,9 @@ const code = reactive({
 					path: "/list",
 					summary: "列表查询"
 				}
-			]
+			],
+			...form,
+			name: form.entity
 		};
 
 		code.tips("Vue 代码生成中");
@@ -625,6 +632,17 @@ const code = reactive({
 				}
 			}, 10);
 		});
+	},
+
+	copy() {
+		copy(code.getContent(code.active)!);
+		code.save();
+		ElMessage.success("复制成功");
+	},
+
+	save() {
+		storage.set("ai-code.list", code.list);
+		storage.set("ai-code.data", code.data);
 	}
 });
 
@@ -781,9 +799,11 @@ function createFile() {
 			saveButtonText: "开始创建"
 		},
 		on: {
-			submit(data, { close, done }) {
+			submit(data, { close }) {
 				code.tips("创建 Vue 文件中,过程可能会发生页面及服务重启");
 
+				close();
+
 				// 添加菜单、权限
 				menu.create({
 					code: code.getContent("vue"),
@@ -791,8 +811,6 @@ function createFile() {
 					...data
 				})
 					.then((create) => {
-						code.tips("创建后端文件中");
-
 						// 创建后端文件
 						service.base.sys.menu.create({
 							...form,
@@ -804,23 +822,21 @@ function createFile() {
 
 						// 每3s检测服务状态
 						const timer = setInterval(() => {
-							code.tips("检测服务中");
+							code.tips("检测后端服务是否启动");
 
 							service
 								.request({
 									url: "/"
 								})
 								.then(() => {
+									code.tips("文件创建成功");
 									ElMessage.success("文件创建成功");
 									clearInterval(timer);
-									close();
 									create();
 								});
 						}, 3000);
 					})
-					.catch(() => {
-						done();
-					});
+					.catch(() => null);
 			}
 		}
 	});

+ 138 - 0
src/modules/user/views/address.vue

@@ -0,0 +1,138 @@
+<template>
+	<cl-crud ref="Crud">
+		<cl-row>
+			<!-- 刷新按钮 -->
+			<cl-refresh-btn />
+			<!-- 新增按钮 -->
+			<cl-add-btn />
+			<!-- 删除按钮 -->
+			<cl-multi-delete-btn />
+			<cl-flex1 />
+			<!-- 关键字搜索 -->
+			<cl-search-key />
+		</cl-row>
+
+		<cl-row>
+			<!-- 数据表格 -->
+			<cl-table ref="Table" />
+		</cl-row>
+
+		<cl-row>
+			<cl-flex1 />
+			<!-- 分页控件 -->
+			<cl-pagination />
+		</cl-row>
+
+		<!-- 新增、编辑 -->
+		<cl-upsert ref="Upsert" />
+	</cl-crud>
+</template>
+
+<script lang="ts" name="user-address" setup>
+import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+
+const { service } = useCool();
+
+// cl-upsert
+const Upsert = useUpsert({
+	items: [
+		{
+			label: "用户ID",
+			prop: "userId",
+			hook: "number",
+			component: { name: "el-input-number" },
+			required: true
+		},
+		{
+			label: "用户名",
+			prop: "username",
+			component: { name: "el-input", props: { clearable: true } },
+			required: true
+		},
+		{
+			label: "收货人",
+			prop: "receiver",
+			component: { name: "el-input", props: { clearable: true } },
+			required: true
+		},
+		{
+			label: "手机号",
+			prop: "phone",
+			component: { name: "el-input", props: { clearable: true } },
+			required: true
+		},
+		{
+			label: "省市区",
+			prop: "pca",
+			hook: "pca",
+			component: { name: "cl-distpicker" },
+			required: true
+		},
+		{
+			label: "收货地址",
+			prop: "address",
+			component: { name: "el-input", props: { type: "textarea", rows: 4 } },
+			required: true
+		},
+		{
+			label: "是否默认",
+			prop: "isDefault",
+			flex: false,
+			component: { name: "cl-switch" },
+			required: true
+		}
+	]
+});
+
+// cl-table
+const Table = useTable({
+	columns: [
+		{ type: "selection" },
+		{ label: "用户ID", prop: "userId", minWidth: 140 },
+		{ label: "用户名", prop: "username", minWidth: 140 },
+		{ label: "收货人", prop: "receiver", minWidth: 140 },
+		{ label: "手机号", prop: "phone", minWidth: 140 },
+		{
+			label: "省市区",
+			prop: "province",
+			minWidth: 160,
+			formatter(row) {
+				return row.province + "-" + row.city + "-" + row.district;
+			}
+		},
+		{ label: "收货地址", prop: "address", showOverflowTooltip: true, minWidth: 200 },
+		{
+			label: "是否默认",
+			prop: "isDefault",
+			minWidth: 100,
+			component: { name: "cl-switch" }
+		},
+		{
+			label: "创建时间",
+			prop: "createTime",
+			minWidth: 170,
+			sortable: "custom",
+			component: { name: "cl-date-text" }
+		},
+		{
+			label: "更新时间",
+			prop: "updateTime",
+			minWidth: 170,
+			sortable: "custom",
+			component: { name: "cl-date-text" }
+		},
+		{ type: "op", buttons: ["edit", "delete"] }
+	]
+});
+
+// cl-crud
+const Crud = useCrud(
+	{
+		service: service.user.address
+	},
+	(app) => {
+		app.refresh();
+	}
+);
+</script>

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác