From aad1dc20370ca3d740964326ef7ba2d91cc40a2e Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期一, 06 三月 2023 12:23:47 +0800
Subject: [PATCH] yxh

---
 ruoyi-ui/src/views/smartor/ivrlibscript/index.vue         |  380 ++
 ruoyi-ui/src/views/smartor/ivrflow/index.vue              |  428 ++
 ruoyi-ui/src/views/smartor/ivrlibscriptmodel/index.vue    |  409 ++
 ruoyi-ui/src/views/smartor/ivrscene/index.vue             |  470 +++
 ruoyi-ui/src/views/smartor/ivrflownode/index.vue          |  459 +++
 ruoyi-ui/src/views/smartor/smsparam/index.vue             |  321 ++
 ruoyi-ui/src/api/smartor/ivrlibscriptmodel.js             |   44 
 ruoyi-ui/src/api/smartor/smsparam.js                      |   44 
 ruoyi-ui/src/views/smartor/smsaccount/index.vue           |  357 ++
 ruoyi-ui/src/views/smartor/smsrecords/index.vue           |  544 +++
 ruoyi-ui/src/api/smartor/ivrflownode.js                   |   44 
 ruoyi-ui/src/views/smartor/ivrlibintentcategory/index.vue |  310 ++
 ruoyi-ui/src/api/smartor/ivrflownodebranch.js             |   44 
 ruoyi-ui/src/views/smartor/ivrscenecategory/index.vue     |  310 ++
 ruoyi-ui/src/views/smartor/ivrlibintent/index.vue         |  344 ++
 ruoyi-ui/src/views/smartor/ivrlibscriptcategory/index.vue |  310 ++
 ruoyi-ui/src/api/smartor/smsaccount.js                    |   44 
 ruoyi-ui/src/views/smartor/ivrglobalconfig/index.vue      |  389 ++
 ruoyi-ui/src/views/smartor/ivrexecuteconfig/index.vue     |  398 ++
 ruoyi-ui/src/api/smartor/ivrexecuteconfig.js              |   44 
 ruoyi-ui/src/api/smartor/ivrlibintentcategory.js          |   44 
 ruoyi-ui/src/api/smartor/ivrglobalconfig.js               |   44 
 ruoyi-ui/src/api/smartor/ivrrecall.js                     |   44 
 ruoyi-ui/src/api/smartor/smsrecords.js                    |   44 
 ruoyi-ui/src/api/smartor/ivrscript.js                     |   44 
 ruoyi-ui/src/views/smartor/ivrintent/index.vue            |  476 +++
 ruoyi-ui/src/views/smartor/ivrscriptmodel/index.vue       |  423 ++
 ruoyi-ui/src/views/smartor/ivrflownodebranch/index.vue    |  411 ++
 ruoyi-ui/src/api/smartor/ivrflow.js                       |   44 
 ruoyi-ui/src/api/smartor/smstemplet.js                    |   44 
 ruoyi-ui/src/api/smartor/ivrlibintent.js                  |   44 
 ruoyi-ui/src/views/smartor/ivrscript/index.vue            |  411 ++
 ruoyi-ui/src/api/smartor/ivrscene.js                      |   44 
 ruoyi-ui/src/api/smartor/ivrscenecategory.js              |   44 
 ruoyi-ui/src/api/smartor/ivrscriptmodel.js                |   44 
 ruoyi-ui/src/api/smartor/ivrlibscriptcategory.js          |   44 
 ruoyi-ui/src/api/smartor/ivrintent.js                     |   44 
 ruoyi-ui/src/views/smartor/ivrrecall/index.vue            |  355 ++
 ruoyi-ui/src/views/smartor/smstemplet/index.vue           |  310 ++
 ruoyi-ui/src/api/smartor/ivrlibscript.js                  |   44 
 40 files changed, 8,695 insertions(+), 0 deletions(-)

