diff --git a/src/api/open/openProduct.js b/src/api/open/openProduct.js
new file mode 100644
index 0000000000000000000000000000000000000000..c63ddf64d2e4ffcec868352af58a1dc28684aa3d
--- /dev/null
+++ b/src/api/open/openProduct.js
@@ -0,0 +1,167 @@
+import { request } from '@/utils/request.js'
+
+/**
+ * 商品 API JS
+ */
+
+export default {
+
+ /**
+ * 获取商品分页列表
+ * @returns
+ */
+ getList (params = {}) {
+ return request({
+ url: 'open/product/index',
+ method: 'get',
+ params
+ })
+ },
+
+ /**
+ * 添加商品
+ * @returns
+ */
+ save (data = {}) {
+ return request({
+ url: 'open/product/save',
+ method: 'post',
+ data
+ })
+ },
+
+ /**
+ * 更新商品数据
+ * @returns
+ */
+ update (id, data = {}) {
+ return request({
+ url: 'open/product/update/' + id,
+ method: 'put',
+ data
+ })
+ },
+
+ /**
+ * 读取商品
+ * @returns
+ */
+ read (data = {}) {
+ return request({
+ url: 'open/product/read',
+ method: 'get',
+ data
+ })
+ },
+
+ /**
+ * 将商品删除,有软删除则移动到回收站
+ * @returns
+ */
+ deletes (data) {
+ return request({
+ url: 'open/product/delete',
+ method: 'delete',
+ data
+ })
+ },
+
+ /**
+ * 从回收站获取商品数据列表
+ * @returns
+ */
+ getRecycleList (params = {}) {
+ return request({
+ url: 'open/product/recycle',
+ method: 'get',
+ params
+ })
+ },
+
+ /**
+ * 恢复商品数据
+ * @returns
+ */
+ recoverys (data) {
+ return request({
+ url: 'open/product/recovery',
+ method: 'put',
+ data
+ })
+ },
+
+ /**
+ * 真实删除商品
+ * @returns
+ */
+ realDeletes (data) {
+ return request({
+ url: 'open/product/realDelete',
+ method: 'delete',
+ data
+ })
+ },
+
+ /**
+ * 更改商品数据
+ * @returns
+ */
+ changeStatus (data = {}) {
+ return request({
+ url: 'open/product/changeStatus',
+ method: 'put',
+ data
+ })
+ },
+
+ /**
+ * 修改商品数值数据,自增自减
+ * @returns
+ */
+ numberOperation (data = {}) {
+ return request({
+ url: 'open/product/numberOperation',
+ method: 'put',
+ data
+ })
+ },
+
+ /**
+ * 商品导入
+ * @returns
+ */
+ importExcel (data = {}) {
+ return request({
+ url: 'open/product/import',
+ method: 'post',
+ data
+ })
+ },
+
+ /**
+ * 商品下载模板
+ * @returns
+ */
+ downloadTemplate () {
+ return request({
+ url: 'open/product/downloadTemplate',
+ method: 'post',
+ responseType: 'blob'
+ })
+ },
+
+ /**
+ * 商品导出
+ * @returns
+ */
+ exportExcel (params = {}) {
+ return request({
+ url: 'open/product/export',
+ method: 'post',
+ responseType: 'blob',
+ params
+ })
+ },
+
+
+}
\ No newline at end of file
diff --git a/src/components/ma-crud/index.vue b/src/components/ma-crud/index.vue
index b8c630d0b75382fe86540e015037213a36e72df7..742431f5a59b4ce5a74e0a3ea06bc39fab443137 100644
--- a/src/components/ma-crud/index.vue
+++ b/src/components/ma-crud/index.vue
@@ -211,7 +211,9 @@
v-model="columns"
v-model:crud="defaultCrud"
@success="requestSuccess"
- />
+ >
+
+
{
if (defaultCrud.value.operationColumn && columns.value.length > 0 && columns.value[columns.value.length - 1].dataIndex !== '__operation') {
columns.value.push({ title: defaultCrud.value.operationColumnText, dataIndex: '__operation', width: defaultCrud.value.operationWidth, align: 'right', fixed: 'right' })
}
+ columns.value.forEach(item => {
+ item.width = defaultCrud.value.columnWidth
+ })
+ console.log(columns)
showSearch.value = true
initRequestParams()
await refresh()
diff --git a/src/components/ma-form/index.vue b/src/components/ma-form/index.vue
index 7e5bfd52f2feeab77c6009154f037451a9c9bea8..dc8e954c2c868022836864190649a52eac73752f 100644
--- a/src/components/ma-form/index.vue
+++ b/src/components/ma-form/index.vue
@@ -593,6 +593,7 @@ const done = (status) => formLoading.value = status
const requestDict = (url, method, params, data, timeout = 10 * 1000) => request({ url, method, params, data, timeout })
const init = () => {
+ console.log(11111)
formLoading.value = true
const allowRequestFormType = ['radio', 'checkbox', 'select', 'transfer', 'treeSelect', 'tree-select', 'cascader']
const allowCoverFormType = ['radio', 'checkbox', 'select', 'transfer']
@@ -610,6 +611,7 @@ const init = () => {
})
columns.value.map(async item => {
+ console.log(item)
if (! form.value[item.dataIndex] && typeof form.value[item.dataIndex] == 'undefined') {
form.value[item.dataIndex] = undefined
@@ -632,7 +634,7 @@ const init = () => {
} else if (item.dict.url) {
const response = await requestDict(item.dict.url, item.dict.method || 'GET', item.dict.params || {}, item.dict.body || {})
if (response.data) {
- formDictData.value[item.dataIndex] = handlerProps(allowCoverFormType, item, response.data)
+ formDictData.value[item.dataIndex] = typeof item.dict.success == 'function' ? item.dict.success(allowCoverFormType, item, response.data) : handlerProps(allowCoverFormType, item, response.data)
}
} else if (item.dict.data) {
if (isArray(item.dict.data)) {
diff --git a/src/views/open/product/index.vue b/src/views/open/product/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..06f7ed0ce99a58db47f685c25755b12390415be0
--- /dev/null
+++ b/src/views/open/product/index.vue
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file