| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
- <title>变动确认</title>
- <script src="/js/mp_base/base.js"></script>
- <style>
- [v-cloak] {
- display: none !important;
- }
- #app {
- min-height: 100vh;
- background: #f5f5f5;
- box-sizing: border-box;
- }
- .form-wrap {
- background: #fff;
- }
- .table th {
- width: 140px;
- max-width: 170px;
- }
- .loading {
- min-height: 40vh;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .loading-spinner {
- width: 30px;
- height: 30px;
- border: 3px solid #e8f3ed;
- border-top-color: #40ac6d;
- border-radius: 50%;
- animation: page-spin 0.9s linear infinite;
- }
- @keyframes page-spin {
- from { transform: rotate(0deg); }
- to { transform: rotate(360deg); }
- }
- .error-card {
- margin: 8px;
- padding: 16px;
- background: #fff;
- border-radius: 8px;
- color: #ff4d4f;
- line-height: 1.6;
- word-break: break-all;
- }
- </style>
- </head>
- <body>
- <div id="app" v-cloak>
- <div v-if="loading" class="loading">
- <div class="loading-spinner"></div>
- </div>
- <div v-else-if="errorMessage" class="error-card">{{ errorMessage }}</div>
- <form v-else id="tjform" class="form-wrap" @submit.prevent>
- <table class="table">
- <tr>
- <th>标题</th>
- <td>
- <!-- 状态变动确认页标题改为普通输入框 by xu 2026-03-07 -->
- <ss-input
- v-model="formData.mc"
- name="mc"
- placeholder="请输入标题"
- />
- </td>
- </tr>
- <tr>
- <th>说明</th>
- <td>
- <!-- 状态变动确认页说明改为 ms 普通录入,不使用富文本 by xu 2026-03-07 -->
- <ss-input
- v-model="formData.ms"
- name="ms"
- placeholder="请输入说明"
- />
- </td>
- </tr>
- </table>
- </form>
- <ss-bottom
- v-if="!loading && !errorMessage"
- :buttons="bottomButtons"
- @button-click="handleBottomAction"
- >
- </ss-bottom>
- </div>
- <script>
- window.SS.ready(function () {
- window.SS.dom.initializeFormApp({
- el: '#app',
- data() {
- return {
- pageParams: {},
- initPayload: {},
- loading: false,
- submitting: false,
- errorMessage: '',
- formData: {
- mc: '',
- ms: ''
- },
- bottomButtons: [
- { text: '关闭', action: 'close' },
- {
- text: '提交',
- action: 'submit',
- backgroundColor: '#575d6d',
- color: '#fff'
- }
- ]
- }
- },
- async mounted() {
- this.pageParams = this.getUrlParams()
- await this.loadInitData()
- },
- methods: {
- getUrlParams() {
- const params = {}
- const urlSearchParams = new URLSearchParams(window.location.search)
- for (const [key, value] of urlSearchParams) {
- params[key] = decodeURIComponent(value)
- }
- return params
- },
- parseJsonString(text) {
- if (!text || typeof text !== 'string') return {}
- try {
- const obj = JSON.parse(text)
- return obj && typeof obj === 'object' ? obj : {}
- } catch (_) {
- return {}
- }
- },
- unwrapData(data) {
- if (!data || typeof data !== 'object') return {}
- if (data.ssData && typeof data.ssData === 'object') return data.ssData
- return data
- },
- getMergedParams() {
- const routeParam = this.parseJsonString(this.pageParams.param)
- return {
- ...routeParam,
- ...this.pageParams
- }
- },
- goBack(refreshParent = false) {
- if (window.NavigationManager && typeof window.NavigationManager.goBack === 'function') {
- window.NavigationManager.goBack({ refreshParent })
- } else {
- window.history.back()
- }
- },
- // 功能说明:状态变动确认页先调当前 service 补齐标题、对象参数和提交服务 by xu 2026-03-07
- async loadInitData() {
- const params = this.getMergedParams()
- const serviceName = String(params.service || params.ssServ || '').trim()
- const presetTitle = String(params.applicationName || params.mc || '').trim()
- const presetDesc = String(params.sqmswj || params.sqms || params.ms || '').trim()
- this.formData.mc = presetTitle
- this.formData.ms = presetDesc
- if (!serviceName) {
- this.initPayload = {}
- return
- }
- this.loading = true
- this.errorMessage = ''
- try {
- const response = await request.post(
- `/service?ssServ=${encodeURIComponent(serviceName)}`,
- params,
- { loading: false, formData: true }
- )
- const payload = this.unwrapData(response && response.data)
- this.initPayload = payload
- if (!this.formData.mc) {
- this.formData.mc = String(payload.applicationName || payload.mc || '')
- }
- if (!this.formData.ms) {
- this.formData.ms = String(payload.sqmswj || payload.sqms || payload.ms || '')
- }
- } catch (error) {
- console.error('[mp_stateChgSure] 初始化失败', error)
- this.errorMessage = '初始化失败,请稍后重试'
- } finally {
- this.loading = false
- }
- },
- validateForm() {
- if (!String(this.formData.mc || '').trim()) return '请输入标题'
- return ''
- },
- getSubmitConfig() {
- const params = this.getMergedParams()
- const payload = this.initPayload || {}
- return {
- serviceName: String(payload.sureChgServName || params.sureChgServName || params.service || params.ssServ || '').trim(),
- dest: 'info',
- ssObjName: String(payload.ssObjName || params.ssObjName || '').trim(),
- ssObjIdName: String(payload.ssObjIdName || params.ssObjIdName || 'ssObjId').trim(),
- ssObjId: String(payload.ssObjId || params.ssObjId || '').trim(),
- ssPobjName: String(payload.ssPobjName || params.ssPobjName || '').trim(),
- }
- },
- // 功能说明:状态变动确认页按 JSP tjform 提交 mc、ms、mswj 到 sureChgServName by xu 2026-03-07
- async submitForm() {
- if (this.submitting) return
- const message = this.validateForm()
- if (message) {
- if (typeof showToastEffect === 'function') showToastEffect(message, 1800, 'warning')
- return
- }
- const cfg = this.getSubmitConfig()
- if (!cfg.serviceName) {
- if (typeof showToastEffect === 'function') showToastEffect('缺少提交服务,无法提交', 2200, 'error')
- return
- }
- if (!cfg.ssObjName || !cfg.ssObjId) {
- if (typeof showToastEffect === 'function') showToastEffect('缺少对象参数,无法提交', 2200, 'error')
- return
- }
- this.submitting = true
- try {
- const submitPayload = {
- ssObjName: cfg.ssObjName,
- ssPobjName: cfg.ssPobjName,
- mc: String(this.formData.mc || '').trim(),
- ms: String(this.formData.ms || '').trim(),
- mswj: String(this.formData.ms || '').trim(),
- [cfg.ssObjIdName]: cfg.ssObjId,
- }
- const response = await request.post(
- `/service?ssServ=${encodeURIComponent(cfg.serviceName)}&ssDest=${encodeURIComponent(cfg.dest)}`,
- submitPayload,
- { loading: true, formData: true }
- )
- console.log('[mp_stateChgSure] 提交响应', response)
- if (typeof showToastEffect === 'function') {
- showToastEffect('提交成功', 1500, 'success')
- }
- setTimeout(() => this.goBack(true), 600)
- } catch (error) {
- console.error('[mp_stateChgSure] 提交失败', error)
- if (typeof showToastEffect === 'function') {
- showToastEffect('提交失败,请稍后重试', 2200, 'error')
- }
- } finally {
- this.submitting = false
- }
- },
- handleBottomAction(payload) {
- if (!payload || !payload.action) return
- if (payload.action === 'close') {
- this.goBack(false)
- return
- }
- if (payload.action === 'submit') {
- this.submitForm()
- }
- }
- }
- })
- })
- </script>
- </body>
- </html>
|