diff --git a/public/delta-gun-codes.html b/public/delta-gun-codes.html
new file mode 100644
index 0000000..06b0eea
--- /dev/null
+++ b/public/delta-gun-codes.html
@@ -0,0 +1,281 @@
+
+
+
+
+
+ 三角洲行动 · 改枪码速查复制
+
+
+
+
+
+
DELTA FORCE · GUN CODE
+
三角洲行动 · 改枪码速查
+
已收录 0 套配置,点击复制即可在游戏内粘贴使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/api/delta/delta-gun-code.js b/src/api/delta/delta-gun-code.js
new file mode 100644
index 0000000..e2dccf8
--- /dev/null
+++ b/src/api/delta/delta-gun-code.js
@@ -0,0 +1,67 @@
+import axios from '@/libs/api.request'
+import { getToken } from '@/libs/util'
+
+/** 后台管理-分页查询改枪码列表 **/
+export const getDataList = (data) => {
+ return axios.request({
+ url: 'delta-gun-code/findPageList',
+ headers: {
+ 'Authorization': getToken()
+ },
+ data: data,
+ method: 'post'
+ })
+}
+
+/** 后台管理-新增改枪码 **/
+export const add = (data) => {
+ return axios.request({
+ url: 'delta-gun-code/add',
+ headers: {
+ 'Authorization': getToken()
+ },
+ data: data,
+ method: 'post'
+ })
+}
+
+/** 后台管理-更新改枪码 **/
+export const update = (data) => {
+ return axios.request({
+ url: 'delta-gun-code/update',
+ headers: {
+ 'Authorization': getToken()
+ },
+ data: data,
+ method: 'post'
+ })
+}
+
+/** 后台管理-删除改枪码 **/
+export const remove = (data) => {
+ return axios.request({
+ url: 'delta-gun-code/remove',
+ headers: {
+ 'Authorization': getToken()
+ },
+ data: data,
+ method: 'post'
+ })
+}
+
+/** 公开-查询所有启用改枪码(无需鉴权) **/
+export const getPublicList = () => {
+ return axios.request({
+ url: 'delta-gun-code/public/list',
+ method: 'post'
+ })
+}
+
+/** 公开-复制成功增加复制次数(无需鉴权) **/
+export const addCopyCount = (id) => {
+ return axios.request({
+ url: 'delta-gun-code/public/addCopyCount',
+ params: { id: id },
+ method: 'post'
+ })
+}
diff --git a/src/common/js/clipboard.js b/src/common/js/clipboard.js
new file mode 100644
index 0000000..1492f1c
--- /dev/null
+++ b/src/common/js/clipboard.js
@@ -0,0 +1,37 @@
+/**
+ * 文本复制工具
+ * 优先使用 navigator.clipboard(需安全上下文),否则降级为隐藏 textarea + execCommand
+ * @param {String} text 待复制的文本
+ * @returns {Promise} 是否复制成功
+ */
+const fallbackCopy = (text) => {
+ const textarea = document.createElement('textarea')
+ textarea.value = text
+ textarea.setAttribute('readonly', '')
+ textarea.style.position = 'fixed'
+ textarea.style.top = '-9999px'
+ textarea.style.opacity = '0'
+ document.body.appendChild(textarea)
+ textarea.select()
+ textarea.setSelectionRange(0, textarea.value.length)
+ let ok = false
+ try {
+ ok = document.execCommand('copy')
+ } catch (e) {
+ ok = false
+ }
+ document.body.removeChild(textarea)
+ return ok
+}
+
+export const copyText = (text) => {
+ if (!text) return Promise.resolve(false)
+ if (navigator.clipboard && window.isSecureContext) {
+ return navigator.clipboard.writeText(text)
+ .then(() => true)
+ .catch(() => fallbackCopy(text))
+ }
+ return Promise.resolve(fallbackCopy(text))
+}
+
+export default copyText
diff --git a/src/view/delta/delta-gun-code.vue b/src/view/delta/delta-gun-code.vue
new file mode 100644
index 0000000..5cb8a40
--- /dev/null
+++ b/src/view/delta/delta-gun-code.vue
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+