diff --git a/ruoyi-ui/src/api/smartor/ivrexecuteconfig.js b/ruoyi-ui/src/api/smartor/ivrexecuteconfig.js
new file mode 100644
index 0000000..16d0dcc
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrexecuteconfig.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠鎵ц閰嶇疆鍒楄〃
+export function listIvrexecuteconfig(query) {
+  return request({
+    url: '/smartor/ivrexecuteconfig/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠鎵ц閰嶇疆璇︾粏
+export function getIvrexecuteconfig(scenecfgid) {
+  return request({
+    url: '/smartor/ivrexecuteconfig/' + scenecfgid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠鎵ц閰嶇疆
+export function addIvrexecuteconfig(data) {
+  return request({
+    url: '/smartor/ivrexecuteconfig',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠鎵ц閰嶇疆
+export function updateIvrexecuteconfig(data) {
+  return request({
+    url: '/smartor/ivrexecuteconfig',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠鎵ц閰嶇疆
+export function delIvrexecuteconfig(scenecfgid) {
+  return request({
+    url: '/smartor/ivrexecuteconfig/' + scenecfgid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrflow.js b/ruoyi-ui/src/api/smartor/ivrflow.js
new file mode 100644
index 0000000..6286968
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrflow.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠娴佺▼鍒楄〃
+export function listIvrflow(query) {
+  return request({
+    url: '/smartor/ivrflow/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠娴佺▼璇︾粏
+export function getIvrflow(flowid) {
+  return request({
+    url: '/smartor/ivrflow/' + flowid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠娴佺▼
+export function addIvrflow(data) {
+  return request({
+    url: '/smartor/ivrflow',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠娴佺▼
+export function updateIvrflow(data) {
+  return request({
+    url: '/smartor/ivrflow',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠娴佺▼
+export function delIvrflow(flowid) {
+  return request({
+    url: '/smartor/ivrflow/' + flowid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrflownode.js b/ruoyi-ui/src/api/smartor/ivrflownode.js
new file mode 100644
index 0000000..e9a24bc
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrflownode.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠娴佺▼鑺傜偣鍒楄〃
+export function listIvrflownode(query) {
+  return request({
+    url: '/smartor/ivrflownode/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠娴佺▼鑺傜偣璇︾粏
+export function getIvrflownode(flownodeid) {
+  return request({
+    url: '/smartor/ivrflownode/' + flownodeid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠娴佺▼鑺傜偣
+export function addIvrflownode(data) {
+  return request({
+    url: '/smartor/ivrflownode',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠娴佺▼鑺傜偣
+export function updateIvrflownode(data) {
+  return request({
+    url: '/smartor/ivrflownode',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠娴佺▼鑺傜偣
+export function delIvrflownode(flownodeid) {
+  return request({
+    url: '/smartor/ivrflownode/' + flownodeid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrflownodebranch.js b/ruoyi-ui/src/api/smartor/ivrflownodebranch.js
new file mode 100644
index 0000000..c4af689
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrflownodebranch.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠娴佺▼鑺傜偣鍒嗘敮鍒楄〃
+export function listIvrflownodebranch(query) {
+  return request({
+    url: '/smartor/ivrflownodebranch/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠娴佺▼鑺傜偣鍒嗘敮璇︾粏
+export function getIvrflownodebranch(branchid) {
+  return request({
+    url: '/smartor/ivrflownodebranch/' + branchid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠娴佺▼鑺傜偣鍒嗘敮
+export function addIvrflownodebranch(data) {
+  return request({
+    url: '/smartor/ivrflownodebranch',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠娴佺▼鑺傜偣鍒嗘敮
+export function updateIvrflownodebranch(data) {
+  return request({
+    url: '/smartor/ivrflownodebranch',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠娴佺▼鑺傜偣鍒嗘敮
+export function delIvrflownodebranch(branchid) {
+  return request({
+    url: '/smartor/ivrflownodebranch/' + branchid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrglobalconfig.js b/ruoyi-ui/src/api/smartor/ivrglobalconfig.js
new file mode 100644
index 0000000..5d0bb27
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrglobalconfig.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠鍏ㄥ眬閰嶇疆鍒楄〃
+export function listIvrglobalconfig(query) {
+  return request({
+    url: '/smartor/ivrglobalconfig/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠鍏ㄥ眬閰嶇疆璇︾粏
+export function getIvrglobalconfig(gblconfigid) {
+  return request({
+    url: '/smartor/ivrglobalconfig/' + gblconfigid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠鍏ㄥ眬閰嶇疆
+export function addIvrglobalconfig(data) {
+  return request({
+    url: '/smartor/ivrglobalconfig',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠鍏ㄥ眬閰嶇疆
+export function updateIvrglobalconfig(data) {
+  return request({
+    url: '/smartor/ivrglobalconfig',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠鍏ㄥ眬閰嶇疆
+export function delIvrglobalconfig(gblconfigid) {
+  return request({
+    url: '/smartor/ivrglobalconfig/' + gblconfigid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrintent.js b/ruoyi-ui/src/api/smartor/ivrintent.js
new file mode 100644
index 0000000..4008650
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrintent.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠鎰忓浘鍒楄〃
+export function listIvrintent(query) {
+  return request({
+    url: '/smartor/ivrintent/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠鎰忓浘璇︾粏
+export function getIvrintent(sceneintentid) {
+  return request({
+    url: '/smartor/ivrintent/' + sceneintentid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠鎰忓浘
+export function addIvrintent(data) {
+  return request({
+    url: '/smartor/ivrintent',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠鎰忓浘
+export function updateIvrintent(data) {
+  return request({
+    url: '/smartor/ivrintent',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠鎰忓浘
+export function delIvrintent(sceneintentid) {
+  return request({
+    url: '/smartor/ivrintent/' + sceneintentid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrlibintent.js b/ruoyi-ui/src/api/smartor/ivrlibintent.js
new file mode 100644
index 0000000..73d094c
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrlibintent.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI鎰忓浘搴撳垪琛�
+export function listIvrlibintent(query) {
+  return request({
+    url: '/smartor/ivrlibintent/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI鎰忓浘搴撹缁�
+export function getIvrlibintent(intentid) {
+  return request({
+    url: '/smartor/ivrlibintent/' + intentid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI鎰忓浘搴�
+export function addIvrlibintent(data) {
+  return request({
+    url: '/smartor/ivrlibintent',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI鎰忓浘搴�
+export function updateIvrlibintent(data) {
+  return request({
+    url: '/smartor/ivrlibintent',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI鎰忓浘搴�
+export function delIvrlibintent(intentid) {
+  return request({
+    url: '/smartor/ivrlibintent/' + intentid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrlibintentcategory.js b/ruoyi-ui/src/api/smartor/ivrlibintentcategory.js
new file mode 100644
index 0000000..ca7af0f
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrlibintentcategory.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI鎰忓浘搴撳垎绫诲垪琛�
+export function listIvrlibintentcategory(query) {
+  return request({
+    url: '/smartor/ivrlibintentcategory/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI鎰忓浘搴撳垎绫昏缁�
+export function getIvrlibintentcategory(intertcatid) {
+  return request({
+    url: '/smartor/ivrlibintentcategory/' + intertcatid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI鎰忓浘搴撳垎绫�
+export function addIvrlibintentcategory(data) {
+  return request({
+    url: '/smartor/ivrlibintentcategory',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI鎰忓浘搴撳垎绫�
+export function updateIvrlibintentcategory(data) {
+  return request({
+    url: '/smartor/ivrlibintentcategory',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI鎰忓浘搴撳垎绫�
+export function delIvrlibintentcategory(intertcatid) {
+  return request({
+    url: '/smartor/ivrlibintentcategory/' + intertcatid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrlibscript.js b/ruoyi-ui/src/api/smartor/ivrlibscript.js
new file mode 100644
index 0000000..52a34d9
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrlibscript.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI璇濇湳搴撳垪琛�
+export function listIvrlibscript(query) {
+  return request({
+    url: '/smartor/ivrlibscript/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI璇濇湳搴撹缁�
+export function getIvrlibscript(scriptid) {
+  return request({
+    url: '/smartor/ivrlibscript/' + scriptid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI璇濇湳搴�
+export function addIvrlibscript(data) {
+  return request({
+    url: '/smartor/ivrlibscript',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI璇濇湳搴�
+export function updateIvrlibscript(data) {
+  return request({
+    url: '/smartor/ivrlibscript',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI璇濇湳搴�
+export function delIvrlibscript(scriptid) {
+  return request({
+    url: '/smartor/ivrlibscript/' + scriptid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrlibscriptcategory.js b/ruoyi-ui/src/api/smartor/ivrlibscriptcategory.js
new file mode 100644
index 0000000..87bdc2d
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrlibscriptcategory.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI璇濇湳搴撳垎绫诲垪琛�
+export function listIvrlibscriptcategory(query) {
+  return request({
+    url: '/smartor/ivrlibscriptcategory/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI璇濇湳搴撳垎绫昏缁�
+export function getIvrlibscriptcategory(categoryid) {
+  return request({
+    url: '/smartor/ivrlibscriptcategory/' + categoryid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI璇濇湳搴撳垎绫�
+export function addIvrlibscriptcategory(data) {
+  return request({
+    url: '/smartor/ivrlibscriptcategory',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI璇濇湳搴撳垎绫�
+export function updateIvrlibscriptcategory(data) {
+  return request({
+    url: '/smartor/ivrlibscriptcategory',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI璇濇湳搴撳垎绫�
+export function delIvrlibscriptcategory(categoryid) {
+  return request({
+    url: '/smartor/ivrlibscriptcategory/' + categoryid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrlibscriptmodel.js b/ruoyi-ui/src/api/smartor/ivrlibscriptmodel.js
new file mode 100644
index 0000000..63724a1
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrlibscriptmodel.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI璇濇湳妯″潡鍒楄〃
+export function listIvrlibscriptmodel(query) {
+  return request({
+    url: '/smartor/ivrlibscriptmodel/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI璇濇湳妯″潡璇︾粏
+export function getIvrlibscriptmodel(modelid) {
+  return request({
+    url: '/smartor/ivrlibscriptmodel/' + modelid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI璇濇湳妯″潡
+export function addIvrlibscriptmodel(data) {
+  return request({
+    url: '/smartor/ivrlibscriptmodel',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI璇濇湳妯″潡
+export function updateIvrlibscriptmodel(data) {
+  return request({
+    url: '/smartor/ivrlibscriptmodel',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI璇濇湳妯″潡
+export function delIvrlibscriptmodel(modelid) {
+  return request({
+    url: '/smartor/ivrlibscriptmodel/' + modelid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrrecall.js b/ruoyi-ui/src/api/smartor/ivrrecall.js
new file mode 100644
index 0000000..029123b
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrrecall.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠閲嶆嫧閰嶇疆鍒楄〃
+export function listIvrrecall(query) {
+  return request({
+    url: '/smartor/ivrrecall/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠閲嶆嫧閰嶇疆璇︾粏
+export function getIvrrecall(recallid) {
+  return request({
+    url: '/smartor/ivrrecall/' + recallid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠閲嶆嫧閰嶇疆
+export function addIvrrecall(data) {
+  return request({
+    url: '/smartor/ivrrecall',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠閲嶆嫧閰嶇疆
+export function updateIvrrecall(data) {
+  return request({
+    url: '/smartor/ivrrecall',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠閲嶆嫧閰嶇疆
+export function delIvrrecall(recallid) {
+  return request({
+    url: '/smartor/ivrrecall/' + recallid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrscene.js b/ruoyi-ui/src/api/smartor/ivrscene.js
new file mode 100644
index 0000000..9d0aab6
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrscene.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠鍦烘櫙绠$悊鍒楄〃
+export function listIvrscene(query) {
+  return request({
+    url: '/smartor/ivrscene/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠鍦烘櫙绠$悊璇︾粏
+export function getIvrscene(sceneid) {
+  return request({
+    url: '/smartor/ivrscene/' + sceneid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠鍦烘櫙绠$悊
+export function addIvrscene(data) {
+  return request({
+    url: '/smartor/ivrscene',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠鍦烘櫙绠$悊
+export function updateIvrscene(data) {
+  return request({
+    url: '/smartor/ivrscene',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠鍦烘櫙绠$悊
+export function delIvrscene(sceneid) {
+  return request({
+    url: '/smartor/ivrscene/' + sceneid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrscenecategory.js b/ruoyi-ui/src/api/smartor/ivrscenecategory.js
new file mode 100644
index 0000000..3973244
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrscenecategory.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI鏈嶅姟鍦烘櫙绠$悊鍒嗙被鍒楄〃
+export function listIvrscenecategory(query) {
+  return request({
+    url: '/smartor/ivrscenecategory/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI鏈嶅姟鍦烘櫙绠$悊鍒嗙被璇︾粏
+export function getIvrscenecategory(scenecatid) {
+  return request({
+    url: '/smartor/ivrscenecategory/' + scenecatid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI鏈嶅姟鍦烘櫙绠$悊鍒嗙被
+export function addIvrscenecategory(data) {
+  return request({
+    url: '/smartor/ivrscenecategory',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI鏈嶅姟鍦烘櫙绠$悊鍒嗙被
+export function updateIvrscenecategory(data) {
+  return request({
+    url: '/smartor/ivrscenecategory',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI鏈嶅姟鍦烘櫙绠$悊鍒嗙被
+export function delIvrscenecategory(scenecatid) {
+  return request({
+    url: '/smartor/ivrscenecategory/' + scenecatid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrscript.js b/ruoyi-ui/src/api/smartor/ivrscript.js
new file mode 100644
index 0000000..b184cba
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrscript.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠璇濇湳鍒楄〃
+export function listIvrscript(query) {
+  return request({
+    url: '/smartor/ivrscript/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠璇濇湳璇︾粏
+export function getIvrscript(scenescrid) {
+  return request({
+    url: '/smartor/ivrscript/' + scenescrid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠璇濇湳
+export function addIvrscript(data) {
+  return request({
+    url: '/smartor/ivrscript',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠璇濇湳
+export function updateIvrscript(data) {
+  return request({
+    url: '/smartor/ivrscript',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠璇濇湳
+export function delIvrscript(scenescrid) {
+  return request({
+    url: '/smartor/ivrscript/' + scenescrid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/ivrscriptmodel.js b/ruoyi-ui/src/api/smartor/ivrscriptmodel.js
new file mode 100644
index 0000000..bdc9910
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/ivrscriptmodel.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨAI澶栧懠璇濇湳妯″潡鍒楄〃
+export function listIvrscriptmodel(query) {
+  return request({
+    url: '/smartor/ivrscriptmodel/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨAI澶栧懠璇濇湳妯″潡璇︾粏
+export function getIvrscriptmodel(scenemodid) {
+  return request({
+    url: '/smartor/ivrscriptmodel/' + scenemodid,
+    method: 'get'
+  })
+}
+
+// 鏂板AI澶栧懠璇濇湳妯″潡
+export function addIvrscriptmodel(data) {
+  return request({
+    url: '/smartor/ivrscriptmodel',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼AI澶栧懠璇濇湳妯″潡
+export function updateIvrscriptmodel(data) {
+  return request({
+    url: '/smartor/ivrscriptmodel',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎AI澶栧懠璇濇湳妯″潡
+export function delIvrscriptmodel(scenemodid) {
+  return request({
+    url: '/smartor/ivrscriptmodel/' + scenemodid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/smsaccount.js b/ruoyi-ui/src/api/smartor/smsaccount.js
new file mode 100644
index 0000000..8d7f6b8
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/smsaccount.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鐭俊璐﹀彿鍒楄〃
+export function listSmsaccount(query) {
+  return request({
+    url: '/smartor/smsaccount/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鐭俊璐﹀彿璇︾粏
+export function getSmsaccount(smsacountid) {
+  return request({
+    url: '/smartor/smsaccount/' + smsacountid,
+    method: 'get'
+  })
+}
+
+// 鏂板鐭俊璐﹀彿
+export function addSmsaccount(data) {
+  return request({
+    url: '/smartor/smsaccount',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鐭俊璐﹀彿
+export function updateSmsaccount(data) {
+  return request({
+    url: '/smartor/smsaccount',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎鐭俊璐﹀彿
+export function delSmsaccount(smsacountid) {
+  return request({
+    url: '/smartor/smsaccount/' + smsacountid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/smsparam.js b/ruoyi-ui/src/api/smartor/smsparam.js
new file mode 100644
index 0000000..1ed799a
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/smsparam.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鐭俊鍙傛暟鍒楄〃
+export function listSmsparam(query) {
+  return request({
+    url: '/smartor/smsparam/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鐭俊鍙傛暟璇︾粏
+export function getSmsparam(paramid) {
+  return request({
+    url: '/smartor/smsparam/' + paramid,
+    method: 'get'
+  })
+}
+
+// 鏂板鐭俊鍙傛暟
+export function addSmsparam(data) {
+  return request({
+    url: '/smartor/smsparam',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鐭俊鍙傛暟
+export function updateSmsparam(data) {
+  return request({
+    url: '/smartor/smsparam',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎鐭俊鍙傛暟
+export function delSmsparam(paramid) {
+  return request({
+    url: '/smartor/smsparam/' + paramid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/smsrecords.js b/ruoyi-ui/src/api/smartor/smsrecords.js
new file mode 100644
index 0000000..6640c29
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/smsrecords.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鐭俊璁板綍鍒楄〃
+export function listSmsrecords(query) {
+  return request({
+    url: '/smartor/smsrecords/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鐭俊璁板綍璇︾粏
+export function getSmsrecords(recordid) {
+  return request({
+    url: '/smartor/smsrecords/' + recordid,
+    method: 'get'
+  })
+}
+
+// 鏂板鐭俊璁板綍
+export function addSmsrecords(data) {
+  return request({
+    url: '/smartor/smsrecords',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鐭俊璁板綍
+export function updateSmsrecords(data) {
+  return request({
+    url: '/smartor/smsrecords',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎鐭俊璁板綍
+export function delSmsrecords(recordid) {
+  return request({
+    url: '/smartor/smsrecords/' + recordid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/api/smartor/smstemplet.js b/ruoyi-ui/src/api/smartor/smstemplet.js
new file mode 100644
index 0000000..0b53f02
--- /dev/null
+++ b/ruoyi-ui/src/api/smartor/smstemplet.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鐭俊妯℃澘鍒楄〃
+export function listSmstemplet(query) {
+  return request({
+    url: '/smartor/smstemplet/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鐭俊妯℃澘璇︾粏
+export function getSmstemplet(templetid) {
+  return request({
+    url: '/smartor/smstemplet/' + templetid,
+    method: 'get'
+  })
+}
+
+// 鏂板鐭俊妯℃澘
+export function addSmstemplet(data) {
+  return request({
+    url: '/smartor/smstemplet',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鐭俊妯℃澘
+export function updateSmstemplet(data) {
+  return request({
+    url: '/smartor/smstemplet',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎鐭俊妯℃澘
+export function delSmstemplet(templetid) {
+  return request({
+    url: '/smartor/smstemplet/' + templetid,
+    method: 'delete'
+  })
+}
diff --git a/ruoyi-ui/src/views/smartor/ivrexecuteconfig/index.vue b/ruoyi-ui/src/views/smartor/ivrexecuteconfig/index.vue
new file mode 100644
index 0000000..467dab8
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrexecuteconfig/index.vue
@@ -0,0 +1,398 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " prop="globalid">
+        <el-input
+          v-model="queryParams.globalid"
+          placeholder="璇疯緭鍏� 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 澶栧懠鑺傜偣ID " prop="flownodebranchid">
+        <el-input
+          v-model="queryParams.flownodebranchid"
+          placeholder="璇疯緭鍏� 澶栧懠鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎵ц鏉′欢;涓洪棶鍗锋椂濉棶鍗烽鐩�/涓烘偅鑰呮爣绛炬椂涓嶅~ " prop="executeconditions">
+        <el-input
+          v-model="queryParams.executeconditions"
+          placeholder="璇疯緭鍏� 鎵ц鏉′欢;涓洪棶鍗锋椂濉棶鍗烽鐩�/涓烘偅鑰呮爣绛炬椂涓嶅~ "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" 澶栧懠鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� 澶栧懠鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎵ц鏉′欢浠g爜;涓洪棶鍗锋椂濉棶鍗烽鐩瓹ode " prop="executeconditionscode">
+        <el-input
+          v-model="queryParams.executeconditionscode"
+          placeholder="璇疯緭鍏� 鎵ц鏉′欢浠g爜;涓洪棶鍗锋椂濉棶鍗烽鐩瓹ode "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼鑺傜偣ID " prop="flownodeid">
+        <el-input
+          v-model="queryParams.flownodeid"
+          placeholder="璇疯緭鍏� 娴佺▼鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrexecuteconfig:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrexecuteconfig:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrexecuteconfig:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrexecuteconfig:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrexecuteconfigList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="scenecfgid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 鏉ユ簮绫诲瀷;0.鍏ㄥ眬 1.涓荤嚎 " align="center" prop="sourcetype" />
+      <el-table-column label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " align="center" prop="globalid" />
+      <el-table-column label=" 澶栧懠鑺傜偣ID " align="center" prop="flownodebranchid" />
+      <el-table-column label=" 鎵ц绫诲瀷;0.闂嵎绛旀 1.鎮h�呮爣绛� " align="center" prop="executetype" />
+      <el-table-column label=" 鎵ц鏉′欢;涓洪棶鍗锋椂濉棶鍗烽鐩�/涓烘偅鑰呮爣绛炬椂涓嶅~ " align="center" prop="executeconditions" />
+      <el-table-column label=" 鎵ц缁撴灉;鍗曢�夐涓婚敭/澶氶�夐涓婚敭/濉┖棰樻枃鏈�/鏍囩涓婚敭鍙閫�/澶氶�夐�楀彿闅斿紑 " align="center" prop="executeresult" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" 澶栧懠鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label=" 鎵ц鏉′欢浠g爜;涓洪棶鍗锋椂濉棶鍗烽鐩瓹ode " align="center" prop="executeconditionscode" />
+      <el-table-column label=" 鎵ц缁撴灉浠g爜;鍗曢�夐涓婚敭/澶氶�夐涓婚敭鐨勯�夐」Code " align="center" prop="executeresultcode" />
+      <el-table-column label=" 娴佺▼鑺傜偣ID " align="center" prop="flownodeid" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrexecuteconfig:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrexecuteconfig:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠鎵ц閰嶇疆瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " prop="globalid">
+          <el-input v-model="form.globalid" placeholder="璇疯緭鍏� 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " />
+        </el-form-item>
+        <el-form-item label=" 澶栧懠鑺傜偣ID " prop="flownodebranchid">
+          <el-input v-model="form.flownodebranchid" placeholder="璇疯緭鍏� 澶栧懠鑺傜偣ID " />
+        </el-form-item>
+        <el-form-item label=" 鎵ц鏉′欢;涓洪棶鍗锋椂濉棶鍗烽鐩�/涓烘偅鑰呮爣绛炬椂涓嶅~ " prop="executeconditions">
+          <el-input v-model="form.executeconditions" placeholder="璇疯緭鍏� 鎵ц鏉′欢;涓洪棶鍗锋椂濉棶鍗烽鐩�/涓烘偅鑰呮爣绛炬椂涓嶅~ " />
+        </el-form-item>
+        <el-form-item label=" 鎵ц缁撴灉;鍗曢�夐涓婚敭/澶氶�夐涓婚敭/濉┖棰樻枃鏈�/鏍囩涓婚敭鍙閫�/澶氶�夐�楀彿闅斿紑 " prop="executeresult">
+          <el-input v-model="form.executeresult" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" 澶栧懠鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� 澶栧懠鍦烘櫙ID " />
+        </el-form-item>
+        <el-form-item label=" 鎵ц鏉′欢浠g爜;涓洪棶鍗锋椂濉棶鍗烽鐩瓹ode " prop="executeconditionscode">
+          <el-input v-model="form.executeconditionscode" placeholder="璇疯緭鍏� 鎵ц鏉′欢浠g爜;涓洪棶鍗锋椂濉棶鍗烽鐩瓹ode " />
+        </el-form-item>
+        <el-form-item label=" 鎵ц缁撴灉浠g爜;鍗曢�夐涓婚敭/澶氶�夐涓婚敭鐨勯�夐」Code " prop="executeresultcode">
+          <el-input v-model="form.executeresultcode" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼鑺傜偣ID " prop="flownodeid">
+          <el-input v-model="form.flownodeid" placeholder="璇疯緭鍏� 娴佺▼鑺傜偣ID " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrexecuteconfig, getIvrexecuteconfig, delIvrexecuteconfig, addIvrexecuteconfig, updateIvrexecuteconfig } from "@/api/smartor/ivrexecuteconfig";
+
+export default {
+  name: "Ivrexecuteconfig",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠鎵ц閰嶇疆琛ㄦ牸鏁版嵁
+      ivrexecuteconfigList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        sourcetype: null,
+        globalid: null,
+        flownodebranchid: null,
+        executetype: null,
+        executeconditions: null,
+        executeresult: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        executeconditionscode: null,
+        executeresultcode: null,
+        flownodeid: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠鎵ц閰嶇疆鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrexecuteconfig(this.queryParams).then(response => {
+        this.ivrexecuteconfigList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        scenecfgid: null,
+        orgid: null,
+        sourcetype: null,
+        globalid: null,
+        flownodebranchid: null,
+        executetype: null,
+        executeconditions: null,
+        executeresult: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        executeconditionscode: null,
+        executeresultcode: null,
+        flownodeid: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.scenecfgid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠鎵ц閰嶇疆";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const scenecfgid = row.scenecfgid || this.ids
+      getIvrexecuteconfig(scenecfgid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠鎵ц閰嶇疆";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.scenecfgid != null) {
+            updateIvrexecuteconfig(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrexecuteconfig(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const scenecfgids = row.scenecfgid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠鎵ц閰嶇疆缂栧彿涓�"' + scenecfgids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrexecuteconfig(scenecfgids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrexecuteconfig/export', {
+        ...this.queryParams
+      }, `ivrexecuteconfig_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrflow/index.vue b/ruoyi-ui/src/views/smartor/ivrflow/index.vue
new file mode 100644
index 0000000..4090a53
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrflow/index.vue
@@ -0,0 +1,428 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼鍚嶇О " prop="flowname">
+        <el-input
+          v-model="queryParams.flowname"
+          placeholder="璇疯緭鍏� 娴佺▼鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍏宠仈闂嵎ID " prop="relevantqsid">
+        <el-input
+          v-model="queryParams.relevantqsid"
+          placeholder="璇疯緭鍏� 鍏宠仈闂嵎ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍏宠仈棰樼洰ID" prop="relevanttopicid">
+        <el-input
+          v-model="queryParams.relevanttopicid"
+          placeholder="璇疯緭鍏� 鍏宠仈棰樼洰ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍏宠仈棰樼洰Code" prop="relevanttopiccode">
+        <el-input
+          v-model="queryParams.relevanttopiccode"
+          placeholder="璇疯緭鍏� 鍏宠仈棰樼洰Code"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏄惁鏍¢獙;0鍚� 1鏄� " prop="ischeck">
+        <el-input
+          v-model="queryParams.ischeck"
+          placeholder="璇疯緭鍏� 鏄惁鏍¢獙;0鍚� 1鏄� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 搴忓彿 " prop="sort">
+        <el-input
+          v-model="queryParams.sort"
+          placeholder="璇疯緭鍏� 搴忓彿 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璧峰鑺傜偣ID " prop="startnode">
+        <el-input
+          v-model="queryParams.startnode"
+          placeholder="璇疯緭鍏� 璧峰鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎷疯礉ID " prop="oldid">
+        <el-input
+          v-model="queryParams.oldid"
+          placeholder="璇疯緭鍏� 鎷疯礉ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrflow:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrflow:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrflow:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrflow:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrflowList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="flowid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" AI澶栧懠鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label=" 娴佺▼鍚嶇О " align="center" prop="flowname" />
+      <el-table-column label=" 鍏宠仈闂嵎ID " align="center" prop="relevantqsid" />
+      <el-table-column label=" 鍏宠仈棰樼洰ID" align="center" prop="relevanttopicid" />
+      <el-table-column label=" 鍏宠仈棰樼洰Code" align="center" prop="relevanttopiccode" />
+      <el-table-column label=" 鏄惁鏍¢獙;0鍚� 1鏄� " align="center" prop="ischeck" />
+      <el-table-column label=" 娴佺▼鍥綣SON鏁版嵁 " align="center" prop="flowdata" />
+      <el-table-column label=" 搴忓彿 " align="center" prop="sort" />
+      <el-table-column label=" 璧峰鑺傜偣ID " align="center" prop="startnode" />
+      <el-table-column label=" 鎷疯礉ID " align="center" prop="oldid" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrflow:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrflow:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠娴佺▼瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼鍚嶇О " prop="flowname">
+          <el-input v-model="form.flowname" placeholder="璇疯緭鍏� 娴佺▼鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鍏宠仈闂嵎ID " prop="relevantqsid">
+          <el-input v-model="form.relevantqsid" placeholder="璇疯緭鍏� 鍏宠仈闂嵎ID " />
+        </el-form-item>
+        <el-form-item label=" 鍏宠仈棰樼洰ID" prop="relevanttopicid">
+          <el-input v-model="form.relevanttopicid" placeholder="璇疯緭鍏� 鍏宠仈棰樼洰ID" />
+        </el-form-item>
+        <el-form-item label=" 鍏宠仈棰樼洰Code" prop="relevanttopiccode">
+          <el-input v-model="form.relevanttopiccode" placeholder="璇疯緭鍏� 鍏宠仈棰樼洰Code" />
+        </el-form-item>
+        <el-form-item label=" 鏄惁鏍¢獙;0鍚� 1鏄� " prop="ischeck">
+          <el-input v-model="form.ischeck" placeholder="璇疯緭鍏� 鏄惁鏍¢獙;0鍚� 1鏄� " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼鍥綣SON鏁版嵁 " prop="flowdata">
+          <el-input v-model="form.flowdata" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 搴忓彿 " prop="sort">
+          <el-input v-model="form.sort" placeholder="璇疯緭鍏� 搴忓彿 " />
+        </el-form-item>
+        <el-form-item label=" 璧峰鑺傜偣ID " prop="startnode">
+          <el-input v-model="form.startnode" placeholder="璇疯緭鍏� 璧峰鑺傜偣ID " />
+        </el-form-item>
+        <el-form-item label=" 鎷疯礉ID " prop="oldid">
+          <el-input v-model="form.oldid" placeholder="璇疯緭鍏� 鎷疯礉ID " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrflow, getIvrflow, delIvrflow, addIvrflow, updateIvrflow } from "@/api/smartor/ivrflow";
+
+export default {
+  name: "Ivrflow",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠娴佺▼琛ㄦ牸鏁版嵁
+      ivrflowList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        flowname: null,
+        relevantqsid: null,
+        relevanttopicid: null,
+        relevanttopiccode: null,
+        ischeck: null,
+        flowdata: null,
+        sort: null,
+        startnode: null,
+        oldid: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠娴佺▼鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrflow(this.queryParams).then(response => {
+        this.ivrflowList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        flowid: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        flowname: null,
+        relevantqsid: null,
+        relevanttopicid: null,
+        relevanttopiccode: null,
+        ischeck: null,
+        flowdata: null,
+        sort: null,
+        startnode: null,
+        oldid: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.flowid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠娴佺▼";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const flowid = row.flowid || this.ids
+      getIvrflow(flowid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠娴佺▼";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.flowid != null) {
+            updateIvrflow(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrflow(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const flowids = row.flowid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠娴佺▼缂栧彿涓�"' + flowids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrflow(flowids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrflow/export', {
+        ...this.queryParams
+      }, `ivrflow_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrflownode/index.vue b/ruoyi-ui/src/views/smartor/ivrflownode/index.vue
new file mode 100644
index 0000000..b090e2e
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrflownode/index.vue
@@ -0,0 +1,459 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼ID " prop="flowid">
+        <el-input
+          v-model="queryParams.flowid"
+          placeholder="璇疯緭鍏� 娴佺▼ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鑺傜偣鍚嶇О " prop="nodename">
+        <el-input
+          v-model="queryParams.nodename"
+          placeholder="璇疯緭鍏� 鑺傜偣鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍋滈】鏃堕暱" prop="maxsentencesilence">
+        <el-input
+          v-model="queryParams.maxsentencesilence"
+          placeholder="璇疯緭鍏� 鍋滈】鏃堕暱"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 绛夊緟鏃堕暱" prop="waittime">
+        <el-input
+          v-model="queryParams.waittime"
+          placeholder="璇疯緭鍏� 绛夊緟鏃堕暱"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏂拌瘽鏈瓑寰呮椂闀�" prop="corpuswaittime">
+        <el-input
+          v-model="queryParams.corpuswaittime"
+          placeholder="璇疯緭鍏� 鏂拌瘽鏈瓑寰呮椂闀�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈�澶ч噸澶嶆鏁�;寰幆鑺傜偣鐢� " prop="maxrepetition">
+        <el-input
+          v-model="queryParams.maxrepetition"
+          placeholder="璇疯緭鍏� 鏈�澶ч噸澶嶆鏁�;寰幆鑺傜偣鐢� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璺宠浆鑷�;璺宠浆鑺傜偣鐢� 鐩墠鏀炬祦绋婭D " prop="jumpto">
+        <el-input
+          v-model="queryParams.jumpto"
+          placeholder="璇疯緭鍏� 璺宠浆鑷�;璺宠浆鑺傜偣鐢� 鐩墠鏀炬祦绋婭D "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼鍥剧敓鎴怚D " prop="flowcode">
+        <el-input
+          v-model="queryParams.flowcode"
+          placeholder="璇疯緭鍏� 娴佺▼鍥剧敓鎴怚D "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璺宠浆鐩爣鑺傜偣ID " prop="targetid">
+        <el-input
+          v-model="queryParams.targetid"
+          placeholder="璇疯緭鍏� 璺宠浆鐩爣鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎷疯礉ID " prop="oldid">
+        <el-input
+          v-model="queryParams.oldid"
+          placeholder="璇疯緭鍏� 鎷疯礉ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrflownode:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrflownode:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrflownode:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrflownode:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrflownodeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="flownodeid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" AI澶栧懠鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label=" 娴佺▼ID " align="center" prop="flowid" />
+      <el-table-column label=" 鑺傜偣绫诲瀷;0.鏅�氳妭鐐� 1.璺宠浆鑺傜偣 2.寰幆鑺傜偣 " align="center" prop="nodetype" />
+      <el-table-column label=" 鑺傜偣鍚嶇О " align="center" prop="nodename" />
+      <el-table-column label=" 鍋滈】鏃堕暱" align="center" prop="maxsentencesilence" />
+      <el-table-column label=" 绛夊緟鏃堕暱" align="center" prop="waittime" />
+      <el-table-column label=" 璇濇湳绫诲瀷;寰幆鑺傜偣鐢� 0.鍘熻妭鐐硅瘽鏈� 1.浣跨敤鏂拌瘽鏈� " align="center" prop="corpustype" />
+      <el-table-column label=" 鏂拌瘽鏈瓑寰呮椂闀�" align="center" prop="corpuswaittime" />
+      <el-table-column label=" 鏈�澶ч噸澶嶆鏁�;寰幆鑺傜偣鐢� " align="center" prop="maxrepetition" />
+      <el-table-column label=" 璺宠浆绫诲瀷;璺宠浆鑺傜偣鐢� 0.鎸傛満 1.璺宠浆娴佺▼ " align="center" prop="jumptype" />
+      <el-table-column label=" 璺宠浆鑷�;璺宠浆鑺傜偣鐢� 鐩墠鏀炬祦绋婭D " align="center" prop="jumpto" />
+      <el-table-column label=" 娴佺▼鍥剧敓鎴怚D " align="center" prop="flowcode" />
+      <el-table-column label=" 璺宠浆鐩爣鑺傜偣ID " align="center" prop="targetid" />
+      <el-table-column label=" 鎷疯礉ID " align="center" prop="oldid" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrflownode:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrflownode:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠娴佺▼鑺傜偣瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼ID " prop="flowid">
+          <el-input v-model="form.flowid" placeholder="璇疯緭鍏� 娴佺▼ID " />
+        </el-form-item>
+        <el-form-item label=" 鑺傜偣鍚嶇О " prop="nodename">
+          <el-input v-model="form.nodename" placeholder="璇疯緭鍏� 鑺傜偣鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鍋滈】鏃堕暱" prop="maxsentencesilence">
+          <el-input v-model="form.maxsentencesilence" placeholder="璇疯緭鍏� 鍋滈】鏃堕暱" />
+        </el-form-item>
+        <el-form-item label=" 绛夊緟鏃堕暱" prop="waittime">
+          <el-input v-model="form.waittime" placeholder="璇疯緭鍏� 绛夊緟鏃堕暱" />
+        </el-form-item>
+        <el-form-item label=" 鏂拌瘽鏈瓑寰呮椂闀�" prop="corpuswaittime">
+          <el-input v-model="form.corpuswaittime" placeholder="璇疯緭鍏� 鏂拌瘽鏈瓑寰呮椂闀�" />
+        </el-form-item>
+        <el-form-item label=" 鏈�澶ч噸澶嶆鏁�;寰幆鑺傜偣鐢� " prop="maxrepetition">
+          <el-input v-model="form.maxrepetition" placeholder="璇疯緭鍏� 鏈�澶ч噸澶嶆鏁�;寰幆鑺傜偣鐢� " />
+        </el-form-item>
+        <el-form-item label=" 璺宠浆鑷�;璺宠浆鑺傜偣鐢� 鐩墠鏀炬祦绋婭D " prop="jumpto">
+          <el-input v-model="form.jumpto" placeholder="璇疯緭鍏� 璺宠浆鑷�;璺宠浆鑺傜偣鐢� 鐩墠鏀炬祦绋婭D " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼鍥剧敓鎴怚D " prop="flowcode">
+          <el-input v-model="form.flowcode" placeholder="璇疯緭鍏� 娴佺▼鍥剧敓鎴怚D " />
+        </el-form-item>
+        <el-form-item label=" 璺宠浆鐩爣鑺傜偣ID " prop="targetid">
+          <el-input v-model="form.targetid" placeholder="璇疯緭鍏� 璺宠浆鐩爣鑺傜偣ID " />
+        </el-form-item>
+        <el-form-item label=" 鎷疯礉ID " prop="oldid">
+          <el-input v-model="form.oldid" placeholder="璇疯緭鍏� 鎷疯礉ID " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrflownode, getIvrflownode, delIvrflownode, addIvrflownode, updateIvrflownode } from "@/api/smartor/ivrflownode";
+
+export default {
+  name: "Ivrflownode",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠娴佺▼鑺傜偣琛ㄦ牸鏁版嵁
+      ivrflownodeList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        flowid: null,
+        nodetype: null,
+        nodename: null,
+        maxsentencesilence: null,
+        waittime: null,
+        corpustype: null,
+        corpuswaittime: null,
+        maxrepetition: null,
+        jumptype: null,
+        jumpto: null,
+        flowcode: null,
+        targetid: null,
+        oldid: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠娴佺▼鑺傜偣鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrflownode(this.queryParams).then(response => {
+        this.ivrflownodeList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        flownodeid: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        flowid: null,
+        nodetype: null,
+        nodename: null,
+        maxsentencesilence: null,
+        waittime: null,
+        corpustype: null,
+        corpuswaittime: null,
+        maxrepetition: null,
+        jumptype: null,
+        jumpto: null,
+        flowcode: null,
+        targetid: null,
+        oldid: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.flownodeid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠娴佺▼鑺傜偣";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const flownodeid = row.flownodeid || this.ids
+      getIvrflownode(flownodeid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠娴佺▼鑺傜偣";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.flownodeid != null) {
+            updateIvrflownode(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrflownode(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const flownodeids = row.flownodeid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠娴佺▼鑺傜偣缂栧彿涓�"' + flownodeids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrflownode(flownodeids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrflownode/export', {
+        ...this.queryParams
+      }, `ivrflownode_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrflownodebranch/index.vue b/ruoyi-ui/src/views/smartor/ivrflownodebranch/index.vue
new file mode 100644
index 0000000..7bbce3c
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrflownodebranch/index.vue
@@ -0,0 +1,411 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼ID " prop="flowid">
+        <el-input
+          v-model="queryParams.flowid"
+          placeholder="璇疯緭鍏� 娴佺▼ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鑺傜偣ID " prop="flownodeid">
+        <el-input
+          v-model="queryParams.flownodeid"
+          placeholder="璇疯緭鍏� 鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍒嗘敮鍚嶇О " prop="branchname">
+        <el-input
+          v-model="queryParams.branchname"
+          placeholder="璇疯緭鍏� 鍒嗘敮鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏄惁鍚敤;0.鍚� 1.鏄� " prop="isenable">
+        <el-input
+          v-model="queryParams.isenable"
+          placeholder="璇疯緭鍏� 鏄惁鍚敤;0.鍚� 1.鏄� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎺掑簭 " prop="sort">
+        <el-input
+          v-model="queryParams.sort"
+          placeholder="璇疯緭鍏� 鎺掑簭 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璺宠浆鐩爣鑺傜偣ID " prop="targetid">
+        <el-input
+          v-model="queryParams.targetid"
+          placeholder="璇疯緭鍏� 璺宠浆鐩爣鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎷疯礉ID " prop="oldid">
+        <el-input
+          v-model="queryParams.oldid"
+          placeholder="璇疯緭鍏� 鎷疯礉ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrflownodebranch:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrflownodebranch:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrflownodebranch:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrflownodebranch:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrflownodebranchList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="branchid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" AI澶栧懠鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label=" 娴佺▼ID " align="center" prop="flowid" />
+      <el-table-column label=" 鑺傜偣ID " align="center" prop="flownodeid" />
+      <el-table-column label=" 鍒嗘敮鍚嶇О " align="center" prop="branchname" />
+      <el-table-column label=" 鏄惁鍚敤;0.鍚� 1.鏄� " align="center" prop="isenable" />
+      <el-table-column label=" 鎺掑簭 " align="center" prop="sort" />
+      <el-table-column label=" 鍒嗘敮绫诲瀷;1 浠讳綍鍥炲锛�2鏃犲洖澶嶏紝3鏈瘑鍒� 9.鏅�氬垎鏀� " align="center" prop="nodetype" />
+      <el-table-column label=" 璺宠浆鐩爣鑺傜偣ID " align="center" prop="targetid" />
+      <el-table-column label=" 鎷疯礉ID " align="center" prop="oldid" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrflownodebranch:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrflownodebranch:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠娴佺▼鑺傜偣鍒嗘敮瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼ID " prop="flowid">
+          <el-input v-model="form.flowid" placeholder="璇疯緭鍏� 娴佺▼ID " />
+        </el-form-item>
+        <el-form-item label=" 鑺傜偣ID " prop="flownodeid">
+          <el-input v-model="form.flownodeid" placeholder="璇疯緭鍏� 鑺傜偣ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒嗘敮鍚嶇О " prop="branchname">
+          <el-input v-model="form.branchname" placeholder="璇疯緭鍏� 鍒嗘敮鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鏄惁鍚敤;0.鍚� 1.鏄� " prop="isenable">
+          <el-input v-model="form.isenable" placeholder="璇疯緭鍏� 鏄惁鍚敤;0.鍚� 1.鏄� " />
+        </el-form-item>
+        <el-form-item label=" 鎺掑簭 " prop="sort">
+          <el-input v-model="form.sort" placeholder="璇疯緭鍏� 鎺掑簭 " />
+        </el-form-item>
+        <el-form-item label=" 璺宠浆鐩爣鑺傜偣ID " prop="targetid">
+          <el-input v-model="form.targetid" placeholder="璇疯緭鍏� 璺宠浆鐩爣鑺傜偣ID " />
+        </el-form-item>
+        <el-form-item label=" 鎷疯礉ID " prop="oldid">
+          <el-input v-model="form.oldid" placeholder="璇疯緭鍏� 鎷疯礉ID " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrflownodebranch, getIvrflownodebranch, delIvrflownodebranch, addIvrflownodebranch, updateIvrflownodebranch } from "@/api/smartor/ivrflownodebranch";
+
+export default {
+  name: "Ivrflownodebranch",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠娴佺▼鑺傜偣鍒嗘敮琛ㄦ牸鏁版嵁
+      ivrflownodebranchList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        flowid: null,
+        flownodeid: null,
+        branchname: null,
+        isenable: null,
+        sort: null,
+        nodetype: null,
+        targetid: null,
+        oldid: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠娴佺▼鑺傜偣鍒嗘敮鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrflownodebranch(this.queryParams).then(response => {
+        this.ivrflownodebranchList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        branchid: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        sceneid: null,
+        flowid: null,
+        flownodeid: null,
+        branchname: null,
+        isenable: null,
+        sort: null,
+        nodetype: null,
+        targetid: null,
+        oldid: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.branchid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠娴佺▼鑺傜偣鍒嗘敮";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const branchid = row.branchid || this.ids
+      getIvrflownodebranch(branchid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠娴佺▼鑺傜偣鍒嗘敮";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.branchid != null) {
+            updateIvrflownodebranch(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrflownodebranch(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const branchids = row.branchid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠娴佺▼鑺傜偣鍒嗘敮缂栧彿涓�"' + branchids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrflownodebranch(branchids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrflownodebranch/export', {
+        ...this.queryParams
+      }, `ivrflownodebranch_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrglobalconfig/index.vue b/ruoyi-ui/src/views/smartor/ivrglobalconfig/index.vue
new file mode 100644
index 0000000..a0e5e8e
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrglobalconfig/index.vue
@@ -0,0 +1,389 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 閰嶇疆鍚嶇О " prop="configname">
+        <el-input
+          v-model="queryParams.configname"
+          placeholder="璇疯緭鍏� 閰嶇疆鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 浼樺厛绾� " prop="sort">
+        <el-input
+          v-model="queryParams.sort"
+          placeholder="璇疯緭鍏� 浼樺厛绾� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏄惁鍚敤;0.鍚� 1.鏄� " prop="isenable">
+        <el-input
+          v-model="queryParams.isenable"
+          placeholder="璇疯緭鍏� 鏄惁鍚敤;0.鍚� 1.鏄� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璺宠浆绫诲瀷;0.鎸傛満 1.閲嶅鑺傜偣 " prop="jumpto">
+        <el-input
+          v-model="queryParams.jumpto"
+          placeholder="璇疯緭鍏� 璺宠浆绫诲瀷;0.鎸傛満 1.閲嶅鑺傜偣 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 閲嶅娆℃暟 " prop="repeatcount">
+        <el-input
+          v-model="queryParams.repeatcount"
+          placeholder="璇疯緭鍏� 閲嶅娆℃暟 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrglobalconfig:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrglobalconfig:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrglobalconfig:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrglobalconfig:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrglobalconfigList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="gblconfigid" />
+      <el-table-column label=" AI澶栧懠鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label=" 閰嶇疆鍚嶇О " align="center" prop="configname" />
+      <el-table-column label=" 閰嶇疆鎻忚堪 " align="center" prop="description" />
+      <el-table-column label=" 浼樺厛绾� " align="center" prop="sort" />
+      <el-table-column label=" 浼樺厛鎵ц绫诲瀷;1.鍒嗘敮鍔ㄤ綔 2.閰嶇疆鍔ㄤ綔 " align="center" prop="executetype" />
+      <el-table-column label=" 鏄惁鍚敤;0.鍚� 1.鏄� " align="center" prop="isenable" />
+      <el-table-column label=" 璺宠浆绫诲瀷;0.鎸傛満 1.閲嶅鑺傜偣 " align="center" prop="jumpto" />
+      <el-table-column label=" 閲嶅娆℃暟 " align="center" prop="repeatcount" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrglobalconfig:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrglobalconfig:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠鍏ㄥ眬閰嶇疆瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" AI澶栧懠鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� AI澶栧懠鍦烘櫙ID " />
+        </el-form-item>
+        <el-form-item label=" 閰嶇疆鍚嶇О " prop="configname">
+          <el-input v-model="form.configname" placeholder="璇疯緭鍏� 閰嶇疆鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 閰嶇疆鎻忚堪 " prop="description">
+          <el-input v-model="form.description" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 浼樺厛绾� " prop="sort">
+          <el-input v-model="form.sort" placeholder="璇疯緭鍏� 浼樺厛绾� " />
+        </el-form-item>
+        <el-form-item label=" 鏄惁鍚敤;0.鍚� 1.鏄� " prop="isenable">
+          <el-input v-model="form.isenable" placeholder="璇疯緭鍏� 鏄惁鍚敤;0.鍚� 1.鏄� " />
+        </el-form-item>
+        <el-form-item label=" 璺宠浆绫诲瀷;0.鎸傛満 1.閲嶅鑺傜偣 " prop="jumpto">
+          <el-input v-model="form.jumpto" placeholder="璇疯緭鍏� 璺宠浆绫诲瀷;0.鎸傛満 1.閲嶅鑺傜偣 " />
+        </el-form-item>
+        <el-form-item label=" 閲嶅娆℃暟 " prop="repeatcount">
+          <el-input v-model="form.repeatcount" placeholder="璇疯緭鍏� 閲嶅娆℃暟 " />
+        </el-form-item>
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrglobalconfig, getIvrglobalconfig, delIvrglobalconfig, addIvrglobalconfig, updateIvrglobalconfig } from "@/api/smartor/ivrglobalconfig";
+
+export default {
+  name: "Ivrglobalconfig",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠鍏ㄥ眬閰嶇疆琛ㄦ牸鏁版嵁
+      ivrglobalconfigList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        sceneid: null,
+        configname: null,
+        description: null,
+        sort: null,
+        executetype: null,
+        isenable: null,
+        jumpto: null,
+        repeatcount: null,
+        orgid: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠鍏ㄥ眬閰嶇疆鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrglobalconfig(this.queryParams).then(response => {
+        this.ivrglobalconfigList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        gblconfigid: null,
+        sceneid: null,
+        configname: null,
+        description: null,
+        sort: null,
+        executetype: null,
+        isenable: null,
+        jumpto: null,
+        repeatcount: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.gblconfigid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠鍏ㄥ眬閰嶇疆";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const gblconfigid = row.gblconfigid || this.ids
+      getIvrglobalconfig(gblconfigid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠鍏ㄥ眬閰嶇疆";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.gblconfigid != null) {
+            updateIvrglobalconfig(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrglobalconfig(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const gblconfigids = row.gblconfigid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠鍏ㄥ眬閰嶇疆缂栧彿涓�"' + gblconfigids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrglobalconfig(gblconfigids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrglobalconfig/export', {
+        ...this.queryParams
+      }, `ivrglobalconfig_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrintent/index.vue b/ruoyi-ui/src/views/smartor/ivrintent/index.vue
new file mode 100644
index 0000000..f9c7283
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrintent/index.vue
@@ -0,0 +1,476 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " prop="gbiconfigid">
+        <el-input
+          v-model="queryParams.gbiconfigid"
+          placeholder="璇疯緭鍏� 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� 鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼ID " prop="flowid">
+        <el-input
+          v-model="queryParams.flowid"
+          placeholder="璇疯緭鍏� 娴佺▼ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼鑺傜偣ID " prop="flownodeid">
+        <el-input
+          v-model="queryParams.flownodeid"
+          placeholder="璇疯緭鍏� 娴佺▼鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼鑺傜偣鍒嗘敮ID " prop="flownodebranchid">
+        <el-input
+          v-model="queryParams.flownodebranchid"
+          placeholder="璇疯緭鍏� 娴佺▼鑺傜偣鍒嗘敮ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 寮曠敤鎰忓浘妯℃澘ID " prop="templateid">
+        <el-input
+          v-model="queryParams.templateid"
+          placeholder="璇疯緭鍏� 寮曠敤鎰忓浘妯℃澘ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎰忓浘鍚嶇О " prop="intentionname">
+        <el-input
+          v-model="queryParams.intentionname"
+          placeholder="璇疯緭鍏� 鎰忓浘鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 楠岃瘉瑙勫垯;澶氶�夐�楀彿闅斿紑" prop="verifyrule">
+        <el-input
+          v-model="queryParams.verifyrule"
+          placeholder="璇疯緭鍏� 楠岃瘉瑙勫垯;澶氶�夐�楀彿闅斿紑"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 瀛愪笖鎴�;0.鎴� 1.涓� " prop="orand">
+        <el-input
+          v-model="queryParams.orand"
+          placeholder="璇疯緭鍏� 瀛愪笖鎴�;0.鎴� 1.涓� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鐖舵潯浠� " prop="parentresultconditionsid">
+        <el-input
+          v-model="queryParams.parentresultconditionsid"
+          placeholder="璇疯緭鍏� 鐖舵潯浠� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鐖剁骇鍒嗙粍 " prop="groupnumber">
+        <el-input
+          v-model="queryParams.groupnumber"
+          placeholder="璇疯緭鍏� 鐖剁骇鍒嗙粍 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鐖朵笖鎴� " prop="grouporand">
+        <el-input
+          v-model="queryParams.grouporand"
+          placeholder="璇疯緭鍏� 鐖朵笖鎴� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrintent:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrintent:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrintent:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrintent:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrintentList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="sceneintentid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 鏉ユ簮绫诲瀷;0.鍏ㄥ眬 1.涓荤嚎 " align="center" prop="sourcetype" />
+      <el-table-column label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " align="center" prop="gbiconfigid" />
+      <el-table-column label=" 鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label=" 娴佺▼ID " align="center" prop="flowid" />
+      <el-table-column label=" 娴佺▼鑺傜偣ID " align="center" prop="flownodeid" />
+      <el-table-column label=" 娴佺▼鑺傜偣鍒嗘敮ID " align="center" prop="flownodebranchid" />
+      <el-table-column label=" 寮曠敤鎰忓浘妯℃澘ID " align="center" prop="templateid" />
+      <el-table-column label=" 鎰忓浘鍚嶇О " align="center" prop="intentionname" />
+      <el-table-column label=" 鎰忓浘鍏抽敭瀛�" align="center" prop="intentionword" />
+      <el-table-column label=" 鏉′欢绫诲瀷;0.鎰忓浘璇嗗埆 1.鎮h�呮爣绛� " align="center" prop="conditionstype" />
+      <el-table-column label=" 楠岃瘉瑙勫垯;澶氶�夐�楀彿闅斿紑" align="center" prop="verifyrule" />
+      <el-table-column label=" 瀛愪笖鎴�;0.鎴� 1.涓� " align="center" prop="orand" />
+      <el-table-column label=" 鐖舵潯浠� " align="center" prop="parentresultconditionsid" />
+      <el-table-column label=" 鐖剁骇鍒嗙粍 " align="center" prop="groupnumber" />
+      <el-table-column label=" 鐖朵笖鎴� " align="center" prop="grouporand" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrintent:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrintent:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠鎰忓浘瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " prop="gbiconfigid">
+          <el-input v-model="form.gbiconfigid" placeholder="璇疯緭鍏� 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " />
+        </el-form-item>
+        <el-form-item label=" 鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� 鍦烘櫙ID " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼ID " prop="flowid">
+          <el-input v-model="form.flowid" placeholder="璇疯緭鍏� 娴佺▼ID " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼鑺傜偣ID " prop="flownodeid">
+          <el-input v-model="form.flownodeid" placeholder="璇疯緭鍏� 娴佺▼鑺傜偣ID " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼鑺傜偣鍒嗘敮ID " prop="flownodebranchid">
+          <el-input v-model="form.flownodebranchid" placeholder="璇疯緭鍏� 娴佺▼鑺傜偣鍒嗘敮ID " />
+        </el-form-item>
+        <el-form-item label=" 寮曠敤鎰忓浘妯℃澘ID " prop="templateid">
+          <el-input v-model="form.templateid" placeholder="璇疯緭鍏� 寮曠敤鎰忓浘妯℃澘ID " />
+        </el-form-item>
+        <el-form-item label=" 鎰忓浘鍚嶇О " prop="intentionname">
+          <el-input v-model="form.intentionname" placeholder="璇疯緭鍏� 鎰忓浘鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鎰忓浘鍏抽敭瀛�" prop="intentionword">
+          <el-input v-model="form.intentionword" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 楠岃瘉瑙勫垯;澶氶�夐�楀彿闅斿紑" prop="verifyrule">
+          <el-input v-model="form.verifyrule" placeholder="璇疯緭鍏� 楠岃瘉瑙勫垯;澶氶�夐�楀彿闅斿紑" />
+        </el-form-item>
+        <el-form-item label=" 瀛愪笖鎴�;0.鎴� 1.涓� " prop="orand">
+          <el-input v-model="form.orand" placeholder="璇疯緭鍏� 瀛愪笖鎴�;0.鎴� 1.涓� " />
+        </el-form-item>
+        <el-form-item label=" 鐖舵潯浠� " prop="parentresultconditionsid">
+          <el-input v-model="form.parentresultconditionsid" placeholder="璇疯緭鍏� 鐖舵潯浠� " />
+        </el-form-item>
+        <el-form-item label=" 鐖剁骇鍒嗙粍 " prop="groupnumber">
+          <el-input v-model="form.groupnumber" placeholder="璇疯緭鍏� 鐖剁骇鍒嗙粍 " />
+        </el-form-item>
+        <el-form-item label=" 鐖朵笖鎴� " prop="grouporand">
+          <el-input v-model="form.grouporand" placeholder="璇疯緭鍏� 鐖朵笖鎴� " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrintent, getIvrintent, delIvrintent, addIvrintent, updateIvrintent } from "@/api/smartor/ivrintent";
+
+export default {
+  name: "Ivrintent",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠鎰忓浘琛ㄦ牸鏁版嵁
+      ivrintentList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        sourcetype: null,
+        gbiconfigid: null,
+        sceneid: null,
+        flowid: null,
+        flownodeid: null,
+        flownodebranchid: null,
+        templateid: null,
+        intentionname: null,
+        intentionword: null,
+        conditionstype: null,
+        verifyrule: null,
+        orand: null,
+        parentresultconditionsid: null,
+        groupnumber: null,
+        grouporand: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠鎰忓浘鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrintent(this.queryParams).then(response => {
+        this.ivrintentList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        sceneintentid: null,
+        orgid: null,
+        sourcetype: null,
+        gbiconfigid: null,
+        sceneid: null,
+        flowid: null,
+        flownodeid: null,
+        flownodebranchid: null,
+        templateid: null,
+        intentionname: null,
+        intentionword: null,
+        conditionstype: null,
+        verifyrule: null,
+        orand: null,
+        parentresultconditionsid: null,
+        groupnumber: null,
+        grouporand: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.sceneintentid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠鎰忓浘";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const sceneintentid = row.sceneintentid || this.ids
+      getIvrintent(sceneintentid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠鎰忓浘";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.sceneintentid != null) {
+            updateIvrintent(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrintent(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const sceneintentids = row.sceneintentid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠鎰忓浘缂栧彿涓�"' + sceneintentids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrintent(sceneintentids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrintent/export', {
+        ...this.queryParams
+      }, `ivrintent_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrlibintent/index.vue b/ruoyi-ui/src/views/smartor/ivrlibintent/index.vue
new file mode 100644
index 0000000..f9ddb17
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrlibintent/index.vue
@@ -0,0 +1,344 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎰忓浘鍚嶇О " prop="intentionname">
+        <el-input
+          v-model="queryParams.intentionname"
+          placeholder="璇疯緭鍏� 鎰忓浘鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍒嗙被ID " prop="categoryid">
+        <el-input
+          v-model="queryParams.categoryid"
+          placeholder="璇疯緭鍏� 鍒嗙被ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鎰忓浘鍒嗙被鍚嶇О " prop="categoryname">
+        <el-input
+          v-model="queryParams.categoryname"
+          placeholder="璇疯緭鍏� 鎰忓浘鍒嗙被鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrlibintent:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrlibintent:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrlibintent:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrlibintent:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrlibintentList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="intentid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 鎰忓浘鍚嶇О " align="center" prop="intentionname" />
+      <el-table-column label=" 鍒嗙被ID " align="center" prop="categoryid" />
+      <el-table-column label=" 鎰忓浘鍒嗙被鍚嶇О " align="center" prop="categoryname" />
+      <el-table-column label=" 鎰忓浘鍏抽敭瀛�" align="center" prop="intentionword" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrlibintent:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrlibintent:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I鎰忓浘搴撳璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鎰忓浘鍚嶇О " prop="intentionname">
+          <el-input v-model="form.intentionname" placeholder="璇疯緭鍏� 鎰忓浘鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鍒嗙被ID " prop="categoryid">
+          <el-input v-model="form.categoryid" placeholder="璇疯緭鍏� 鍒嗙被ID " />
+        </el-form-item>
+        <el-form-item label=" 鎰忓浘鍒嗙被鍚嶇О " prop="categoryname">
+          <el-input v-model="form.categoryname" placeholder="璇疯緭鍏� 鎰忓浘鍒嗙被鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鎰忓浘鍏抽敭瀛�" prop="intentionword">
+          <el-input v-model="form.intentionword" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrlibintent, getIvrlibintent, delIvrlibintent, addIvrlibintent, updateIvrlibintent } from "@/api/smartor/ivrlibintent";
+
+export default {
+  name: "Ivrlibintent",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI鎰忓浘搴撹〃鏍兼暟鎹�
+      ivrlibintentList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        intentionname: null,
+        categoryid: null,
+        categoryname: null,
+        intentionword: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI鎰忓浘搴撳垪琛� */
+    getList() {
+      this.loading = true;
+      listIvrlibintent(this.queryParams).then(response => {
+        this.ivrlibintentList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        intentid: null,
+        orgid: null,
+        intentionname: null,
+        categoryid: null,
+        categoryname: null,
+        intentionword: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.intentid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI鎰忓浘搴�";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const intentid = row.intentid || this.ids
+      getIvrlibintent(intentid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI鎰忓浘搴�";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.intentid != null) {
+            updateIvrlibintent(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrlibintent(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const intentids = row.intentid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI鎰忓浘搴撶紪鍙蜂负"' + intentids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrlibintent(intentids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrlibintent/export', {
+        ...this.queryParams
+      }, `ivrlibintent_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrlibintentcategory/index.vue b/ruoyi-ui/src/views/smartor/ivrlibintentcategory/index.vue
new file mode 100644
index 0000000..1f0461a
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrlibintentcategory/index.vue
@@ -0,0 +1,310 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+        <el-input
+          v-model="queryParams.categoryname"
+          placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrlibintentcategory:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrlibintentcategory:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrlibintentcategory:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrlibintentcategory:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrlibintentcategoryList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="intertcatid" />
+      <el-table-column label=" 鍒嗙被鍚嶇О " align="center" prop="categoryname" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrlibintentcategory:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrlibintentcategory:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I鎰忓浘搴撳垎绫诲璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+          <el-input v-model="form.categoryname" placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrlibintentcategory, getIvrlibintentcategory, delIvrlibintentcategory, addIvrlibintentcategory, updateIvrlibintentcategory } from "@/api/smartor/ivrlibintentcategory";
+
+export default {
+  name: "Ivrlibintentcategory",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI鎰忓浘搴撳垎绫昏〃鏍兼暟鎹�
+      ivrlibintentcategoryList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        categoryname: null,
+        orgid: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI鎰忓浘搴撳垎绫诲垪琛� */
+    getList() {
+      this.loading = true;
+      listIvrlibintentcategory(this.queryParams).then(response => {
+        this.ivrlibintentcategoryList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        intertcatid: null,
+        categoryname: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.intertcatid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI鎰忓浘搴撳垎绫�";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const intertcatid = row.intertcatid || this.ids
+      getIvrlibintentcategory(intertcatid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI鎰忓浘搴撳垎绫�";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.intertcatid != null) {
+            updateIvrlibintentcategory(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrlibintentcategory(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const intertcatids = row.intertcatid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI鎰忓浘搴撳垎绫荤紪鍙蜂负"' + intertcatids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrlibintentcategory(intertcatids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrlibintentcategory/export', {
+        ...this.queryParams
+      }, `ivrlibintentcategory_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrlibscript/index.vue b/ruoyi-ui/src/views/smartor/ivrlibscript/index.vue
new file mode 100644
index 0000000..8877627
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrlibscript/index.vue
@@ -0,0 +1,380 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍒嗙被 " prop="categoryid">
+        <el-input
+          v-model="queryParams.categoryid"
+          placeholder="璇疯緭鍏� 鍒嗙被 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+        <el-input
+          v-model="queryParams.categoryname"
+          placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳鍐呭" prop="speakbody">
+        <el-input
+          v-model="queryParams.speakbody"
+          placeholder="璇疯緭鍏� 璇濇湳鍐呭"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳鏂囦欢璺緞" prop="speakfilepath">
+        <el-input
+          v-model="queryParams.speakfilepath"
+          placeholder="璇疯緭鍏� 璇濇湳鏂囦欢璺緞"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏄惁鍏ㄥ眬銆�0鍚�1鏄�� " prop="isall">
+        <el-input
+          v-model="queryParams.isall"
+          placeholder="璇疯緭鍏� 鏄惁鍏ㄥ眬銆�0鍚�1鏄�� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳鍚嶇О " prop="speakname">
+        <el-input
+          v-model="queryParams.speakname"
+          placeholder="璇疯緭鍏� 璇濇湳鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrlibscript:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrlibscript:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrlibscript:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrlibscript:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrlibscriptList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="scriptid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 鍒嗙被 " align="center" prop="categoryid" />
+      <el-table-column label=" 鍒嗙被鍚嶇О " align="center" prop="categoryname" />
+      <el-table-column label=" 璇濇湳鍐呭" align="center" prop="speakbody" />
+      <el-table-column label=" 璇濇湳鏂囦欢璺緞" align="center" prop="speakfilepath" />
+      <el-table-column label=" 鏄惁鍏ㄥ眬銆�0鍚�1鏄�� " align="center" prop="isall" />
+      <el-table-column label=" 璇濇湳鍚嶇О " align="center" prop="speakname" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrlibscript:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrlibscript:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I璇濇湳搴撳璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒嗙被 " prop="categoryid">
+          <el-input v-model="form.categoryid" placeholder="璇疯緭鍏� 鍒嗙被 " />
+        </el-form-item>
+        <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+          <el-input v-model="form.categoryname" placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鍐呭" prop="speakbody">
+          <el-input v-model="form.speakbody" placeholder="璇疯緭鍏� 璇濇湳鍐呭" />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鏂囦欢璺緞" prop="speakfilepath">
+          <el-input v-model="form.speakfilepath" placeholder="璇疯緭鍏� 璇濇湳鏂囦欢璺緞" />
+        </el-form-item>
+        <el-form-item label=" 鏄惁鍏ㄥ眬銆�0鍚�1鏄�� " prop="isall">
+          <el-input v-model="form.isall" placeholder="璇疯緭鍏� 鏄惁鍏ㄥ眬銆�0鍚�1鏄�� " />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鍚嶇О " prop="speakname">
+          <el-input v-model="form.speakname" placeholder="璇疯緭鍏� 璇濇湳鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrlibscript, getIvrlibscript, delIvrlibscript, addIvrlibscript, updateIvrlibscript } from "@/api/smartor/ivrlibscript";
+
+export default {
+  name: "Ivrlibscript",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI璇濇湳搴撹〃鏍兼暟鎹�
+      ivrlibscriptList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        categoryid: null,
+        categoryname: null,
+        speakbody: null,
+        speakfilepath: null,
+        isall: null,
+        speakname: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI璇濇湳搴撳垪琛� */
+    getList() {
+      this.loading = true;
+      listIvrlibscript(this.queryParams).then(response => {
+        this.ivrlibscriptList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        scriptid: null,
+        orgid: null,
+        categoryid: null,
+        categoryname: null,
+        speakbody: null,
+        speakfilepath: null,
+        isall: null,
+        speakname: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.scriptid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI璇濇湳搴�";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const scriptid = row.scriptid || this.ids
+      getIvrlibscript(scriptid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI璇濇湳搴�";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.scriptid != null) {
+            updateIvrlibscript(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrlibscript(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const scriptids = row.scriptid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI璇濇湳搴撶紪鍙蜂负"' + scriptids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrlibscript(scriptids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrlibscript/export', {
+        ...this.queryParams
+      }, `ivrlibscript_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrlibscriptcategory/index.vue b/ruoyi-ui/src/views/smartor/ivrlibscriptcategory/index.vue
new file mode 100644
index 0000000..78a74f3
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrlibscriptcategory/index.vue
@@ -0,0 +1,310 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+        <el-input
+          v-model="queryParams.categoryname"
+          placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrlibscriptcategory:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrlibscriptcategory:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrlibscriptcategory:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrlibscriptcategory:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrlibscriptcategoryList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="categoryid" />
+      <el-table-column label=" 鍒嗙被鍚嶇О " align="center" prop="categoryname" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrlibscriptcategory:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrlibscriptcategory:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I璇濇湳搴撳垎绫诲璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+          <el-input v-model="form.categoryname" placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrlibscriptcategory, getIvrlibscriptcategory, delIvrlibscriptcategory, addIvrlibscriptcategory, updateIvrlibscriptcategory } from "@/api/smartor/ivrlibscriptcategory";
+
+export default {
+  name: "Ivrlibscriptcategory",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI璇濇湳搴撳垎绫昏〃鏍兼暟鎹�
+      ivrlibscriptcategoryList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        categoryname: null,
+        orgid: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI璇濇湳搴撳垎绫诲垪琛� */
+    getList() {
+      this.loading = true;
+      listIvrlibscriptcategory(this.queryParams).then(response => {
+        this.ivrlibscriptcategoryList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        categoryid: null,
+        categoryname: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.categoryid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI璇濇湳搴撳垎绫�";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const categoryid = row.categoryid || this.ids
+      getIvrlibscriptcategory(categoryid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI璇濇湳搴撳垎绫�";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.categoryid != null) {
+            updateIvrlibscriptcategory(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrlibscriptcategory(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const categoryids = row.categoryid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI璇濇湳搴撳垎绫荤紪鍙蜂负"' + categoryids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrlibscriptcategory(categoryids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrlibscriptcategory/export', {
+        ...this.queryParams
+      }, `ivrlibscriptcategory_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrlibscriptmodel/index.vue b/ruoyi-ui/src/views/smartor/ivrlibscriptmodel/index.vue
new file mode 100644
index 0000000..20b4ec8
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrlibscriptmodel/index.vue
@@ -0,0 +1,409 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳ID " prop="scriptid">
+        <el-input
+          v-model="queryParams.scriptid"
+          placeholder="璇疯緭鍏� 璇濇湳ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇煶鏂囦欢 " prop="speakfilepath">
+        <el-input
+          v-model="queryParams.speakfilepath"
+          placeholder="璇疯緭鍏� 璇煶鏂囦欢 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍚堟垚鍘傚晢 " prop="manufactor">
+        <el-input
+          v-model="queryParams.manufactor"
+          placeholder="璇疯緭鍏� 鍚堟垚鍘傚晢 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇�� " prop="speechnum">
+        <el-input
+          v-model="queryParams.speechnum"
+          placeholder="璇疯緭鍏� 璇�� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 闊抽珮 " prop="pitch">
+        <el-input
+          v-model="queryParams.pitch"
+          placeholder="璇疯緭鍏� 闊抽珮 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 闊抽噺 " prop="volume">
+        <el-input
+          v-model="queryParams.volume"
+          placeholder="璇疯緭鍏� 闊抽噺 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" 鍙橀噺璇濇湳鍙橀噺 " prop="speakvariable">
+        <el-input
+          v-model="queryParams.speakvariable"
+          placeholder="璇疯緭鍏� 鍙橀噺璇濇湳鍙橀噺 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrlibscriptmodel:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrlibscriptmodel:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrlibscriptmodel:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrlibscriptmodel:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrlibscriptmodelList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="modelid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 璇濇湳ID " align="center" prop="scriptid" />
+      <el-table-column label=" 璇濇湳绫诲瀷銆�0:鏅�氳瘽鏈� 1:鍙橀噺璇濇湳銆� " align="center" prop="speaktype" />
+      <el-table-column label=" 璇濇湳鍐呭 " align="center" prop="speakbody" />
+      <el-table-column label=" 璇煶绫诲瀷銆�0:鐪熶汉褰曢煶 1:鍚堟垚璇煶銆� " align="center" prop="voicetype" />
+      <el-table-column label=" 璇煶鏂囦欢 " align="center" prop="speakfilepath" />
+      <el-table-column label=" 鍚堟垚鍘傚晢 " align="center" prop="manufactor" />
+      <el-table-column label=" 澹伴煶绫诲瀷 " align="center" prop="soundtype" />
+      <el-table-column label=" 璇�� " align="center" prop="speechnum" />
+      <el-table-column label=" 闊抽珮 " align="center" prop="pitch" />
+      <el-table-column label=" 闊抽噺 " align="center" prop="volume" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" 鍙橀噺璇濇湳鍙橀噺 " align="center" prop="speakvariable" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrlibscriptmodel:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrlibscriptmodel:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I璇濇湳妯″潡瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳ID " prop="scriptid">
+          <el-input v-model="form.scriptid" placeholder="璇疯緭鍏� 璇濇湳ID " />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鍐呭 " prop="speakbody">
+          <el-input v-model="form.speakbody" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 璇煶鏂囦欢 " prop="speakfilepath">
+          <el-input v-model="form.speakfilepath" placeholder="璇疯緭鍏� 璇煶鏂囦欢 " />
+        </el-form-item>
+        <el-form-item label=" 鍚堟垚鍘傚晢 " prop="manufactor">
+          <el-input v-model="form.manufactor" placeholder="璇疯緭鍏� 鍚堟垚鍘傚晢 " />
+        </el-form-item>
+        <el-form-item label=" 璇�� " prop="speechnum">
+          <el-input v-model="form.speechnum" placeholder="璇疯緭鍏� 璇�� " />
+        </el-form-item>
+        <el-form-item label=" 闊抽珮 " prop="pitch">
+          <el-input v-model="form.pitch" placeholder="璇疯緭鍏� 闊抽珮 " />
+        </el-form-item>
+        <el-form-item label=" 闊抽噺 " prop="volume">
+          <el-input v-model="form.volume" placeholder="璇疯緭鍏� 闊抽噺 " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" 鍙橀噺璇濇湳鍙橀噺 " prop="speakvariable">
+          <el-input v-model="form.speakvariable" placeholder="璇疯緭鍏� 鍙橀噺璇濇湳鍙橀噺 " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrlibscriptmodel, getIvrlibscriptmodel, delIvrlibscriptmodel, addIvrlibscriptmodel, updateIvrlibscriptmodel } from "@/api/smartor/ivrlibscriptmodel";
+
+export default {
+  name: "Ivrlibscriptmodel",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI璇濇湳妯″潡琛ㄦ牸鏁版嵁
+      ivrlibscriptmodelList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        scriptid: null,
+        speaktype: null,
+        speakbody: null,
+        voicetype: null,
+        speakfilepath: null,
+        manufactor: null,
+        soundtype: null,
+        speechnum: null,
+        pitch: null,
+        volume: null,
+        isupload: null,
+        uploadTime: null,
+        speakvariable: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI璇濇湳妯″潡鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrlibscriptmodel(this.queryParams).then(response => {
+        this.ivrlibscriptmodelList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        modelid: null,
+        orgid: null,
+        scriptid: null,
+        speaktype: null,
+        speakbody: null,
+        voicetype: null,
+        speakfilepath: null,
+        manufactor: null,
+        soundtype: null,
+        speechnum: null,
+        pitch: null,
+        volume: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        speakvariable: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.modelid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI璇濇湳妯″潡";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const modelid = row.modelid || this.ids
+      getIvrlibscriptmodel(modelid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI璇濇湳妯″潡";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.modelid != null) {
+            updateIvrlibscriptmodel(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrlibscriptmodel(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const modelids = row.modelid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI璇濇湳妯″潡缂栧彿涓�"' + modelids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrlibscriptmodel(modelids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrlibscriptmodel/export', {
+        ...this.queryParams
+      }, `ivrlibscriptmodel_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrrecall/index.vue b/ruoyi-ui/src/views/smartor/ivrrecall/index.vue
new file mode 100644
index 0000000..64efe99
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrrecall/index.vue
@@ -0,0 +1,355 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� 鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娆℃暟 " prop="recallcount">
+        <el-input
+          v-model="queryParams.recallcount"
+          placeholder="璇疯緭鍏� 娆℃暟 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 閲嶆嫧闂撮殧 " prop="recallinterval">
+        <el-input
+          v-model="queryParams.recallinterval"
+          placeholder="璇疯緭鍏� 閲嶆嫧闂撮殧 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 閲嶆嫧鏃堕棿鍗曚綅;0.鍒嗛挓 1.绉� 2.灏忔椂 " prop="recallunit">
+        <el-input
+          v-model="queryParams.recallunit"
+          placeholder="璇疯緭鍏� 閲嶆嫧鏃堕棿鍗曚綅;0.鍒嗛挓 1.绉� 2.灏忔椂 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrrecall:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrrecall:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrrecall:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrrecall:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrrecallList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="recallid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label=" 閲嶆嫧鎯呮櫙绫诲瀷;0.浠诲姟鎵ц澶辫触 1.鏈帴閫� 2.鏃犱汉鎺ュ惉 3.鎮h�呮嫆缁� 4.鎺ラ�氭棤搴旂瓟 澶氶�� 閫楀彿闅斿紑 " align="center" prop="recalltype" />
+      <el-table-column label=" 娆℃暟 " align="center" prop="recallcount" />
+      <el-table-column label=" 閲嶆嫧闂撮殧 " align="center" prop="recallinterval" />
+      <el-table-column label=" 閲嶆嫧鏃堕棿鍗曚綅;0.鍒嗛挓 1.绉� 2.灏忔椂 " align="center" prop="recallunit" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrrecall:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrrecall:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠閲嶆嫧閰嶇疆瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� 鍦烘櫙ID " />
+        </el-form-item>
+        <el-form-item label=" 娆℃暟 " prop="recallcount">
+          <el-input v-model="form.recallcount" placeholder="璇疯緭鍏� 娆℃暟 " />
+        </el-form-item>
+        <el-form-item label=" 閲嶆嫧闂撮殧 " prop="recallinterval">
+          <el-input v-model="form.recallinterval" placeholder="璇疯緭鍏� 閲嶆嫧闂撮殧 " />
+        </el-form-item>
+        <el-form-item label=" 閲嶆嫧鏃堕棿鍗曚綅;0.鍒嗛挓 1.绉� 2.灏忔椂 " prop="recallunit">
+          <el-input v-model="form.recallunit" placeholder="璇疯緭鍏� 閲嶆嫧鏃堕棿鍗曚綅;0.鍒嗛挓 1.绉� 2.灏忔椂 " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrrecall, getIvrrecall, delIvrrecall, addIvrrecall, updateIvrrecall } from "@/api/smartor/ivrrecall";
+
+export default {
+  name: "Ivrrecall",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠閲嶆嫧閰嶇疆琛ㄦ牸鏁版嵁
+      ivrrecallList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        sceneid: null,
+        recalltype: null,
+        recallcount: null,
+        recallinterval: null,
+        recallunit: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠閲嶆嫧閰嶇疆鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrrecall(this.queryParams).then(response => {
+        this.ivrrecallList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        recallid: null,
+        orgid: null,
+        sceneid: null,
+        recalltype: null,
+        recallcount: null,
+        recallinterval: null,
+        recallunit: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.recallid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠閲嶆嫧閰嶇疆";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const recallid = row.recallid || this.ids
+      getIvrrecall(recallid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠閲嶆嫧閰嶇疆";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.recallid != null) {
+            updateIvrrecall(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrrecall(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const recallids = row.recallid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠閲嶆嫧閰嶇疆缂栧彿涓�"' + recallids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrrecall(recallids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrrecall/export', {
+        ...this.queryParams
+      }, `ivrrecall_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrscene/index.vue b/ruoyi-ui/src/views/smartor/ivrscene/index.vue
new file mode 100644
index 0000000..1f4b2c8
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrscene/index.vue
@@ -0,0 +1,470 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鍒嗙被ID " prop="categoryid">
+        <el-input
+          v-model="queryParams.categoryid"
+          placeholder="璇疯緭鍏� 鍒嗙被ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍦烘櫙鍚嶇О " prop="scenename">
+        <el-input
+          v-model="queryParams.scenename"
+          placeholder="璇疯緭鍏� 鍦烘櫙鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鐗堟湰鍙� " prop="version">
+        <el-input
+          v-model="queryParams.version"
+          placeholder="璇疯緭鍏� 鐗堟湰鍙� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍏宠仈ID" prop="relationid">
+        <el-input
+          v-model="queryParams.relationid"
+          placeholder="璇疯緭鍏� 鍏宠仈ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍦烘櫙缂栧彿;鍚屼竴鍦烘櫙鍞竴锛岀敤浜庡尯鍒嗙増鏈� " prop="scenecode">
+        <el-input
+          v-model="queryParams.scenecode"
+          placeholder="璇疯緭鍏� 鍦烘櫙缂栧彿;鍚屼竴鍦烘櫙鍞竴锛岀敤浜庡尯鍒嗙増鏈� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鐗堟湰鏄惁鍚敤;0.鍚� 1.鏄� " prop="versionenable">
+        <el-input
+          v-model="queryParams.versionenable"
+          placeholder="璇疯緭鍏� 鐗堟湰鏄惁鍚敤;0.鍚� 1.鏄� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏄惁鍚敤;0.鍚� 1.鏄� " prop="isenable">
+        <el-input
+          v-model="queryParams.isenable"
+          placeholder="璇疯緭鍏� 鏄惁鍚敤;0.鍚� 1.鏄� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏄惁鍙戝竷 " prop="isrelease">
+        <el-input
+          v-model="queryParams.isrelease"
+          placeholder="璇疯緭鍏� 鏄惁鍙戝竷 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈�闀挎墽琛屽懆鏈�;0-15姝f暣鏁帮紝榛樿涓�5 " prop="executecycle">
+        <el-input
+          v-model="queryParams.executecycle"
+          placeholder="璇疯緭鍏� 鏈�闀挎墽琛屽懆鏈�;0-15姝f暣鏁帮紝榛樿涓�5 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏄惁澶嶆牳;0.鍚� 1.鏄� " prop="isreview">
+        <el-input
+          v-model="queryParams.isreview"
+          placeholder="璇疯緭鍏� 鏄惁澶嶆牳;0.鍚� 1.鏄� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" 鍙戝竷璇存槑 " prop="releasenotes">
+        <el-input
+          v-model="queryParams.releasenotes"
+          placeholder="璇疯緭鍏� 鍙戝竷璇存槑 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鑽夌ID " prop="draftid">
+        <el-input
+          v-model="queryParams.draftid"
+          placeholder="璇疯緭鍏� 鑽夌ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrscene:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrscene:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrscene:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrscene:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrsceneList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="sceneid" />
+      <el-table-column label=" 鍒嗙被ID " align="center" prop="categoryid" />
+      <el-table-column label=" 鍦烘櫙鍚嶇О " align="center" prop="scenename" />
+      <el-table-column label=" 鐗堟湰鍙� " align="center" prop="version" />
+      <el-table-column label=" 鍏宠仈ID" align="center" prop="relationid" />
+      <el-table-column label=" 鍧愬腑ID;澶氫釜鍧愬腑閫楀彿 " align="center" prop="seatsid" />
+      <el-table-column label=" 鍦烘櫙缂栧彿;鍚屼竴鍦烘櫙鍞竴锛岀敤浜庡尯鍒嗙増鏈� " align="center" prop="scenecode" />
+      <el-table-column label=" 鐗堟湰鏄惁鍚敤;0.鍚� 1.鏄� " align="center" prop="versionenable" />
+      <el-table-column label=" 鏄惁鍚敤;0.鍚� 1.鏄� " align="center" prop="isenable" />
+      <el-table-column label=" 鏄惁鍙戝竷 " align="center" prop="isrelease" />
+      <el-table-column label=" 鏈�闀挎墽琛屽懆鏈�;0-15姝f暣鏁帮紝榛樿涓�5 " align="center" prop="executecycle" />
+      <el-table-column label=" 鏄惁澶嶆牳;0.鍚� 1.鏄� " align="center" prop="isreview" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" 鍙戝竷璇存槑 " align="center" prop="releasenotes" />
+      <el-table-column label=" 鑽夌ID " align="center" prop="draftid" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrscene:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrscene:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠鍦烘櫙绠$悊瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鍒嗙被ID " prop="categoryid">
+          <el-input v-model="form.categoryid" placeholder="璇疯緭鍏� 鍒嗙被ID " />
+        </el-form-item>
+        <el-form-item label=" 鍦烘櫙鍚嶇О " prop="scenename">
+          <el-input v-model="form.scenename" placeholder="璇疯緭鍏� 鍦烘櫙鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鐗堟湰鍙� " prop="version">
+          <el-input v-model="form.version" placeholder="璇疯緭鍏� 鐗堟湰鍙� " />
+        </el-form-item>
+        <el-form-item label=" 鍏宠仈ID" prop="relationid">
+          <el-input v-model="form.relationid" placeholder="璇疯緭鍏� 鍏宠仈ID" />
+        </el-form-item>
+        <el-form-item label=" 鍧愬腑ID;澶氫釜鍧愬腑閫楀彿 " prop="seatsid">
+          <el-input v-model="form.seatsid" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 鍦烘櫙缂栧彿;鍚屼竴鍦烘櫙鍞竴锛岀敤浜庡尯鍒嗙増鏈� " prop="scenecode">
+          <el-input v-model="form.scenecode" placeholder="璇疯緭鍏� 鍦烘櫙缂栧彿;鍚屼竴鍦烘櫙鍞竴锛岀敤浜庡尯鍒嗙増鏈� " />
+        </el-form-item>
+        <el-form-item label=" 鐗堟湰鏄惁鍚敤;0.鍚� 1.鏄� " prop="versionenable">
+          <el-input v-model="form.versionenable" placeholder="璇疯緭鍏� 鐗堟湰鏄惁鍚敤;0.鍚� 1.鏄� " />
+        </el-form-item>
+        <el-form-item label=" 鏄惁鍚敤;0.鍚� 1.鏄� " prop="isenable">
+          <el-input v-model="form.isenable" placeholder="璇疯緭鍏� 鏄惁鍚敤;0.鍚� 1.鏄� " />
+        </el-form-item>
+        <el-form-item label=" 鏄惁鍙戝竷 " prop="isrelease">
+          <el-input v-model="form.isrelease" placeholder="璇疯緭鍏� 鏄惁鍙戝竷 " />
+        </el-form-item>
+        <el-form-item label=" 鏈�闀挎墽琛屽懆鏈�;0-15姝f暣鏁帮紝榛樿涓�5 " prop="executecycle">
+          <el-input v-model="form.executecycle" placeholder="璇疯緭鍏� 鏈�闀挎墽琛屽懆鏈�;0-15姝f暣鏁帮紝榛樿涓�5 " />
+        </el-form-item>
+        <el-form-item label=" 鏄惁澶嶆牳;0.鍚� 1.鏄� " prop="isreview">
+          <el-input v-model="form.isreview" placeholder="璇疯緭鍏� 鏄惁澶嶆牳;0.鍚� 1.鏄� " />
+        </el-form-item>
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" 鍙戝竷璇存槑 " prop="releasenotes">
+          <el-input v-model="form.releasenotes" placeholder="璇疯緭鍏� 鍙戝竷璇存槑 " />
+        </el-form-item>
+        <el-form-item label=" 鑽夌ID " prop="draftid">
+          <el-input v-model="form.draftid" placeholder="璇疯緭鍏� 鑽夌ID " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrscene, getIvrscene, delIvrscene, addIvrscene, updateIvrscene } from "@/api/smartor/ivrscene";
+
+export default {
+  name: "Ivrscene",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠鍦烘櫙绠$悊琛ㄦ牸鏁版嵁
+      ivrsceneList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        categoryid: null,
+        scenename: null,
+        version: null,
+        relationid: null,
+        seatsid: null,
+        scenecode: null,
+        versionenable: null,
+        isenable: null,
+        isrelease: null,
+        executecycle: null,
+        isreview: null,
+        orgid: null,
+        isupload: null,
+        uploadTime: null,
+        releasenotes: null,
+        draftid: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠鍦烘櫙绠$悊鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrscene(this.queryParams).then(response => {
+        this.ivrsceneList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        sceneid: null,
+        categoryid: null,
+        scenename: null,
+        version: null,
+        relationid: null,
+        seatsid: null,
+        scenecode: null,
+        versionenable: null,
+        isenable: null,
+        isrelease: null,
+        executecycle: null,
+        isreview: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        releasenotes: null,
+        draftid: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.sceneid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠鍦烘櫙绠$悊";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const sceneid = row.sceneid || this.ids
+      getIvrscene(sceneid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠鍦烘櫙绠$悊";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.sceneid != null) {
+            updateIvrscene(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrscene(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const sceneids = row.sceneid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠鍦烘櫙绠$悊缂栧彿涓�"' + sceneids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrscene(sceneids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrscene/export', {
+        ...this.queryParams
+      }, `ivrscene_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrscenecategory/index.vue b/ruoyi-ui/src/views/smartor/ivrscenecategory/index.vue
new file mode 100644
index 0000000..cf1e427
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrscenecategory/index.vue
@@ -0,0 +1,310 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+        <el-input
+          v-model="queryParams.categoryname"
+          placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrscenecategory:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrscenecategory:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrscenecategory:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrscenecategory:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrscenecategoryList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="scenecatid" />
+      <el-table-column label=" 鍒嗙被鍚嶇О " align="center" prop="categoryname" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrscenecategory:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrscenecategory:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I鏈嶅姟鍦烘櫙绠$悊鍒嗙被瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鍒嗙被鍚嶇О " prop="categoryname">
+          <el-input v-model="form.categoryname" placeholder="璇疯緭鍏� 鍒嗙被鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrscenecategory, getIvrscenecategory, delIvrscenecategory, addIvrscenecategory, updateIvrscenecategory } from "@/api/smartor/ivrscenecategory";
+
+export default {
+  name: "Ivrscenecategory",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI鏈嶅姟鍦烘櫙绠$悊鍒嗙被琛ㄦ牸鏁版嵁
+      ivrscenecategoryList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        categoryname: null,
+        orgid: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI鏈嶅姟鍦烘櫙绠$悊鍒嗙被鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrscenecategory(this.queryParams).then(response => {
+        this.ivrscenecategoryList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        scenecatid: null,
+        categoryname: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.scenecatid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI鏈嶅姟鍦烘櫙绠$悊鍒嗙被";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const scenecatid = row.scenecatid || this.ids
+      getIvrscenecategory(scenecatid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI鏈嶅姟鍦烘櫙绠$悊鍒嗙被";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.scenecatid != null) {
+            updateIvrscenecategory(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrscenecategory(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const scenecatids = row.scenecatid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI鏈嶅姟鍦烘櫙绠$悊鍒嗙被缂栧彿涓�"' + scenecatids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrscenecategory(scenecatids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrscenecategory/export', {
+        ...this.queryParams
+      }, `ivrscenecategory_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrscript/index.vue b/ruoyi-ui/src/views/smartor/ivrscript/index.vue
new file mode 100644
index 0000000..fd475c7
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrscript/index.vue
@@ -0,0 +1,411 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " prop="globalid">
+        <el-input
+          v-model="queryParams.globalid"
+          placeholder="璇疯緭鍏� 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍦烘櫙id " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� 鍦烘櫙id "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼ID " prop="flowid">
+        <el-input
+          v-model="queryParams.flowid"
+          placeholder="璇疯緭鍏� 娴佺▼ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 娴佺▼鑺傜偣ID " prop="flownodeid">
+        <el-input
+          v-model="queryParams.flownodeid"
+          placeholder="璇疯緭鍏� 娴佺▼鑺傜偣ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 寮曠敤璇濇湳妯℃澘ID " prop="templateid">
+        <el-input
+          v-model="queryParams.templateid"
+          placeholder="璇疯緭鍏� 寮曠敤璇濇湳妯℃澘ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳鍐呭" prop="speakbody">
+        <el-input
+          v-model="queryParams.speakbody"
+          placeholder="璇疯緭鍏� 璇濇湳鍐呭"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳鏂囦欢璺緞" prop="speakfilepath">
+        <el-input
+          v-model="queryParams.speakfilepath"
+          placeholder="璇疯緭鍏� 璇濇湳鏂囦欢璺緞"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳鍚嶇О " prop="speakname">
+        <el-input
+          v-model="queryParams.speakname"
+          placeholder="璇疯緭鍏� 璇濇湳鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrscript:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrscript:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrscript:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrscript:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrscriptList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="scenescrid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 鏉ユ簮绫诲瀷;0.鍏ㄥ眬 1.涓荤嚎 " align="center" prop="sourcetype" />
+      <el-table-column label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " align="center" prop="globalid" />
+      <el-table-column label=" 鍦烘櫙id " align="center" prop="sceneid" />
+      <el-table-column label=" 娴佺▼ID " align="center" prop="flowid" />
+      <el-table-column label=" 娴佺▼鑺傜偣ID " align="center" prop="flownodeid" />
+      <el-table-column label=" 寮曠敤璇濇湳妯℃澘ID " align="center" prop="templateid" />
+      <el-table-column label=" 璇濇湳鍐呭" align="center" prop="speakbody" />
+      <el-table-column label=" 璇濇湳鏂囦欢璺緞" align="center" prop="speakfilepath" />
+      <el-table-column label=" 璇濇湳鍚嶇О " align="center" prop="speakname" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrscript:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrscript:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠璇濇湳瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " prop="globalid">
+          <el-input v-model="form.globalid" placeholder="璇疯緭鍏� 鍏ㄥ眬閰嶇疆ID;鍏ㄥ眬閰嶇疆ID " />
+        </el-form-item>
+        <el-form-item label=" 鍦烘櫙id " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� 鍦烘櫙id " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼ID " prop="flowid">
+          <el-input v-model="form.flowid" placeholder="璇疯緭鍏� 娴佺▼ID " />
+        </el-form-item>
+        <el-form-item label=" 娴佺▼鑺傜偣ID " prop="flownodeid">
+          <el-input v-model="form.flownodeid" placeholder="璇疯緭鍏� 娴佺▼鑺傜偣ID " />
+        </el-form-item>
+        <el-form-item label=" 寮曠敤璇濇湳妯℃澘ID " prop="templateid">
+          <el-input v-model="form.templateid" placeholder="璇疯緭鍏� 寮曠敤璇濇湳妯℃澘ID " />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鍐呭" prop="speakbody">
+          <el-input v-model="form.speakbody" placeholder="璇疯緭鍏� 璇濇湳鍐呭" />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鏂囦欢璺緞" prop="speakfilepath">
+          <el-input v-model="form.speakfilepath" placeholder="璇疯緭鍏� 璇濇湳鏂囦欢璺緞" />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鍚嶇О " prop="speakname">
+          <el-input v-model="form.speakname" placeholder="璇疯緭鍏� 璇濇湳鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrscript, getIvrscript, delIvrscript, addIvrscript, updateIvrscript } from "@/api/smartor/ivrscript";
+
+export default {
+  name: "Ivrscript",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠璇濇湳琛ㄦ牸鏁版嵁
+      ivrscriptList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        sourcetype: null,
+        globalid: null,
+        sceneid: null,
+        flowid: null,
+        flownodeid: null,
+        templateid: null,
+        speakbody: null,
+        speakfilepath: null,
+        speakname: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠璇濇湳鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrscript(this.queryParams).then(response => {
+        this.ivrscriptList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        scenescrid: null,
+        orgid: null,
+        sourcetype: null,
+        globalid: null,
+        sceneid: null,
+        flowid: null,
+        flownodeid: null,
+        templateid: null,
+        speakbody: null,
+        speakfilepath: null,
+        speakname: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.scenescrid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠璇濇湳";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const scenescrid = row.scenescrid || this.ids
+      getIvrscript(scenescrid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠璇濇湳";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.scenescrid != null) {
+            updateIvrscript(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrscript(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const scenescrids = row.scenescrid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠璇濇湳缂栧彿涓�"' + scenescrids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrscript(scenescrids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrscript/export', {
+        ...this.queryParams
+      }, `ivrscript_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/ivrscriptmodel/index.vue b/ruoyi-ui/src/views/smartor/ivrscriptmodel/index.vue
new file mode 100644
index 0000000..cb8de71
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/ivrscriptmodel/index.vue
@@ -0,0 +1,423 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇濇湳ID " prop="scenescrid">
+        <el-input
+          v-model="queryParams.scenescrid"
+          placeholder="璇疯緭鍏� 璇濇湳ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇煶鏂囦欢 " prop="speakfilepath">
+        <el-input
+          v-model="queryParams.speakfilepath"
+          placeholder="璇疯緭鍏� 璇煶鏂囦欢 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍚堟垚鍘傚晢 " prop="manufactor">
+        <el-input
+          v-model="queryParams.manufactor"
+          placeholder="璇疯緭鍏� 鍚堟垚鍘傚晢 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 璇�� " prop="speechnum">
+        <el-input
+          v-model="queryParams.speechnum"
+          placeholder="璇疯緭鍏� 璇�� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 闊抽珮 " prop="pitch">
+        <el-input
+          v-model="queryParams.pitch"
+          placeholder="璇疯緭鍏� 闊抽珮 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 闊抽噺 " prop="volume">
+        <el-input
+          v-model="queryParams.volume"
+          placeholder="璇疯緭鍏� 闊抽噺 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" 鍙橀噺璇濇湳鍙橀噺 " prop="speakvariable">
+        <el-input
+          v-model="queryParams.speakvariable"
+          placeholder="璇疯緭鍏� 鍙橀噺璇濇湳鍙橀噺 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鍦烘櫙ID " prop="sceneid">
+        <el-input
+          v-model="queryParams.sceneid"
+          placeholder="璇疯緭鍏� 鍦烘櫙ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:ivrscriptmodel:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:ivrscriptmodel:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:ivrscriptmodel:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:ivrscriptmodel:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ivrscriptmodelList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="scenemodid" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 璇濇湳ID " align="center" prop="scenescrid" />
+      <el-table-column label=" 璇濇湳绫诲瀷銆�0:鏅�氳瘽鏈� 1:鍙橀噺璇濇湳銆� " align="center" prop="speaktype" />
+      <el-table-column label=" 璇濇湳鍐呭 " align="center" prop="speakbody" />
+      <el-table-column label=" 璇煶绫诲瀷銆�0:鐪熶汉褰曢煶 1:鍚堟垚璇煶銆� " align="center" prop="voicetype" />
+      <el-table-column label=" 璇煶鏂囦欢 " align="center" prop="speakfilepath" />
+      <el-table-column label=" 鍚堟垚鍘傚晢 " align="center" prop="manufactor" />
+      <el-table-column label=" 澹伴煶绫诲瀷 " align="center" prop="soundtype" />
+      <el-table-column label=" 璇�� " align="center" prop="speechnum" />
+      <el-table-column label=" 闊抽珮 " align="center" prop="pitch" />
+      <el-table-column label=" 闊抽噺 " align="center" prop="volume" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" 鍙橀噺璇濇湳鍙橀噺 " align="center" prop="speakvariable" />
+      <el-table-column label=" 鍦烘櫙ID " align="center" prop="sceneid" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:ivrscriptmodel:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:ivrscriptmodel:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀笰I澶栧懠璇濇湳妯″潡瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳ID " prop="scenescrid">
+          <el-input v-model="form.scenescrid" placeholder="璇疯緭鍏� 璇濇湳ID " />
+        </el-form-item>
+        <el-form-item label=" 璇濇湳鍐呭 " prop="speakbody">
+          <el-input v-model="form.speakbody" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 璇煶鏂囦欢 " prop="speakfilepath">
+          <el-input v-model="form.speakfilepath" placeholder="璇疯緭鍏� 璇煶鏂囦欢 " />
+        </el-form-item>
+        <el-form-item label=" 鍚堟垚鍘傚晢 " prop="manufactor">
+          <el-input v-model="form.manufactor" placeholder="璇疯緭鍏� 鍚堟垚鍘傚晢 " />
+        </el-form-item>
+        <el-form-item label=" 璇�� " prop="speechnum">
+          <el-input v-model="form.speechnum" placeholder="璇疯緭鍏� 璇�� " />
+        </el-form-item>
+        <el-form-item label=" 闊抽珮 " prop="pitch">
+          <el-input v-model="form.pitch" placeholder="璇疯緭鍏� 闊抽珮 " />
+        </el-form-item>
+        <el-form-item label=" 闊抽噺 " prop="volume">
+          <el-input v-model="form.volume" placeholder="璇疯緭鍏� 闊抽噺 " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" 鍙橀噺璇濇湳鍙橀噺 " prop="speakvariable">
+          <el-input v-model="form.speakvariable" placeholder="璇疯緭鍏� 鍙橀噺璇濇湳鍙橀噺 " />
+        </el-form-item>
+        <el-form-item label=" 鍦烘櫙ID " prop="sceneid">
+          <el-input v-model="form.sceneid" placeholder="璇疯緭鍏� 鍦烘櫙ID " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listIvrscriptmodel, getIvrscriptmodel, delIvrscriptmodel, addIvrscriptmodel, updateIvrscriptmodel } from "@/api/smartor/ivrscriptmodel";
+
+export default {
+  name: "Ivrscriptmodel",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // AI澶栧懠璇濇湳妯″潡琛ㄦ牸鏁版嵁
+      ivrscriptmodelList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgid: null,
+        scenescrid: null,
+        speaktype: null,
+        speakbody: null,
+        voicetype: null,
+        speakfilepath: null,
+        manufactor: null,
+        soundtype: null,
+        speechnum: null,
+        pitch: null,
+        volume: null,
+        isupload: null,
+        uploadTime: null,
+        speakvariable: null,
+        sceneid: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨAI澶栧懠璇濇湳妯″潡鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listIvrscriptmodel(this.queryParams).then(response => {
+        this.ivrscriptmodelList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        scenemodid: null,
+        orgid: null,
+        scenescrid: null,
+        speaktype: null,
+        speakbody: null,
+        voicetype: null,
+        speakfilepath: null,
+        manufactor: null,
+        soundtype: null,
+        speechnum: null,
+        pitch: null,
+        volume: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        speakvariable: null,
+        sceneid: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.scenemodid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞AI澶栧懠璇濇湳妯″潡";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const scenemodid = row.scenemodid || this.ids
+      getIvrscriptmodel(scenemodid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼AI澶栧懠璇濇湳妯″潡";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.scenemodid != null) {
+            updateIvrscriptmodel(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addIvrscriptmodel(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const scenemodids = row.scenemodid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎AI澶栧懠璇濇湳妯″潡缂栧彿涓�"' + scenemodids + '"鐨勬暟鎹」锛�').then(function() {
+        return delIvrscriptmodel(scenemodids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/ivrscriptmodel/export', {
+        ...this.queryParams
+      }, `ivrscriptmodel_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/smsaccount/index.vue b/ruoyi-ui/src/views/smartor/smsaccount/index.vue
new file mode 100644
index 0000000..53bd9e1
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/smsaccount/index.vue
@@ -0,0 +1,357 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label=" 鏍囩鍚嶇О " prop="smsname">
+        <el-input
+          v-model="queryParams.smsname"
+          placeholder="璇疯緭鍏� 鏍囩鍚嶇О "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 骞冲彴璐﹀彿 " prop="account">
+        <el-input
+          v-model="queryParams.account"
+          placeholder="璇疯緭鍏� 骞冲彴璐﹀彿 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 骞冲彴瀵嗙爜 " prop="password">
+        <el-input
+          v-model="queryParams.password"
+          placeholder="璇疯緭鍏� 骞冲彴瀵嗙爜 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏� 鏈烘瀯ID "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏� 涓婁紶鏍囪 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label=" 鏄惁寮�鍚� " prop="isenable">
+        <el-input
+          v-model="queryParams.isenable"
+          placeholder="璇疯緭鍏� 鏄惁寮�鍚� "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:smsaccount:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:smsaccount:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:smsaccount:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:smsaccount:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="smsaccountList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label=" 鑷ID " align="center" prop="smsacountid" />
+      <el-table-column label=" 鏍囩鍚嶇О " align="center" prop="smsname" />
+      <el-table-column label=" 骞冲彴璐﹀彿 " align="center" prop="account" />
+      <el-table-column label=" 骞冲彴瀵嗙爜 " align="center" prop="password" />
+      <el-table-column label=" 澶囨敞 " align="center" prop="remark" />
+      <el-table-column label=" 鏈烘瀯ID " align="center" prop="orgid" />
+      <el-table-column label=" 涓婁紶鏍囪 " align="center" prop="isupload" />
+      <el-table-column label=" 涓婁紶鏃堕棿 " align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label=" 鏄惁寮�鍚� " align="center" prop="isenable" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:smsaccount:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:smsaccount:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀圭煭淇¤处鍙峰璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label=" 鏍囩鍚嶇О " prop="smsname">
+          <el-input v-model="form.smsname" placeholder="璇疯緭鍏� 鏍囩鍚嶇О " />
+        </el-form-item>
+        <el-form-item label=" 骞冲彴璐﹀彿 " prop="account">
+          <el-input v-model="form.account" placeholder="璇疯緭鍏� 骞冲彴璐﹀彿 " />
+        </el-form-item>
+        <el-form-item label=" 骞冲彴瀵嗙爜 " prop="password">
+          <el-input v-model="form.password" placeholder="璇疯緭鍏� 骞冲彴瀵嗙爜 " />
+        </el-form-item>
+        <el-form-item label=" 澶囨敞 " prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+        <el-form-item label=" 鏈烘瀯ID " prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏� 鏈烘瀯ID " />
+        </el-form-item>
+        <el-form-item label=" 鍒犻櫎鏍囪 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏� 鍒犻櫎鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏍囪 " prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏� 涓婁紶鏍囪 " />
+        </el-form-item>
+        <el-form-item label=" 涓婁紶鏃堕棿 " prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨 涓婁紶鏃堕棿 ">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" 鏄惁寮�鍚� " prop="isenable">
+          <el-input v-model="form.isenable" placeholder="璇疯緭鍏� 鏄惁寮�鍚� " />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listSmsaccount, getSmsaccount, delSmsaccount, addSmsaccount, updateSmsaccount } from "@/api/smartor/smsaccount";
+
+export default {
+  name: "Smsaccount",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐭俊璐﹀彿琛ㄦ牸鏁版嵁
+      smsaccountList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        smsname: null,
+        account: null,
+        password: null,
+        orgid: null,
+        isupload: null,
+        uploadTime: null,
+        isenable: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        delFlag: [
+          { required: true, message: " 鍒犻櫎鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        isupload: [
+          { required: true, message: " 涓婁紶鏍囪 涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ鐭俊璐﹀彿鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listSmsaccount(this.queryParams).then(response => {
+        this.smsaccountList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        smsacountid: null,
+        smsname: null,
+        account: null,
+        password: null,
+        remark: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null,
+        isenable: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.smsacountid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鐭俊璐﹀彿";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const smsacountid = row.smsacountid || this.ids
+      getSmsaccount(smsacountid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鐭俊璐﹀彿";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.smsacountid != null) {
+            updateSmsaccount(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSmsaccount(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const smsacountids = row.smsacountid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鐭俊璐﹀彿缂栧彿涓�"' + smsacountids + '"鐨勬暟鎹」锛�').then(function() {
+        return delSmsaccount(smsacountids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/smsaccount/export', {
+        ...this.queryParams
+      }, `smsaccount_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/smsparam/index.vue b/ruoyi-ui/src/views/smartor/smsparam/index.vue
new file mode 100644
index 0000000..79c3357
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/smsparam/index.vue
@@ -0,0 +1,321 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="${comment}" prop="paramname">
+        <el-input
+          v-model="queryParams.paramname"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="paramval">
+        <el-input
+          v-model="queryParams.paramval"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="descirbe">
+        <el-input
+          v-model="queryParams.descirbe"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:smsparam:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:smsparam:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:smsparam:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:smsparam:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="smsparamList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="${comment}" align="center" prop="paramid" />
+      <el-table-column label="${comment}" align="center" prop="paramname" />
+      <el-table-column label="${comment}" align="center" prop="paramval" />
+      <el-table-column label="${comment}" align="center" prop="descirbe" />
+      <el-table-column label="${comment}" align="center" prop="usestatus" />
+      <el-table-column label="${comment}" align="center" prop="isupload" />
+      <el-table-column label="${comment}" align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:smsparam:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:smsparam:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀圭煭淇″弬鏁板璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="${comment}" prop="paramname">
+          <el-input v-model="form.paramname" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="paramval">
+          <el-input v-model="form.paramval" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="descirbe">
+          <el-input v-model="form.descirbe" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listSmsparam, getSmsparam, delSmsparam, addSmsparam, updateSmsparam } from "@/api/smartor/smsparam";
+
+export default {
+  name: "Smsparam",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐭俊鍙傛暟琛ㄦ牸鏁版嵁
+      smsparamList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        paramname: null,
+        paramval: null,
+        descirbe: null,
+        usestatus: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ鐭俊鍙傛暟鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listSmsparam(this.queryParams).then(response => {
+        this.smsparamList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        paramid: null,
+        paramname: null,
+        paramval: null,
+        descirbe: null,
+        usestatus: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.paramid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鐭俊鍙傛暟";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const paramid = row.paramid || this.ids
+      getSmsparam(paramid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鐭俊鍙傛暟";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.paramid != null) {
+            updateSmsparam(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSmsparam(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const paramids = row.paramid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鐭俊鍙傛暟缂栧彿涓�"' + paramids + '"鐨勬暟鎹」锛�').then(function() {
+        return delSmsparam(paramids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/smsparam/export', {
+        ...this.queryParams
+      }, `smsparam_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/smsrecords/index.vue b/ruoyi-ui/src/views/smartor/smsrecords/index.vue
new file mode 100644
index 0000000..835c60a
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/smsrecords/index.vue
@@ -0,0 +1,544 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="" prop="userid">
+        <el-input
+          v-model="queryParams.userid"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="username">
+        <el-input
+          v-model="queryParams.username"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="phone">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="msgno">
+        <el-input
+          v-model="queryParams.msgno"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="msg">
+        <el-input
+          v-model="queryParams.msg"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="inserttime">
+        <el-date-picker clearable
+          v-model="queryParams.inserttime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="sendtime">
+        <el-date-picker clearable
+          v-model="queryParams.sendtime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="sendfailedcount">
+        <el-input
+          v-model="queryParams.sendfailedcount"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="resulttime">
+        <el-date-picker clearable
+          v-model="queryParams.resulttime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="" prop="resultmsg">
+        <el-input
+          v-model="queryParams.resultmsg"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="sendstate">
+        <el-input
+          v-model="queryParams.sendstate"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="insertsystem">
+        <el-input
+          v-model="queryParams.insertsystem"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="insertmodule">
+        <el-input
+          v-model="queryParams.insertmodule"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="moduleid">
+        <el-input
+          v-model="queryParams.moduleid"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="msgidentify">
+        <el-input
+          v-model="queryParams.msgidentify"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="accountid">
+        <el-input
+          v-model="queryParams.accountid"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="orgid">
+        <el-input
+          v-model="queryParams.orgid"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="" prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:smsrecords:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:smsrecords:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:smsrecords:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:smsrecords:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="smsrecordsList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="${comment}" align="center" prop="recordid" />
+      <el-table-column label="" align="center" prop="userid" />
+      <el-table-column label="" align="center" prop="username" />
+      <el-table-column label="" align="center" prop="phone" />
+      <el-table-column label="" align="center" prop="msgno" />
+      <el-table-column label="" align="center" prop="msg" />
+      <el-table-column label="" align="center" prop="inserttime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.inserttime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="sendtime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.sendtime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="sendfailedcount" />
+      <el-table-column label="" align="center" prop="resulttime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.resulttime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="" align="center" prop="resultmsg" />
+      <el-table-column label="" align="center" prop="sendstate" />
+      <el-table-column label="" align="center" prop="inserttype" />
+      <el-table-column label="" align="center" prop="insertsystem" />
+      <el-table-column label="" align="center" prop="insertmodule" />
+      <el-table-column label="" align="center" prop="moduleid" />
+      <el-table-column label="" align="center" prop="msgidentify" />
+      <el-table-column label="${comment}" align="center" prop="accountid" />
+      <el-table-column label="${comment}" align="center" prop="orgid" />
+      <el-table-column label="" align="center" prop="isupload" />
+      <el-table-column label="" align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:smsrecords:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:smsrecords:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀圭煭淇¤褰曞璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="" prop="userid">
+          <el-input v-model="form.userid" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="username">
+          <el-input v-model="form.username" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="phone">
+          <el-input v-model="form.phone" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="msgno">
+          <el-input v-model="form.msgno" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="msg">
+          <el-input v-model="form.msg" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="inserttime">
+          <el-date-picker clearable
+            v-model="form.inserttime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="sendtime">
+          <el-date-picker clearable
+            v-model="form.sendtime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="sendfailedcount">
+          <el-input v-model="form.sendfailedcount" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="resulttime">
+          <el-date-picker clearable
+            v-model="form.resulttime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="resultmsg">
+          <el-input v-model="form.resultmsg" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="sendstate">
+          <el-input v-model="form.sendstate" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="insertsystem">
+          <el-input v-model="form.insertsystem" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="insertmodule">
+          <el-input v-model="form.insertmodule" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="moduleid">
+          <el-input v-model="form.moduleid" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="msgidentify">
+          <el-input v-model="form.msgidentify" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="accountid">
+          <el-input v-model="form.accountid" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="orgid">
+          <el-input v-model="form.orgid" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏�" />
+        </el-form-item>
+        <el-form-item label="" prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listSmsrecords, getSmsrecords, delSmsrecords, addSmsrecords, updateSmsrecords } from "@/api/smartor/smsrecords";
+
+export default {
+  name: "Smsrecords",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐭俊璁板綍琛ㄦ牸鏁版嵁
+      smsrecordsList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userid: null,
+        username: null,
+        phone: null,
+        msgno: null,
+        msg: null,
+        inserttime: null,
+        sendtime: null,
+        sendfailedcount: null,
+        resulttime: null,
+        resultmsg: null,
+        sendstate: null,
+        inserttype: null,
+        insertsystem: null,
+        insertmodule: null,
+        moduleid: null,
+        msgidentify: null,
+        accountid: null,
+        orgid: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ鐭俊璁板綍鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listSmsrecords(this.queryParams).then(response => {
+        this.smsrecordsList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        recordid: null,
+        userid: null,
+        username: null,
+        phone: null,
+        msgno: null,
+        msg: null,
+        inserttime: null,
+        sendtime: null,
+        sendfailedcount: null,
+        resulttime: null,
+        resultmsg: null,
+        sendstate: null,
+        inserttype: null,
+        insertsystem: null,
+        insertmodule: null,
+        moduleid: null,
+        msgidentify: null,
+        accountid: null,
+        orgid: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.recordid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鐭俊璁板綍";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const recordid = row.recordid || this.ids
+      getSmsrecords(recordid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鐭俊璁板綍";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.recordid != null) {
+            updateSmsrecords(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSmsrecords(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const recordids = row.recordid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鐭俊璁板綍缂栧彿涓�"' + recordids + '"鐨勬暟鎹」锛�').then(function() {
+        return delSmsrecords(recordids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/smsrecords/export', {
+        ...this.queryParams
+      }, `smsrecords_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/smartor/smstemplet/index.vue b/ruoyi-ui/src/views/smartor/smstemplet/index.vue
new file mode 100644
index 0000000..abfb9c4
--- /dev/null
+++ b/ruoyi-ui/src/views/smartor/smstemplet/index.vue
@@ -0,0 +1,310 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="${comment}" prop="templetno">
+        <el-input
+          v-model="queryParams.templetno"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="templetname">
+        <el-input
+          v-model="queryParams.templetname"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="isupload">
+        <el-input
+          v-model="queryParams.isupload"
+          placeholder="璇疯緭鍏�${comment}"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="${comment}" prop="uploadTime">
+        <el-date-picker clearable
+          v-model="queryParams.uploadTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="璇烽�夋嫨${comment}">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['smartor:smstemplet:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['smartor:smstemplet:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['smartor:smstemplet:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['smartor:smstemplet:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="smstempletList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="${comment}" align="center" prop="templetid" />
+      <el-table-column label="${comment}" align="center" prop="templetno" />
+      <el-table-column label="${comment}" align="center" prop="templetname" />
+      <el-table-column label="${comment}" align="center" prop="templetcontent" />
+      <el-table-column label="${comment}" align="center" prop="isupload" />
+      <el-table-column label="${comment}" align="center" prop="uploadTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.uploadTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['smartor:smstemplet:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['smartor:smstemplet:remove']"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀圭煭淇℃ā鏉垮璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="${comment}" prop="templetno">
+          <el-input v-model="form.templetno" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="templetname">
+          <el-input v-model="form.templetname" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}">
+          <editor v-model="form.templetcontent" :min-height="192"/>
+        </el-form-item>
+        <el-form-item label="${comment}" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="isupload">
+          <el-input v-model="form.isupload" placeholder="璇疯緭鍏�${comment}" />
+        </el-form-item>
+        <el-form-item label="${comment}" prop="uploadTime">
+          <el-date-picker clearable
+            v-model="form.uploadTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨${comment}">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listSmstemplet, getSmstemplet, delSmstemplet, addSmstemplet, updateSmstemplet } from "@/api/smartor/smstemplet";
+
+export default {
+  name: "Smstemplet",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐭俊妯℃澘琛ㄦ牸鏁版嵁
+      smstempletList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        templetno: null,
+        templetname: null,
+        templetcontent: null,
+        isupload: null,
+        uploadTime: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ鐭俊妯℃澘鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listSmstemplet(this.queryParams).then(response => {
+        this.smstempletList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        templetid: null,
+        templetno: null,
+        templetname: null,
+        templetcontent: null,
+        delFlag: null,
+        updateBy: null,
+        updateTime: null,
+        createBy: null,
+        createTime: null,
+        isupload: null,
+        uploadTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.templetid)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鐭俊妯℃澘";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const templetid = row.templetid || this.ids
+      getSmstemplet(templetid).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鐭俊妯℃澘";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.templetid != null) {
+            updateSmstemplet(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addSmstemplet(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const templetids = row.templetid || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鐭俊妯℃澘缂栧彿涓�"' + templetids + '"鐨勬暟鎹」锛�').then(function() {
+        return delSmstemplet(templetids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('smartor/smstemplet/export', {
+        ...this.queryParams
+      }, `smstemplet_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

--
Gitblit v1.9.3