UI适配后端大范围更新
This commit is contained in:
parent
83beb3513c
commit
bdabf5e452
9
env/.env
vendored
9
env/.env
vendored
@ -7,10 +7,11 @@ VITE_WX_APPID = 'wxf2c6d4b7361366b4'
|
||||
# h5部署网站的base,配置到 manifest.config.ts 里的 h5.router.base
|
||||
VITE_APP_PUBLIC_BASE=/acdr/
|
||||
|
||||
VITE_SERVER_BASEURL = 'http://47.99.70.12:28184/api'
|
||||
# VITE_SERVER_BASEURL = 'http://47.99.70.12:28184/api'
|
||||
# VITE_UPLOAD_BASEURL = 'http://47.99.70.12:28184'
|
||||
# VITE_SERVER_BASEURL = 'http://localhost:28184/api'
|
||||
VITE_WS_BASEURL = 'ws://47.99.70.12:28184/api'
|
||||
VITE_SERVER_BASEURL = 'http://localhost:48080/app-api'
|
||||
# VITE_WS_BASEURL = 'ws://47.99.70.12:28184/api'
|
||||
VITE_UPLOAD_BASEURL = 'http://localhost:28184'
|
||||
VITE_OSS_BASEURL = 'http://116.204.119.171:9000/linghe'
|
||||
|
||||
@ -25,8 +26,8 @@ SHOPRO_VERSION = v1.8.3
|
||||
SHOPRO_BASE_URL = http://api-dashboard.yudao.iocoder.cn
|
||||
|
||||
# 后端接口 - 测试环境(通过 process.env.NODE_ENV = development)
|
||||
# SHOPRO_DEV_BASE_URL = http://127.0.0.1:48080
|
||||
SHOPRO_DEV_BASE_URL = http://47.99.70.12:48080
|
||||
SHOPRO_DEV_BASE_URL = http://127.0.0.1:48080
|
||||
# SHOPRO_DEV_BASE_URL = http://47.99.70.12:48080
|
||||
### SHOPRO_DEV_BASE_URL = http://yunai.natapp1.cc
|
||||
|
||||
# 后端接口前缀(一般不建议调整)
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "宠屋",
|
||||
"appid": "H57F2ACE4",
|
||||
"appid": "__UNI__9D479DC",
|
||||
"description": "",
|
||||
"versionName": "1.0.0",
|
||||
"versionCode": "100",
|
||||
|
@ -12,7 +12,7 @@
|
||||
<view class="address-label">
|
||||
<view class="tag">{{ address.type }}</view>
|
||||
<view class="address-detail">
|
||||
{{ address.name }} {{ address.phone }} -
|
||||
{{ address.name }} {{ address.mobile }} -
|
||||
{{ `${address['province']}-${address['city']}-${address['district']}` }}
|
||||
</view>
|
||||
</view>
|
||||
|
@ -38,7 +38,7 @@ import { ref, onMounted, onUnmounted } from 'vue'
|
||||
import { httpGet, httpPost } from '@/utils/http'
|
||||
import { useUserStore } from '@/store/user'
|
||||
import TopBar from '@/components/TopBar.vue'
|
||||
import { imgUrl } from '@/utils/commUtils'
|
||||
import { imgUrl, toast, toPath } from "@/utils/commUtils";
|
||||
|
||||
const userStore = useUserStore()
|
||||
|
||||
@ -50,26 +50,15 @@ let timer = null
|
||||
const sendCode = async () => {
|
||||
if (countdown.value === 0) {
|
||||
if (!phoneNumber.value) {
|
||||
uni.showToast({
|
||||
title: '请输入手机号',
|
||||
icon: 'none',
|
||||
})
|
||||
toast('请输入手机号')
|
||||
return
|
||||
}
|
||||
console.log('发送验证码到', phoneNumber.value)
|
||||
const res = await httpGet('/public/getCode', { phone: phoneNumber.value })
|
||||
console.log(res)
|
||||
countdown.value = 60
|
||||
if (res.code == 200) {
|
||||
uni.showToast({
|
||||
title: res.message,
|
||||
icon: 'none',
|
||||
})
|
||||
if (res.code === 200) {
|
||||
toast(res.message)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.message,
|
||||
icon: 'none',
|
||||
})
|
||||
toast(res.message)
|
||||
}
|
||||
timer = setInterval(() => {
|
||||
countdown.value -= 1
|
||||
@ -96,29 +85,24 @@ const login = async () => {
|
||||
return
|
||||
}
|
||||
const res = await httpPost('/public/login', {}, { phone: phoneNumber.value, code: code.value })
|
||||
if (res.code == 200) {
|
||||
uni.showToast({
|
||||
title: res.message,
|
||||
icon: 'none',
|
||||
if (res.code === 200) {
|
||||
toast(res.message)
|
||||
const data = res.data
|
||||
userStore.setUserInfo({
|
||||
id: data.userId ,
|
||||
token: data.accessToken,
|
||||
expiresTime: data.expiresTime,
|
||||
refreshToken: data.refreshToken
|
||||
})
|
||||
userStore.setUserInfo({ token: res.data.userToken, shopLoginUser: res.data.shopLoginUser })
|
||||
const userRes = await httpGet('/user/userinfo')
|
||||
if (userRes.code == 200) {
|
||||
if (userRes.code === 200) {
|
||||
userStore.setUserInfo(userRes.data)
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index',
|
||||
})
|
||||
toPath('/')
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: userRes.message,
|
||||
icon: 'none',
|
||||
})
|
||||
toast(userRes.message || '登录失败请重新登录!')
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.message,
|
||||
icon: 'none',
|
||||
})
|
||||
toast(res.message || '登录失败请重新登录!')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@
|
||||
<view class="user-info text-sm text-gray-700 mb-4">
|
||||
<view>
|
||||
<text>下单用户:</text>
|
||||
{{ orderDetail.user.nickname }} ({{ orderDetail.user.phone }})
|
||||
{{ orderDetail.user.nickname }} ({{ orderDetail.user.mobile }})
|
||||
</view>
|
||||
<view>
|
||||
<text>用户地址:</text>
|
||||
|
@ -46,7 +46,7 @@
|
||||
</view>
|
||||
<view class="wd-cell" @click="goToBindPhone">
|
||||
<text class="text-gray-800">手机号绑定</text>
|
||||
<text class="text-gray-400 ml-auto">{{ sinfo.phone }}</text>
|
||||
<text class="text-gray-400 ml-auto">{{ sinfo.mobile }}</text>
|
||||
<wd-icon name="right" size="16" class="ml-2"></wd-icon>
|
||||
</view>
|
||||
<view class="wd-cell" @click="!sinfo.isAuth ? goToRealNameAuth() : toast('你已经实名了')">
|
||||
|
@ -3,8 +3,8 @@
|
||||
|
||||
// 字体文件
|
||||
@font-face {
|
||||
font-family: OPPOSANS;
|
||||
src: url('@/scss/font/OPPOSANS-M-subfont.ttf');
|
||||
// font-family: OPPOSANS;
|
||||
// src: url('@/scss/font/OPPOSANS-M-subfont.ttf');
|
||||
}
|
||||
.font-OPPOSANS {
|
||||
font-family: OPPOSANS;
|
||||
|
@ -7,7 +7,7 @@ import { httpGet } from "@/utils/http"
|
||||
export const getUserInfo = async () => {
|
||||
try {
|
||||
const userRes = await httpGet('/user/userinfo')
|
||||
if (userRes.code == 200) {
|
||||
if (userRes.code === 200) {
|
||||
useUserStore().setUserInfo(userRes.data)
|
||||
return userRes.data
|
||||
}
|
||||
|
@ -6,17 +6,16 @@ const initState = {
|
||||
avatar: '',
|
||||
id: null,
|
||||
name: '',
|
||||
phone: '',
|
||||
email: '',
|
||||
typeId: '',
|
||||
mobile: '',
|
||||
cardId: '',
|
||||
createTime: '',
|
||||
updateTime: '',
|
||||
token: '',
|
||||
sex: '',
|
||||
openid: '', // 微信openid,如果不为空就证明用户是用微信登录的
|
||||
isRealName: false,
|
||||
isPetNursery: false,
|
||||
shopLoginUser: null,
|
||||
expiresTime: '',
|
||||
refreshToken: '',
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore(
|
||||
|
@ -4,6 +4,7 @@ from tkinter import filedialog, scrolledtext, ttk
|
||||
from tkinter import Menu
|
||||
from PIL import Image
|
||||
|
||||
|
||||
# 搜索指定关键字的函数
|
||||
def search_keyword_in_files(directory, keyword, output_text):
|
||||
if not keyword:
|
||||
@ -12,18 +13,24 @@ def search_keyword_in_files(directory, keyword, output_text):
|
||||
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for file in files:
|
||||
if file.endswith(('.js', '.json', '.vue', '.ts', '.py', '.java', '.cpp')):
|
||||
if file.endswith(
|
||||
(".js", ".json", ".vue", ".ts", ".py", ".java", ".cpp", ".xml")
|
||||
):
|
||||
file_path = os.path.join(root, file)
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
count = content.count(keyword)
|
||||
if count > 0:
|
||||
output_text.insert(tk.END, f"在 {file_path} 中找到 '{keyword}',共 {count} 次\n")
|
||||
output_text.insert(
|
||||
tk.END,
|
||||
f"在 {file_path} 中找到 '{keyword}',共 {count} 次\n",
|
||||
)
|
||||
except Exception as e:
|
||||
output_text.insert(tk.END, f"读取文件 {file_path} 出错: {e}\n")
|
||||
output_text.insert(tk.END, "搜索完成。\n")
|
||||
|
||||
|
||||
# 找出不包含指定关键字的文件
|
||||
def find_files_without_keyword(directory, keyword, output_text):
|
||||
if not keyword:
|
||||
@ -32,17 +39,22 @@ def find_files_without_keyword(directory, keyword, output_text):
|
||||
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for file in files:
|
||||
if file.endswith(('.js', '.json', '.vue', '.ts', '.py', '.java', '.cpp')):
|
||||
if file.endswith(
|
||||
(".js", ".json", ".vue", ".ts", ".py", ".java", ".cpp", ".xml")
|
||||
):
|
||||
file_path = os.path.join(root, file)
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
if keyword not in content:
|
||||
output_text.insert(tk.END, f"'{keyword}' 未在文件 {file_path} 中找到。\n")
|
||||
output_text.insert(
|
||||
tk.END, f"'{keyword}' 未在文件 {file_path} 中找到。\n"
|
||||
)
|
||||
except Exception as e:
|
||||
output_text.insert(tk.END, f"读取文件 {file_path} 出错: {e}\n")
|
||||
output_text.insert(tk.END, "查找未包含关键字的文件完成。\n")
|
||||
|
||||
|
||||
# 替换文件内容中的指定字符串
|
||||
def replace_in_files(directory, search_text, replace_text, output_text):
|
||||
if not search_text or not replace_text:
|
||||
@ -51,20 +63,26 @@ def replace_in_files(directory, search_text, replace_text, output_text):
|
||||
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for file in files:
|
||||
if file.endswith(('.js', '.json', '.vue', '.ts', '.py', '.java', '.cpp')):
|
||||
if file.endswith(
|
||||
(".js", ".json", ".vue", ".ts", ".py", ".java", ".cpp", ".xml")
|
||||
):
|
||||
file_path = os.path.join(root, file)
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
if search_text in content:
|
||||
new_content = content.replace(search_text, replace_text)
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
with open(file_path, "w", encoding="utf-8") as f:
|
||||
f.write(new_content)
|
||||
output_text.insert(tk.END, f"在 {file_path} 中替换 '{search_text}' 为 '{replace_text}'\n")
|
||||
output_text.insert(
|
||||
tk.END,
|
||||
f"在 {file_path} 中替换 '{search_text}' 为 '{replace_text}'\n",
|
||||
)
|
||||
except Exception as e:
|
||||
output_text.insert(tk.END, f"处理文件 {file_path} 时出错: {e}\n")
|
||||
output_text.insert(tk.END, "替换完成。\n")
|
||||
|
||||
|
||||
# 转换指定颜色为透明色的功能
|
||||
def convert_color_to_transparent(image_path, color, output_text):
|
||||
img = Image.open(image_path)
|
||||
@ -83,10 +101,12 @@ def convert_color_to_transparent(image_path, color, output_text):
|
||||
img.save(new_path)
|
||||
output_text.insert(tk.END, f"处理后的图片保存为 '{new_path}'\n")
|
||||
|
||||
|
||||
# 清空输出框的函数
|
||||
def clear_output(output_text):
|
||||
output_text.delete(1.0, tk.END)
|
||||
|
||||
|
||||
# 添加右键菜单
|
||||
def add_right_click_menu(output_text):
|
||||
menu = Menu(output_text, tearoff=0)
|
||||
@ -97,6 +117,7 @@ def add_right_click_menu(output_text):
|
||||
|
||||
output_text.bind("<Button-3>", show_menu)
|
||||
|
||||
|
||||
# 创建GUI界面
|
||||
def create_gui():
|
||||
root = tk.Tk()
|
||||
@ -104,7 +125,7 @@ def create_gui():
|
||||
root.geometry("800x500")
|
||||
|
||||
notebook = ttk.Notebook(root)
|
||||
notebook.pack(fill='both', expand=True)
|
||||
notebook.pack(fill="both", expand=True)
|
||||
|
||||
search_frame = ttk.Frame(notebook)
|
||||
notebook.add(search_frame, text="搜索和替换")
|
||||
@ -121,8 +142,13 @@ def create_gui():
|
||||
keyword_entry.pack(pady=5)
|
||||
ttk.Label(left_frame_search, text="请输入要搜索的关键字:").pack(pady=5)
|
||||
|
||||
search_button = ttk.Button(left_frame_search, text="搜索文件夹",
|
||||
command=lambda: browse_directory_for_search(keyword_entry.get(), output_text_search))
|
||||
search_button = ttk.Button(
|
||||
left_frame_search,
|
||||
text="搜索文件夹",
|
||||
command=lambda: browse_directory_for_search(
|
||||
keyword_entry.get(), output_text_search
|
||||
),
|
||||
)
|
||||
search_button.pack(pady=5)
|
||||
|
||||
search_text_entry = ttk.Entry(left_frame_search)
|
||||
@ -133,12 +159,22 @@ def create_gui():
|
||||
replace_text_entry.pack(pady=5)
|
||||
ttk.Label(left_frame_search, text="请输入新文本:").pack(pady=5)
|
||||
|
||||
replace_button = ttk.Button(left_frame_search, text="替换文件夹中的内容",
|
||||
command=lambda: browse_directory_for_replace(search_text_entry.get(), replace_text_entry.get(), output_text_search))
|
||||
replace_button = ttk.Button(
|
||||
left_frame_search,
|
||||
text="替换文件夹中的内容",
|
||||
command=lambda: browse_directory_for_replace(
|
||||
search_text_entry.get(), replace_text_entry.get(), output_text_search
|
||||
),
|
||||
)
|
||||
replace_button.pack(pady=5)
|
||||
|
||||
search_missing_button = ttk.Button(left_frame_search, text="查找不包含关键字的文件",
|
||||
command=lambda: browse_directory_for_missing(keyword_entry.get(), output_text_search))
|
||||
search_missing_button = ttk.Button(
|
||||
left_frame_search,
|
||||
text="查找不包含关键字的文件",
|
||||
command=lambda: browse_directory_for_missing(
|
||||
keyword_entry.get(), output_text_search
|
||||
),
|
||||
)
|
||||
search_missing_button.pack(pady=5)
|
||||
|
||||
output_text_search = scrolledtext.ScrolledText(search_frame, width=70)
|
||||
@ -150,8 +186,13 @@ def create_gui():
|
||||
color_entry.pack(pady=5)
|
||||
ttk.Label(image_frame, text="请输入要透明化的颜色 (r,g,b):").pack(pady=5)
|
||||
|
||||
trans_button = ttk.Button(image_frame, text="使图片透明",
|
||||
command=lambda: browse_image_for_transparency(tuple(map(int, color_entry.get().split(','))), output_text_image))
|
||||
trans_button = ttk.Button(
|
||||
image_frame,
|
||||
text="使图片透明",
|
||||
command=lambda: browse_image_for_transparency(
|
||||
tuple(map(int, color_entry.get().split(","))), output_text_image
|
||||
),
|
||||
)
|
||||
trans_button.pack(pady=5)
|
||||
|
||||
output_text_image = scrolledtext.ScrolledText(image_frame, width=70)
|
||||
@ -162,11 +203,14 @@ def create_gui():
|
||||
note_text = scrolledtext.ScrolledText(note_frame, width=70)
|
||||
note_text.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
|
||||
|
||||
save_button = ttk.Button(note_frame, text="保存记事本", command=lambda: save_notes(note_text))
|
||||
save_button = ttk.Button(
|
||||
note_frame, text="保存记事本", command=lambda: save_notes(note_text)
|
||||
)
|
||||
save_button.pack(pady=10)
|
||||
|
||||
root.mainloop()
|
||||
|
||||
|
||||
# 辅助函数
|
||||
def browse_directory_for_search(keyword, output_text):
|
||||
directory = filedialog.askdirectory()
|
||||
@ -174,29 +218,38 @@ def browse_directory_for_search(keyword, output_text):
|
||||
output_text.insert(tk.END, f"正在 {directory} 中搜索关键字: '{keyword}'\n")
|
||||
search_keyword_in_files(directory, keyword, output_text)
|
||||
|
||||
|
||||
def browse_directory_for_replace(search_text, replace_text, output_text):
|
||||
directory = filedialog.askdirectory()
|
||||
if directory:
|
||||
output_text.insert(tk.END, f"在 {directory} 中将 '{search_text}' 替换为 '{replace_text}'\n")
|
||||
output_text.insert(
|
||||
tk.END, f"在 {directory} 中将 '{search_text}' 替换为 '{replace_text}'\n"
|
||||
)
|
||||
replace_in_files(directory, search_text, replace_text, output_text)
|
||||
|
||||
|
||||
def browse_directory_for_missing(keyword, output_text):
|
||||
directory = filedialog.askdirectory()
|
||||
if directory:
|
||||
output_text.insert(tk.END, f"正在 {directory} 中查找未包含关键字 '{keyword}' 的文件。\n")
|
||||
output_text.insert(
|
||||
tk.END, f"正在 {directory} 中查找未包含关键字 '{keyword}' 的文件。\n"
|
||||
)
|
||||
find_files_without_keyword(directory, keyword, output_text)
|
||||
|
||||
|
||||
def browse_image_for_transparency(color, output_text):
|
||||
image_path = filedialog.askopenfilename()
|
||||
if image_path:
|
||||
convert_color_to_transparent(image_path, color, output_text)
|
||||
|
||||
|
||||
def save_notes(note_text):
|
||||
file_path = filedialog.asksaveasfilename(defaultextension=".txt")
|
||||
if file_path:
|
||||
with open(file_path, 'w') as file:
|
||||
with open(file_path, "w") as file:
|
||||
file.write(note_text.get(1.0, tk.END))
|
||||
note_text.insert(tk.END, f"记事本已保存到 {file_path}\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_gui()
|
||||
|
Loading…
Reference in New Issue
Block a user